设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 205|回复: 3

ObjectARX创建带文字的线型实例代码

[复制链接]
  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

    发表于 2020-12-29 15:03 | 显示全部楼层 |阅读模式
    1. AcDbLinetypeTable* pLinetypeTable=NULL;
    2.                 Acad::ErrorStatus es = acdbHostApplicationServices()->workingDatabase()->getLinetypeTable(pLinetypeTable,AcDb::kForWrite);
    3.                 if (Acad::eOk != es)
    4.                 {
    5.                         return;
    6.                 }
    7.                 AcDbObjectId txtStyleId=acdbHostApplicationServices()->workingDatabase()->textstyle();
    8.                 AcDbLinetypeTableRecord *pLinetypeTableRec=new AcDbLinetypeTableRecord;
    9.                 //设置线型名称注意,命名规范
    10.                 pLinetypeTableRec->setName(L"YJV10X5");               
    11.                 //pLinetypeTableRec->setAsciiDescription(_T("YJV10X5 ____YJV10*5 ____"));
    12.                 //线型说明文字高版本建议用setComments
    13.                 pLinetypeTableRec->setComments(_T("YJV10X5 ____YJV10*5 ____"));
    14.                 //设置Dash短划线数量
    15.                 pLinetypeTableRec->setNumDashes(3);
    16.                 //设置短划线的长度,正值为实线,负值为空格,0是点
    17.                 pLinetypeTableRec->setDashLengthAt(0,1.25);
    18.                 pLinetypeTableRec->setDashLengthAt(1,-1.75);

    19.                 //设置Shape或Text样式Id
    20.                 pLinetypeTableRec->setShapeStyleAt(1,txtStyleId);
    21.                 //比例,文字高度
    22.                 pLinetypeTableRec->setShapeScaleAt(1,0.25);
    23.                 //设置文字原点偏移位置
    24.                 pLinetypeTableRec->setShapeOffsetAt(1,AcGeVector2d(-1.55,-0.125));
    25.                 //设置文字索引位置和内容,索引≥0
    26.                 pLinetypeTableRec->setTextAt(1,_T("YJV10*5"));

    27.                 pLinetypeTableRec->setDashLengthAt(2,0.25);
    28.                 //设置自动缩放比例
    29.                 pLinetypeTableRec->setIsScaledToFit(0);
    30.                 //设置图案长度一般等于dashLength实际距离之和
    31.                 pLinetypeTableRec->setPatternLength(3.25);               
    32.                 pLinetypeTable->add(pLinetypeTableRec);
    33.                 pLinetypeTableRec->close();
    34.                 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=值定义的缩放比例进行缩放,但是它可以根据线型进行缩放。
    回复


    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构工程服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系电话:198-7840-1958,QQ:463017170.
    相关关键词:膜结构车棚,膜结构车棚覆盖,膜结构车棚公司,膜结构车棚多少钱,膜结构车棚厂家,膜结构车棚价格,社区膜结构车棚,膜结构车棚膜布厂家 ,膜结构车棚哪家好,膜结构车棚多少钱一米,膜结构车棚报价,膜结构车棚哪里有,膜结构车棚定制,膜结构车棚安装,膜结构车棚设计,膜结构车棚电话,膜结构车棚加工,膜结构车棚膜布价格,膜结构车棚批发,膜结构车棚制造商,膜结构车棚生产厂家,膜结构车棚设计,膜结构车棚施工,膜结构车棚多少钱一平米,膜结构车棚订制,张拉膜车棚,张拉膜车棚覆盖,张拉膜车棚公司,张拉膜车棚多少钱,张拉膜车棚厂家,张拉膜车棚价格,社区张拉膜车棚,张拉膜车棚膜布厂家 ,张拉膜车棚哪家好,张拉膜车棚多少钱一米,张拉膜车棚报价,张拉膜车棚哪里有,张拉膜车棚定制,张拉膜车棚安装,张拉膜车棚设计,张拉膜车棚电话,张拉膜车棚加工,张拉膜车棚膜布价格,张拉膜车棚批发,张拉膜车棚制造商,张拉膜车棚生产厂家,张拉膜车棚设计,张拉膜车棚施工,张拉膜车棚多少钱一平米,张拉膜车棚订制,常用膜材品牌:德国杜肯、法国法拉利、德国海德斯、德国米乐、日本平岗、韩国秀博、比利时希运、美国赫虏伯、中国科宝、上海慧遥。

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2020-12-29 16:21 | 显示全部楼层
    1. TCHAR sLineTypeFile[256];
    2.         if (ads_findfile( _T("HHCAD.LIN"),sLineTypeFile)==RTNORM)
    3.         {
    4.                 acdbLoadLineTypeFile(_T("continuousx"),sLineTypeFile,NULL);
    5.                 acdbLoadLineTypeFile(_T("ACAD_ISO02W100"),sLineTypeFile,NULL);
    6.                 acdbLoadLineTypeFile(_T("ACAD_ISO02W100x"),sLineTypeFile,NULL);
    7.                 acdbLoadLineTypeFile(_T("ACAD_ISO07W100"),sLineTypeFile,NULL);
    8.                 acdbLoadLineTypeFile(_T("ACAD_ISO10W100"),sLineTypeFile,NULL);
    9.                 acdbLoadLineTypeFile(_T("ACAD_ISO10W100x"),sLineTypeFile,NULL);
    10.                 acdbLoadLineTypeFile(_T("DASHED2"),sLineTypeFile,NULL);
    11.         }
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2020-12-29 16:22 | 显示全部楼层
    1. oid CLineTypeComboBox::OnComboBoxInit ()
    2. {       
    3.         Acad::ErrorStatus es;
    4.         //用父类初始化
    5.         CAcUiLineTypeComboBox::OnComboBoxInit();       
    6.         std::vector<CString> arrstrLtName;
    7.         //如果需要添加新线型,只需定义好新的宏名,在此加入即可...
    8.         arrstrLtName.push_back(HH_NEWLINETYPE_001);
    9.         arrstrLtName.push_back(HH_NEWLINETYPE_002);
    10.         //新建线型,使用户在界面上能够选择到新增的线型
    11.         AcDbDatabase *pCurDb=acdbHostApplicationServices()->workingDatabase();
    12.         AcDbLinetypeTable  *pLinetypeTable;       
    13.         es = pCurDb->getSymbolTable(pLinetypeTable, AcDb::kForWrite);
    14.         if (es != Acad::eOk)
    15.         {
    16.                 return;
    17.         }
    18.         int i=0;
    19.         for (i=0; i<(int)arrstrLtName.size(); i++)
    20.         {
    21.                 CString strLtName = arrstrLtName.at(i);
    22.                 if (!pLinetypeTable->has(strLtName))
    23.                 {
    24.                         AcDbLinetypeTableRecord  *pLinetypeRecord = new AcDbLinetypeTableRecord;
    25.                         pLinetypeRecord->setName(strLtName);
    26.                         if (i == 0)
    27.                         {
    28.                                 pLinetypeRecord->setComments(_T("新增线型")+strLtName+_T("—>————<—"));       
    29.                         }
    30.                         else if (i == 1)
    31.                         {
    32.                                 pLinetypeRecord->setComments(_T("新增线型")+strLtName+_T("—>>———<<—"));       
    33.                         }

    34.                         AcDbObjectId idLT = AcDbObjectId::kNull;
    35.                         es =  pLinetypeTable->add(idLT,pLinetypeRecord);
    36.                         CString LtName = strLtName;
    37.                         CAcUiLTypeRecord* pLTypeRecord = CreateLTRecord(LtName, idLT);
    38.                         CAcUiLineTypeComboBox::AddLTypeToControl(pLTypeRecord);
    39.                         pLinetypeRecord->close();
    40.                 }
    41.         }
    42.         pLinetypeTable->close();       
    43. };       

    44. BOOL CLineTypeComboBox::OnSelectOther(BOOL isOther2, int curSel, int& newSel)
    45. {
    46.         return __super::OnSelectOther(isOther2, curSel, newSel);
    47. }
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2020-12-29 16:22 | 显示全部楼层
    1. //====================================
    2. // 函数名称        : GetDirFiles
    3. // 函数介绍        : 取得某目录下所有指定属性的文件名
    4. // 返 回 值        : 选择的文件夹全路径
    5. //
    6. //====================================
    7. bool CAppUtility::GetDirFiles( LPCTSTR lpDir,//目录                                          std::vector<CAppUtility::_FileStru_>&arr,// 返回文件
    8. LPCTSTR lpExt/*="*.*"*/,// 寻找的文件类型
    9. bool bIsIncludeSub/* = true*/// 是否包含子目录)
    10. {
    11.         CString szPath = lpDir;
    12.         if ( szPath.IsEmpty() )
    13.                 return false;
    14.         if ( szPath.Right(1) != _T('\\') )
    15.                 szPath += _T("\\");

    16.         // 进入路径
    17.         if ( _tchdir(szPath) != 0 )
    18.                 return false;

    19.         _FileStru_ aFile;
    20.         _tcscpy(aFile.szPath, szPath);// 路径

    21.         intptr_t hHand = _tfindfirst(lpExt, &aFile);
    22.         if ( -1 == hHand )
    23.                 return false;
    24.         for (int nRet=0; nRet!=-1; nRet=_tfindnext(hHand, &aFile))
    25.         {
    26.                 // 判断如果是.或..则继续循环
    27.                 if ( 0 == _tcscmp(aFile.name, _T(".")) ||
    28.                         0 == _tcscmp(aFile.name, _T("..")) )
    29.                         continue;
    30.                 // 如果是目录,则进入
    31.                 if ( aFile.IsDir() )
    32.                 {
    33.                         if ( !bIsIncludeSub )
    34.                                 continue;
    35.                         CString szSub = szPath + aFile.name+_T("\\");
    36.                         GetDirFiles(szSub, arr, lpExt, bIsIncludeSub);
    37.                 }
    38.                 else
    39.                 {
    40.                         _stprintf(aFile.szPath, _T("%s%s"), szPath, aFile.name);

    41.                         // 分解文件名与后缀
    42.                         CString strTemp(aFile.name);

    43.                         // 从后向前分离出文件名、格式名(以.为分界符)
    44.                         int nPos = strTemp.ReverseFind(_T('.'));
    45.                         if ( -1 != nPos )
    46.                         {
    47.                                 _tcscpy(aFile.strExtOnly, strTemp.Mid(nPos+1,strTemp.GetLength()-nPos));
    48.                                 strTemp = strTemp.Mid(0,nPos);
    49.                         }                       
    50.                         else
    51.                                 aFile.strExtOnly[0] = _T('');
    52.                         _tcscpy(aFile.strNameOnly, strTemp);
    53.                         arr.push_back(aFile);
    54.                 }
    55.         }
    56.         _findclose(hHand);
    57.         return true;
    58. }

    59. extern "C" __declspec(dllexport) int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)
    60. {
    61.         CComboBox *pComb = (CComboBox *) ((void*)lparam);
    62.         pComb->AddString(lpelf->elfLogFont.lfFaceName);        //Style
    63.         return 1;
    64. }

    65. void InitFontCmb()
    66. {
    67.         LOGFONT lf;
    68.         CClientDC dc (this);
    69.         lf.lfCharSet =  ANSI_CHARSET; //中国标准字体
    70.         _tcscpy(lf.lfFaceName,_T("")); //设置Style
    71.         ::EnumFontFamiliesEx((HDC) dc,&lf,(FONTENUMPROC)EnumFontFamProc,(LPARAM) (&m_cmbFont),0);

    72.         // 寻找字体
    73.         std::vector<CAppUtility::_FileStru_>arrSHX;
    74.         CAppUtility::GetDirFiles(CAppUtility::GetCADPath()+_T("Font"), arrSHX, _T("*.shx"), true);
    75.         CAppUtility::GetDirFiles(CAppUtility::GetPathFont(), arrSHX, _T("*.shx"), true);
    76.         for (int i=0; i<(int)arrSHX.size(); ++i)
    77.         {
    78.                 if ( m_cmbFont.FindString(-1, arrSHX[i].strNameOnly) != -1 )
    79.                         continue;
    80.                 m_cmbFont.AddString(arrSHX[i].strNameOnly);
    81.         }
    82. }
    复制代码
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    推荐膜材品牌上一条 /6 下一条

    进口膜材 国产膜材 pvdf膜材ptfe膜材ETFE膜材
    最好的膜结构公司 一级膜结构资质 膜结构一级资质
    膜结构设计-膜结构十大品牌-etfe设计-充气膜结构
    诺科膜结构
    遨都膜结构设计
    中国膜结构网
    中国空间膜结构

    QQ|申请友链|手机版|中国膜结构论坛