Showing results for 
Search instead for 
Did you mean: 
Showing results for 
Search instead for 
Did you mean: 

Arc angles


Arc angles

I'm hoping someone can help with this problem. I'm traversing all the contours of a surface and all the edges of each contour and I'm using the following to get information from edges that are arcs:

ProEdgeDataGet(p_edges[k], &gitemdata);
ProArcdataGet(gitemdata->data.p_curve_data, NULL, NULL, pt1, &stang, &enang, &rad);

But the start angle (stang) is always 0.0 no matter the orientation of the edge. Any idea why? Any ideas how to get the right information?


Are you sure that the edge you are trying to get arc data for is of type
PRO_ENT_ARC? Look up the function ProArcdataGet in the API Wizard and
click on some example code. That code calls ProCurvedataTypeGet which
will return PRO_ENT_*. It only makes sense to call ProArcdataGet on
curve data of type PRO_ENT_ARC.

Patrick Williams | Sr. Application Engineer | CAM Systems | Steelcase
Inc. | 616.698.4078

I see. In the 3D world, arcs are defined by two vectors, center point, etc. But in the 2D world (sketches), arcs are defined by start angle, end angle, center point, etc.

I was getting confused between the two.


I am trying to get the arcdata from the <u>ProArcdata</u>from the my ProGeomitemData,I could able to get the Origin,radius...etc.

I am trying to get the start point and end point of the arc,but it is giving in the form of ProVector.

Cani able to get interms of the 3D point system the way for the ProLinedata gives the end1 and end2.

What is the arc coordinate system? which is mentioned in the pro/toolkit header files documentation.

For the ProLinedata it gives the end1 and end2 from the default Csys,similarly i would like to get the end points of the arc from the default it possible to get this.

How do i get the point from the Vector...?

With regards,

Kishore V

If you want to get the end points of the arc then I would back up a few steps in your logic and use the following procedure:

1. Acquire a handle to a ProCurve object:

a. ProSolidFeatVisit()

b. ProFeatureGeomitemVisit()

c. ProGeomitemToCurve()

2. Then find the endpoints of the curve where t=0 and t=1.

a. ProCurveXyzdataEval() t=0

b. ProCurveXyzdataEval() t=1

This should get you the endpoints of the curve. If the actual ProGeomitem is an edge (I can't remember off the top of my head) then you would just substitute ProGeomitemToCurve() with ProGeomitemToEdge() and ProCurveXyzdataEval() with ProEdgeXyzdataEval().

Patrick Williams | Engineering Systems | Sr. Applications Engineer | Steelcase Inc. | 616.698.4078


Hi all,

This topic had been popping up more then once already.

Here is how to getXYZ of arc endpoints in model coordinates.

From Pro/Toolkit help, 'Geometry representation' chapter:


t' (the unnormalized parameter) is (1 - t) * start_angle + t * end_angle

(x, y, z) = radius * [cos(t') * vector1 + sin(t') * vector2] + origin

C code:

C code

//ProGeomitemdata *p_gd;

for( i = 0; i < 3; i++){

end1[i] = p_gd->data.p_curve_data->arc.radius *

( cos( p_gd->data.p_curve_data->arc.start_angle) *

p_gd->data.p_curve_data->arc.vector1[i] +

sin( p_gd->data.p_curve_data->arc.start_angle) *

p_gd->data.p_curve_data->arc.vector2[i]) +


end2[i] = p_gd->data.p_curve_data->arc.radius *

( cos( p_gd->data.p_curve_data->arc.end_angle) *

p_gd->data.p_curve_data->arc.vector1[i] +

sin( p_gd->data.p_curve_data->arc.end_angle) *

p_gd->data.p_curve_data->arc.vector2[i]) +



If those


Hi @FV,


Thanks for helping me to get XYZ of arc endpoints in model coordinates.

But, I have another question

Could you teach me to how to get point on the circumference? Cause I WANT to use for loop to get it.



Hello all,

My apologies but I did not understand the question.

If you are asking about how to get an arbitrary point on an arc - you would not need this old pile of code from ten years ago. Just use   ProCurveParamByLengthEval() or ProEdgeParamByLengthEval(), with the parameter argument changing from 0.0 to 1.0:

int max_steps = 100;
for( int i = 0; i < max_steps; ++i ) {
double t2 = -1.0;
ProPoint3d point = {0.0,0.0, 0.0};
 ProCurveParamByLengthEval (curve, (double) i/max_steps, 0.0, &t2, point);





If those coordinates need to be recalculated to assembly or view or drawing coordinates please use appropriate Pro...TrfGet, invert resulting matrix if needed and use ProPntTrfEval to find the desired output.