Ruby plugin?
-
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
-endI would like to se what SketchUp would do with the corners of the
lines are diferent angles. -
Maybe a little concept image, because this plug is maybe yet existing

-
@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.
-
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...

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

-
@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 themodel.selectioncontains some connectedEdges (>>>path)
. use aUI.inputbox()dialog to get theheight
. add a rectangle_face atstart.position(p0) of first edge in path, calculating the other three points asp0=p1.clone; p1.z=p1.z+heightetc usingrectangle_face=entities.add_face(p0,p1,p2,p3)
. use rectangle_face.followme(path) to extrude the new face along the path.
. done -
@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 themodel.selectioncontains some connectedEdges (>>>path)
. use aUI.inputbox()dialog to get theheight
. add a rectangle_face atstart.position(p0) of first edge in path, calculating the other three points asp0=p1.clone; p1.z=p1.z+heightetc usingrectangle_face=entities.add_face(p0,p1,p2,p3)
. use rectangle_face.followme(path) to extrude the new face along the path.
. doneHmmm what if I useEdge.all_connectedthen the code from the the plugin push/pull face I have?
-
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.selectionmodel = 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"
endfaces = []
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_operationend
if( not file_loaded?('Wall.rb') )
UI.menu('Plugins').add_item('wall') {wall }
endfile_loaded 'Wall.rb'
I think I have to create a new entety for the faces theat are created to use it in push/pull ?
-
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!

-
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.
-
@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?
-
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 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

-
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...
-
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 = resultspts = 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 pts2pts_copy = line_copy.vertices
i = 0
j = 0new_face = entities.add_face(pts[0], pts_copy[0], pts_copy[1], pts[1])
new_face.pushpull (width / 2)model.commit_operation
endif( not file_loaded?("zid.rb") )
UI.menu("Plugins").add_item("Zid") { zid }end
file_loaded("zid.rb")
-
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 0new_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.eface.pushpull(xxx)NEVERface.pushpull (xxx)]model.commit_operation end
This closes the 'operation' and 'end's something - presumably the 'def zid' ?
You must have amodel.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...
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better π
Register LoginAdvertisement