.NET

.NET

Reply
New Member
kaufmann
Posts: 1
Registered: ‎01-29-2008
Message 1 of 9 (284 Views)

how to get the normalvector of a closed pline with arcs

284 Views, 8 Replies
06-15-2012 02:21 AM

hi,

we develop a cam-function with c-sharp and like to get the turningdirection of a closed pline with arcs. As arcs can "overtake" points things are getting a bit difficult. Is there a way to read the normalvector of a closed pline?

 

thanks for help,

Stefan

*Expert Elite*
Hallex
Posts: 1,569
Registered: ‎10-08-2008
Message 2 of 9 (281 Views)

Re: how to get the normalvector of a closed pline with arcs

06-15-2012 04:30 AM in reply to: kaufmann

 

Do you mean:

Vector3d vec=pline.Normal;

 

~'J'~

 

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
*Expert Elite*
chiefbraincloud
Posts: 752
Registered: ‎02-13-2008
Message 3 of 9 (264 Views)

Re: how to get the normalvector of a closed pline with arcs

06-15-2012 08:48 AM in reply to: kaufmann

I'm not sure what you mean by arcs "overtake" points, but I think what you are trying to do is find the "Winding" of the polyline.  You just traverse the polyline, getting each segment, and add up the angles between each adjacent segment (or the Start tangent and end tangent of the arcs).  The result should come out to 2 Pi or -2 Pi, telling you whether the polyline runs CounterClockwise or Clockwise, respectively.

Dave O.                                                                  Sig-Logos32.png
Member
schwungrad
Posts: 3
Registered: ‎06-20-2012
Message 4 of 9 (225 Views)

Re: how to get the normalvector of a closed pline with arcs

06-20-2012 03:14 AM in reply to: chiefbraincloud

Thank you for the answers!


Hallex wrote:

Do you mean:
Vector3d vec=pline.Normal;


In fact I need a function to get the orientation (clockwise or counterclockwise) of a polyline with respect to the xy-plane. In other cad-programs (e.g. Rhino) you can check the z-coordinate of the normalvector (positive or negative) to get the orientation but in AutoCAD this z-coordinate seems to be always positive.

Is there any build-in AutoCAD function to get the orientation of a curve?


chiefbraincloud wrote:

You just traverse the polyline, getting each segment, and add up the angles between each adjacent segment (or the Start tangent and end tangent of the arcs).  The result should come out to 2 Pi or -2 Pi, telling you whether the polyline runs CounterClockwise or Clockwise, respectively.


I already found this algorithm but it doesn't work in particular cases. Maybe you can give me some advice.


Problem 1:
When the polyline contains an arcsegment with an angle greater than Pi the orientation is fliped or the angle sum is zero. e.g.:

01a.png


I solved this problem by dividing this arcs:

01b.png


Problem 2:
I don't know how to handle parallel tangents with opposite directions. e.g.:

 

02.png

Valued Mentor
gasty1001
Posts: 471
Registered: ‎04-11-2010
Message 5 of 9 (216 Views)

Re: how to get the normalvector of a closed pline with arcs

06-20-2012 12:56 PM in reply to: schwungrad

Hi, 

 

It's very easy to check if a closed polyline is ccw or cw, you need to check what it's called the signed area of a polygon, check this link: http://demonstrations.wolfram.com/SignedAreaOfAPolygon/ , if the signed area is positive then is cw else ccw.

 

Gaston Nunez

 

 

 

 

Member
schwungrad
Posts: 3
Registered: ‎06-20-2012
Message 6 of 9 (200 Views)

Re: how to get the normalvector of a closed pline with arcs

06-20-2012 10:57 PM in reply to: kaufmann

For linear plines is very easy to find the orientation with the signed area.

 

But how I handle arc segments?

Moderator
Alexander.Rivilis
Posts: 1,406
Registered: ‎04-09-2008
Message 7 of 9 (194 Views)

Re: how to get the normalvector of a closed pline with arcs

06-21-2012 12:33 AM in reply to: schwungrad

Try to linearize polyline with step of parameter equal 0.5

 

 


Пожалуйста не забывайте про Утвердить в качестве решения! Утвердить в качестве решения и Give Kudos!Баллы
Please remember to Accept Solution! Accept as Solution and Give Kudos!Kudos

*Expert Elite*
chiefbraincloud
Posts: 752
Registered: ‎02-13-2008
Message 8 of 9 (183 Views)

Re: how to get the normalvector of a closed pline with arcs

06-21-2012 08:47 AM in reply to: schwungrad

I was too busy yesterday to try my function against your two examples, I might have some time this afternoon, but I think you have done something wrong with the first example.  You should be getting -270 for the arc which makes the sum -360.  I'm pretty sure my routine would get that one right, but my routine would never see a polyline that looks like that.

 

Your second example is intriguing, but certainly nothing I would expect to see in my routine.  My routine has a specific purpose, and that example is an impossibility for that purpose.

 

Edit: For that matter, you said your routine was a Cam function, right?  Doesn't that mean you also would not see a polyline that looks like that?  That's a pretty abrupt cam if you would. 

Dave O.                                                                  Sig-Logos32.png
Member
schwungrad
Posts: 3
Registered: ‎06-20-2012
Message 9 of 9 (151 Views)

Re: how to get the normalvector of a closed pline with arcs

07-05-2012 05:29 AM in reply to: chiefbraincloud

We use polylines to define the movement of our fabrication tools so the algorithm should handle every closed LWPolyline with no self intersections.

As I used only the tangent vectors for my calculation I will always get the smaller angle = +90° (mathematical equal to -270°). Therefore I divided every arc which is larger than pi (so also the angles are always smaller than pi).

Of corse it is easier to use the opening angle (EndAngle - StartAngle) to calculate the change of direction of the arc.

For the seccond problem I simply check if the end point of the arc is on the left or on the right side of the previous end tangent.

My new algorithm seems to works with any kind of polyline (linear and with arcs).

Announcements
Are you familiar with the Autodesk Expert Elites? The Expert Elite program is made up of customers that help other customers by sharing knowledge and exemplifying an engaging style of collaboration. To learn more, please visit our Expert Elite website.
Need installation help?

Start with some of our most frequented solutions or visit the Installation and Licensing Forum to get help installing your software.