How do you make plug-ins for sketchup
-
...but I DID manage to get it to reverse faces
model = Sketchup.active_model selection = model.active_entities # - - - - - - - - - - - - selection.each { |entity| if entity.typename == "Face" entity.reverse! end }
Why does reverse! work, but not clear! ?
-
give em some credit chris, i had to type 'selection' as well
-
.clear! will empty an array, it does not erase anyhing from the model. Glad you found the erase! method.
You can also go through and put everything to erase into an array of entities, then use
entities.erase_entities my_array_of_entities
to delete them all in one shot. Apparently some people have ran into bugsplats when erasing entities one at a time like you've done in your example.
Chris
-
...Nevermind. I found in the parent directory; erase! ( How didn't I notice that?)
model = Sketchup.active_model selection = model.active_entities # - - - - - - - - - - - - selection.each { |entity| if entity.typename == "Face" entity.erase! end }
-
@remus said:
give em some credit chris, i had to type 'selection' as well
Heh, I didn't notice that you switched it around to use the selection set instead of all entities. Well done Now make it smart enough to use the selection set if it exists, and if not, use all entities.
Chris
-
It probably got overrun by new posts, so here's my original question about translation
my main issue (which I've been trying to figure out) is how to use the cursor to set the transformation, like the move tool does; click and drag. I thought I saw something on it once, but am still confused.
Your last post, Chris: Ah, and that's easy.
model = Sketchup.active_model if model.selection == true selection = model.selection else selection = model.active_entities end # - - - - - - - - - - - - selection.each { |entity| if entity.typename == "Face" entity.erase! end }
...well, sort of easy. It seems to be buggy, and deletes random faces, if anything is selected.
How do you put all the entities into an array again? -
just learnt an important lesson about using recursion in combination with a messagebox.
model = Sketchup.active_model entities = model.selection entities.each { |e| if e.typename == "Curve" edgnum = e.count_edges UI.messagebox "edgnum.to_s" else UI.messagebox "Please select a curve" end }
10 points if you can spot what'll happen (without running it!)
-
it counts the edges of any selected curve, and displays them as a string, in a message box. If 20 curves were selected, then 20 different message boxes, with the amount of edges in each curve, is shown, one after another each time you click enter.
-
Could well do, but it's worse than that...points still up for grabs.
-
Close enough, it will keep saying 'please select a curve' until you force quite SU, as it keeps going through the model.
-
oh, I forgot to mention that if no curve is selected, it says the message "Please select a curve".
Oh, and I'm pretty sure you wrote part of your code wrong, which could cause... hmmm.... I don't know... O.K., I'm testing it
-
No, just tested it, I think it says it once for every edge in the selected curve/curves.
-
thats interesting, more experimenting is needed!
edit: perhaps in the morning. Its getting a bit late now
-
model = Sketchup.active_model selection = model.selection # - - - - - - - - - - - - selection.each { |entity| if entity.typename == "Face" UI.openURL "http://www.sketchucation.com/forums/scf/" end }
-
Well, this is not the problem in question, but a selection will not contain an entity "Curve" for one thing. It contains edges though, and they might belong to a curve. So you can test if
e.typename == "Edge"
and then if true test ife.curve != false
.(And this gets back to what Adam was bringing up and Jim also talked about in another post. I think instead of testing if each entity is an edge (which is how I still do it), perhaps test each entity if its part of a curve. (I don't know the best code to do that, but its something to think about).)
I think that a selection can only hold DrawingElements (which does not include curves). I'm not sure why though.
Chris
-
It probably got overrun by new posts, so here's my original question about translation
my main issue (which I've been trying to figure out) is how to use the cursor to set the transformation, like the move tool does; click and drag. I thought I saw something on it once, but am still confused.
-
Oh, and BTM, in my opinion, as a fairly new Ruby scripter, making any script that interacts with the mouse is a bit challenging, especially at first. It requires making a class tool, and instantiating the tool, and making good use of methods, including pre-defined methods from the API. I'll try to write up a template for creating a new tool. But that is really a tutorial all of its own. (BTW, I said before I was working on a tutorial for beginning ruby, and its been put on hold because the methods for wiritng a tutorial for SketchUcation are currently not working....so I have to wait for the management to fix it.)
If possible, I would avoid the mouse controlling the transform idea.
Chris
-
To be more specific, I don't understand how to implement the inferencing system of SU. I have a sfew scripts that use inferencing, but I literally copied and pasted portions of those scripts from the query tool example that comes with SU. If you want to being working with inferencing, check out that tool.
-
@adamb said:
[Slightly OT]
I've always been very careful to use Object#kind_of? rather than Object#class so that code works with any derived classes too. (Rather than just testing for an explicit class).
Good idea? Bad idea?
Adam
It's good when you explode a Group to reject things are not Drawinglements. Sometimes I get Loops in the exploded collection of entities.
ents = group.explode ents.reject!{ |e| unless e.is_a? Sketchup;;Drawingelement }
-
@chris fullmer said:
(And this gets back to what Adam was bringing up and Jim also talked about in another post. I think instead of testing if each entity is an edge (which is how I still do it), perhaps test each entity if its part of a curve. (I don't know the best code to do that, but its something to think about).)
ChrisLook again at the Selection class, there are a couple methods that can help determine of a selection contains a Curve:
.is_curve?
and.single_object?
Advertisement