请教如何通过程序实现在类似AutoCAD中添加一中字体样式的功能?
<P>如题,我需要通过程序实现类似AutoCAD中添加一中字体样式的功能?这样我可以将这个字体样式一直保存,然后每次我添加文字的时候都可以用啦,望大虾们不吝赐教!</P> <P><BR>AcDbObjectId CLjDwg::AddTextStyle(const char* strName,<BR> const char* strStype,<BR> const char* strBigName,<BR> const double dHeight,<BR> const double dFactor,<BR> AcDbDatabase* pDb)<BR>{<BR> AcDbObjectId idTextStyle=NULL;</P><P> AcDbTextStyleTable *pTable=NULL; <BR> AcDbTextStyleTableRecord *pTableRecord; <BR> if (pDb==NULL)<BR> pDb=acdbCurDwg();<BR> pDb->getTextStyleTable(pTable,AcDb::kForWrite);</P>
<P> if(pTable==NULL)<BR> {<BR> AfxMessageBox("Fonttable open wrong");<BR> return idTextStyle;<BR> }<BR> // 生成新的图层表记录 <BR> Acad::ErrorStatus es;<BR> pTable->getAt(ACDB_MODEL_SPACE,pTableRecord,AcDb::kForWrite);<BR> if(pTable->has(strName))<BR> {<BR> pTable->getAt(strName,idTextStyle);<BR> }<BR> else<BR> {<BR> pTableRecord=new AcDbTextStyleTableRecord; <BR> es = pTableRecord->setName(strName); </P>
<P> if(CString(strStype).Find(_T(".shx")) != -1 <BR> || CString(strStype).Find(_T(".SHX")) != -1)<BR> {<BR> char szPath;<BR> if (ads_findfile(strStype,szPath) != RTNORM) <BR> { <BR> ads_printf("Could not find file %s.\n", strStype);<BR> }<BR> else<BR> {<BR> es = pTableRecord->setFileName(strStype);<BR> } <BR> if(CString(strBigName) != _T(""))<BR> {<BR> char szPath;<BR> if (ads_findfile(strBigName,szPath) != RTNORM) <BR> { <BR> ads_printf("Could not find file %s.\n", strBigName);<BR> }<BR> else<BR> {<BR> es = pTableRecord->setBigFontFileName(strBigName);<BR> }<BR> }<BR> }<BR> else<BR> {<BR> es = pTableRecord->setFont(strStype,FALSE,FALSE,200,100);<BR> }</P>
<P> pTableRecord->setTextSize(dHeight);<BR> pTableRecord->setXScale(dFactor); <BR> es = pTable->add(idTextStyle,pTableRecord); <BR> pTableRecord->close(); <BR> } </P>
<P> pTable->close();</P>
<P> return idTextStyle;<BR>}</P>
<P> </P> <P>上述代码有点太复杂啦</P>
<P>用acedCommand函数调用AUTOCAD的style命令就可以实现.</P>
<P> </P> wzz1968发表于2006-6-14 17:19:00static/image/common/back.gif
上述代码有点太复杂啦
用acedCommand函数调用AUTOCAD的style命令就可以实现.
就是要用复杂的代码,呵呵,用二楼的代码才是真正和cad的内核打交道,用acedCommand还不如用 lisp,不用编译,二楼的是正解<BR> 同意,既然是程序就要用编程的思想 <P>初学编程的非常忌讳搞一对找不着边的代码,二楼的代码足以使初学者望而却步.</P>
<P>当然可以用LISP解决问题.</P>
<P>方式如下:</P>
<P>假设定义HS字型</P>
<P>1.用command函数</P>
<P>(if (= (tblsearch "style" "hs") nil)</P>
<P> (command "style" "hs" "txt,hs" "4" "0.5" "" "" "")</P>
<P>)</P>
<P>2.用tblobjname函数</P>
<P>(if (= (tblsearch "style" "hs") nil)</P>
<P> (progn </P>
<P> (setq ent (tblobjname "style" "standard"))</P>
<P> (setq ent_list (entget ent))</P>
<P> (setq ent_list (subst (cons 2 "hs") (assoc 2 ent_list))</P>
<P> (setq ent_list (subst (cons 3 "txt") (assoc 3 ent_list))</P>
<P> (setq ent_list (subst (cons 4 "hs") (assoc 4 ent_list))</P>
<P> (setq ent_list (subst (cons 40 4.0) (assoc 40 ent_list))</P>
<P> (setq ent_list (subst (cons 41 0.5) (assoc 41 ent_list))</P>
<P> (entmake ent)</P>
<P>)</P>
<P>)</P>
<P>对于初学者,那段代码好理解是不言而语的.</P>
<P> </P>
<P> (command "style" "hs" "txt,hs" "4" "0.5" "" "" "")</P>
<P>)</P> wzz1968发表于2006-6-23 15:15:00static/image/common/back.gif
初学编程的非常忌讳搞一对找不着边的代码,二楼的代码足以使初学者望而却步.
当然可以用LISP解决问题.
方式如下:
<P>ARX任何方面的代码都足以使初学者望而却步,如果害怕,就不要去碰ARX。刚从LISP转ARX的人的最大安慰就是有acedCommand()函数,但那只是古老的ADS遗留下来的ADSRX,从面向对象的角度而言,要真正掌握ARX,就要彻底放弃LISP的思维方式。</P>
<P>所以这些LISP代码对于ARX而言没有任何价值!</P>
<P>//<BR></P>
页:
[1]