VS:CircleCircleInters

From Vectorworks Developer
Revision as of 14:25, 12 August 2013 by Root (talk | contribs) (1 revision)
Jump to navigation Jump to search

.VectorScript|VectorScript ..VS:Function Reference|Function Reference ..VS:Function_Reference_Appendix|Appendix

Description

Finds the intersection of two circles. Returns FALSE if the circles do not intersect.

FUNCTION CircleCircleIntersec(
cenPt1X, cenPt1Y, cenPt1Z :REAL;
cenPt2X, cenPt2Y, cenPt2Z :REAL;
radius1 :REAL;
radius2 :REAL;
VAR pt1X, pt1Y, pt1Z :REAL;
VAR pt2X, pt2Y, pt2Z :REAL) :BOOLEAN;
def vs.CircleCircleInters(cenPt1, cenPt2, radius1, radius2):
    return (BOOLEAN, pt1, pt2)

Parameters

cenPt1X, cenPt1Y, cenPt1Z REAL
cenPt2X, cenPt2Y, cenPt2Z REAL
radius1 REAL
radius2 REAL
pt1X, pt1Y, pt1Z REAL Output parameter.
pt2X, pt2Y, pt2Z REAL Output parameter.

Remarks

This has been renamed "CircleCircleInters", VW 13+ (82099)

Example

<pre>PROCEDURE Example;
VAR
   cen_pt1, cen_pt2 :VECTOR; 
   Radius1, Radius2, startAng1, startAng2, sweepAng1, sweepAng2, fuzz :REAL; 
   pt1, 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 := 5729.28 / ((100 * Hangle(h)) / Hlength(h));
   END;

BEGIN
   CallTool(-205); ArcInfo(FSActLayer, cen_pt1, startAng1, sweepAng1, Radius1);
   CallTool(-205); ArcInfo(FSActLayer, cen_pt2, startAng2, sweepAng2, Radius2);
   IF CircleCircleInters(cen_pt1, cen_pt2, Radius1, Radius2, .1, pt1, pt2) THEN BEGIN
      Locus(pt1.x, pt1.y);
      Locus(pt2.x, pt2.y);
   END;
END;
RUN(Example);</pre>

Version

Availability: from All Versions

This is drop-in function.