Let me give you some hint of what need to be achieved for Axis visibility in drawing view.
Consider a simple part and it has three planes A, B and C. These planes are parallel to front, top and side plane of model.Now if a view is created for this part into drawing, only two panes are visible. This can be identified as below:
* consider view transformation matrix (Tv)
* consider sheet transformation matrix (Ts)
* consider a vector representing normal to plane (Vp) . This can be achieved getting geomdata of surface (plane is surface only) and finding its normal from geom data
* Transfer Vp with respect to Tv
* Transfer modified Vp into last step with respect to Ts and call this vector as Final Vp i.e. FVp
* z axis is vector is 0,0,1 and multiply this Z axis vector to FVp so that we can get dot product of two vectors. If product is zero plane would be visible into view.
Similar logic is required for Axis to be visible into view or not. Confusion is that how to find normal of axis like normal to plane we did for the case of plane.
Any idea is of great help.
Thanks in advance.
ProAxis to ProGeomitemdata to ProCurvedata to ProLinedata
ProLinedata has two ProPoint3d end2 and end1.
V = (end2 - end1)/LENGTH(end2-end1) - this is line-unit-vector ( normals for a line from a point on a line would form a plane which this line intersects at that given point).
if the absolute value of the dot product of a line unit vector translated into view coordinates with the view z vector is double-equal to 1.0+/-fuzz - the axis is a cross-line symbol, if anything else (fabs(d) < 0.95), the axis will be represented as a line, if dot-product is close to 0 the axis will be in a view plane.
For a view, two planes will be visible and identified already using normal of plane i.e. surface.
Now for axis, find Surface using ProAxisSurfaceGet(). Get surface geom data and find two planes direction e1 and e2 as two different vectors (data.p_surface_data->srf_shape.plane.e1 & data.p_surface_data->srf_shape.plane.e2)
Now take first vector as normal to plane 1 and find its cross product with e1 vector first and then with e2 vector.... If any one of the two cross product is zero, at least one AXIS line will be visible into view.
Now take first vector as normal to plane 2 and find its cross product with e1 vector first and then with e2 vector.... If any one of the two cross product is zero, another AXIS line will be visible into view.
Is this logic bug free or do you see any loop holes into this?
I am yet to dig down into it and seems one issue is observed for specific input (issue might not be due to the above logic but not sure). Any comment or suggestion on my implemented logic would be of great help..