ObjectARX创建带文字的线型实例代码
CAD2011 更新了一个新的函数接口setShapeIsUprightAt,对应文字旋转 U 模式,可以使得文字方向看起来比较正常,不过这个在三维空间的直线上有bug,某些角度会出现文字偏移严重,有三维需求的慎用。
新代码,
AcDbLinetypeTable* pLinetypeTable=NULL; Acad::ErrorStatus es = acdbHostApplicationServices()->workingDatabase()->getLinetypeTable(pLinetypeTable,AcDb::kForWrite); if (Acad::eOk != es) { return; } AcDbObjectId txtStyleId=acdbHostApplicationServices()->workingDatabase()->textstyle(); AcDbLinetypeTableRecord *pLinetypeTableRec=new AcDbLinetypeTableRecord; //设置线型名称注意,命名规范 pLinetypeTableRec->setName(L"YJV10X5"); //pLinetypeTableRec->setAsciiDescription(_T("YJV10X5 ____YJV10*5 ____")); //线型说明文字高版本建议用setComments pLinetypeTableRec->setComments(_T("YJV10X5 ____YJV10*5 ____")); //设置Dash短划线数量 pLinetypeTableRec->setNumDashes(5); //设置短划线的长度,正值为实线,负值为空格,0是点 pLinetypeTableRec->setDashLengthAt(0,10); //dash2 文字开始 pLinetypeTableRec->setDashLengthAt(1,-2.75); //设置Shape或Text样式Id pLinetypeTableRec->setShapeStyleAt(1,txtStyleId); //比例,文字高度 pLinetypeTableRec->setShapeScaleAt(1,2.54); //设置文字原点偏移位置 pLinetypeTableRec->setShapeOffsetAt(1,AcGeVector2d(-1.75,-1.27)); //设置文字索引位置和内容,索引≥0 pLinetypeTableRec->setTextAt(1,_T(">")); //dash3 文字收尾 pLinetypeTableRec->setDashLengthAt(2,-2.75); //dash4 文字开始 pLinetypeTableRec->setDashLengthAt(3,-8.96); //设置Shape或Text样式Id pLinetypeTableRec->setShapeStyleAt(3,txtStyleId); //比例,文字高度 pLinetypeTableRec->setShapeScaleAt(3,2.54); //设置文字原点偏移位置 pLinetypeTableRec->setShapeOffsetAt(3,AcGeVector2d(-7.96,-1.27)); //设置文字索引位置和内容,索引≥0 pLinetypeTableRec->setTextAt(3,_T("ss PE 100")); //设置文字向上 pLinetypeTableRec->setShapeIsUprightAt(3,true); //dash5 文字收尾 pLinetypeTableRec->setDashLengthAt(4,-8.96); //设置自动缩放比例 pLinetypeTableRec->setIsScaledToFit(0); //设置图案长度一般等于dashLength实际距离之和 pLinetypeTableRec->setPatternLength(33.42); pLinetypeTable->add(pLinetypeTableRec); pLinetypeTableRec->close(); pLinetypeTable->close();
早期代码
AcDbLinetypeTable* pLinetypeTable=NULL; Acad::ErrorStatus es = acdbHostApplicationServices()->workingDatabase()->getLinetypeTable(pLinetypeTable,AcDb::kForWrite); if (Acad::eOk != es) { return; } AcDbObjectId txtStyleId=acdbHostApplicationServices()->workingDatabase()->textstyle(); AcDbLinetypeTableRecord *pLinetypeTableRec=new AcDbLinetypeTableRecord; //设置线型名称注意,命名规范 pLinetypeTableRec->setName(L"YJV10X5"); //pLinetypeTableRec->setAsciiDescription(_T("YJV10X5 ____YJV10*5 ____")); //线型说明文字高版本建议用setComments pLinetypeTableRec->setComments(_T("YJV10X5 ____YJV10*5 ____")); //设置Dash短划线数量 pLinetypeTableRec->setNumDashes(3); //设置短划线的长度,正值为实线,负值为空格,0是点 pLinetypeTableRec->setDashLengthAt(0,1.25); pLinetypeTableRec->setDashLengthAt(1,-1.75); //设置Shape或Text样式Id pLinetypeTableRec->setShapeStyleAt(1,txtStyleId); //比例,文字高度 pLinetypeTableRec->setShapeScaleAt(1,0.25); //设置文字原点偏移位置 pLinetypeTableRec->setShapeOffsetAt(1,AcGeVector2d(-1.55,-0.125)); //设置文字索引位置和内容,索引≥0 pLinetypeTableRec->setTextAt(1,_T("YJV10*5")); pLinetypeTableRec->setDashLengthAt(2,0.25); //设置自动缩放比例 pLinetypeTableRec->setIsScaledToFit(0); //设置图案长度一般等于dashLength实际距离之和 pLinetypeTableRec->setPatternLength(3.25); pLinetypeTable->add(pLinetypeTableRec); pLinetypeTableRec->close(); pLinetypeTable->close();
附:关于自定义线型中的文字
线型中可以包含字体中的字符。
包含嵌入字符的线型可以表示实用工具、边界、轮廓等等。指定顶点时将动态绘制直线,就象使用简单线型一样。嵌入直线的字符始终完整显示,不会被截断。
*HOT_WATER_SUPPLY,---- HW ---- HW ---- HW ---- HW ---- HW ---- A,.5,-.2,["HW",STANDARD,S=.1,U=0.0,X=-0.1,Y=-.05],-.2这表示一种重复图案,以 0.5 个图形单位长度的划线开头,然后是 0.2 个图形单位长度的空移、具有一定缩放比例和位置参数的字符 HW 以及另一个 0.2 个图形单位长度的空移。文字字符来自指定给 STANDARD 文字样式的文字字体,缩放比例为 0.1、正立旋转角度为 0 度、X 偏移为 -0.1、Y 偏移为 -0.05。该图案沿直线长度延续,以长度为 0.5 个图形单位的划线结束。该线型如下所示。
请注意,总间距长度为 0.2 + 0.2 = 0.4,文字原点在 X 方向上相对于首次向右上挑的端点偏移 -.01 个单位。等价线型为
*HOT_WATER_SUPPLY,---- HW ---- HW ---- HW ---- HW ---- HW ---- A,.5,-.1,["HW",STANDARD,S=.1,U=0.0,X=0.0,Y=-.05],-.3