chenpool 发表于 2004-10-2 16:35:00

帮忙看看transformBy移动的问题吧

不知为什么,就是不能移动到选取的点的位置,各位帮忙看看


AcDbObjectId eId;<BR>        AcDbEntity *pEnt;<BR>        ads_name objname;<BR>        ads_point pt1,pt2;<BR>        acedEntSel("dfdf",objname,pt1);<BR>        acdbGetObjectId(eId,objname);<BR>        acedGetPoint(NULL,"选择移动点",pt2);<BR>        AcGePoint3d point(pt2,pt2,pt2);<BR>        AcGeVector3d       x(1,0,0),y(0,1,0),z(0,0,1);<BR>        AcGeMatrix3d mat;<BR>        mat.setCoordSystem(point,x,y,z);<BR>        acdbOpenObject(pEnt,eId,AcDb::kForWrite);<BR>        pEnt-&gt;transformBy(mat);mat.<BR>        pEnt-&gt;close();

chenpool 发表于 2004-10-2 16:49:00

或者说我将这里改一下:AcGePoint3d point(1309,1039,500);


执行后,实体不知道跑到哪里去了,就是没在给定的点那里,奇怪的

chenpool 发表于 2004-10-2 17:02:00

晕,调程序才发现,原来移动是相对坐标,而不是绝对坐标,怪不得不能到指定点去


要指定基点然后相减才能到指定点,


希望对大家有借鉴作用

王咣生 发表于 2004-10-2 17:30:00

回复

static void asdktranformBy_TransBy(void)<BR>        {<BR>                // Add your code for command asdktranformBy._TransBy here<BR>                AcDbObjectId eId;<BR>                AcDbEntity *pEnt;<BR>                ads_name objname;<BR>                ads_point pt1,pt2;


                acedEntSel("dfdf",objname,pt1);


                acdbGetObjectId(eId,objname);


                acedGetPoint(NULL,"选择移动点",pt2);


                acdbOpenObject(pEnt,eId,AcDb::kForWrite);


                AcGeMatrix3d mat3d;<BR>                AcGeVector3d vec(pt2-pt1, pt2-pt1,0);<BR>                <BR>                mat3d.setTranslation(vec);


                pEnt-&gt;transformBy(mat3d);


                pEnt-&gt;close();


        }

chenpool 发表于 2004-10-6 14:26:00

<A name=56388><FONT color=#990000><B>王</B></FONT></A>斑竹,你给的例子好象是在XY平面上的移动吧,如果在XYZ三维上移动呢?


vec(pt2-pt1, pt2-pt1,pt2-pt1)好象不行吧

王咣生 发表于 2004-10-7 14:50:00

回复

你想怎么做呢?

chenpool 发表于 2004-10-7 16:01:00

呵呵~~~这个问题,我上面的帖子已经说解决了


AcGePoint3d point(pt2,pt2-pt1,pt2-pt1);       //这样就已经达到目的,可以在三维中任意移动了<BR>        AcGeVector3d       x(1,0,0),y(0,1,0),z(0,0,1);<BR>        AcGeMatrix3d mat;<BR>        mat.setCoordSystem(point,x,y,z);<BR>        acdbOpenObject(pEnt,eId,AcDb::kForWrite);<BR>        pEnt-&gt;transformBy(mat);        pEnt-&gt;close();

王咣生 发表于 2004-10-7 17:55:00

回复

好,我也学会了你的代码!

页: [1]
查看完整版本: 帮忙看看transformBy移动的问题吧