sketchucation logo sketchucation
    • 登入
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    [Plugin] Door-Lintel Update + Window-Sill

    已排程 已置頂 已鎖定 已移動 Plugins
    66 貼文 29 Posters 40.4k 瀏覽 29 Watching
    正在載入更多貼文
    • 從舊到新
    • 從新到舊
    • 最多點贊
    回覆
    • 在新貼文中回覆
    登入後回覆
    此主題已被刪除。只有擁有主題管理權限的使用者可以查看。
    • TIGT 離線
      TIG Moderator
      最後由 編輯

      Sorry, but although I had updated the RBZ I forgot to click 'Publish' in the PluginStore Dev-page...
      NOW its Download link should work !
      😳

      TIG

      1 條回覆 最後回覆 回覆 引用 0
      • KrisidiousK 離線
        Krisidious
        最後由 編輯

        It was gone when I went to look, but after a few seconds it was there.

        By: Kristoff Rand
        Home DesignerUnique House Plans

        1 條回覆 最後回覆 回覆 引用 0
        • P 離線
          pankaj_tamore
          最後由 編輯

          Dear Didier Bur,

          This so magical very easy to use and give incredible result. because it saves lot of time which is consumed by conventional method(which is very cumbersome) of putting doors And windows. your this plug-in has put an end on that ordeal of deleting every single vertical and horizontal line on faces of walls, which very irritating thank you very much and keep it up!

          1 條回覆 最後回覆 回覆 引用 0
          • jujuJ 離線
            juju
            最後由 編輯

            @tig said:

            Sorry, but although I had updated the RBZ I forgot to click 'Publish' in the PluginStore Dev-page...
            NOW its Download link should work !
            😳

            EXCELLENT! THX

            Save the Earth, it's the only planet with chocolate.

            1 條回覆 最後回覆 回覆 引用 0
            • halroachH 離線
              halroach
              最後由 編輯

              This plugin is wonderful!
              Does it work within a component? It seems to work for me only when it's in the "open!?"

              FlexTools - Super Quick Windows, Doors, Slats...

              1 條回覆 最後回覆 回覆 引用 0
              • S 離線
                SyahirXIII
                最後由 編輯

                I have been trying to use it using Profile Builder 3 , it seems to have some kind of problem detecting rectangular vertical face.


                Dont work here


                But it seems to work here

                1 條回覆 最後回覆 回覆 引用 0
                • Didier BurD 離線
                  Didier Bur
                  最後由 編輯

                  Hi syahirXIII,

                  The message shown on your image pops up when the reveal's face loop is made of more than 4 edges.
                  Please check if this is the case on the face that doesn't work.
                  Regards

                  4 edges.jpg

                  DB

                  guanjinG 1 條回覆 最後回覆 回覆 引用 0
                  • guanjinG 離線
                    guanjin @TIG
                    最後由 編輯

                    @TIG
                    hello
                    This plugin doesn't seem to support sketchup2024
                    A very suitable plugin, can you fix it working on sketchup024?
                    thanks

                    I come from China, is to learn

                    1 條回覆 最後回覆 回覆 引用 0
                    • guanjinG 離線
                      guanjin @Didier Bur
                      最後由 編輯

                      @Didier-Bur
                      hello
                      This plugin doesn't seem to support sketchup2024
                      A very suitable plugin, can you fix it working on sketchup024?
                      thanks

                      I come from China, is to learn

                      1 條回覆 最後回覆 回覆 引用 1
                      • N 離線
                        naealmeida Newcomers
                        最後由 編輯

                        Hello! Can you update the plugin for the new skecthup 2024 please

                        1 條回覆 最後回覆 回覆 引用 0
                        • A 離線
                          aricfish
                          最後由 編輯

                          Hi All,

                          Is this plugin working in 2024 sketchup? Huge time saver but not working for me in newest version.

                          Didier BurD 1 條回覆 最後回覆 回覆 引用 0
                          • Didier BurD 離線
                            Didier Bur @aricfish
                            最後由 編輯

                            @ SU2024 and Door-Lintel users:

                            Hi,
                            I don't have SU2024 installed on my PC.
                            Maybe some developer (TIG ?) will update the plugin ?
                            So here it is.

                            Regards,

                            # Name :          door_lintel
                            # Description :   Draws a lintel above door between wall sides, and window as well
                            # Author :        D. Bur
                            # Usage :         select face and "Door by reveal" in context menu
                            # Date :          May 2008
                            # Type :          Tool
                            # History:        1.0 (May 2008) - first version
                            #                 1.1 (May 2008) - window added 
                            
                            require 'sketchup.rb'
                            
                            # f=Sketchup.active_model.selection[0]
                            
                            def trad(word)
                            	# tStrings = [["Door" "Porte"],["Window" "Fenetre"]]
                            	tStrings={ "Door" => "Porte", "Window" => "Fenêtre"}
                            	return word if Sketchup.get_locale != "fr"
                            	return tStrings[word]
                            end
                            
                            def dbe_by_embrasure(type)
                            	model=Sketchup.active_model
                            	entities=Sketchup.active_model.active_entities
                            	@dbe_door_height=2.m if not @dbe_door_height
                            	@dbe_window_height=135.cm if not @dbe_window_height
                            	@dbe_sill_height=1.m if not @dbe_sill_height
                            	org_face=model.selection[0]
                              
                            	model.start_operation "Door-window by reveal"
                              
                            	  if model.selection.empty?
                            		UI.messagebox("Empty selection: please select a vertical face.")
                            		return
                            	end
                            	if (model.selection.length !=1) 
                            		UI.messagebox("Please select only ONE vertical face.")
                            		return
                            	end
                            	if  (model.selection[0].class != Sketchup::Face)
                            		UI.messagebox("Please select a vertical face.")
                            		return
                            	end
                            	if org_face.normal.z>1e-012 or org_face.normal.z<-1e-012
                            		UI.messagebox("Please select a VERTICAL face.")
                            		return
                            	 end
                            	
                            	if org_face.outer_loop.edges.length != 4
                            		UI.messagebox("Please select a RECTANGULAR vertical face.")
                            		return
                            	 end
                            	 
                            	 # Parse edges
                            	edges=org_face.edges
                            	@verticals={}
                            	@horizontals={}
                            	
                            	edges.each do |e|
                            		if e.start.position.z==e.end.position.z
                            			@horizontals[e]=e.start.position.z
                            		else
                            			@verticals[e]=e.start.position.distance e.end.position
                            		end
                            	end
                            	
                            	# Dialog
                            	#puts "type " + type.inspect
                            	if type=="door"
                            		return if !dbe_door_height()
                            	else
                            		return if !dbe_window_height()
                            	end
                            	
                            	# heights control
                            	if type=="door"
                            		height_ok=false
                            		until height_ok
                            			if @dbe_door_height<@verticals.values.max #or (@dbe_sill_height+@dbe_window_height)<@verticals.values.max
                            				height_ok =true
                            			else
                            				UI.messagebox("Incorrect height for this door.\nPlease set it to a lower value than " +@verticals.values.max.to_s)
                            				return if !dbe_door_height()
                            			end
                            		end
                            	end
                            	
                            	if type=="window"
                            		heights_ok=false
                            		until heights_ok
                            			if (@dbe_sill_height+@dbe_window_height)<@verticals.values.max
                            				heights_ok =true
                            			else
                            				UI.messagebox("Incorrect heights for this windows.\nSum of sill and window heights should'nt exceed "  + @verticals.values.max.to_s)
                            				return if !dbe_window_height()
                            			end
                            		end
                            	end
                            	
                              # Highest edge & lintel height
                              high_edge=@horizontals.index(@horizontals.values.max)
                              bottom_edge=@horizontals.index(@horizontals.values.min)
                              lintel_height=@verticals.values.max-@dbe_door_height if type=="door"
                              lintel_height=@verticals.values.max-(@dbe_window_height+@dbe_sill_height) if type=="window"
                              # New face of lintel
                              p1=high_edge.start.position
                              p2=high_edge.end.position
                              p3=Geom::Point3d.new(p1.x,p1.y,(p1.z-lintel_height))
                              p4=Geom::Point3d.new(p2.x,p2.y,(p2.z-lintel_height))
                              # Mid point of lintel
                              v=p2.vector_to p3
                              v.length=v.length/2.0
                              mid=p2.offset(v)
                              # Opening width
                              v_norm=org_face.normal
                              touch=model.raytest([mid,v_norm])
                              if touch
                                same_object=true
                                hitpoint=touch[0]
                                hit_obj=touch[1]
                                if hit_obj.length>1
                                  hit_face=hit_obj.last
                                  hit_parent=hit_obj[0]
                                  if not hit_parent.entities.include? org_face
                                    same_object=false
                                  end
                                  else
                                  hit_parent=hit_obj.last
                                  hit_face=hit_obj.last
                                end
                                width=mid.distance hitpoint
                                if width > 200
                                  go=UI.messagebox("Suspicious door width found: " + width.to_s + "\nProceed ?",MB_OKCANCEL)
                                  return nil if go==2
                                end
                                case hit_parent.typename
                                  when "Face"
                                    if org_face.normal!=hit_face.normal.reverse
                                      UI.messagebox("Opposite reveal not parallel to selected face. Aborting...")
                                      return nil
                                    end
                                  else
                                    if same_object==false
                                      UI.messagebox("Cannot find opposite wall,\nobstructive "+hit_parent.typename+" found on layer "+hit_parent.layer.name+ ".\nPlease hide it and retry.")
                                      return
                                    end
                                end
                              else
                                UI.messagebox("No opposite wall to connect lintel.")
                                return nil
                              end
                              
                              new_face=entities.add_face p1,p2,p4,p3
                              if touch and same_object==true
                                v2=new_face.normal
                                v2.length=width
                                new_face.pushpull width
                                else
                                UI.messagebox("Cannot pushpull lintel.")
                              end
                              
                              #Redraw these fucking remaining edges to better kill them
                              e1=entities.add_line(p1.offset(v2),p2.offset(v2))
                              e2=entities.add_line(p1.offset(v2),p3.offset(v2))
                              e3=entities.add_line(p2.offset(v2),p4.offset(v2))
                              e1.erase!
                              e2.erase!
                              e3.erase!
                            
                              if type=="window"
                                # New face of sill
                                p1=bottom_edge.start.position
                                p2=bottom_edge.end.position
                                p3=Geom::Point3d.new(p1.x,p1.y,(p1.z+@dbe_sill_height))
                                p4=Geom::Point3d.new(p2.x,p2.y,(p2.z+@dbe_sill_height))
                                # Mid point of sill
                                v=p2.vector_to p3
                                v.length=v.length/2.0
                                mid=p2.offset(v)
                                # Opening width
                                touch=model.raytest([mid,v_norm])
                                if touch
                                  same_object=true
                                  hitpoint=touch[0]
                                  hit_obj=touch[1]
                                  if hit_obj.length>1
                                    hit_face=hit_obj.last
                                    hit_parent=hit_obj[0]
                                    #if not hit_parent.entities.include? org_face
                                      #same_object=false
                                    #end
                                  else
                                    hit_parent=hit_obj.last
                                    hit_face=hit_obj.last
                                  end
                                width=mid.distance hitpoint
                                if width > 200
                                  go=UI.messagebox("Suspicious window width found: " + width.to_s + "\nProceed ?",MB_OKCANCEL)
                                  return nil if go==2
                                end
                                case hit_parent.typename
                                  when "Face"
                                    if v_norm!=hit_face.normal.reverse
                                      UI.messagebox("Opposite reveal not parallel to selected face. Aborting...")
                                      return nil
                                    end
                                  else
                                    if same_object==false
                                      UI.messagebox("Cannot find opposite wall,\nobstructive "+hit_parent.typename+" found on layer "+hit_parent.layer.name+ ".\nPlease hide it and retry.")
                                      return
                                    end
                                end
                              else
                                UI.messagebox("No opposite wall to connect linter.")
                                return nil
                              end
                              
                              new_face=entities.add_face p1,p2,p4,p3
                              if touch and same_object==true
                                v2=new_face.normal
                                v2.length=width
                                new_face.pushpull width
                                else
                                UI.messagebox("Cannot pushpull sill.")
                              end
                              
                              #Redraw these fucking remaining edges to better kill them
                              e1=entities.add_line(p1.offset(v2),p2.offset(v2))
                              e2=entities.add_line(p1.offset(v2),p3.offset(v2))
                              e3=entities.add_line(p2.offset(v2),p4.offset(v2))
                              e1.erase!
                              e2.erase!
                              e3.erase!
                            
                              end # if window
                              model.commit_operation
                            end
                            
                            def dbe_door_height
                            	@dbe_door_height=2.m if not @dbe_door_height
                            	prompt=["Door height: "]
                            	value=[@dbe_door_height]
                            	results=inputbox prompt,value,"Door height"
                            	puts results.inspect
                            	return false if !results
                            	@dbe_door_height=results[0]
                            
                            end
                            
                            def dbe_window_height
                            	@dbe_window_height=135.cm if not @dbe_window_height
                            	@dbe_sill_height=1.m if not @dbe_sill_height
                            	prompts=["Sill height:  ","Window height:  "]
                            	values=[@dbe_sill_height,@dbe_window_height]
                            	results=inputbox prompts,values,"Window heights"
                            	return false if !results
                            	@dbe_sill_height=results[0]
                            	@dbe_window_height=results[1]
                            end
                            
                            def valid_door_selection
                              s=Sketchup.active_model.selection
                              return false if s.length!=1
                              return false if s[0].typename!="Face"
                              return false if s[0].normal.z>1e-012 or s[0].normal.z<-1e-012
                              return false  if s[0].outer_loop.edges.length != 4
                              return true
                            end
                            
                            #----------------------------------------------------------------------------
                            # add menu items
                            if !file_loaded?(__FILE__ )
                              dbe_menu=UI.menu("Tools").add_submenu("Door/Window by reveal")
                              dbe_menu.add_item("Door") { dbe_by_embrasure "door"}
                              dbe_menu.add_item("Window") { dbe_by_embrasure "window" }
                              dbe_menu.add_separator
                              
                               # Context menu
                                UI.add_context_menu_handler do |menu|
                                    if( valid_door_selection )
                                    		menu.add_separator
                                        menu.add_item("Door by reveal") { dbe_by_embrasure "door" }
                                        menu.add_item("Window by reveal") { dbe_by_embrasure "window" }
                                        menu.add_separator
                                    end
                                end
                            end
                            
                            file_loaded(__FILE__ )
                            
                            
                            

                            DB

                            guanjinG 1 條回覆 最後回覆 回覆 引用 0
                            • guanjinG 離線
                              guanjin @Didier Bur
                              最後由 編輯

                              @Didier-Bur
                              It seems that no one has fixed this plugin😞

                              I come from China, is to learn

                              TIGT 1 條回覆 最後回覆 回覆 引用 0
                              • TIGT 離線
                                TIG Moderator @guanjin
                                最後由 編輯

                                @guanjin
                                It doesn't work in v2024 [various errors], e.g.

                                Error: #<NoMethodError: undefined method 'index' for {#Sketchup::Edge:0x0000019daaeab1b0=>0.0, #Sketchup::Edge:0x0000019daaeab160=>39.37007874015748}:Hash>
                                C:/Users/TIG/AppData/Roaming/SketchUp/SketchUp 2024/SketchUp/Plugins/GEIS_door_lintel2.rb: 100:in 'dbe_by_embrasure'
                                C:/Users/TIG/AppData/Roaming/SketchUp/SketchUp 2024/SketchUp/Plugins/GEIS_door_lintel2.rb: 274:in `block in <top (required)>'

                                @Didier-Bur also obfuscates his code, so without arduously repacking it back into RB code it'd be difficult to say what the issues are...

                                TIG

                                1 條回覆 最後回覆 回覆 引用 0
                                • guanjinG 離線
                                  guanjin
                                  最後由 編輯

                                  So many experts, no one can fix this plugin
                                  The forum is no longer the same as before

                                  I come from China, is to learn

                                  1 條回覆 最後回覆 回覆 引用 -2
                                  • TIGT 離線
                                    TIG Moderator
                                    最後由 編輯

                                    @Didier-Bur needs to fix this - it's his baby...

                                    TIG

                                    Didier BurD 1 條回覆 最後回覆 回覆 引用 0
                                    • Didier BurD 離線
                                      Didier Bur @TIG
                                      最後由 編輯

                                      Hi all,
                                      My baby is quite old now 😉
                                      Here is the non-encrypted version. Please unpack in your Plugins dir.
                                      No update because I haven't SU2024.
                                      Regards,DBUR_Lines2Tubes.zip

                                      DB

                                      Didier BurD 1 條回覆 最後回覆 回覆 引用 0
                                      • Didier BurD 離線
                                        Didier Bur @Didier Bur
                                        最後由 編輯

                                        Me again,
                                        Same goes for door_lintel.rb

                                        door_lintel_uncrypted.zip

                                        DB

                                        1 條回覆 最後回覆 回覆 引用 0
                                        • J 離線
                                          JGA
                                          最後由 編輯

                                          Didier, thanks for sharing.

                                          Regards,
                                          JGA

                                          1 條回覆 最後回覆 回覆 引用 -1
                                          • guanjinG 離線
                                            guanjin
                                            最後由 編輯

                                            Thank you to Didier Bur for the source code, which successfully fixed the work in 2024 and modified the multi-faceted selection stretching.
                                            
                                            Thank you again, Didier Bur![alt text](image url)无标题项目.gif

                                            I come from China, is to learn

                                            guanjinG 2 條回覆 最後回覆 回覆 引用 0
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 3 / 4
                                            • 第一個貼文
                                              最後的貼文
                                            Buy SketchPlus
                                            Buy SUbD
                                            Buy WrapR
                                            Buy eBook
                                            Buy Modelur
                                            Buy Vertex Tools
                                            Buy SketchCuisine
                                            Buy FormFonts

                                            Advertisement