⚠️ Important | Libfredo 15.6b introduces important bugfixes for Fredo's Extensions Update
  • Installing Wood Grain Long - 2 Extension

    4
    0 評價
    4 貼文
    1k 瀏覽
    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 評價
    58 貼文
    145k 瀏覽
    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 評價
    4 貼文
    1k 瀏覽
    pilouP
    Maybe Install last version 2017 Make (if you have 64 bits)
  • Any plugin to evenly space objects?

    24
    0 評價
    24 貼文
    11k 瀏覽
    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 評價
    8 貼文
    2k 瀏覽
    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 評價
    4 貼文
    1k 瀏覽
    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 評價
    17 貼文
    7k 瀏覽
    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 評價
    5 貼文
    16k 瀏覽
    E
    Seems they launched tasty teasers on FB and don't rush to launch plugins they advertise...
  • Random move components?

    8
    0 評價
    8 貼文
    2k 瀏覽
    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 評價
    14 貼文
    1k 瀏覽
    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 評價
    7 貼文
    9k 瀏覽
    jujuJ
    take a look at EasyGroups
  • [Plugin] Key Rotate

    7
    0 評價
    7 貼文
    11k 瀏覽
    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 評價
    32 貼文
    44k 瀏覽
    A
    Not smooth edge that create by tgi3d move tool Thanks [image: i0Ku_Capture.PNG]
  • Plug in for positioning random Textures????

    12
    0 評價
    12 貼文
    5k 瀏覽
    E
    Nice, thanks
  • [Plugin] Axis Cam v1.0.4

    32
    0 評價
    32 貼文
    12k 瀏覽
    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 評價
    2 貼文
    462 瀏覽
    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 評價
    5 貼文
    7k 瀏覽
    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
  • [Plugin] LSS Toolbar 2.0 Beta

    68
    0 評價
    68 貼文
    65k 瀏覽
    E
    I guess the plugin should be working with SU 8. The toolbar opens with errors in all tools: "No definition "callRuby"", "No definition "get_settings"", "No definition "obtain_defaults"" They don't let me continue working with this plugin, regardless I answer YES or NO. Unfortunately, Ruby console is empty. I have rather put the files into correct folders. [image: u0pK_Beztytuu.png]
  • [Plugin] 3D Parametric Shapes - makes placeable components

    76
    0 評價
    76 貼文
    20k 瀏覽
    J
    @einstein said: Great thanks, johnwmcc, for this plugin! Thanks for your appreciate comment. @einstein said: Did you consider designing a toolbar for it? I'm sure for many users it became one of the very basic tools in SU. Having it accessible on top of the screen would be nice Not sure I know how to do that, but will consider it when I have time (probably not for at least weeks) - I have several other higher priority projects on the go at the moment, leaving me little time to update this one.
  • Layers that will show all the areas

    2
    0 評價
    2 貼文
    889 瀏覽
    Rich O BrienR
    Use Scenes to toggle layer visibility.

Advertisement