sketchucation logo sketchucation
    • Login
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    🛣️ Road Profile Builder | Generate roads, curbs and pavements easily Download

    [Plugin] Door-Lintel Update + Window-Sill

    Scheduled Pinned Locked Moved Plugins
    66 Posts 29 Posters 41.7k 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.
    • 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 Online
                        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 Online
                            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
                                        • L Offline
                                          lamngoaison
                                          last edited by

                                          i got a new problem. SU2025. any one fix it for SU2025 yet? please!!

                                          TIGT 1 Reply Last reply Reply Quote 0
                                          • TIGT Online
                                            TIG Moderator @lamngoaison
                                            last edited by

                                            @lamngoaison

                                            The linked post contains a ZIP file posted a few days ago
                                            link
                                            Which can be converted to an RBZ by changing its filetype suffix.
                                            It worked in v2024, so should also work in v2025 ?

                                            TIG

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

                                            Advertisement