- 积分
- 31906
- 明经币
- 个
- 注册时间
- 2004-10-17
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2025-8-19 09:56:41
|
显示全部楼层
本帖最后由 cable2004 于 2025-8-19 10:08 编辑
 - 设置文字高度 : setDimtxt();
- 设置文字位置 : setDimgap();
- 设置箭头大小 : setDimasz();
- 设置标注精度 : setDimdec();
- 设置小数保留位数 : setDimtdec();
- 设置尺寸界限超出尺寸线距离 : setDimexe();
- 设置文字处于标注线上方还是下方 : setDimtad();[2为下方,1为上方]
 - //创建对齐标注
- //(1)第一条尺寸边界线的起点(2)第二条尺寸边界线的起点(3)通过尺寸线的一点(4)标注文字(5)样式。
- AcDbObjectId CreateDimAligned(const AcGePoint3d& pt1, const AcGePoint3d& pt2, const AcGePoint3d& ptLine, const char* dimText, AcDbObjectId dimStyle)
- {
- AcDbAlignedDimension *pDim = new AcDbAlignedDimension(pt1, pt2,
- ptLine, dimText, dimStyle);
- return PostToModelSpace(pDim);
- }
- //创建对齐标注
- //重载函数,允许输入 vecOffset 作为标注文字位置的偏移量
- AcDbObjectId CreateDimAligned(const AcGePoint3d& pt1, const AcGePoint3d& pt2, const AcGePoint3d& ptLine, const AcGeVector3d& vecOffset, const TCHAR* dimText)
- {
- AcDbAlignedDimension *pDim = new AcDbAlignedDimension(pt1, pt2, ptLine, dimText, AcDbObjectId::kNull);
- AcDbObjectId dimensionId;
- dimensionId = PostToModelSpace(pDim);
- // 打开已经创建的标注,对文字的位置进行修改
- AcDbEntity *pEnt;
- Acad::ErrorStatus es;
- es = acdbOpenAcDbEntity(pEnt, dimensionId, AcDb::kForWrite);
- AcDbAlignedDimension *pDimension = AcDbAlignedDimension::cast(pEnt);
-
- if (pDimension != NULL)
- {
- // 移动文字位置前,需先指定尺寸线的变化情况(这里指定为:
- // 尺寸线不动,在文字和尺寸线之间加箭头)
- pDimension->setDimtmove(1);
- // 根据偏移向量修正文字插入点的位置
- AcGePoint3d ptText = pDimension->textPosition();
- ptText = ptText + vecOffset;
- pDimension->setTextPosition(ptText);
- }
-
- pEnt->close();
- return dimensionId;
- }
- //创建转角标注
- //(1)标注的旋转角度、(2)第一条尺寸边界线的起点、(3)第二条尺寸边界线的起点、(4)通过尺寸线的一点、(5)标注文字 (6)样式。
- AcDbObjectId CreateDimRotated(const AcGePoint3d& pt1, const AcGePoint3d& pt2, const AcGePoint3d& ptLine, double rotation, const TCHAR* dimText, AcDbObjectId dimStyle)
- {
- AcDbRotatedDimension *pDim = new AcDbRotatedDimension(rotation, pt1, pt2, ptLine, dimText, dimStyle);
- return PostToModelSpace(pDim);
- }
- //创建半径标注
- //(1)标注曲线的中心点、(2)引线附着的坐标、(3)引线长度、(4)标注文字(5)样式
- AcDbObjectId CreateDimRadial(const AcGePoint3d& ptCenter, const AcGePoint3d& ptChord, double leaderLength, const TCHAR* dimText, AcDbObjectId dimStyle)
- {
- AcDbRadialDimension *pDim = new AcDbRadialDimension(ptCenter, ptChord, leaderLength, dimText, dimStyle);
- return PostToModelSpace(pDim);
- }
-
- //创建半径标注
- //重载函数,(圆心、半径、标注尺寸线的旋转角度和引线长度)
- AcDbObjectId CreateDimRadial(const AcGePoint3d& ptCenter, double radius, double angle, double leaderLength)
- {
- CGeometryOper m_geometryOper;
- AcGePoint3d ptChord = m_geometryOper.PolarPoint(ptCenter, angle, radius);
-
- return CreateDimRadial(ptCenter, ptChord, leaderLength);
- }
-
- //根据相对极坐标来确定一个点的位置
- AcGePoint3d PolarPoint(const AcGePoint3d& pt, double angle, double distance)
- {
- ads_point ptForm, ptTo;
- ptForm[X] = pt.x;
- ptForm[Y] = pt.y;
- ptForm[Z] = pt.z;
- //acutPolar: 计算某个角度上距离某个点一定距离的点
- acutPolar(ptForm, angle, distance, ptTo);
- return asPnt3d(ptTo);
- }
- //根据相对直角坐标来计算一个点的位置
- AcGePoint3d RelativePoint(const AcGePoint3d& pt, double x, double y)
- {
- AcGePoint3d ptReturn(pt.x + x, pt.y + y, pt.z);
- return ptReturn;
- }
-
- //创建直径标注
- //(1)+(2)标注直径的两个端点、(3)引线长度、(4)标注文字(5)样式
- AcDbObjectId CreateDimDiametric(const AcGePoint3d& ptChord1, const AcGePoint3d& ptChord2, double leaderLength, const TCHAR* dimText, AcDbObjectId dimStyle)
- {
- AcDbDiametricDimension *pDim = new AcDbDiametricDimension(ptChord1, ptChord2, leaderLength, dimText, dimStyle);
- return PostToModelSpace(pDim);
- }
-
- //创建直径标注
- //重载函数,(圆心、半径、标注尺寸线的旋转角度和引线长度)
- AcDbObjectId CreateDimDiametric(const AcGePoint3d& ptCenter, double radius, double angle, double leaderLength)
- {
- CGeometryOper m_geometryOper;
- // 计算标注通过点的位置
- AcGePoint3d ptChord1, ptChord2;
- ptChord1 = m_geometryOper.PolarPoint(ptCenter, angle, radius);
- ptChord2 = m_geometryOper.PolarPoint(ptCenter, angle + m_geometryOper.PI(), radius);
-
- return CreateDimDiametric(ptChord1, ptChord2, leaderLength);
- }
- //创建二维角度标注
- //根据两条直线的关系创建一个函数
- AcDbObjectId CreateDim2LineAngular(const AcGePoint3d& ptStart1, const AcGePoint3d& ptEnd1, const AcGePoint3d& ptStart2, const AcGePoint3d& ptEnd2, const AcGePoint3d& ptArc, const TCHAR* dimText, AcDbObjectId dimStyle)
- {
- AcDb2LineAngularDimension *pDim = new AcDb2LineAngularDimension(ptStart1, ptEnd1, ptStart2, ptEnd2, ptArc, dimText, dimStyle);
- return PostToModelSpace(pDim);
- }
-
- //创建坐标标注
- //(1)是否是 X 轴标注(布尔类型变量)、(2)标注箭头的起始位置、(3)标注箭头的终止位置、(4)标注文字、(5)样式
- AcDbObjectId CreateDimOrdinate(Adesk::Boolean xAxis, const AcGePoint3d& ptStart, const AcGePoint3d& ptEnd, const TCHAR* dimText, AcDbObjectId dimStyle)
- {
- AcDbOrdinateDimension *pDim = new AcDbOrdinateDimension(xAxis, ptStart, ptEnd, dimText, dimStyle);
- return PostToModelSpace(pDim);
- }
-
- //创建三维角度标注
- //重载函数,(顶点、起始点、终止点和标注尺寸线通过点)
- AcDbObjectId CreateDim3PtAngular(const AcGePoint3d& ptCenter, const AcGePoint3d& ptEnd1, const AcGePoint3d& ptEnd2, const AcGePoint3d& ptArc, const TCHAR* dimText, AcDbObjectId dimStyle)
- {
- AcDb3PointAngularDimension *pDim = new AcDb3PointAngularDimension(ptCenter, ptEnd1, ptEnd2, ptArc, dimText, dimStyle);
- return PostToModelSpace(pDim);
- }
-
- //创建坐标标注
- //重载函数,能够同时创建一个点的 X、Y 坐标标注
- AcDbObjectIdArray CreateDimOrdinate(const AcGePoint3d& ptDef, const AcGePoint3d& ptTextX, const AcGePoint3d& ptTextY)
- {
- AcDbObjectId dimId;
- AcDbObjectIdArray dimIds;
- dimId = CreateDimOrdinate(Adesk::kTrue, ptDef, ptTextX);
- dimIds.append(dimId);
- dimId = CreateDimOrdinate(Adesk::kFalse, ptDef, ptTextY);
- dimIds.append(dimId);
- return dimIds;
- }
-
- //创建坐标标注
- //重载函数,能够根据点的偏移位置来创建坐标标注
- AcDbObjectIdArray CreateDimOrdinate(const AcGePoint3d& ptDef, const AcGeVector3d& vecOffsetX, const AcGeVector3d& vecOffsetY)
- {
- AcGePoint3d ptTextX = ptDef + vecOffsetX;
- AcGePoint3d ptTextY = ptDef + vecOffsetY;
-
- return CreateDimOrdinate(ptDef, ptTextX, ptTextY);
- }
-
- static void MidasMyGroupMyCreateDimAligned()
- {
- CGeometryOper m_geometryOper;
- // 指定起始点位置
- AcGePoint3d pt1(200, 160, 0);
- AcGePoint3d pt2= m_geometryOper.RelativePoint(pt1, -40, 0);
- AcGePoint3d pt3 = m_geometryOper.PolarPoint(pt2, 7 * m_geometryOper.PI() / 6, 20);
- AcGePoint3d pt4 = m_geometryOper.RelativePoint(pt3, 6, -10);
- AcGePoint3d pt5 = m_geometryOper.RelativePoint(pt1, 0, -20);
- // 绘制外轮廓线
- CreateLine(pt1, pt2);
- CreateLine(pt2, pt3);
- CreateLine(pt3, pt4);
- CreateLine(pt4, pt5);
- CreateLine(pt5, pt1);
- // 绘制圆形
- AcGePoint3d ptCenter1, ptCenter2;
- ptCenter1 = m_geometryOper.RelativePoint(pt3, 16, 0);
- ptCenter2 = m_geometryOper.RelativePoint(ptCenter1, 25, 0);
- CreateCircle(ptCenter1, 3);
- CreateCircle(ptCenter2, 4);
-
- AcGePoint3d ptTemp1, ptTemp2;
- // 水平标注
- ptTemp1 = m_geometryOper.RelativePoint(pt1, -20, 3);
- CreateDimRotated(pt1, pt2, ptTemp1, 0);
- // 垂直标注
- ptTemp1 = m_geometryOper.RelativePoint(pt1, 4, 10);
- CreateDimRotated(pt1, pt5, ptTemp1,
- m_geometryOper.PI() / 2);
- // 转角标注
- ptTemp1 = m_geometryOper.RelativePoint(pt3, -3, -6);
- CreateDimRotated(pt3, pt4, ptTemp1, 7 * m_geometryOper.PI() / 4);
- // 对齐标注
- ptTemp1 = m_geometryOper.RelativePoint(pt2, -3, 4);
- CreateDimAligned(pt2, pt3, ptTemp1, AcGeVector3d(4, 10, 0), _T("new position"));
- // 角度标注
- ptTemp1 = m_geometryOper.RelativePoint(pt5, -5, 5);
- CreateDim3PtAngular(pt5, pt1, pt4, ptTemp1);
- // 半径标注
- ptTemp1 = m_geometryOper.PolarPoint(ptCenter1, m_geometryOper.PI() / 4, 3);
- CreateDimRadial(ptCenter1, ptTemp1, -3);
- // 直径标注
- ptTemp1 = m_geometryOper.PolarPoint(ptCenter2,
- m_geometryOper.PI() / 4, 4);
- ptTemp2 = m_geometryOper.PolarPoint(ptCenter2,
- m_geometryOper.PI() / 4, -4);
- CreateDimDiametric(ptTemp1, ptTemp2, 0);
- // 坐标标注
- CreateDimOrdinate(ptCenter2, AcGeVector3d(0, -10, 0),
- AcGeVector3d(10, 0, 0));
- }
|
评分
-
查看全部评分
|