AcDbPolyline延伸与直线求交,取延伸方向最近点

本文详细介绍了AcDbPolyline中每个点的Bulge概念及其应用,特别是如何根据Bulge值判断在前端或后端延伸时的方向。通过实例代码展示了如何获取和使用Bulge值来确定多义线延伸段的终点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础知识:AcDbPolyline中每个点的Bulge,负数为顺时钟,正数为逆时钟

//extendStart		是否延伸前端
//sPt,ePt;			与直线的两个交点
AcGePoint3d getExtendClosePt(bool extendStart,const AcDbPolyline* pl,const AcGePoint3d& sPt,const AcGePoint3d& ePt)
{
	double dBulge;					//延伸段的Bulge
	AcGePoint3d pt;					//多义线上的点
	if (extendStart)
	{
		pl->getBulgeAt(0,dBulge);
		pl->getStartPoint(pt);
		dBulge = -dBulge;			//起点延伸时,方向与原方向的Bulge相反
	}
	else
	{
		pl->getBulgeAt(pl->numVerts()-2,dBulge);//多义线的Bulge保存在前一点
		pl->getEndPoint(pt);
	}
	AcGeVector3d sVec = sPt - pt;
	AcGeVector3d eVec = ePt - pt;
	AcGeVector3d vec = sVec.crossProduct(eVec);

	AcGePoint3d closePt;
	if(sign(dBulge) == sign(vec.z))
	{
		closePt = sPt;
	}
	else
	{
		closePt = ePt;
	}

	return closePt;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值