• Login
sketchucation logo sketchucation
  • Login
⚠️ Libfredo 15.4b | Minor release with bugfixes and improvements Update

Ruby plugin?

Scheduled Pinned Locked Moved Developers' Forum
16 Posts 6 Posters 828 Views 6 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.
  • T Offline
    Thomas214
    last edited by 22 May 2011, 15:12

    I would like to write a plugin theat workes something like this:
    -Select multiple lines
    -Activate plugin
    -a box would appear were you would write the offset amount and hight
    -a offset line would be created
    -a face betweane the two offset lines would be created
    -used pushe/pull for hight
    -end

    I would like to se what SketchUp would do with the corners of the
    lines are diferent angles.

    1 Reply Last reply Reply Quote 0
    • P Offline
      pilou
      last edited by 22 May 2011, 15:51

      Maybe a little concept image, because this plug is maybe yet existing πŸ˜„

      Frenchy Pilou
      Is beautiful that please without concept!
      My Little site :)

      1 Reply Last reply Reply Quote 0
      • T Offline
        Thomas214
        last edited by 22 May 2011, 16:07

        @unknownuser said:

        Maybe a little concept image, because this plug is maybe yet existing πŸ˜„

        There is an Example in the attachment of what I would like to do with it.


        From a line to a wall

        1 Reply Last reply Reply Quote 0
        • D Offline
          driven
          last edited by 22 May 2011, 16:50

          for something like this it's probably quicker and easier to draw [rectangle tool] the profile, select all lines and click followMe tool.

          there are lot of rubies that deal with more complex versions of this, but the standard tools can do quite a bit...
          draw profile, select line then followMe tool

          learn from the mistakes of others, you may not live long enough to make them all yourself...

          1 Reply Last reply Reply Quote 0
          • T Offline
            Thomas214
            last edited by 22 May 2011, 17:11

            @driven said:

            for something like this it's probably quicker and easier to draw [rectangle tool] the profile, select all lines and click followMe tool.

            there are lot of rubies that deal with more complex versions of this, but the standard tools can do quite a bit...
            [attachment=0:1tdufwpm]<!-- ia0 -->use_followMe.png<!-- ia0 -->[/attachment:1tdufwpm]

            This is somethin for my school project so to draw it this way it isn't an option πŸ˜„

            1 Reply Last reply Reply Quote 0
            • T Offline
              TIG Moderator
              last edited by 22 May 2011, 17:29

              @thomas214 said:

              @driven said:

              for something like this it's probably quicker and easier to draw [rectangle tool] the profile, select all lines and click followMe tool.

              there are lot of rubies that deal with more complex versions of this, but the standard tools can do quite a bit...
              [attachment=0:3bwzyrmz]<!-- ia0 -->use_followMe.png<!-- ia0 -->[/attachment:3bwzyrmz]

              This is somethin for my school project so to draw it this way it isn't an option πŸ˜„

              So write down the plan for your code...
              . check the model.selection contains some connected Edges (>>>path)
              . use a UI.inputbox() dialog to get the height
              . add a rectangle_face at start.position (p0) of first edge in path, calculating the other three points as p0=p1.clone; p1.z=p1.z+height etc using rectangle_face=entities.add_face(p0,p1,p2,p3)
              . use rectangle_face.followme(path) to extrude the new face along the path.
              . done

              TIG

              1 Reply Last reply Reply Quote 0
              • T Offline
                Thomas214
                last edited by 24 May 2011, 17:51

                @tig said:

                @thomas214 said:

                @driven said:

                for something like this it's probably quicker and easier to draw [rectangle tool] the profile, select all lines and click followMe tool.

                there are lot of rubies that deal with more complex versions of this, but the standard tools can do quite a bit...
                [attachment=0:2kbtp9i4]<!-- ia0 -->use_followMe.png<!-- ia0 -->[/attachment:2kbtp9i4]

                This is somethin for my school project so to draw it this way it isn't an option πŸ˜„

                So write down the plan for your code...
                . check the model.selection contains some connected Edges (>>>path)
                . use a UI.inputbox() dialog to get the height
                . add a rectangle_face at start.position (p0) of first edge in path, calculating the other three points as p0=p1.clone; p1.z=p1.z+height etc using rectangle_face=entities.add_face(p0,p1,p2,p3)
                . use rectangle_face.followme(path) to extrude the new face along the path.
                . done

                Hmmm what if I useEdge.all_connectedthen the code from the the plugin push/pull face I have?

                1 Reply Last reply Reply Quote 0
                • T Offline
                  Thomas214
                  last edited by 24 May 2011, 18:40

                  I got this far

                  prompts = ["x:", "y:", "z:"]
                  defaults = [10, 20, 100]
                  input = UI.inputbox prompts, defaults, "Input data"
                  x = input[0]
                  y = imput[1]
                  z = imput[2]
                  model = Sketchup.active_model
                  ent = model.entities
                  sel = model.selection

                  model = Sketchup.active_model
                  entities = model.active_entities
                  pts = []
                  pts[0] = [0, 0, 0]
                  pts[1] = [x, 0, 0]
                  pts[2] = [x, y, 0]
                  pts[3] = [0, y, 0]

                  Add the face to the entities in the model

                  face = entities.add_face pts

                  I just happen to know that the second and third entities in the

                  entities objects are edges.

                  entity1 = entities[1]
                  entity2 = entities[2]
                  edges = entity1.all_connected
                  if (edges)
                  UI.messagebox edges.to_s
                  else
                  UI.messagebox "Failure"
                  end

                  faces = []

                  sel.each do |e|
                  	if e.is_a? Sketchup::Face
                           faces.push e
                  	end
                  end   
                  
                   Sketchup.active_model.start_operation "Wall"     
                  faces.each do |e|
                       ent.add_group e
                       e.pushpull (z)
                   end
                  		Sketchup.active_model.commit_operation	
                  

                  end

                  if( not file_loaded?('Wall.rb') )
                  UI.menu('Plugins').add_item('wall') {wall }
                  end

                  file_loaded 'Wall.rb'

                  I think I have to create a new entety for the faces theat are created to use it in push/pull ?

                  1 Reply Last reply Reply Quote 0
                  • GaieusG Offline
                    Gaieus
                    last edited by 24 May 2011, 19:13

                    Okay. When it comes to a point and I cannot understand what it is then I move the whole topic to the developers' forum.

                    Good luck! πŸ˜‰

                    Gai...

                    1 Reply Last reply Reply Quote 0
                    • sdmitchS Offline
                      sdmitch
                      last edited by 24 May 2011, 19:44

                      http://rhin.crai.archi.fr/rld/plugin_details.php?id=250 is the link to midline2wall.rb which looks to be exactly what you want.

                      Nothing is worthless, it can always be used as a bad example.

                      http://sdmitch.blogspot.com/

                      1 Reply Last reply Reply Quote 0
                      • T Offline
                        Thomas214
                        last edited by 24 May 2011, 20:07

                        @sdmitch said:

                        http://rhin.crai.archi.fr/rld/plugin_details.php?id=250 is the link to midline2wall.rb which looks to be exactly what you want.

                        Hmmm yes but how can I select multiple lines?

                        1 Reply Last reply Reply Quote 0
                        • T Offline
                          TIG Moderator
                          last edited by 24 May 2011, 20:17

                          Choose the Select tool.
                          Pick on an object [like a line].
                          Hold down Ctrl and pick on another object to add it to the selection.
                          Holding down Shift toggles an object in/out of the selection.
                          Holding down Shift+Ctrl and picking an object removes it from the selection.

                          With a face one click to pick face, two clicks to pick face and its edges and three clicks to select it AND all other edges and faces connected to it...

                          TIG

                          1 Reply Last reply Reply Quote 0
                          • T Offline
                            Thomas214
                            last edited by 25 May 2011, 14:59

                            @tig said:

                            Choose the Select tool.
                            Pick on an object [like a line].
                            Hold down Ctrl and pick on another object to add it to the selection.
                            Holding down Shift toggles an object in/out of the selection.
                            Holding down Shift+Ctrl and picking an object removes it from the selection.

                            With a face one click to pick face, two clicks to pick face and its edges and three clicks to select it AND all other edges and faces connected to it...

                            I was talking about the plugin πŸ˜„

                            1 Reply Last reply Reply Quote 0
                            • T Offline
                              TIG Moderator
                              last edited by 25 May 2011, 15:04

                              Why not preselect the lines BEFORE running the tool? Then you process the selection??
                              You can pick kinds of objects with a Tool using pickhelpers and add them to a 'selection' etc BUT it's pretty complex for a simple tool... πŸ˜’

                              TIG

                              1 Reply Last reply Reply Quote 0
                              • T Offline
                                Thomas214
                                last edited by 25 May 2011, 19:32

                                Can someone explain to me what this lines are for? I know they are for creating faces and offset lines but witch ones do what?

                                width, height = results
                                

                                pts = tl[0].vertices
                                i = 0
                                pts2 = []

                                pts.each do |pt|
                                pts2[i] = pt.position + [0 , 0 , results[1]]
                                i = i +1
                                end
                                line_copy = entities.add_line pts2

                                pts_copy = line_copy.vertices

                                i = 0
                                j = 0

                                new_face = entities.add_face(pts[0], pts_copy[0], pts_copy[1], pts[1])
                                new_face.pushpull (width / 2)

                                model.commit_operation
                                end

                                if( not file_loaded?("zid.rb") )

                                UI.menu("Plugins").add_item("Zid") { zid }
                                

                                end

                                file_loaded("zid.rb")

                                1 Reply Last reply Reply Quote 0
                                • T Offline
                                  TIG Moderator
                                  last edited by 25 May 2011, 20:28

                                  Thomas

                                  You really need to learn to crawl before you walk...
                                  You expect 'random lines of code' to be interpreted for you !
                                  Please structure your questions a little more friendly...

                                  width, height = results
                                  presumably this follows a UI.inputbox that results= ?
                                  There were two answers... width & height ??

                                  pts = tl[0].vertices
                                  sets an array called 'pts' to be the vertices related to the first element in the array tl - as it's not named logically that couls be a list of faces OR edges...
                                  i = 0
                                  sets a reference called 'i' to be 0 [this is used later in the '.each do' loop ???

                                  pts2 = []
                                  Makes an empty array called 'pts2' - presumably this will be filled with elements later...

                                  pts.each do |pt| pts2[i] = pt.position + [0 , 0 , results[1]] i = i +1 end
                                  This process the vertices in 'pts' [it would've been better to call it 'verts' ??]
                                  And for each vertex [pt !!!] it returns its position as a 3d-point BUT swaps its z-value for whatever the results[1] was = probably the 'height' so why wasn't 'height' used ??

                                  line_copy = entities.add_line pts2
                                  Tis makes a line in [whatever] 'entities' [is] using the array 'pts2' as the 2 points - these have had their z values set to 'height'...

                                  pts_copy = line_copy.vertices
                                  This sets the array 'pts_copy' to be the vertices used by the edge 'line_copy' ???

                                  i = 0 j = 0
                                  sets the references 'i' and 'j' to 0

                                  new_face = entities.add_face(pts[0], pts_copy[0], pts_copy[1], pts[1])
                                  This sets the reference 'new_face' to be the face [if any] that is made using the 4 points listed [if they are not coplanar it will fail!]

                                  new_face.pushpull (width / 2)
                                  It pushpulls the 'new_face' by half of the 'width [i.e. results[0] set earlier]
                                  Do NOT leave a gap between the 'pushpull' and its argument in parentheses [i.e face.pushpull(xxx) NEVER face.pushpull (xxx)]

                                  model.commit_operation end
                                  This closes the 'operation' and 'end's something - presumably the ' def zid' ?
                                  You must have a model.start_operation("MyTool") to 'close' it later...

                                  [ruby:1dtqmkst]if( not file_loaded?("zid.rb") )
                                  UI.menu("Plugins").add_item("Zid") { zid }
                                  end
                                  file_loaded("zid.rb")[/ruby:1dtqmkst]
                                  This makes the Plugins menu item a called '[ruby:1dtqmkst]Zid[/ruby:1dtqmkst]' which in turn runs the [ruby:1dtqmkst]def[/ruby:1dtqmkst] called '[ruby:1dtqmkst]zid[/ruby:1dtqmkst]' ???
                                  The [ruby:1dtqmkst]file_loaded[/ruby:1dtqmkst] parts need you to have a [ruby:1dtqmkst]require 'sketchup.rb'[/ruby:1dtqmkst] earlier and ensure that only one menu item appears even if you manually reload the script into the same SKP session...

                                  πŸ˜’

                                  TIG

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

                                  Advertisement