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.
    • 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
                                  • guanjinG Offline
                                    guanjin @Didier Bur
                                    last edited by

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

                                    I come from China, is to learn

                                    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

                                        I come from China, is to learn

                                        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
                                            • 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