|||
如何知道多义线Polyline(特别是封闭多义线)的时钟走向呢?从起点到终点是顺时针走向还是逆时针走向?
同时,本函数对于判断一个点位于封闭多义线内还是外也是有帮助的。
很抱歉:Lisp代码不是以一个完整函数的形式出现,懒得整理了
C#代码
/// <summary>
/// 判断轻型多义线的时钟走向
/// Version : 2008.11.14
/// </summary>
/// <param name="pline">轻型多义性</param>
/// <returns>顺时针返回-1,逆时针返回1</returns>
static public int Clockwise(Polyline pline)
{
Polyline pline1 = (Polyline)pline.Clone();
double bulge0 = pline1.GetBulgeAt(0);
double area0 = pline1.Area;
if (bulge0 == 0.0)
{
pline1.SetBulgeAt(0, 0.5);
double area1 = pline1.Area;
if (area1 > area0)
return 1;
else
return -1;
}
else
{
pline1.SetBulgeAt(0, 0);
double area1 = pline1.Area;
if (bulge0 > 0)
{
if (area1 > area0)
return -1;
else
return 1;
}
else
{
if (area1 > area0)
return 1;
else
return -1;
}
}
}
Visual Lisp 代码
(setq bulge0 (vla-getbulge obj1 0)
area0 (vla-get-area obj1)
)
(setq p11 (vlax-curve-getpointatparam obj1 0.5)
p13 (vlax-curve-getpointatparam obj1 0)
p14 (vlax-curve-getpointatparam obj1 1)
)
(if (= bulge0 0.0)
(progn
(vla-setbulge obj1 0 0.5)
(setq area1 (vla-get-area obj1))
(if (> area1 area0)
(setq cxk_clocksize 1)
(setq cxk_clocksize -1)
)
)
(progn
(vla-setbulge obj1 0 0.0)
(setq area1 (vla-get-area obj1))
(if (> area1 area0)
(if (> bulge0 0)
(setq cxk_clocksize -1)
(setq cxk_clocksize 1)
)
(if (> bulge0 0)
(setq cxk_clocksize 1)
(setq cxk_clocksize -1)
)
)
)
)
(vla-setbulge obj1 0 bulge0)
草木世交.Sieben