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 的线型定义为

*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

总间距长度仍然是 0.1 + 0.3 = 0.4,但是文字原点在 X 方向上未发生偏移。

字符描述符格式

在线型说明中添加文字字符的格式如下所示:

["text_string",text_style_name,scale,rotation,xoffset,yoffset]

比例、旋转、X 偏移和 Y 偏移的值必须表示为有符号十进制数字,例如 1、-17 和 0.01。

文字字符串

要在线型中显示的字符。

文字样式名

要使用的文字样式的名称。如果未指定文字样式,将使用当前定义的样式。

注意:嵌入的文字字符与图形中的文字样式相关。加载线型之前,图形中必须存在与线型相关联的文字样式。
比例

要用于文字样式的缩放比例与线型的比例相关。提供的比例因子必须使用 S= 作为前缀,例如 S=.5 表示比例因子为 0.5。文字样式的高度将乘以比例因子。如果文字样式的高度为 0(零),则 S=value 的值单独用作高度。

旋转

要在线型中显示的字符的旋转角度。旋转角度必须带有前缀 U=、R= 或 A=。

  • U= 指定正立或易于阅读的文字。
  • R= 指定相对于直线的相对或相切旋转。
  • A= 指定文字相对于原点的绝对旋转;即所有文字不论其相对于直线的位置如何,都将进行相同的旋转。

该值后面可添加

  • d 表示度(度为默认值)
  • r 表示弧度
  • g 表示百分度

下图是使用正立旋转定义的线型。

如果省略旋转,则相对旋转为 0。旋转是围绕基线和实际大写高度之间的中点进行的。

注意:如果图形包含不使用 U(正立)旋转标记的传统线型,则可以通过从 LIN 文件重载线型,根据最新线型定义更新这些图形。可以通过在重载线型定义之前将 R(旋转)标记更改为 U(正立)标记,来更新自定义线型。
X 偏移

文字在线型的 X 轴方向上沿直线的移动。提供的偏移必须带有前缀 X=,例如,X=.1 表示偏移 0.1。如果省略偏移或偏移为 0(零),则文字将不发生偏移。使用该字段控制文字与前面提笔或落笔笔划间的距离。该值不能按照 S=值定义的缩放比例进行缩放,但是它可以根据线型进行缩放。

Y 偏移

文字在线型的 Y 轴方向垂直于该直线的移动。提供的偏移必须带有前缀 Y=,例如 Y=.1 表示偏移 0.1。如果省略偏移或偏移为 0(零),则文字将不发生偏移。使用此字段控制文字相对于直线的垂直对齐。该值不能按照 S=值定义的缩放比例进行缩放,但是它可以根据线型进行缩放。

 

posted @ 2019-09-18 16:42  edata  阅读(1236)  评论(0编辑  收藏  举报