找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 498|回复: 10

[教学] 实例理解实体数据和对象坐标系

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-8-27 00:20:19 | 显示全部楼层 |阅读模式

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

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

×
圆实体的实体数据,圆心是用对象坐标系保存的,在世界坐标系下,你entget看到的坐标和世界坐标相同,但含义是不同的。

下面图片用两个视窗,看下世界坐标系的圆在两个不同坐标系的显示。
左边是世界坐标系
右边是Z轴=0,-1,0的用户坐标系,在用户坐标系我们看到是一条投影的直线

搜狗截图20170826232923.png
搜狗截图20170826232949.png

世界坐标系的圆的数据定义:
((-1 . <图元名: 7ff761421130>) (0 . "CIRCLE") (330 . <图元名: 7ff761413e70>) (5 . "1CB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbCircle") (10 825.423 443.197 0.0) (40 . 95.7792) (210 0.0 0.0 1.0))


搜狗截图20170827000652.png

修改到用户坐标系显示正圆的数据格式:
((-1 . <图元名: 7ff761421130>) (0 . "CIRCLE") (330 . <图元名: 7ff761413e70>) (5 . "1CB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbCircle") (10 825.423 0.0 -443.197) (40 . 95.7792) (210 0.0 -1.0 0.0))


下面代码,把世界坐标系的圆修改成在用户坐标系同样显示的圆。

  1. ;|
  2. 函数名称:        XD::Vec:vxv
  3. 调用格式:        (XD::Vec:vxv  v1 v2)
  4. 参数说明:        v1 ------ 向量
  5. v2 ------ 向量
  6. 返回值:        向量
  7. 向量点积的几何意义:等于垂直于两向量确定平面的的向量
  8. |;
  9. (defun XD::Vec:vxv ( v1 v2 )
  10.   (list
  11.     (- (* (cadr v1) (caddr v2)) (* (cadr v2) (caddr v1)))
  12.     (- (* (car  v2) (caddr v1)) (* (car  v1) (caddr v2)))
  13.     (- (* (car  v1) (cadr  v2)) (* (car  v2) (cadr  v1)))
  14.   )
  15. )

  16. (defun c:tt ()
  17.   (if (setq e (car (entsel)))
  18.     (progn
  19.       (setq ed             (entget e)
  20.             old-zdir (assoc 210 ed)
  21.             old-cen  (cdr (assoc 10 ed))
  22.             old-cen  (trans old-cen e 0) ;;圆心从对象坐标系转换到世界坐标系
  23.             ucsxdir  (getvar "ucsxdir")
  24.             ucsydir  (getvar "ucsydir")
  25.             ucszdir  (xd::vec:VxV ucsxdir ucsydir)  ;;得到当前UCS的Z轴向量
  26.             new-cen  (trans old-cen 0 ucszdir) ;;圆心从世界坐标系转换到当前用户坐标系,当前UCS的Z轴就是对象坐标系的Z轴
  27.             ed             (subst (cons 10 new-cen) (assoc 10 ed) ed)
  28.             ed             (subst (cons 210 ucszdir) (assoc 210 ed) ed)
  29.       )
  30.       (entmod ed)
  31.     )
  32.   )
  33. )


评分

参与人数 1D豆 +5 收起 理由
sh_h + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

已领礼包: 812个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 8711个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 769个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 3904个

财富等级: 富可敌国

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2017-8-28 08:17:51 | 显示全部楼层
对象坐标系就是原点和 WCS 原点重合,Z 轴(矢量)任意的坐标系
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2017-8-28 09:18:01 | 显示全部楼层

是的,主要就是对象生成时候的UCS的Z轴向量。通过保存在实体数据里面的组码210,通过
wcsToPlane 的矩阵变换,就把WCS的点变换到对象坐标系了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2017-8-28 09:22:01 | 显示全部楼层
通过Z周向量,获得WCS到对象坐标系的变换方法
AcGeVector normal;
normal = pObj->normal();
AcGePlane mPlane;
mPlane.set(AcGePoint3d(),normal);
AcGeMatrix3d mat;
mat.setToWorldToPlane(mPlane);

pnt.transformBy(mat);   变换世界坐标系点到对象坐标系,相当于LISP的,(trans pnt 0 obj)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 18:35 , Processed in 0.433698 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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