sketchucation logo sketchucation
    • Login
    ⌛ Sale Ending | 30% Off Profile Builder 4 ends 30th September

    [Plugin] Door-Lintel Update + Window-Sill

    Scheduled Pinned Locked Moved Plugins
    66 Posts 29 Posters 40.9k Views 29 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • P Offline
      pankaj_tamore
      last edited by

      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 Reply Last reply Reply Quote 0
      • jujuJ Offline
        juju
        last edited by

        @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 Reply Last reply Reply Quote 0
        • halroachH Offline
          halroach
          last edited by

          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 Reply Last reply Reply Quote 0
          • S Offline
            SyahirXIII
            last edited by

            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 Reply Last reply Reply Quote 0
            • Didier BurD Offline
              Didier Bur
              last edited by

              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 Reply Last reply Reply Quote 0
              • guanjinG Offline
                guanjin @TIG
                last edited by

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

                1 Reply Last reply Reply Quote 0
                • guanjinG Offline
                  guanjin @Didier Bur
                  last edited by

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

                  1 Reply Last reply Reply Quote 1
                  • N Offline
                    naealmeida Newcomers
                    last edited by

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

                    1 Reply Last reply Reply Quote 0
                    • A Offline
                      aricfish
                      last edited by

                      Hi All,

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

                      Didier BurD 1 Reply Last reply Reply Quote 0
                      • Didier BurD Offline
                        Didier Bur @aricfish
                        last edited by

                        @ 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 Reply Last reply Reply Quote 0
                        • guanjinG Offline
                          guanjin @Didier Bur
                          last edited by

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

                          TIGT 1 Reply Last reply Reply Quote 0
                          • TIGT Offline
                            TIG Moderator @guanjin
                            last edited by

                            @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 Reply Last reply Reply Quote 0
                            • guanjinG Offline
                              guanjin
                              last edited by

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

                              1 Reply Last reply Reply Quote -2
                              • TIGT Offline
                                TIG Moderator
                                last edited by

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

                                TIG

                                Didier BurD 1 Reply Last reply Reply Quote 0
                                • Didier BurD Offline
                                  Didier Bur @TIG
                                  last edited by

                                  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 Reply Last reply Reply Quote 0
                                  • Didier BurD Offline
                                    Didier Bur @Didier Bur
                                    last edited by

                                    Me again,
                                    Same goes for door_lintel.rb

                                    door_lintel_uncrypted.zip

                                    DB

                                    1 Reply Last reply Reply Quote 0
                                    • J Offline
                                      JGA
                                      last edited by

                                      Didier, thanks for sharing.

                                      Regards,
                                      JGA

                                      1 Reply Last reply Reply Quote -1
                                      • guanjinG Offline
                                        guanjin
                                        last edited by

                                        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

                                        guanjinG 2 Replies Last reply Reply Quote 0
                                        • guanjinG Offline
                                          guanjin @guanjin
                                          last edited by

                                          This post is deleted!
                                          1 Reply Last reply Reply Quote 0
                                          • guanjinG Offline
                                            guanjin @guanjin
                                            last edited by

                                            @guanjin said in [Plugin] Door-Lintel Update + Window-Sill:

                                            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
                                            无标题项目.gif

                                            1 Reply Last reply Reply Quote 0
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 3 / 4
                                            • First post
                                              Last post
                                            Buy SketchPlus
                                            Buy SUbD
                                            Buy WrapR
                                            Buy eBook
                                            Buy Modelur
                                            Buy Vertex Tools
                                            Buy SketchCuisine
                                            Buy FormFonts

                                            Advertisement