明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2966|回复: 7

帮忙看看transformBy移动的问题吧

[复制链接]
发表于 2004-10-2 16:35:00 | 显示全部楼层 |阅读模式
不知为什么,就是不能移动到选取的点的位置,各位帮忙看看 AcDbObjectId eId;
AcDbEntity *pEnt;
ads_name objname;
ads_point pt1,pt2;
acedEntSel("dfdf",objname,pt1);
acdbGetObjectId(eId,objname);
acedGetPoint(NULL,"选择移动点",pt2);
AcGePoint3d point(pt2[X],pt2[Y],pt2[Z]);
AcGeVector3d x(1,0,0),y(0,1,0),z(0,0,1);
AcGeMatrix3d mat;
mat.setCoordSystem(point,x,y,z);
acdbOpenObject(pEnt,eId,AcDb::kForWrite);
pEnt->transformBy(mat);mat.
pEnt->close();
 楼主| 发表于 2004-10-2 16:49:00 | 显示全部楼层
或者说我将这里改一下:AcGePoint3d point(1309,1039,500);


执行后,实体不知道跑到哪里去了,就是没在给定的点那里,奇怪的
 楼主| 发表于 2004-10-2 17:02:00 | 显示全部楼层
晕,调程序才发现,原来移动是相对坐标,而不是绝对坐标,怪不得不能到指定点去


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


希望对大家有借鉴作用
发表于 2004-10-2 17:30:00 | 显示全部楼层

回复

static void asdktranformBy_TransBy(void)
{
// Add your code for command asdktranformBy._TransBy here
AcDbObjectId eId;
AcDbEntity *pEnt;
ads_name objname;
ads_point pt1,pt2; acedEntSel("dfdf",objname,pt1); acdbGetObjectId(eId,objname); acedGetPoint(NULL,"选择移动点",pt2); acdbOpenObject(pEnt,eId,AcDb::kForWrite); AcGeMatrix3d mat3d;
AcGeVector3d vec(pt2[X]-pt1[X], pt2[Y]-pt1[Y],0);

mat3d.setTranslation(vec); pEnt->transformBy(mat3d); pEnt->close(); }
 楼主| 发表于 2004-10-6 14:26:00 | 显示全部楼层
斑竹,你给的例子好象是在XY平面上的移动吧,如果在XYZ三维上移动呢? vec(pt2[X]-pt1[X], pt2[Y]-pt1[Y],pt2[Z]-pt1[Z])好象不行吧
发表于 2004-10-7 14:50:00 | 显示全部楼层

回复

你想怎么做呢?
 楼主| 发表于 2004-10-7 16:01:00 | 显示全部楼层
呵呵~~~这个问题,我上面的帖子已经说解决了 AcGePoint3d point(pt2[X-pt1[X],pt2[Y]-pt1[Y],pt2[Z]-pt1[Z]); //这样就已经达到目的,可以在三维中任意移动了
AcGeVector3d x(1,0,0),y(0,1,0),z(0,0,1);
AcGeMatrix3d mat;
mat.setCoordSystem(point,x,y,z);
acdbOpenObject(pEnt,eId,AcDb::kForWrite);
pEnt->transformBy(mat); pEnt->close();
发表于 2004-10-7 17:55:00 | 显示全部楼层

回复

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 11:31 , Processed in 0.193260 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表