VS:OverlapLineArc: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
m (1 revision) |
(No difference)
|
Revision as of 14:35, 12 August 2013
.VectorScript|VectorScript ..VS:Function Reference|Function Reference ..VS:Function_Reference_Appendix|Appendix
Description
Finds the overlap of a line and an arc. Returns the overlapping segment if it exists. Returns FALSE IF there is no overlap.
FUNCTION OverlapLineArc(
begPtX, begPtY, begPtZ :REAL;
endptX, endptY, endptZ :REAL;
cenPtX, cenPtY, cenPtZ :REAL;
radius :REAL;
startAng :REAL;
sweepAng :REAL;
VAR lapPt1X, lapPt1Y, lapPt1Z :REAL;
VAR lapPt2X, lapPt2Y, lapPt2Z :REAL;
tolerance :REAL) :BO
def vs.OverlapLineArc(begPt, endpt, cenPt, radius, startAng, sweepAng, tolerance): return (BOOLEAN, lapPt1, lapPt2)
Parameters
begPtX, begPtY, begPtZ REAL endptX, endptY, endptZ REAL cenPtX, cenPtY, cenPtZ REAL radius REAL startAng REAL sweepAng REAL lapPt1X, lapPt1Y, lapPt1Z REAL Output parameter. lapPt2X, lapPt2Y, lapPt2Z REAL Output parameter. tolerance REAL
Example
PROCEDURE Example; VAR beg_pt, END_pt :VECTOR; cen_pt :VECTOR; radius, startAng, sweepAng :REAL; lap_pt1, lap_pt2 :VECTOR; PROCEDURE ArcInfo(h :HANDLE; VAR cen_pt :VECTOR; VAR startAng, sweepAng, Radius :REAL); BEGIN Hcenter(h, cen_pt.x, cen_pt.y); GetArc (h, startAng, sweepAng); IF GetType(h) = 6 THEN Radius := HPerim(h) / Deg2Rad(sweepAng) ELSE IF GetType(h) = 89 THEN radius := GetObjectVariableReal(h, 571); END; BEGIN CallTool(-202); ArcInfo(FSActLayer, cen_pt, startAng, sweepAng, radius); CallTool(-201); GetSegPt1(FSActLayer, beg_pt.x, beg_pt.y); GetSegPt2(FSActLayer, END_pt.x, END_pt.y); IF OverlapLineArc( beg_pt, end_pt, cen_pt, radius, startAng, sweepAng, lap_pt1, lap_pt2, 0.001) THEN BEGIN Locus(lap_pt1.x, lap_pt1.y); Locus(lap_pt2.x, lap_pt2.y); END; END; RUN(Example);
Version
Availability: from All Versions
This is drop-in function.