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

    [Plugin] Door-Lintel Update + Window-Sill

    Scheduled Pinned Locked Moved Plugins
    66 Posts 29 Posters 40.4k 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.
    • erikBE Offline
      erikB
      last edited by

      Thanks for the update. This is a very usefull tool !!!
      erikB

      1 Reply Last reply Reply Quote 0
      • pbacotP Offline
        pbacot
        last edited by

        It's been a while since I used this tool and it looks like interest in it has dropped off judging by the activity here. What other methods have people been using? I have been working with solid groups more and components, but sometime I just want to use something like this. There are some drawbacks to the tool at present:

        I cannot make a shortcut key command operate the tool. Nothing happens. So it is slow if you are doing a lot of doors, pulling down the menus each time. Also I have found if you preselect the embrasures, you can work them all one by one by selecting the tool over and over. I wonder if the tool could be set to work on multiple instances in one command.

        The tool would also be enhanced by having an active phase, with a toolbar. Then just clicking on an embrasure would perform the preset lintel. That would be the quickest use.

        I sometimes get an error message that the maximum door height is exceeded. It has no relationship to the drawing that I can see. Then I cannot use the tool until I reduce the door height then set it back up again where I want it. I thought I might look at adjusting the script, but it's encoded.

        Windows are set by sill and window size. It seems to me that convention would make it appropriate to set window head height and window size instead. Then adjusting for a different window would usually take only one input as window heads are usually constant in a building.

        This tool works well and cleanly. It's helpful if you have imported CAD wall lines that already have openings. Probably has other uses in joining shapes. Thanks, Peter

        MacOSX MojaveSketchUp Pro v19 Twilight v2 Thea v3 PowerCADD

        1 Reply Last reply Reply Quote 0
        • S Offline
          SUFractal
          last edited by

          @pbacot said:

          It's been a while since I used this tool and it looks like interest in it has dropped off judging by the activity here. What other methods have people been using? I have been working with solid groups more and components, but sometime I just want to use something like this. There are some drawbacks to the tool at present:

          I cannot make a shortcut key command operate the tool. Nothing happens. So it is slow if you are doing a lot of doors, pulling down the menus each time. Also I have found if you preselect the embrasures, you can work them all one by one by selecting the tool over and over. I wonder if the tool could be set to work on multiple instances in one command.

          The tool would also be enhanced by having an active phase, with a toolbar. Then just clicking on an embrasure would perform the preset lintel. That would be the quickest use.

          I sometimes get an error message that the maximum door height is exceeded. It has no relationship to the drawing that I can see. Then I cannot use the tool until I reduce the door height then set it back up again where I want it. I thought I might look at adjusting the script, but it's encoded.

          Windows are set by sill and window size. It seems to me that convention would make it appropriate to set window head height and window size instead. Then adjusting for a different window would usually take only one input as window heads are usually constant in a building.

          This tool works well and cleanly. It's helpful if you have imported CAD wall lines that already have openings. Probably has other uses in joining shapes. Thanks, Peter

          Just discovered this plugin this morning ... very handy when importing a plan drawing in CAD as you suggested. I agree with your comments about some minor tweaking.

          1 Reply Last reply Reply Quote 0
          • A Offline
            ArCAD-UK
            last edited by

            @pbacot said:

            It's been a while since I used this tool and it looks like interest in it has dropped off judging by the activity here. What other methods have people been using?

            I recently discovered TIG's Hole Punching tool...
            http://forums.sketchucation.com/viewtopic.php?t=30846
            which could work as a more efficient alternative depending on your components and objectives.

            1 Reply Last reply Reply Quote 0
            • pbacotP Offline
              pbacot
              last edited by

              Thanks for the note. I haven't been using that method, though I have looked at the plugin a few times. I'll look into it.

              MacOSX MojaveSketchUp Pro v19 Twilight v2 Thea v3 PowerCADD

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

                Didier has agreed that I might update some of his Plugins in the PluginStore.
                Please get the latest v2014/2015 compatible version from the PluginStore http://sketchucation.com/pluginstore?pln=door_lintel

                TIG

                guanjinG 1 Reply Last reply Reply Quote 0
                • jujuJ Offline
                  juju
                  last edited by

                  @tig said:

                  Didier has agreed that I might update some of his Plugins in the PluginStore.
                  Please get the latest version from the PluginStore

                  following the download button doesn't take me to the correct page, also, if I search the pluginstore, either by author or by plugin name it does not show this plugin

                  is it an error there or on my machine somehow?

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

                  1 Reply Last reply Reply Quote 0
                  • KrisidiousK Offline
                    Krisidious
                    last edited by

                    thanks for doing this Tig...

                    By: Kristoff Rand
                    Home DesignerUnique House Plans

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

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

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

                        By: Kristoff Rand
                        Home DesignerUnique House Plans

                        1 Reply Last reply Reply Quote 0
                        • 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

                                    I come from China, is to learn

                                    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

                                      I come from China, is to learn

                                      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
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 4 / 4
                                            • First post
                                              Last post
                                            Buy SketchPlus
                                            Buy SUbD
                                            Buy WrapR
                                            Buy eBook
                                            Buy Modelur
                                            Buy Vertex Tools
                                            Buy SketchCuisine
                                            Buy FormFonts

                                            Advertisement