王咣生 发表于 2004-7-14 11:15:00

如何缩放AcDbBlockReference对象

如何缩放AcDbBlockReference对象?<BR>                                       setScaleFactor()如何使用?


                                                       ....<BR>               AcDbBlockReference *blkRef = (AcDbBlockReference*)pEnt;<BR>        AcGeScale3d sc;<BR>        //sc-&gt;sx = sf;<BR>        //sc-&gt;sy = sf;<BR>        //sc-&gt;sz = 1.0;<BR>        blkRef-&gt;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, "&lt;AND",<BR>                                                                RTDXF0, "INSERT",<BR>                                                -4, "AND&gt;",<BR>                                                RTNONE);


        rc = acedSSGet("X", NULL, NULL, rbl, ss);<BR>        if (rc != RTNORM) {<BR>                acutPrintf("\n空的或无效的选择集!");<BR>                return;<BR>        }


        rc = acedSSLength(ss, &amp;lenSS);<BR>        if (rc != RTNORM) {<BR>                acutPrintf("\n空的或无效的选择集!");<BR>                return;<BR>        }


        // 输入比例因子<BR>        acedInitGet(RSG_NONULL + RSG_NONEG + RSG_NOZERO, NULL);<BR>        acedGetReal("\n比例因子: ", &amp;sf);


        for (idx = 0; idx &lt; 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-&gt;restype) <BR>                        {<BR>                        case 41 :<BR>                        case 42 :<BR>                                rbTrav-&gt;resval.rreal = rbTrav-&gt;resval.rreal * sf;<BR>                                break;<BR>                        }<BR>                        rbTrav = rbTrav-&gt;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>}

王咣生 发表于 2004-7-16 11:10:00

解决了

解决了:



对Block Reference对象操作时, 用到AcGeScale3d, AcGeMatrix3d, AcGeVector3d等类及setScaleFactor()时,<BR>                                       要引用acge16.lib库,否则会出现"无法解析的符号..."错误!


                                       所以如果出现"无法解析的符号..."的错误时,应该考虑是否是没有引用相应的lib库文件!

yusongrong 发表于 2004-7-20 09:32:00

如何引用?

王咣生 发表于 2004-7-20 14:25:00

回复

在工程的属性页中设置,


引用如图所示:





页: [1]
查看完整版本: 如何缩放AcDbBlockReference对象