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

Arc angles

Level 1

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?

TIA
8 REPLIES 8

RE: Arc angles

Tom,
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



re: Arc angles

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.

re: Arc angles

Hello,

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 csys...is it possible to get this.

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

With regards,

Kishore V

Arc angles

Kishore,
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

[cid:image001.jpg@01CA73F1.AF3921B0]

RE: Arc angles

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:

Parameterization:

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]) +

p_gd->data.p_curve_data->arc.origin[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]) +

p_gd->data.p_curve_data->arc.origin[i];

}

If those

RE: Arc angles

Continue...

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.

HIH.

FV

Highlighted

Re: RE: Arc angles

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.

Re: RE: Arc angles

 

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);
}

 HIH.

FV.