如何缩放AcDbBlockReference对象
如何缩放AcDbBlockReference对象?<BR> setScaleFactor()如何使用?....<BR> AcDbBlockReference *blkRef = (AcDbBlockReference*)pEnt;<BR> AcGeScale3d sc;<BR> //sc->sx = sf;<BR> //sc->sy = sf;<BR> //sc->sz = 1.0;<BR> blkRef->setScaleFactors(sc);<BR> 这段代码不正确!
不用下面的方法:
/////////////////////////////////////////////////////////////////////////////////////////////<BR>//<BR>// 缩放块(INSERT), 自定义比例因子(scale factor)<BR>//<BR>void scaleInsert()<BR>{<BR> int rc;<BR> struct resbuf *rbl;<BR> ads_name ss;<BR> ads_real sf; // 比例因子<BR> long lenSS;<BR> int idx;<BR> ads_name ssEntName;<BR> struct resbuf *rbSSEnt;<BR> struct resbuf *rbTrav;
rbl = acutBuildList(-4, "<AND",<BR> RTDXF0, "INSERT",<BR> -4, "AND>",<BR> RTNONE);
rc = acedSSGet("X", NULL, NULL, rbl, ss);<BR> if (rc != RTNORM) {<BR> acutPrintf("\n空的或无效的选择集!");<BR> return;<BR> }
rc = acedSSLength(ss, &lenSS);<BR> if (rc != RTNORM) {<BR> acutPrintf("\n空的或无效的选择集!");<BR> return;<BR> }
// 输入比例因子<BR> acedInitGet(RSG_NONULL + RSG_NONEG + RSG_NOZERO, NULL);<BR> acedGetReal("\n比例因子: ", &sf);
for (idx = 0; idx < lenSS; idx++)<BR> {<BR> // 取得选择集中索引位置的实体名<BR> rc = acedSSName(ss, idx, ssEntName);<BR> if (rc != RTNORM) {<BR> break;<BR> }
// 取得实体数据<BR> rbSSEnt = acdbEntGet(ssEntName);<BR> if (!rbSSEnt) {<BR> break;<BR> }
rbTrav = rbSSEnt;
while (rbTrav) {<BR> switch (rbTrav->restype) <BR> {<BR> case 41 :<BR> case 42 :<BR> rbTrav->resval.rreal = rbTrav->resval.rreal * sf;<BR> break;<BR> }<BR> rbTrav = rbTrav->rbnext;<BR> }//while
rc = acdbEntMod(rbSSEnt);<BR> if (rc != RTNORM) {<BR> acutPrintf("\n编辑实体失败!");<BR> }
if (rbSSEnt) {<BR> acutRelRb(rbSSEnt);<BR> }<BR> }//for
acedSSFree(ss);<BR> if (rbl) {<BR> acutRelRb(rbl);<BR> }
return;<BR>}
解决了
解决了:对Block Reference对象操作时, 用到AcGeScale3d, AcGeMatrix3d, AcGeVector3d等类及setScaleFactor()时,<BR> 要引用acge16.lib库,否则会出现"无法解析的符号..."错误!
所以如果出现"无法解析的符号..."的错误时,应该考虑是否是没有引用相应的lib库文件! 如何引用?
回复
在工程的属性页中设置,引用如图所示:
页:
[1]