找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 429|回复: 4

[ARX程序]:那位真的不能帮一下忙吗?

[复制链接]
发表于 2004-4-13 22:40:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
[php]
// 以下代码调试,执行成功!
        ads_name ss,ent;
        acedSSGet(NULL,NULL,NULL,NULL,ss);
        AcDbObjectId Id;
        long leng;
        if(acedSSLength(ss,&leng)!=RTNORM)//获得选择集包含的个数保存在参数leng中。
        {
                acutPrintf("\n没有选中何何目标!");
                acedSSFree(ss);//释放选择集
                return;
        }
        //将依次显示所选对象的ID号
        for(long i=0;i<leng;i++)
        {
                if(acedSSName(ss,i,ent)!=RTNORM)//返回指定索引号i的实体名ent
                        continue;
                if(acdbGetObjectId(Id,ent)!=Acad::eOk)
                        continue;
                //打开实体写
                AcDbEntity *pEnt;
                if (acdbOpenObject(pEnt,Id,AcDb::kForWrite) != Acad::eOk)
                        return;
                AcGeMatrix3d Mat;
                AcGeScale3d  Scale(2,2,2);
                Scale.getMatrix(Mat);
                pEnt->transformBy(Mat);//把变换矩阵作用的实体上后,实体就缩小了
                //以上代码实现选择到的实体放大2倍,可是晓东您论坛在<<[求助]:我想要模拟Acad的ALIGN命令,实体的转换矩阵怎么写?>>
                //说过:"如果X,Y,Z比例不同,那么就要用AcGeScale3d对象,设置好X,Y,Z后,用AcGeScale3d::getMatrix(..)得到矩阵。"
                //我将得到的矩阵作用到实体上,同比缩放:执行成功; 不同比例:没有效果。请问为何会这样?怎样才能实现不同比例缩放?
                pEnt->close();
        }
        acedSSFree(ss);
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-4-14 03:01:57 | 显示全部楼层

Re: [ARX程序]:那位真的不能帮一下忙吗?

最初由 chsqchne 发布
[B][php]
// 以下代码调试,执行成功!
        ads_name ss,ent;
        acedSSGet(NULL,NULL,NULL,NULL,ss);
        AcDbObjectId Id;
        long leng;
        if(acedSSLength(ss,&leng)!=RTNORM)//获得选择集包含的个数保存在参数leng中。
... [/B]


1、ACAD里面,普通实体只能等比例缩放。如果你做成块,才可以变比例缩放。

2、模拟ALIGN命令,你得到两个参考向量后,可以用AcGeVector3d类的rotateTo得到对齐变换矩阵:


  1. AcGeVector3d::rotateTo Function AcGeMatrix3d

  2. rotateTo(

  3. const AcGeVector3d& vec,

  4. const AcGeVector3d& axis = AcGeVector3d::kIdentity) const;

  5. vec Input vector
  6. axis Input perpendicular vector

  7. Returns a matrix mat such that mat x this vector yields the argument

  8. vector vec.

  9. There is no unique matrix to represent a rotation from this vector to vec
  10. when they are parallel and in opposite directions. In this case, the
  11. argument axis is used (if it is perpendicular to this vector) to uniquely
  12. determine the resultant matrix. axis defaults to the zero-length vector, in
  13. which case an arbitrary (but correct) matrix will be returned that rotates
  14. this vector to vec.

  15. Contract: This vector and vec must be non-zero length.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-14 09:48:04 | 显示全部楼层
高手就是高手
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-15 00:46:24 | 显示全部楼层
多谢了!我试一下!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-4-15 01:13:28 | 显示全部楼层
最初由 chsqchne 发布
[B]多谢了!我试一下! [/B]


好,等写好了,把代码贴到论坛来吧,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-6-9 21:32 , Processed in 0.275363 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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