🔌 Easy Offset | Offset selected faces in SketchUp in positive and negative offsets. Download
  • [Plugin] Latticeizer

    14
    0 Votes
    14 Posts
    25k Views
    TIGT
    It's available in the PluginStore https://sketchucation.com/pluginstore?pln=Latticeizer Get its RBZ and install it, just like any other... Alternatively use the SketchUcation ExtensionStore³ from within SketchUp itself, to Auto-Install it... It works just fine in the newer SketchUps... But note that it's not been signed for full compatibility with newer SketchUp, so your 'Extension Loading Policy' needs to be set to 'Unrestricted' for it to load and appear in the Extensions menu...
  • [Plugin] FredoTools::FaceTriangulator - v1.0a - 24 Feb 18

    4
    0 Votes
    4 Posts
    6k Views
    fredo6F
    @ahmed0007 said: Thanks for Sharing it select all faces by ignoring hidden/smooth edges in su2017 its normal? Yes, this is the default behavior. You can of course pre-select the faces you wish to triangulate before launching Face triangulator. Note that I could enable a button palette to give the choice of selection mode, as I do for JointPushPull. But some users or commentators say that palettes make the GUI cluttered. So the only thing I can do is to make the selection mode "single Face" when Hidden Geometry is on, otherwise by Surface. Fredo
  • Cutting multiple components with a face?

    11
    0 Votes
    11 Posts
    2k Views
    jolranJ
    Ah yes, the repeating pattern problem.. I know what you mean. Been there.. Well it's possible to reposition textures, rotate and resize them to create variations. Also 2dBoolean will pickup multiple textures/materials and you could apply same amount off pushpull to them all. But then again, you might want more flexibility then what premade component-patterns can offer so your current workflow might be more convenient.
  • Installing Wood Grain Long - 2 Extension

    4
    0 Votes
    4 Posts
    1k Views
    V
    Outstanding! I apologize for the delayed response, but I am just now able to return to this project. That did the trick! I am using a Mac, but your educated guess was spot on. Thank you, Tig, for the detailed help.
  • [Plugin] Align tool 3D (bug fix)

    58
    0 Votes
    58 Posts
    145k Views
    R
    There's a huge issue with this tool (I noticed it after dekade of using ) - it distorts objects. Additional operation needed (reset skew, rotation) afterwards. Any chance to to fix it please?
  • Help with installing slicer/slicemodeler

    4
    0 Votes
    4 Posts
    1k Views
    pilouP
    Maybe Install last version 2017 Make (if you have 64 bits)
  • Any plugin to evenly space objects?

    24
    0 Votes
    24 Posts
    11k Views
    Dave RD
    @joshuabrew said: hey! any leads on a plugin for this?? looking for the same... basically the sketchup equivalent of the distribute and align tools common in adobe indesign and illustrator, but for 3D objects in sketchup. thx! j Hey! Did you try the link in the post immediately above yours from 2014?
  • Double Offset

    8
    0 Votes
    8 Posts
    2k Views
    CadFatherC
    hope TIG is ok with it: main 2 routines: @@dist=nil def initialize(dist=nil) @toolname="extrudeEdgesByOffset" if dist==0 puts 'Extrude Edges by Offset' + '; Offset cannot be 0.' return nil end#if model=Sketchup.active_model ss=model.selection edges=[] ss.each{|e|edges << e if e.class==Sketchup;;Edge} if not edges[1] if not dist UI.messagebox('Extrude Edges by Offset') + ('; Must Select >=2 Edges.') else puts 'Extrude Edges by Offset' + '; Must Select >=2 Edges.' end return nil end#if verts=[] edges.each{|e| verts << e.vertices} verts.flatten! verts.uniq! pts=[] verts.each{|v| pts << v.position} cop=true vec=Geom;;Vector3d.new(0,0,0) edges[0..-2].each_with_index{|e,i| vec=e.line[1].cross(edges[i+1].line[1])} vec=Z_AXIS.clone if vec.length==0 ### all in line plane=[pts[0],vec] pts.each{|p| if not p.on_plane?(plane) cop=false break end } if not dist if not cop UI.messagebox('Extrude Edges by Offset') + ('; Edges must be coplanar.') return nil end @@dist=0.to_l if not @@dist Sketchup;;set_status_text(("Extrude Edges by Offset")+"; "+("Distance; "), SB_PROMPT) results=inputbox(["Distance; "],[@@dist],"Extrude Edges by Offset"+"...") return nil if not results if results[0]==0 UI.messagebox('Extrude Edges by Offset'+'; Offset cannot be 0!'+"\n"+"Try again"+"...") results=inputbox(["Distance; "],[@@dist],"Extrude Edges by Offset"+"...") return nil if not results or results[0]==0 end#if @@dist=results[0] else ### dist passed as arg if not cop puts 'Extrude Edge by Offset'+'; Edges must be coplanar.' return nil end @@dist=dist.to_l end#if ### model.start_operation("Extrude Edges by Offset"+' '+@@dist.to_s) dist=@@dist group=model.active_entities.add_group() ents=group.entities ### if edges.length==verts.length ### looped ### tface=ents.add_face(pts) ### fverts=tface.outer_loop.vertices fpts=[] 0.upto(fverts.length-1) do |a| vec1=(fverts[a].position-fverts[a-(fverts.length-1)].position).normalize vec2=(fverts[a].position-fverts[a-1].position).normalize vec3=(vec1+vec2).normalize if vec3.valid? ang=vec1.angle_between(vec2)/2 ang=180.degrees if vec1.parallel?(vec2) vec3.length=dist/Math;;sin(ang) t=Geom;;Transformation.new(vec3) if fpts.length > 0 if not (vec2.parallel?(fpts.last.vector_to(fverts[a].position.transform(t)))) t=Geom;;Transformation.new(vec3.reverse) end end fpts << fverts[a].position.transform(t) end end nface=ents.add_face(fpts) tface.erase! if tface.valid? and dist>0 nface.erase! if nface.valid? and dist<0 face=nil; ents.each{|e|face=e if e.class==Sketchup;;Face} face.reverse! if face.normal.z<0 ol=face.outer_loop verts=ol.vertices if dist<0 il=(face.loops-[ol])[0] verts=il.vertices if dist>0 verts.each_with_index{|vert,a| vec1=(verts[a].position.vector_to(verts[a-(verts.length-1)].position)).normalize vec2=(verts[a].position.vector_to(verts[a-1].position)).normalize vec3=(vec1+vec2).normalize if vec3.valid? ang=vec1.angle_between(vec2)/2 ang=90.degrees if vec1.parallel?(vec2) vec3.length= -dist/Math;;sin(ang) t=Geom;;Transformation.new(vec3) p=verts[a].position pt=p.transform(t) ents.add_line(p,pt) end } ### tr=Geom;;Transformation.new() len=ents.length len.times{ents.intersect_with(true, tr, ents, tr, true, ents.to_a)} ### cedges=[]; ents.each{|e|cedges << e if e.class==Sketchup;;Edge} ### else ### open ended ### edges.each{|e|ents.add_line(e.start.position, e.end.position)} edges=ents.to_a es=[] ee=[] se=[] edges.each{|e| if not e.start.edges[1] es=e.start ee=e.end se=e break elsif not e.end.edges[1] es=e.end ee=e.start se=e break end#if } nedges=[se] verts=[es,ee] (edges.length-1).times{ edges.each{|e| next if nedges.include?(e) if e.start==ee verts << e.vertices ee=e.end nedges << e elsif e.end==ee verts << e.vertices ee=e.start nedges << e end } } verts.flatten! verts.uniq! ### opts=[] verts.each_with_index{|vert,a| if a==0 #special case for start vertex v=verts[a].position.vector_to(verts[a+1].position).normalize f=dist/dist.abs t=Geom;;Transformation.rotation(verts[0].position, vec, 90.degrees*f) vec3=v.transform(t) vec3.length=dist.abs opts << verts[a].position.transform(vec3) elsif a==verts.length-1 #special case for end vertex v=verts[a-1].position.vector_to(verts[a].position).normalize f=dist/dist.abs t=Geom;;Transformation.rotation(verts[a].position, vec, 90.degrees*f) vec3=v.transform(t) vec3.length=dist.abs opts << verts[a].position.transform(vec3) else vec1=(verts[a].position.vector_to(verts[a+1].position)).normalize vec2=(verts[a].position.vector_to(verts[a-1].position)).normalize vec3=(vec1+vec2).normalize if vec3.valid? ang=vec1.angle_between(vec2)/2 ang=90.degrees if vec1.parallel?(vec2) vec3.length=dist/Math;;sin(ang) t=Geom;;Transformation.new(vec3) if not vec2.parallel?(opts[-1].vector_to(verts[a].position.transform(t))) t=Geom;;Transformation.new(vec3.reverse) end opts << verts[a].position.transform(t) end end#if } begin nedges=ents.add_edges(opts) rescue nedges=[] end pts=[] verts.each{|v|pts << v.position} ents.erase_entities(edges) begin edges=ents.add_edges(pts) rescue edges=[] end pts.each_with_index{|p,i|ents.add_line(pts[i],opts[i])} ### tr=Geom;;Transformation.new() len=ents.length len.times{ents.intersect_with(true, tr, ents, tr, true, ents.to_a)} ### cedges=[]; ents.each{|e|cedges << e if e.class==Sketchup;;Edge} cedges.length.times{ ents.to_a.each{|e| next if e.class!=Sketchup;;Edge or not e.valid? e.find_faces } } ents.to_a.each{|e|e.reverse! if e.class==Sketchup;;Face and e.normal.z<0} ### end#if ### model.commit_operation # CREATE REVERSE GROUP model.start_operation("Extrude Edges by Offset - Reverse Side"+' '+@@dist.to_s) dist=@@dist*-1 group=model.active_entities.add_group() ents=group.entities ### if edges.length==verts.length ### looped ### tface=ents.add_face(pts) ### fverts=tface.outer_loop.vertices fpts=[] 0.upto(fverts.length-1) do |a| vec1=(fverts[a].position-fverts[a-(fverts.length-1)].position).normalize vec2=(fverts[a].position-fverts[a-1].position).normalize vec3=(vec1+vec2).normalize if vec3.valid? ang=vec1.angle_between(vec2)/2 ang=180.degrees if vec1.parallel?(vec2) vec3.length=dist/Math;;sin(ang) t=Geom;;Transformation.new(vec3) if fpts.length > 0 if not (vec2.parallel?(fpts.last.vector_to(fverts[a].position.transform(t)))) t=Geom;;Transformation.new(vec3.reverse) end end fpts << fverts[a].position.transform(t) end end nface=ents.add_face(fpts) tface.erase! if tface.valid? and dist>0 nface.erase! if nface.valid? and dist<0 face=nil; ents.each{|e|face=e if e.class==Sketchup;;Face} face.reverse! if face.normal.z<0 ol=face.outer_loop verts=ol.vertices if dist<0 il=(face.loops-[ol])[0] verts=il.vertices if dist>0 verts.each_with_index{|vert,a| vec1=(verts[a].position.vector_to(verts[a-(verts.length-1)].position)).normalize vec2=(verts[a].position.vector_to(verts[a-1].position)).normalize vec3=(vec1+vec2).normalize if vec3.valid? ang=vec1.angle_between(vec2)/2 ang=90.degrees if vec1.parallel?(vec2) vec3.length= -dist/Math;;sin(ang) t=Geom;;Transformation.new(vec3) p=verts[a].position pt=p.transform(t) ents.add_line(p,pt) end } ### tr=Geom;;Transformation.new() len=ents.length len.times{ents.intersect_with(true, tr, ents, tr, true, ents.to_a)} ### cedges=[]; ents.each{|e|cedges << e if e.class==Sketchup;;Edge} ### else ### open ended ### edges.each{|e|ents.add_line(e.start.position, e.end.position)} edges=ents.to_a es=[] ee=[] se=[] edges.each{|e| if not e.start.edges[1] es=e.start ee=e.end se=e break elsif not e.end.edges[1] es=e.end ee=e.start se=e break end#if } nedges=[se] verts=[es,ee] (edges.length-1).times{ edges.each{|e| next if nedges.include?(e) if e.start==ee verts << e.vertices ee=e.end nedges << e elsif e.end==ee verts << e.vertices ee=e.start nedges << e end } } verts.flatten! verts.uniq! ### opts=[] verts.each_with_index{|vert,a| if a==0 #special case for start vertex v=verts[a].position.vector_to(verts[a+1].position).normalize f=dist/dist.abs t=Geom;;Transformation.rotation(verts[0].position, vec, 90.degrees*f) vec3=v.transform(t) vec3.length=dist.abs opts << verts[a].position.transform(vec3) elsif a==verts.length-1 #special case for end vertex v=verts[a-1].position.vector_to(verts[a].position).normalize f=dist/dist.abs t=Geom;;Transformation.rotation(verts[a].position, vec, 90.degrees*f) vec3=v.transform(t) vec3.length=dist.abs opts << verts[a].position.transform(vec3) else vec1=(verts[a].position.vector_to(verts[a+1].position)).normalize vec2=(verts[a].position.vector_to(verts[a-1].position)).normalize vec3=(vec1+vec2).normalize if vec3.valid? ang=vec1.angle_between(vec2)/2 ang=90.degrees if vec1.parallel?(vec2) vec3.length=dist/Math;;sin(ang) t=Geom;;Transformation.new(vec3) if not vec2.parallel?(opts[-1].vector_to(verts[a].position.transform(t))) t=Geom;;Transformation.new(vec3.reverse) end opts << verts[a].position.transform(t) end end#if } begin nedges=ents.add_edges(opts) rescue nedges=[] end pts=[] verts.each{|v|pts << v.position} ents.erase_entities(edges) begin edges=ents.add_edges(pts) rescue edges=[] end pts.each_with_index{|p,i|ents.add_line(pts[i],opts[i])} ### tr=Geom;;Transformation.new() len=ents.length len.times{ents.intersect_with(true, tr, ents, tr, true, ents.to_a)} ### cedges=[]; ents.each{|e|cedges << e if e.class==Sketchup;;Edge} cedges.length.times{ ents.to_a.each{|e| next if e.class!=Sketchup;;Edge or not e.valid? e.find_faces } } ents.to_a.each{|e|e.reverse! if e.class==Sketchup;;Face and e.normal.z<0} ### end#if ### model.commit_operation Sketchup.send_action("selectSelectionTool;") end#def
  • JHS Standard Toolbar Problems / SU 2018

    4
    0 Votes
    4 Posts
    1k Views
    atelierpaarA
    Hi Max, I tried the updated Standard Toolbar "hide rest of the Model" as well as "Isolated/Restore Selected"tool work well excellent work. Thanks a lot for looking into it - I appreciate Uli
  • [Plugin] Animation - SUalive Free

    17
    0 Votes
    17 Posts
    7k Views
    SUaliveS
    Hello, SUalive Free 2.40 just under review (you can download 2.40 from our website)… Replay slider on top window* Online help available from SUalive help menu* website help tab QuickTour shows tuto and a tenth of videos from SUalive Full* No longer use .rbs files* SketchUp 2018pro SUalive Light and Full release today! from http://www.sualive.com at first Website home page has 4 new animation videos Lift-top Table assembly* Scaffolding assembly* Corkscrew* Scissor Lift @jumpjack We are waiting for Twilight contact and will let you know here as soon as they mail us. you said ‘...creating a temporary new scene per each frame...’ You can now render any frame you like. Simply move replay slider then render! you said ‘...Maybe SUalive could save scenes data...’ SUalive full has 2 commands. First ‘Export Scene like’ and ‘Play Scenes’. The last wait for user to click on next button and can easily be automated. User Ruby script or render extension can integrate the following safe script. Both script and next button may be used at the same time. if defined?(YDco657479255;;api_play_next_scene) YDco657479255;;api_play_next_scene() end Have a good day WhyDi
  • CURIC plugin

    5
    0 Votes
    5 Posts
    16k Views
    E
    Seems they launched tasty teasers on FB and don't rush to launch plugins they advertise...
  • Random move components?

    8
    0 Votes
    8 Posts
    2k Views
    E
    Ok, I resolved that by myself. I should have used Ruby Code Editor instead of Ruby Console.
  • Looking for a plugin to make studs

    14
    0 Votes
    14 Posts
    1k Views
    PixeroP
    Thats quite a lot of suggestions. Will have to try them out but at a glance the 2d boolean looks promising.
  • [Plugin] Rename Component Instance

    7
    0 Votes
    7 Posts
    9k Views
    jujuJ
    take a look at EasyGroups
  • [Plugin] Key Rotate

    7
    0 Votes
    7 Posts
    11k Views
    I
    (No experience with ruby) I'm trying to alter this to rotate around component base instead of center. It seems I just need to change this line: pt = e.bounds.center Can anyone help me find out what I need to write to make the component center its point of rotation? Any help would be greatly appreciated.
  • [Plugin] AutoSmooth

    32
    0 Votes
    32 Posts
    44k Views
    A
    Not smooth edge that create by tgi3d move tool Thanks [image: i0Ku_Capture.PNG]
  • Plug in for positioning random Textures????

    12
    0 Votes
    12 Posts
    5k Views
    E
    Nice, thanks
  • [Plugin] Axis Cam v1.0.4

    32
    0 Votes
    32 Posts
    12k Views
    renderizaR
    Hi, I have not updated my SketchUp Extensions for 5 years, but I am currently working on ways to monetize them so that I can invest more time in maintaining my Plugins. I hope to improve all my Extensions soon so that people can enjoy them once again. Best regards, Renderiza
  • [Inquiry] Shading/Shadow Settings Import/Export Plugin

    2
    0 Votes
    2 Posts
    470 Views
    BoxB
    You could try Eneroth's https://extensions.sketchup.com/en/content/eneroth-shadow-memory Perhaps even her https://extensions.sketchup.com/en/content/eneroth-view-memory will sort you out.
  • [Plugin] VolumeCalculator v1.8

    5
    0 Votes
    5 Posts
    7k Views
    Dan RathbunD
    I have posted my rendition of the "no temporary group" calculate volume solution. See: Calculate volume on manifold surface without group & explode Bonus method for a volume display string in model units: See: [code] format volume in model units

Advertisement