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

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Fri Jul 22, 2011 4:17 pm

He he. This is bothering me badly. Most annoying.
One of my first ideas when I thought about this plugin was to let the user select from a scroll list, Front, Right, Left Back view etc, and have determined pt from bounds according to selection. That of course is not a flexible and smart solution. But maybe viable? Will be troublesome for in between angles.. It's not a good solution...

relative to the vector formed by the face's first edge


Oh, yeah that's right :oops:


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


Do you mean create edge first on X and move to face.plane?

Or maybe select a reference edge as Sergey idea?
0
Last edited by jolran on Fri Jul 22, 2011 4:43 pm, edited 1 time in total.
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby TIG » Fri Jul 22, 2011 4:42 pm

At the moment the ;reference-edge' is actually the vector from the face's fist vertex to the second vertex.
This bound to be on the face.plane as all vertices are coplanar.
To make another vector to use instead you can make that vector and project it onto the face.plane and use that... So
p0=face.vertices[0].position
p1=p0.clone
p1.x=p1.x+1
p1=p1.project_to_plane(face.plane)
vector=p0.vector_to(p1)

This projects the equivalent of a vector [1,0,0] onto the face's plane...
That vector can now be used to base the hatch angle upon...
0
TIG
User avatar
TIG 
Global Moderator
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Fri Jul 22, 2011 4:58 pm

Genious TIG!

I think I got it right. It work for me in a few tests.

Like this, no?

Code: Select all
pt=face.vertices[0].position
      p1=pt.clone
      p1.x=p1.x+1
      p1=p1.project_to_plane(face.plane)
      ve=pt.vector_to(p1)
      bb=face.bounds
      di=bb.diagonal
      po=pt.clone


I mean is that correct for an update, cause this problem is(was) irritating.
0
Last edited by jolran on Fri Jul 22, 2011 5:19 pm, edited 1 time in total.
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Fri Jul 22, 2011 5:09 pm

Hmm, no? I must have gotten it wrong. Doesent work in Y,Z axis.
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby TIG » Fri Jul 22, 2011 6:15 pm

You need to trap for the case when the X-axis is parallel with the palne and then use another axis - i.e. offset the y instead of the x value of p1...
To do this get the n=face.normal and then use the alternative vector [offset in y] if n.x.abs==1 or n.z.abs==1
etc...
0
TIG
User avatar
TIG 
Global Moderator
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Fri Jul 22, 2011 6:24 pm

Hmm I will try..

Where do you learn all these commands?? :D It feels like I'm missing some information source(exept from this forum).

BTW won't there be a conflict of axes if one for ex. have a face rotated 45 degrees?
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby TIG » Fri Jul 22, 2011 6:34 pm

No.
The problem arises if you try to project a p1 onto a face with a plane that is square to the x-axis or flat to it, as that p1 is then back on p0 and the vector can't have a zero length!
0
TIG
User avatar
TIG 
Global Moderator
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Fri Jul 22, 2011 7:06 pm

vector can't have a zero length!


That I can understand. Alright, I will have a go at it. I'm not sure a fully grasp this :oops:
This is more and more your plugin, it's starting to be too complicated for me. My level is more icons and stuff.
Maybe one day I can contribute more.

Thanks for your invaluable help TIG :thumb:
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby kyyu » Fri Jul 22, 2011 10:35 pm

jolran wrote:Hmm I will try..

Where do you learn all these commands?? :D It feels like I'm missing some information source(exept from this forum).

You have to learn the ruby language itself. I'm lacking in this area, too.
0

kyyu 
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Sat Jul 23, 2011 8:03 am

You have to learn the ruby language itself


Yeah, you are right. Working on that.

Good news is the code seams to be working for sorting irregular faces and hatching.
Code: Select all
      p1=pt.clone
      p1.x=p1.x+1 # X value = x axis needs to be replaced if using another axis
     
      p1=p1.project_to_plane(face.plane)
      ve=pt.vector_to(p1)
      bb=face.bounds
      di


So something like this does not do the trick yet. Will work on it..

Code: Select all
 p1.each {|e|e.z+1 if face.normal.z.abs==1
      e.x+1 if face.normal.x.abs==1
      e.y+1 if face.normal.y.abs==1}
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby TIG » Sat Jul 23, 2011 10:44 am

Read this and try to understand...
Code: Select all
p0=face.vertices[0].position
p1=p0.clone
if face.normal.x.abs>0.9999
  p1.y=p1.y+1
else
  p1.x=p1.x+1
end#if
p1=p1.project_to_plane(face.plane)
ve=p0.vector_to(p1)
### etc
This should always result in a 've'ctor with a non=zero length.
To test it set up a cube and test add temporary 'puts' into the code after ve=
puts face.normal
puts ve.length
:geek:
0
TIG
User avatar
TIG 
Global Moderator
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Sat Jul 23, 2011 12:54 pm

Wow, thanks! So if I understand it correctly one do only need to compare x to y to get the required results. Where if>0,9999 switches to other axis-comparison=under1? Clever.

It works for faces without holes if I switch values p0 to pt, with your last posted code.
Or do you mean p0 to be po, (typo)? Cause that is a whole different thing. That does not makes sence though, wonder why I think that...

I will try that meanwhile..Se if holes get fixed.

po=pt.clone:
Code: Select all
ps=pt.offset(vp)
        pe=pt.offset(vp.reverse)
        gents.add_line(ps,pe)
        pt.offset!(vs,spacing)
        ps=po.offset(vp)
etc
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Sat Jul 23, 2011 1:37 pm

Anyway heres how I implemented your code, between ents erase(facestogo) and intersection. It does not work on faces with holes, as mentioned.
Is there a clash with 2 pt.clones? Maybe I HAVE put your code in wrong places. I will continue..

Code: Select all
bb=face.bounds
      di=bb.diagonal
       pt=face.vertices[0].position
        p1=pt.clone
     if face.normal.x.abs>0.9999
      p1.y=p1.y+1
     else
      p1.x=p1.x+1
     end#if
      p1=p1.project_to_plane(face.plane)
       ve=pt.vector_to(p1)
        po=pt.clone
      tr=Geom::Transformation.rotation(pt,face.normal,@angle.degrees)
       vp=ve.transform(tr)
        vp.length=di*2
         vs=face.normal.cross(vp) #spacing vector perpendicular to hatch line
         tot=0
      until tot>=di*2
        ps=pt.offset(vp)
         pe=pt.offset(vp.reverse)
          gents.add_line(ps,pe)
           pt.offset!(vs,spacing)
            ps=po.offset(vp)
           pe=po.offset(vp.reverse)
          gents.add_line(ps,pe)
         po.offset!(vs.reverse,spacing)
        tot=
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Sat Jul 23, 2011 1:48 pm

May have found something? Commented out the last parts. Line hatching and intersection.
The results of faces with holes is a group(clone) with reversed face? Faces without holes is created as expected.
Since using face.normal that might (in my theory logic) pose some trouble?

Updated Hmmm, no. Grr. Did not matter if faces was reversed or not. Problem remains..

This code reverses the faces anyway.
Could be useful later on, but it will reverse ALL faces, wich is not useful right now. Faces without holes do not need reversing.

Code: Select all
faces2=[]
      gents.each{|e|faces2 << e.reverse! if e.class==Sketchup::Face
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby TIG » Sat Jul 23, 2011 3:14 pm

Perhaps instead of pt=face.vertices[0].position it might be better to use pt=face.outer_loop.vertices[0].position
0
TIG
User avatar
TIG 
Global Moderator
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Sat Jul 23, 2011 3:21 pm

It does not work :(

However i noticed that "face" entity gets erased after erase(facestogo) if it has holes in it. Not if it's a square for ex!

I used puts face after loop face erasing..

So do face.plane have something to refere to when there are holes? Or is the variabel set earlier?
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby TIG » Sat Jul 23, 2011 3:27 pm

Erase the faces after you've set the points/vector etc - you can't get the plane or normal of an erased face!
0
TIG
User avatar
TIG 
Global Moderator
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Sat Jul 23, 2011 3:30 pm

AHA!!

So even if I am stupid enough to make that misstake, I noticed that in fact that was the error going on?

I'm making progress!! :D

Thanks TIG. I will try to fix it.
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Sat Jul 23, 2011 3:56 pm

The "earliest" place where I can insert gents.erase_entities(faces2go) without erasing the access to face.plane is:

Code: Select all
tr=Geom::Transformation.rotation(pt,face.normal,@angle.degrees)
       vp=ve.transform(tr)
        vp.length=di*2
         vs=face.normal.cross(vp) #spacing vector perpendicular to hatch line
          gents.erase_entities(faces2go)
         


The result is not correct. Missing edges and too short.

Is face.plane or any command referring to "face" using the inner-hole faces, perhaps?
Should one use gents.entities.face(or something to retrieve the face.entity in gents) instead of just face?
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby TIG » Sat Jul 23, 2011 4:10 pm

You can set variables plane=face.plane and normal=face.normal and pt=face.outer_loop.vertices[0].position, then face.erase! - the variables are still remembered... then use them later as needed ?
0
TIG
User avatar
TIG 
Global Moderator
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Sat Jul 23, 2011 5:05 pm

You can set variables plane=face.plane and normal=face.normal and pt=face.outer_loop.vertices[0].position, then face.erase!



Ok. You mean before faces2go << face? After erase.faces2go I was going to define the
linehatching as a method for crosshatching, as we discussed earlier. They will have to be instance.variables then or do I pass all of them into the argument-list when calling the method?
That's why I was wondering if one could use face from gents.entities, since gents will be passed into the args-list anyway.

Or did you originaly mean I should put the whole operation into a method for crosshatching?

I'm sorry if I sound confused. :oops: But I am.
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby TIG » Sat Jul 23, 2011 5:21 pm

All this part is trying to do is set the vector from which you will set the angle for the hatching.
At the moment it's set from the vertices [0] to [1] vector which varies, so to fix it I suggested a way of projecting the x-axis onto the face.plane and getting a vector from that to use instead [with changes for a plane that doesn't play nicely with the x-axis to give a valid vector...
You get all of this from the original face NOT the temporary face ??
0
TIG
User avatar
TIG 
Global Moderator
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Sat Jul 23, 2011 5:59 pm

You get all of this from the original face NOT the temporary face!


Yes, that part I understand(hopefully) what it was about to fix for problems.

However when you said I can't get the plane or normal of an erased face, I thought
order matters. I think my english is a bit bad, I don't understand everything right away. Apologize for that.


Lets say I use ORIGINAL "face" for face plane, I still must pass "face" on in the argument-list if I am going to
have following script setup, wich will be needed for crosshatching later on, no?

Feels like I'm doing some fundamential misstake here.

(edited)It should be "face" in the argument list. NOT faces.
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Sat Jul 23, 2011 6:18 pm

Think I got! @face=gents.add_face etc..in tha Face creating-part And use @ varibles in the code below seams to do the trick!
It works on holes anyway. Don't know how kosher that is TIG? It would get into the linehatching method.
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Sat Jul 23, 2011 6:24 pm

Works with holes..
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.3)

Postby TIG » Sat Jul 23, 2011 6:34 pm

It seems to work now :D - is the angle always more logically oriented to an axis rather than an edge of the face ??

As @face is a reference to a face before you run hatch and you erase it afterwards you don't really need to pass [@]face as an argument because @face is an instance variable read across methods, but if you do it'll probably still work... ;)

Also you [mistakenly] show a space in the def name AND started it with CAPITAL letter - use 'linehatch' or 'lineHatch' or simply 'hatch' or even 'make_hatching' etc which are all just fine... call it with self.hatch(aa, bb, cc) or whatever it's called...

Use a @xxx variable where you want to use it across several methods [def's]
Pass arguments to a method when you want to reuse the method with changes to arguments without using @xxx as you want to keep that for later - e.g. the @angle etc IS reused next time you use the dialog so when you pass angle again you use @cangle for the crosshatching angle but want to use the same method again... :geek:
0
TIG
User avatar
TIG 
Global Moderator
 

Re: [Plugin] Hatchfaces (v1.3)

Postby jolran » Sat Jul 23, 2011 6:43 pm

Thanks for all your help and advice TIG!

I will follow them.

is the angle always more logically oriented to an axis rather than an edge of the face ??



Don't know :D

So I'll update the plugin then? All OK?
Will work on the crosshatching later. I think it is a good idea to get this fix out, so people can use this plugin
more properly.

This coding-testing burns more calories than a 2hours jogging in the forest :D
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.4)

Postby TIG » Sat Jul 23, 2011 6:56 pm

Test it on a cube's faces and a copy/copies of that cube rotated oddly in 3d to see what the hatching angles look like ??
0
TIG
User avatar
TIG 
Global Moderator
 

Re: [Plugin] Hatchfaces (v1.4)

Postby jolran » Sat Jul 23, 2011 7:06 pm

Crap! It always hatches in the axis. Doesent matter if the cube is rotated or not.

OK. for tomorrow then... sigh... I hope you will come to the rescue again :D
I'm guessing -transformation to axis something?

I will never get to experiment with NEW features!!!

It put the ver 1.4 update up anyway. Think it's better than it was before.
0
User avatar
jolran 
PluginStore Author
PluginStore Author
 

Re: [Plugin] Hatchfaces (v1.4)

Postby sergey2402 » Sat Jul 23, 2011 10:28 pm

It's just great! :berserk:
I see - this is a very difficult job.
But now I am a real bad guy. I see only flaws! :?
(I’m sorry :oops: )
0

sergey2402 
 

SketchUcation One-Liner Adverts

by Ad Machine » 5 minutes ago



Ad Machine 
Robot
 

PreviousNext


 

Return to Plugins

Who is online

Users browsing this forum: No registered users and 5 guests

Visit our sponsors: