天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 54|回复: 0

arx04获取和设置多行文字高度,注意不是文字高度

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
arx07中的AcDbMText类中增加了函数height()和setHeight()

用于获取和设置多行文字的高度(注意不是文字高度)

但是arx06及以下版本却没有提供,但是这是多行文字一个很常用属性。

通过查询扩展属性发现多行文字的高度是存储在扩展属性里面的

这就简单了,我们可以通过读取和设置扩展属性来修改多行文字的高度。

//获取多行文字高度,注意不是文字高度
double GetMTextHeight(AcDbMText* pText)
{
#if _MSC_VER>=1400
  return pText->height();
#else
  struct resbuf* rb=pText->xData(_T(“ACAD”));
  struct resbuf* rbIter=rb;
  while(rbIter!=NULL)
  {
   if(rbIter->restype==AcDb::kDxfXdAsciiString&&
    lstrcmpi(rbIter->resval.rstring,_T(“ACAD_MTEXT_DEFINED_HEIGHT_BEGIN”))==0)
   {
    rbIter=rbIter->rbnext;
    break;
   }
   rbIter=rbIter->rbnext;
  }
  if(rbIter==NULL)
  {
   acutRelRb(rb);
   return 0.0;
  }
  double dHeight=0.0;
  while(rbIter!=NULL)
  {
   if(rbIter->restype==kDxfXdReal)
   {
    dHeight=rbIter->resval.rreal;
    rbIter=rbIter->rbnext;
    break;
   }
   rbIter=rbIter->rbnext;
  }
  if(rbIter==NULL)
  {
   acutRelRb(rb);
   return 0.0;
  }
  while(rbIter!=NULL)
  {
   if(rbIter->restype==AcDb::kDxfXdAsciiString&&
    lstrcmpi(rbIter->resval.rstring,_T(“ACAD_MTEXT_DEFINED_HEIGHT_END”))==0)
   {
    acutRelRb(rb);
    return dHeight;
   }
   rbIter=rbIter->rbnext;
  }
  acutRelRb(rb);
  return 0.0;
#endif
}
//设置多行文字高度,注意不是文字高度
Acad::ErrorStatus SetMTextHeight(AcDbMText* pText,double dHeight)
{
#if _MSC_VER>=1400
  return pText->setHeight(dHeight);
#else
  struct resbuf* rb=pText->xData(_T(“ACAD”));
  struct resbuf* rbIter=rb;
  while(rbIter!=NULL)
  {
   if(rbIter->restype==AcDb::kDxfXdAsciiString&&
    lstrcmpi(rbIter->resval.rstring,_T(“ACAD_MTEXT_DEFINED_HEIGHT_BEGIN”))==0)
   {
    rbIter=rbIter->rbnext;
    break;
   }
   rbIter=rbIter->rbnext;
  }
  if(rbIter==NULL)
  {
   acutRelRb(rb);
   return Acad::eInvalidInput;
  }
  while(rbIter!=NULL)
  {
   if(rbIter->restype==kDxfXdReal)
   {
    rbIter->resval.rreal=dHeight;
    rbIter=rbIter->rbnext;
    break;
   }
   rbIter=rbIter->rbnext;
  }
  if(rbIter==NULL)
  {
   acutRelRb(rb);
   return Acad::eInvalidInput;
  }
  while(rbIter!=NULL)
  {
   if(rbIter->restype==AcDb::kDxfXdAsciiString&&
    lstrcmpi(rbIter->resval.rstring,_T(“ACAD_MTEXT_DEFINED_HEIGHT_END”))==0)
   {
    pText->setXData(rb);
    acutRelRb(rb);
    return Acad::eOk;
   }
   rbIter=rbIter->rbnext;
  }
  acutRelRb(rb);
  return Acad::eInvalidInput;
#endif
}

 

 

 

 

arx04获取和设置多行文字高度,注意不是文字高度
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:39 , Processed in 0.144520 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表