⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geutilities.h

📁 能在MDT5/6环境下对已经存在地曲面进行全部和局部区域展开
💻 H
📖 第 1 页 / 共 3 页
字号:
 *	Purpose:
 *		loop1与loop2布尔操作
 *	Argument:
 *		loop1		[in], loop1.
 *		loop2		[in], loop2.
 *		op			[in], bool operation.
 *		retLoops	[out], 返回的loops.
 *	Return:
 *		Acad::eOk, 成功,  
 *		Acad::eInvalideInput,loop1或loop2不是一个封闭图形
 *		Acad::eNotHandled, 两个loop轮廓没有交点, 且bool操作对loop1没有影响
 *		其他,失败, loops长度为0
 */
extern DLLIMPEXP Acad::ErrorStatus 
booleanOper(const ChGeLoop2d& loop1, const ChGeLoop2d& loop2,
			ChGeLoop2dArray& retLoops,AcDb::BoolOperType op);



/*
 *	Purpose:
 *		转换3dNurb曲线为2d.
 *	Argument:
 *		crv		[in], 3d nurb curve.
 *		crv2d	[out], 2d nurb curve.
 */
extern DLLIMPEXP void 
curve3dTo2d(const AcGeNurbCurve3d& crv,AcGeNurbCurve2d& crv2d);



/*
 *	Purpose:
 *		将点数组添加到点数组的数组中.
 *		当点数组的数组中某一点数组A的最后一点等于该点数组的第一点时
 *		插入到点数组的数组元素A的后面,并返回其位置索引,否则返回-1,
 *		数组未被插入。
 *	Argument:
 *		pntsArr		[in], 点数组的数组.
 *		pnts		[in], 点数组.
 *		pntsArr		[out], 点数组的数组.
 *	Return:
 *		-1插入失败,否则为插入位置索引.
 */
extern DLLIMPEXP int 
joinPntsArrayWithPnts(ChGePnts2dArray& pntsArr, const AcGePoint2dArray& pnts);



/*
 *	Purpose:
 *		将点数组添加到点数组的数组中.
 *		当点数组的数组中某一点数组A的最后一点等于该点数组的第一点时
 *		插入到点数组的数组元素A的后面,并返回其位置索引,否则返回-1,
 *		数组未被插入。
 *	Argument:
 *		pntsArr		[in], 点数组的数组.
 *		pnts		[in], 点数组.
 *		pntsArr		[out], 点数组的数组.
 *	Return:
 *		-1插入失败,否则为插入位置索引.
 */
extern DLLIMPEXP int 
joinPntsArrayWithPntsArray(ChGePnts2dArray& pntsArr, const ChGePnts2dArray& pntsArr2);




/*
 *	Purpose:
 *		曲线2剪切曲线1,保留曲线1在曲线2某边的部分和曲线2上的某些段,
 *		形成与曲线1方向一致的曲线.
 *	Argument:
 *		curve1		[in], curve1.
 *		curve2		[in], curve2.
 *		bTrimRight	[in], true时保留左手边,否则保留右手边 default=true
 *		retCurvePntsArray	[out], 曲线组的点数组的数组.
 *	Return:
 *    true两者之间有交点时剪切成功, 或曲线1整个被剪切掉(此时retCurvePntsArray为空)
 *    false实际参数错误,或曲线1未被剪切(此时retCurvePntsArray与curve1相同)
 */
//extern DLLIMPEXP bool 
//trimCurvebyCurve(const ChGeCurve2dPntsArray& curve1pntsArr,const ChGeCurve2dPntsArray& curve2pntsArr,ChGeCurve2dPntsArray& retCurvePntsArray,bool bTrimRight=true);


/*
 *	Purpose:
 *		用曲线2剪切曲线1,只保留曲线1上的部分.
 *	Argument:
 *		curve1pntsArr	[in], curve1.
 *		curve2pntsArr	[in], curve2.
 *		bTrimRight		[in], true时保留左手边,否则保留右手边
 *		retCurvePntsArray	[out], 曲线组的点数组的数组.
 *	Return:
 *    true两者之间有交点时剪切成功, 或曲线1整个被剪切掉(此时retCurvePntsArray为空)
 *    false实际参数错误,或曲线1未被剪切(此时retCurvePntsArray与curve1相同)
 */
//extern DLLIMPEXP bool 
//trimCurvebyCurve2(const ChGeCurve2dPntsArray& curve1pntsArr,const ChGeCurve2dPntsArray& curve2pntsArr,ChGeCurve2dPntsArray& retCurvePntsArray,bool bTrimRight=true);


/*
 *	Purpose:
 *		曲线2剪切Closed曲线1,保留曲线1在曲线2某边的部分和曲线2上的
 *		某些段,形成与曲线1方向一致的首尾相连的曲线组Loop.
 *		曲线2不是首尾相接
 *	Argument:
 *		curve1pntsArr	[in], curve1.
 *		curve2pntsArr	[in], curve2.
 *		bTrimRight		[in], true时保留左手边,否则保留右手边
 *		bAnticlock		[in], true曲线1为逆时针方向,false顺时针
 *		retCurvePntsArray	[out], 曲线组的点数组的数组.
 *	Return:
 *    true两者之间有交点时剪切成功, 或曲线1整个被剪切掉(此时retCurvePntsArray为空)
 *    false实际参数错误,或曲线1未被剪切(此时retCurvePntsArray与curve1相同)
 */
//extern DLLIMPEXP bool 
//trimClosedCurvebyCurve(const ChGeCurve2dPntsArray& curve1pntsArr,const ChGeCurve2dPntsArray& curve2pntsArr,ChGeCurve2dPntsArray& retCurvePntsArray,bool bTrimRight=true,bool bAnticlock=true);



/*
 *	Purpose:
 *		曲线2剪切Closed曲线1,保留曲线1在曲线2某边的部分和曲线2上的
 *		某些段,形成与曲线1方向一致的首尾相连的曲线组Loop.
 *		曲线2不是首尾相接
 *	Argument:
 *		curve1pntsArr	[in], curve1.
 *		curve2pntsArr	[in], curve2.
 *		bTrimRight		[in], true时保留左手边,否则保留右手边
 *		retCurvePntsArray	[out], 曲线组的点数组的数组.
 *	Return:
 *    true两者之间有交点时剪切成功, 或曲线1整个被剪切掉(此时retCurvePntsArray为空)
 *    false实际参数错误,或曲线1未被剪切(此时retCurvePntsArray与curve1相同)
 */
//extern DLLIMPEXP bool 
//trimClosedCurvebyCurve3(const ChGeCurve2dPntsArray& curve1pntsArr,const ChGeCurve2dPntsArray& curve2pntsArr,ChGeCurve2dPntsArray& retCurvePntsArray,bool bTrimRight=true);


/*
 *	Purpose:
 *		用曲线2剪切首尾相接的曲线1,只保留曲线1上的部分.
 *	Argument:
 *		curve1		[in], curve1.
 *		curve2		[in], curve2.
 *		bTrimRight	[in], true时保留左手边,否则保留右手边
 *		retCurvePntsArray	[out], 曲线组的点数组的数组.
 *	Return:
 *    true两者之间有交点时剪切成功, 或曲线1整个被剪切掉(此时retCurvePntsArray为空)
 *    false实际参数错误,或曲线1未被剪切(此时retCurvePntsArray与curve1相同)
 */
//extern DLLIMPEXP bool 
//trimClosedCurvebyCurve2(const ChGeCurve2dPntsArray& curve1pntsArr,const ChGeCurve2dPntsArray& curve2pntsArr,ChGeCurve2dPntsArray& retCurvePntsArray,bool bTrimRight=true);



/*
 *	Purpose:
 *		用首尾相接的曲线2剪切首尾相接的曲线1,曲线1为逆时针或顺时针.
 *		保留曲线1和曲线2上的部分,形成loop或loops.
 *	Argument:
 *		curve1pntsArr	[in], curve1.
 *		curve2pntsArr	[in], curve2.
 *		bTrimRight		[in], true时保留左手边,否则保留右手边
 *		bAnticlock		[in], true曲线1为逆时针方向,false顺时针
 *		retCurvePntsArray	[out], 曲线组的点数组的数组.
 *	Return:
 *    true两者之间有交点时剪切成功, 或曲线1整个被剪切掉(此时retCurvePntsArray为空)
 *    false实际参数错误,或曲线1未被剪切(此时retCurvePntsArray与curve1相同)
 */
//extern DLLIMPEXP bool 
//trimClosedCurvebyClosedCurve(const ChGeCurve2dPntsArray& curve1pntsArr,const ChGeCurve2dPntsArray& curve2pntsArr,ChGeCurve2dPntsArray& retCurvePntsArray,bool bTrimRight=true,bool bAnticlock=true);



/*
 *	Purpose:
 *		多个轮廓剪切轮廓1,其他的多个轮廓没有相交和包含关系.
 *		保留轮廓1和其他轮廓上的部分,形成loop或loops
 *	Argument:
 *		loop			[in], 轮廓1.
 *		loops			[in], 其他的多个轮廓.
 *		bTrimRight		[in], true时保留左手边,否则保留右手边
 *		bAnticlock		[in], true轮廓1为逆时针方向,false顺时针
 *		retCurvePntsArray	[out], 曲线组的点数组的数组.
 *	Return:
 *		true轮廓1被完全剪切掉返回空或正常返回
 *		false输入参数错误
 */
extern DLLIMPEXP bool 
trimLoopByLoops(const ChGeLoop2d& loop, const ChGeLoop2dArray& loops,ChGeLoop2dArray& retLoops,bool bAnticlock=true,bool bTrimRight=true);



/*
 *	Purpose:
 *		从点数组的数组提取loops.
 *		当p1,p2,p3,p4,p1,p5,p6,p7,p8,p5时可以提出两个LOOP.
 *	Argument:
 *		pntsArr			[in], 点数组的数组.
 *		loops2d			[out], 返回loops
 *	Return:
 *		成功返回true,否则false
 */
extern DLLIMPEXP bool 
getLoopsFromPntsArr(ChGeLoop2dArray& loops2d,const ChGeCurve2dPntsArray& pntsArr);



/*
 *	Purpose:
 *		判断两对象所含数据是否相等(ChGeLoop2d)
 *	Argument:
 *		loop1			[in], loop1.
 *		loop2			[in], loop2
 *	Return:
 *		相等true,否则false.
 */
extern DLLIMPEXP bool 
isEqual(const ChGeLoop2d& loop1,const ChGeLoop2d& loop2);




/*
 *	Purpose:
 *		判断两对象所含数据是否相等(AcGePoint2dArray)
 *	Argument:
 *		pnts1			[in], points 1.
 *		pnts2			[in], points 2.
 *	Return:
 *		相等true,否则false.
 */
extern DLLIMPEXP bool 
isEqual(const AcGePoint2dArray& pnts1,const AcGePoint2dArray& pnts2);




/*
 *	Purpose:
 *		判断两对象所含数据是否相等(ChGeLoop2dArray)
 *	Argument:
 *		loops1			[in], loops 1.
 *		loops2			[in], loops 2.
 *	Return:
 *		相等true,否则false.
 */
extern DLLIMPEXP bool 
isEqual(const ChGeLoop2dArray& loops1,const ChGeLoop2dArray& loops2);



/*
 *	Purpose:
 *		将曲面上点数组转换为参数数组.
 *	Argument:
 *		surf			[in], 曲面.
 *		pnts			[in], 曲面上点数组.
 *		params			[out], 参数数组.
 *	Return:
 *		成功true,曲面和点数组空false.
 */
extern DLLIMPEXP bool 
getParamsFromPnts(const AcGeNurbSurface& surf,const AcGePoint3dArray& pnts,AcGePoint2dArray& params);



/*
 *	Purpose:
 *		将曲面上参数数组转换为点数组.
 *	Argument:
 *		surf			[in], 曲面.
 *		params			[in], 参数数组.
 *		pnts			[out], 曲面上点数组.
 *	Return:
 *		成功true,曲面和参数数组空false.
 */
extern DLLIMPEXP bool 
getPntsFromParams(const AcGeNurbSurface& surf,const AcGePoint2dArray& params,AcGePoint3dArray& pnts);



/*
 *	Purpose:
 *		生成由(x1,x2)和(y1,y2)指定区域的外轮廓.
 *	Argument:
 *		intrvX			[in], (x1,x2).
 *		intrvY			[in], (y1,y2).
 *		loop			[out], 外轮廓.
 *		nX				[in], 轮廓x方向边分段数.
 *		nY				[in], 轮廓y方向边分段数.
 *	Return:
 *		成功true,输入参数错误返回false.
 */
extern DLLIMPEXP bool 
getLoopFromIntervalXY(const AcGeInterval& intrvX, const AcGeInterval& intrvY,ChGeLoop2d& loop, int nX=1, int nY=1);


/*
 *	Purpose:
 *		将曲面上点数组的数组转换为参数数组的数组.
 *	Argument:
 *		surf			[in], 曲面.
 *		pntsArr			[in], 曲面上点数组的数组.
 *		paramsArr		[out], 参数数组的数组.
 *		bLoop			[in[, 输入的参数数组是否构成Loop
 *	Return:
 *		成功true,曲面或点数组的数组空false.
 */
extern DLLIMPEXP bool 
getParamsArrayFromPntsArray(const AcGeNurbSurface& surf,const ChGePnts3dArray& pntsArr,ChGePnts2dArray& paramsArr, bool bLoop=false);



/*
 *	Purpose:
 *		将曲面上参数数组的数组转换为点数组的数组.
 *	Argument:
 *		surf			[in], 曲面.
 *		paramsArr		[in], 参数数组的数组.
 *		pntsArr			[out], 曲面上点数组的数组.
 *	Return:
 *		成功true,曲面或参数数组的数组空false.
 */
extern DLLIMPEXP bool 
getPntsArrayFromParamsArray(const AcGeNurbSurface& surf,const ChGePnts2dArray& paramsArr,ChGePnts3dArray& pntsArr);


/*
 *	Purpose:
 *		判断点是在曲线的靠近开始端还是结尾端.
 *	Argument:
 *		curve		[in], 曲线.
 *		dirPnt		[in], 点.
 *	Return:
 *		true开始端,false结尾端.
 */
extern DLLIMPEXP bool 
isHead(const AcGePoint3dArray& curve, const AcGePoint3d& dirPnt);



/*
 *	Purpose:
 *		得到轮廓的形心和面积.
 *	Argument:
 *		loop		[in], 轮廓.
 *		center		[out], 形心.
 *		area		[out], 面积.
 *	Return:
 *		true成功,false失败.
 */
extern DLLIMPEXP bool
evalShapeCenterAndArea(const ChGeLoop2d& loop, AcGePoint2d& center, double& area);


/*
 *	Purpose:
 *		得到轮廓的形心和面积.
 *	Argument:
 *		vertexs		[in], 轮廓顶点,按逆时针或顺时针排列.
 *		center		[out], 形心.
 *		area		[out], 面积.
 *	Return:
 *		true成功,false失败.
 */
extern DLLIMPEXP bool
evalShapeCenterAndArea(const AcGePoint2dArray& vertexs, AcGePoint2d& center, double& area);


/*
 *	Purpose:
 *		图形是否以某条线为轴对称.
 *	Argument:
 *		vertexs		[in], 图形顶点.
 *		line		[in], 轴线.
 *	Return:
 *		true对称,false顶点数小于2或者不对称.
 */
extern DLLIMPEXP bool
isAxialSymmetric(const AcGePoint2dArray& vertexs, const AcGeLine2d& line);



/*
 *	Purpose:
 *		获取曲面基面.
 *	Argument:
 *		pSurf		[in], 曲面对象指针.
 *		baseSurf	[out], 曲面基面.
 *		pbIsSame	[out], 曲面方向是否与基面相同,if=NULL不返回.
 *	Return:
 *		eOk成功.
 */
extern DLLIMPEXP Acad::ErrorStatus 
getBaseSurface(AcDbEntity* pSurf,
			   AcGeNurbSurface& baseSurf,
			   Adesk::Boolean* pbIsSame=NULL);


/*
 *	Purpose:
 *		获取曲面基面和Loops.
 *	Argument:
 *		pSurf		[in], 曲面对象指针.
 *		baseSurf	[out], 曲面基面.
 *		loops		[out], 曲面Loops.
 *		pbIsSame	[out], 曲面方向是否与基面相同,if=NULL不返回.
 *	Return:
 *		eOk成功.
 */
extern DLLIMPEXP Acad::ErrorStatus 
getBaseSurfaceAndLoops(AcDbEntity* pSurf,
					   AcGeNurbSurface& baseSurf, 
					   ChGeLoop3dArray& loops,
					   Adesk::Boolean* pbIsSame=NULL);



/*
 *	Purpose:
 *		用曲线来剪切Loop. 只适合于曲线与Loop交点数为2或没有交点的情况.
 *	Argument:
 *		loop		[in], Loop.
 *		curve		[in], 曲线点数组.
 *		retLoop		[out], 返回得Loop.
 *		bTrimRight	[in], 剪切方向,缺省为剪切曲线右手边.
 *		bAntiClock	[in], Loop是否逆时针.
 *	Return:
 *		eOk成功, 部分被剪切.
 *		其他, 未被剪切, 或不能处理.
 */
extern DLLIMPEXP Acad::ErrorStatus 
trimLoopByCurve(const ChGeLoop2d& loop,
				const ChGePnts2dArray& curve,
				ChGeLoop2d& retLoop, 
				Adesk::Boolean bTrimRight=true, 
				Adesk::Boolean bAntiClock=true);



/*
 *	Purpose:
 *		用Loop来剪切曲线. 只适合于曲线与Loop交点数小于3的情况.
 *	Argument:
 *		curve		[in], 曲线点数组.
 *		loop		[in], Loop.
 *		retCurve	[out], 返回的曲线点.
 *	Return:
 *		eOk成功, 全部或部分被剪切.
 *		eNotHandled, 曲线与Loop交点数大于2, 
 *			或者为0时retCurve的长度不为0,即未被剪切.
 */
extern DLLIMPEXP Acad::ErrorStatus 
trimCurveByLoop(const ChGePnts2dArray& curve,
				const ChGeLoop2d& loop,
				ChGePnts2dArray& retCurve);


#endif // GE_UTILITIES_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -