[Plugin] Hatchfaces (v1.8 beta) UPDATED 15-Dec-2012

Re: [PLUGIN] Hatchfaces!

Postby jolran » Sun Jul 17, 2011 8:36 am

Ver 1.3 added!

Hole "issue" should work. At least it does for me..

Note. Crosshatching does NOT work yet. Only menu items has been added. Layer Hatching now gets made with hatching in it.

What say you about choice of keeping Face and being able to add material?

This version needs to be tested. Have not recieved feedback from TIG about this update, and that makes me nervous :D
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [PLUGIN] Hatchfaces!

Postby sergey2402 » Sun Jul 17, 2011 10:29 am

Yes! It happened! :ecstatic:
Even if this is the final version of the plugin - that would be enough. :thumb:
Many thanks you and those who helped you in this difficult and very necessary work.

But I want to go further in my desires :oops:
How about this?
0

sergey2402 
 

Re: [PLUGIN] Hatchfaces!

Postby TIG » Sun Jul 17, 2011 12:39 pm

My comments...
Code like
jol_icons = Sketchup.find_support_file "Plugins/Hatchfaces/hatchfaces_s.png"etc would be safer as
jol_icons = File.join(File.dirname(__FILE__)), 'Hatchfaces', 'hatchfaces_s.png')
because some users don't/can't put their stuff in the main Plugins folder - Sketchup.find_support_file() is best avoided.

Also how about adding a Plugins [or Tools?] menu item so users can shortcut to it easily...

Enabling the crosshatch options is relatively straight forward...
I would have three questions Angle, Spacing, and Crosshatch?
If the user has said 'Yes' [default='No'] as second dialog opens - the Angle set to the first set angle*-1 and the same Spacing - OK to do crosshatching or Cancel to not do crosshatching...
To process the hatching I'd move that part of the code out to a sub-method that takes several arguments - e.g. def hatch(angle,spacing,gents)
Then if there's no crosshatching you call if once passing the three values so it knows what to make and where to put stuff [gents]... If there is crosshatching it makes the hatch-group and then a group inside that, it runs the hatch sub-method in that sub-group entities... and then adds another sub-group for the crosshatching and runs the hatch sub-method with the new values in the second sub-group entities. This way the two hatches are grouped as one, but in each their own sub-group, so one of them could be erased later if a user desired it...
0
TIG
User avatar
TIG 
Global Moderator
 

Re: [PLUGIN] Hatchfaces!

Postby jolran » Sun Jul 17, 2011 12:48 pm

It is not the final version :) There are things to fix. But I'm happy if the plugin is working for you, keep testing.
But I want to go further in my desires
How about this?


That can easy be made manualy in Sketchup if you use r.click intersect with selected(face and hatchgroup) so the hatched lines adds to the face. Then go into styles-> edit->profiles, and work with the setting there.

If you want border "thin" faces to be drawn, that's a different issue. This feature in code might not be that easy. I can have a look on that later. First I will try to get the crosshatching working.

One have to consider what feature to add or not. If that feature is 1 click in Sketchup, it might not be worth adding it to the code.
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [PLUGIN] Hatchfaces!

Postby jolran » Sun Jul 17, 2011 12:57 pm

some users don't/can't put their stuff in the main Plugins folder


Did not think of that :oops: good point.

Also how about adding a Plugins [or Tools?] menu item so users can shortcut to it easily


Yes, yes. That should have been done earlier.

'Yes' [default='No'] as second dialog opens


That's smart. I wasn't planning on doing it like that. But of course your way is more logical.
The code will need some work for this to happened. And I will try your method, if I can understand how to.

Thank you TIG I will work on you advice. :D
PS: If it looks like I make promises for new features to be added and expect TIG to come to the rescue, it's not like that.
I understand you have other business to attend to, and I'm greatful for all the help I get.
Thanks :!:
0
Last edited by jolran on Sun Jul 17, 2011 3:46 pm, edited 1 time in total.
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [PLUGIN] Hatchfaces!

Postby sergey2402 » Sun Jul 17, 2011 2:14 pm

jolran wrote:That can easy be made manualy in Sketchup if you use r.click intersect with selected(face and hatchgroup) so the hatched lines adds to the face. Then go into styles-> edit->profiles, and work with the setting there.

Yes. It can be done. But in this case I am losing one large face, and in return get a lot of small faces. Seems to me it is not very well.
0

sergey2402 
 

Re: [PLUGIN] Hatchfaces!

Postby jolran » Sun Jul 17, 2011 3:37 pm

Ok I see what you mean. I will take a look at that later on. My 1st thought is that it will not be that easy to do.
In native Sketchup just use offset, doing that in code is not that straightforward, from what I know.
Crosshatching is on the next TODO list, and TIG's recommendations for filepaths.
Could spend some time on those...
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [PLUGIN] Hatchfaces!

Postby kyyu » Sun Jul 17, 2011 8:30 pm

Is that duplicate line needed at line# 136 ?
0

kyyu 
 

Re: [PLUGIN] Hatchfaces!

Postby kyyu » Mon Jul 18, 2011 3:18 am

If you want to use the profile edge style. I was thinking you could keep the hatch faces and give them a transparent material. That worked. But then I thought, it's even simpler is just to hide them. I was worried that "unhide all" would unhide the faces, but it doesn't seem to effect the grouped faces.
Profiles & hidden hatch faces.gif
0

kyyu 
 

Re: [PLUGIN] Hatchfaces!

Postby jolran » Mon Jul 18, 2011 6:58 am

Is that duplicate line needed at line# 136 ?


No :o

Thank you for spotting that :thumb: Sometimes I get wierd results when I copy from ruby code editor and paste to Notepad ++.
Did not doublecheck the results well enough.
Note. It is AS ruby code editor, not Jims version. Is Jims more stable? I think it's a webdialogthingy-bug.

Thank you for keeping on testing stuff! It's of big help. How about a choice of keeping faces? With possibility to attach
material? That way one could use transparent material or whatever? Wonder if it is possible to use a dropdownlist getting the materials already added in the palette...

Anyway, must get this second crosshatching inputbox working correctly first, and do some fancy methoding.
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [PLUGIN] Hatchfaces!

Postby sergey2402 » Mon Jul 18, 2011 8:28 am

kyyu wrote:If you want to use the profile edge style.

Have I understood you correctly?
0

sergey2402 
 

Re: [PLUGIN] Hatchfaces!

Postby jolran » Mon Jul 18, 2011 8:57 am

Sergey. Yes that is the behavior of profiles. I can see the problem you are getting at.
If I put in an option for "keeping face", you will get that behavior WITHOUT manipulating the original selection. Hatched lines and faces in one separate group called "Hatching".
On top of that,(as TIG recommended), when you want crosshatching. There will be 2 groups in that "Hatching" group.
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [PLUGIN] Hatchfaces!

Postby TIG » Mon Jul 18, 2011 9:31 am

If you want 'thin' hatch lines you simply don't erase the faces within the hatching group[s] [i.e. keep the perimeter edges too]... then make a material if it doesn't exist called say 'HatchFaceMat' set it's color rgb=[255,255,255] and it's alpha=0 so it's completely transparent and apply that to all faces in the hatching group. If the Style has edges thin and profiles thick you get thin hatching.
It could even be a dialog option - Line-Style: 'Thin|Thick' - 'thin' where the faces are kept and made transparent OR 'thick' when the faces are erased...
0
TIG
User avatar
TIG 
Global Moderator
 

Re: [PLUGIN] Hatchfaces!

Postby jolran » Mon Jul 18, 2011 10:29 am

Thoose are exellent ideas! See if I can get this crosshatching work first :D
Getting some hard time putting structure to the code.

I have made "line hatches" and "intersection" into 2 different methods. A heck of lot of instance variables..
I was wondering if it would be easier to let the 1st hatches get done first. Then make the second inputbox pop up?
Then just call the methods on @gents and do some sort of grouping. This can probably be done in several ways.
Question is wich method gives best performance, regarding workflow, edge creation etc.
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [PLUGIN] Hatchfaces!

Postby jolran » Mon Jul 18, 2011 12:34 pm

Hmm I got the second inputbox poping up after line creating. It's quite instant response. So having the 2nd inputbox first
or after 1st hatching doesent really matter, "workflow-wise" that is. I wonder if it's a risky way of doing things.

Also wondering if I call on for 2nd Hatching, Using the line_making and intersect_method varibles in those are set
from earlier = @spacing and @angle. Could one use something like @spacing=20.to_l if not @spacing instead and just call the again in the method for crosshatching. Or would that mess up the default values, next time one run the plugin?

Could of course put the whole rest in the crosshatch method, bit doesent feel very clever..
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [PLUGIN] Hatchfaces!

Postby jolran » Mon Jul 18, 2011 1:11 pm

Or do the arguments in the definition heading like TIG said :D
def hatch(angle,spacing,gents)

Hehum.. I'm to new to this.
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [PLUGIN] Hatchfaces!

Postby ken » Mon Jul 18, 2011 8:28 pm

Jolran, just a thought. I see that you now have the hatch assigned to a separate layer. It occurred to me if the hatch patterns were assigned layers by the distance between hatch lines. You would have a layer for small hatch patterns, medium patterns and large patterns. This way if I make a scene or PNG file of a small section of the overall model, I would just have the small hatch patterns turned on. And if I was making a scene or PNG graphic for the larger section of the over all model, I would have the small and medium hatch patterns turned off. This may be over kill and too much additional work.

And I can just assign layers to the hatches I make according to my wants.

To you Jolran and all who are helping, thanks for the running tutorial in making a plugin. This continued conversation is helpful.

Thanks to all, for the plugin and the ruby help.
0
Fight like your the third monkey on Noah's Ark gangway.
User avatar
ken 
Premium Member
Premium Member
 

Re: [PLUGIN] Hatchfaces!

Postby kyyu » Mon Jul 18, 2011 11:46 pm

jolran wrote:Or do the arguments in the definition heading like TIG said :D
def hatch(angle,spacing,gents)

Hehum.. I'm to new to this.


I do it the way TIG is suggesting, passing arguments. I make instance varibles only when I really need to. I'm not saying I know the best way, but here is an example from a recent plugin of mine. Notice I have a @scale instance variable, but also a scale variable that's local to the scale method. What I'm doing in this paticular case is scaling back down. So I use "1/@scale", when calling the method. Also the method can't accicently change the instance variable, it's all local. Just to be clear, I'm not saying make instance variable and pass them to the method. It just happened that's the way I had it in that plugin. I think it was because, I had an initialize method at the begining and I wanted those values available to the main program method. So I made them class and instance variables.
Code: Select all
def main
  ...stuff
  scale(@@ent.to_a, (1/@scale.to_f))
  ...more stuff
end

def scale(ent, scale)
  tr = Geom::Transformation.new(scale)
  Sketchup.active_model.active_entities.transform_entities(tr,ent)
end
0
Last edited by kyyu on Tue Jul 19, 2011 12:22 am, edited 2 times in total.

kyyu 
 

Re: [PLUGIN] Hatchfaces!

Postby kyyu » Mon Jul 18, 2011 11:52 pm

sergey2402 wrote:
kyyu wrote:If you want to use the profile edge style.

Have I understood you correctly?

Yes, just hide or apply a transparent material to all the many small faces in the hatch group. Very easy to do with ruby.
0
Last edited by kyyu on Tue Jul 19, 2011 12:01 am, edited 1 time in total.

kyyu 
 

Re: [PLUGIN] Hatchfaces!

Postby kyyu » Tue Jul 19, 2011 12:00 am

jolran wrote:
Is that duplicate line needed at line# 136 ?


No :o

Thank you for spotting that :thumb: Sometimes I get wierd results when I copy from ruby code editor and paste to Notepad ++.
Did not doublecheck the results well enough.
Note. It is AS ruby code editor, not Jims version. Is Jims more stable? I think it's a webdialogthingy-bug.

Thank you for keeping on testing stuff! It's of big help. How about a choice of keeping faces? With possibility to attach
material? That way one could use transparent material or whatever? Wonder if it is possible to use a dropdownlist getting the materials already added in the palette...

Anyway, must get this second crosshatching inputbox working correctly first, and do some fancy methoding.

I don't have any problems with copy/paste from Jim's Ruby Web Console (older one, not his newer one).

It's up to you about the features, keeping faces, or materials, ..etc. I don't have any preference as, I don't need to hatch stuff.

-Kwok
0

kyyu 
 

Re: [PLUGIN] Hatchfaces!

Postby kyyu » Tue Jul 19, 2011 12:50 am

kyyu wrote:
jolran wrote:Or do the arguments in the definition heading like TIG said :D
def hatch(angle,spacing,gents)

Hehum.. I'm to new to this.


I do it the way TIG is suggesting, passing arguments. I make instance varibles only when I really need to. I'm not saying I know the best way, but here is an example from a recent plugin of mine. Notice I have a @scale instance variable, but also a scale variable that's local to the scale method. What I'm doing in this paticular case is scaling back down. So I use "1/@scale", when calling the method. Also the method can't accicently change the instance variable, it's all local. Just to be clear, I'm not saying make instance variable and pass them to the method. It just happened that's the way I had it in that plugin. I think it was because, I had an initialize method at the begining and I wanted those values available to the main program method. So I made them class and instance variables.
Code: Select all
def main
  ...stuff
  scale(@@ent.to_a, (1/@scale.to_f))
  ...more stuff
end

def scale(ent, scale)
  tr = Geom::Transformation.new(scale)
  Sketchup.active_model.active_entities.transform_entities(tr,ent)
end


Ok, that was a strange example. How about this one, more applicable to your case.

Code: Select all
def main
  @spacing1=20.to_l if not @spacing1      
  @spacing2=20.to_l if not @spacing2
    ...some stuff
  scale(ent, @spacing1)
  scale(ent, @spacing2)
    ...more stuff
end

def scale(ent, scale)
  tr = Geom::Transformation.new(scale)
  Sketchup.active_model.active_entities.transform_entities(tr,ent)
end
0

kyyu 
 

Re: [Plugin] Hatchfaces (v1.3)

Postby Jim » Tue Jul 19, 2011 2:40 am

kyyu wrote: Also the method can't accicently change the instance variable, it's all local.


Careful here. It is because the type of the parameter is a Float that is can not be accidentally changed. If @scale were almost any other type of object, the local variable scale would be a reference to the passed-in object and changing scale could change @scale.

It doesn't help to think of Ruby variables a containers for values. Ruby variables are pointers to objects in the computer memory. Here's my attempt at a graphical explanation. It's an over-simplification because different types are treated differently. Floats and Fixnums are not passed by reference, for example. You also need to be aware of the circumstances when a new object is created, or the current object is modified.

The local variable a refers to the same String object as s.

RubyReferences.png
0
Hi

Jim 
Global Moderator
 

Re: [Plugin] Hatchfaces (v1.3)

Postby kyyu » Tue Jul 19, 2011 4:38 am

Jim,

Good point. I knew of variables being a reference to an object, but still confusing at times.
0

kyyu 
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Tue Jul 19, 2011 7:47 am

Hi Ken. Thoose layers thing are very good ideas! They may or may not be hard to do, not sure yet. But IF they get implemented one could have them as an option? I don't think it should be default behavior of the plugin.

thanks for the running tutorial in making a plugin. This continued conversation is helpful


I thought I was babbling nonsense :D But if you like it, I will continue to report and discuss openly.

Kyyu. Many thanks again for your advice :thumb: I think I am at sleep when you guys are active here on the forum.
Different timezones.

I will head for doing as you advice. Using @varibles just when needed. I tried the opposit, but it got messy, and inefficient. Your code looks well structured.

When ordering methods and things right now, I must also think a little bit forward about the next steps.
Added features like other hatch-types, and bugtracking etc. The "face-creating" part must be a method or a block itself(sort of main code), if I am going to use it with other hatch-types. The subroutine for crosshatches might get a little repetitive code, not sure yet. IF I will be able to do other hatch-types, it might be a good idea to split up thoose, AND the line-hatches in different modules. Calling from the main "face-creating" script. Eventually I might do a fast version
of crosshatching so you have something to try.

They say Ruby is an easy language to learn. I haven't got any experience of other languages, so I can't tell.
However there seams to be many ways to do things in Ruby, and that can get confusing for a newbie.

Jim. I like your graphic. Visual guides like that is very helpful.
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Wed Jul 20, 2011 9:26 am

Hi. I trying to figure out the "clever" way to setup the structure of the code. If anyone has any comments, I would be most greatful. Having decision anxiety.

I am little afraid to destroy the structure of current code and getting flamed for doing something inappropriate.
I'm trying to avoid using @varibles everywhere. I get the impression that could give some troubles later on.
The simplest way would of course be to repeat the whole last part(linecreation, intersection) without nesting so many methods, but that would probably be cheating. However the script is not that long so I guess it would not be a catastrophy to repeat things.
Also having trouble grouping. Where as we will have the structure:
(maingroup)/(hatchgroup1) (hatchgroup2)

Questions are. Should "face-cloning" be a separate method?
Should one create a method for only using 1 inputbox getting values twice?(2 promts, 1 box) OVERKILL?
Another possiblities is to recreate the linehatching and intersection in a submethod calling on @gents?
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby TIG » Wed Jul 20, 2011 10:24 am

Collect all of your dialog data at the very start.
If the 1st dialog has 'Yes' for 'Crosshatching?' then a second dialog opens with the -ve version of the angle and the same spacing - the user can change these if desired and press OK, or Cancel to skip crosshatching.
After the dialogs you use the data to make the grouped hatching.
If there is no crosshatching then the code is as currently.
If there is crosshatching then you simply run the coder twice.
However, as explained before - you remove the hatch code into a sub-def method where you pass values this
def hatch(angle, spacing, gents)
where 'gents' is ANY entities set that's passed to it [I left it called that because when you move the code into the method the name can remain - however, note how the angle/spacing variables can NO LONGER be @ variables inside the hatch def because they can be different @'s depending on whether you are making a hatch or a crosshatch from dialog input!]
and to use for the non-crosshatched version
self.hatch(@angle, @spacing, gents)
where you pass the @angle/@spacing variables
and 'gents' is entities of the 'group' that contains the hatching.
When you have crosshatching you first make 'group' to contain the TWO groups needed.
Then add two sub-groups
hgroup=gents.add_group()
cgroup=gents.add_group()

here 'hgroup' will contain the hatching and 'cgroup' the crosshatching
To make then first make the hatching
self.hatch(@angle, @spacing, hgroup.entities)
note how we have passed a different entities set this time
To make the other part of the crosshatching use
self.hatch(@cangle, @cspacing, cgroup.entities)
Note here we have used different @ variables for the crosshatching - derived from the 2nd dialog AND we use the other entities set too...
By using the sub-def method for 'hatch' you can reuse the code for hatching or crosshatching as the values are remembered separately as @'s for the two types and if there is crosshatching then a simple extra step of making sub-groups inside the main hatch-group is all you need...
0
TIG
User avatar
TIG 
Global Moderator
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Wed Jul 20, 2011 10:44 am

Thank you TIG! Much appreciated, was a bit stuck.

I think I understand better now what you meant before. Before when you said "code into a sub-def method", I thought you meant ADDING a method or "doubbling" the code. There's where I was lost, should have asked earlier for help but pride got in the way.

Very clever solution! And probably quite natural solution for some off you guys in here :oops:

I will digest this and continue. Thanks again.
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby sergey2402 » Fri Jul 22, 2011 2:03 am

Unexpected results of hatching.
All hatches are made with the same distance and with the same angle.
Maybe is necessary to select not only the face, but also the baseline?
(And maybe the baseline can be anywhere in the drawing, not necessary on the face?)
0

sergey2402 
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Fri Jul 22, 2011 1:27 pm

Hmm interesting.. I get the same result. Very disturbing. This must be fixed I agree!



I was thinking of modifying TIG's script later on so it will copy lines in 2 directions, from center-> out. Or at least be aligned from center. Maybe that will take care of things. Although I have the feeling it has something to do with how the diagonal is created and vector comparison. Eg that it has to do with vertices 0 and 1 (vectorcreation). Depending of how the boundingbox is created, those points will be on different positions.

At the moment I'm trying to fix the crosshatching(having some difficulties), so I will look at this later.

Thank you Sergey for experimenting and notifying this!
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby TIG » Fri Jul 22, 2011 3:38 pm

Currently the hatching's rotation is calculated relative to the vector formed by the face's first edge - and this is clearly variable.
A consistent and simple way would be to make it relative the the X-axis that has been transformed to lie on the face.plane ???
0
TIG
User avatar
TIG 
Global Moderator
 

SketchUcation One-Liner Adverts

by Ad Machine » 5 minutes ago



Ad Machine 
Robot
 

PreviousNext


 

Return to Plugins

cron

Who is online

Users browsing this forum: jsteacy, SolehNdin, visualdesignms and 18 guests

Visit our sponsors: