在局部坐标系创建元素 只有使用mdl类函数创建才是正确的,用ShapeHandler创建的还是全在世界坐标
Dpoint3d origin = GetDesignRect::getRectPoints()[0]; mdlCurrTrans_begin(); mdlCurrTrans_identity(); //定义新坐标原点 if (SUCCESS != mdlCurrTrans_translateOrigin(&origin)) { printf("没有当前转换"); return; } //旋转 if (SUCCESS != mdlCurrTrans_rotateByAngles(0.0, 0.0, g_info.angle)) { printf("没有当前转换"); return; } Dpoint3d shap[4], tmppoint; tmppoint.x = tmppoint.y = tmppoint.z = 0.0; //网格shap四个点 shap[0].z = shap[1].z = shap[2].z = shap[3].z = 0; shap[1].x = shap[0].x + g_dp.GridLength * g_uor; shap[2].x = shap[1].x; shap[2].y = shap[1].y + g_dp.GridHeight * g_uor; shap[3].y = shap[2].y; shap[3].x = shap[2].x - g_dp.GridLength * g_uor;
//创建shap 求与边界是否有交集 有交集(有边界点) 求交集shap 没有交易相离舍弃 在内部直接采用当前shap 对目标shap的每个点求自然标高 MSElement outShape; EditElementHandle outshaphandel; if (SUCCESS != mdlShape_create(&outShape,NULL, shap,4,0)) //if (SUCCESS != ShapeHandler::CreateShapeElement(outshaphandel, NULL, shap, 4, ACTIVEMODEL->Is3d(), *ACTIVEMODEL)) { //输出错误信息 v0 printf("shap创建失败"); return; } else { //outshaphandel.AddToModel(); mdlElement_add(&outShape); }
mdlCurrTrans_end();
您可以在ShapeHandler创建以后,构造一个变换矩阵,把元素变换到想要的位置,包括放大或缩小都可以通过变换矩阵来实现。