帮忙看看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->transformBy(mat);mat.<BR> pEnt->close(); 或者说我将这里改一下:AcGePoint3d point(1309,1039,500);
执行后,实体不知道跑到哪里去了,就是没在给定的点那里,奇怪的 晕,调程序才发现,原来移动是相对坐标,而不是绝对坐标,怪不得不能到指定点去
要指定基点然后相减才能到指定点,
希望对大家有借鉴作用
回复
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->transformBy(mat3d);
pEnt->close();
} <A name=56388><FONT color=#990000><B>王</B></FONT></A>斑竹,你给的例子好象是在XY平面上的移动吧,如果在XYZ三维上移动呢?
vec(pt2-pt1, pt2-pt1,pt2-pt1)好象不行吧
回复
你想怎么做呢? 呵呵~~~这个问题,我上面的帖子已经说解决了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->transformBy(mat); pEnt->close();
回复
好,我也学会了你的代码!
页:
[1]