VS:OverlapLineArc: Difference between revisions

From Vectorworks Developer
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.