- 积分
- 12459
- 明经币
- 个
- 注册时间
- 2003-5-28
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
如何缩放AcDbBlockReference对象? setScaleFactor()如何使用?
.... AcDbBlockReference *blkRef = (AcDbBlockReference*)pEnt; AcGeScale3d sc; //sc->sx = sf; //sc->sy = sf; //sc->sz = 1.0; blkRef->setScaleFactors(sc); 这段代码不正确!
不用下面的方法:
///////////////////////////////////////////////////////////////////////////////////////////// // // 缩放块(INSERT), 自定义比例因子(scale factor) // void scaleInsert() { int rc; struct resbuf *rbl; ads_name ss; ads_real sf; // 比例因子 long lenSS; int idx; ads_name ssEntName; struct resbuf *rbSSEnt; struct resbuf *rbTrav;
rbl = acutBuildList(-4, "<AND", RTDXF0, "INSERT", -4, "AND>", RTNONE);
rc = acedSSGet("X", NULL, NULL, rbl, ss); if (rc != RTNORM) { acutPrintf("\n空的或无效的选择集!"); return; }
rc = acedSSLength(ss, &lenSS); if (rc != RTNORM) { acutPrintf("\n空的或无效的选择集!"); return; }
// 输入比例因子 acedInitGet(RSG_NONULL + RSG_NONEG + RSG_NOZERO, NULL); acedGetReal("\n比例因子: ", &sf);
for (idx = 0; idx < lenSS; idx++) { // 取得选择集中索引位置的实体名 rc = acedSSName(ss, idx, ssEntName); if (rc != RTNORM) { break; }
// 取得实体数据 rbSSEnt = acdbEntGet(ssEntName); if (!rbSSEnt) { break; }
rbTrav = rbSSEnt;
while (rbTrav) { switch (rbTrav->restype) { case 41 : case 42 : rbTrav->resval.rreal = rbTrav->resval.rreal * sf; break; } rbTrav = rbTrav->rbnext; }//while
rc = acdbEntMod(rbSSEnt); if (rc != RTNORM) { acutPrintf("\n编辑实体失败!"); }
if (rbSSEnt) { acutRelRb(rbSSEnt); } }//for
acedSSFree(ss); if (rbl) { acutRelRb(rbl); }
return; } |
|