找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1258|回复: 7

[求助] [求助]:ECS到WCS兼问XdRx_Matrix_ecs2wcs。

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-2-24 18:35:41 | 显示全部楼层 |阅读模式

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

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

×
为什么ecs2wcs返回的总是((1.0 0.0 0.0 0.0) (0.0 1.0 0.0 0.0) (0.0 0.0 1.0 0.0) (0.0 0.0 0.0 1.0)),不论选择的是块还是在UCS中生成的实体。

  1. xdrx_matrix_ecs2wcs

  2. 功    能:获得对象的ECS(OCS)到WCS下的转换矩阵

  3. 调用格式:(xdrx_matrix_ecs2wcs <实体名>)

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-2-24 19:49:09 | 显示全部楼层

Re: [求助]:ECS到WCS兼问XdRx_Matrix_ecs2wcs。

最初由 eachy 发布
[B]为什么ecs2wcs返回的总是((1.0 0.0 0.0 0.0) (0.0 1.0 0.0 0.0) (0.0 0.0 1.0 0.0) (0.0 0.0 0.0 1.0)),不论选择的是块还是在UCS中生成的实体。
[CODE]
xdrx_matrix_ecs2wcs

功    能:获得对象的ECS(OCS)到WC... [/B]


EA,去看看下面链接的两个帖子,理解下ECS,ECS是保存实体数据时候使用的“局部坐标系”。

大多数情况ECS的原点和WCS原点相同,只有X,Y轴不同的时候,返回的转换矩阵才不是上面的单位矩阵。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-2-24 22:19:04 | 显示全部楼层
贴个图,方便理解下


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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2003-2-25 01:13:59 | 显示全部楼层
第二次重新指定了UCS,ECS的转换矩阵还是一样的?
  1. 命令: ucs

  2. 当前 UCS 名称: *世界*
  3. 输入选项
  4. [新建(N)/移动(M)/正交(G)/上一个(P)/恢复(R)/保存(S)/删除(D)/应用(A)/?/世界(W)]
  5. <世界>: n

  6. 指定新 UCS 的原点或 [Z 轴(ZA)/三点(3)/对象(OB)/面(F)/视图(V)/X/Y/Z] <0,0,0>:
  7. 30,40

  8. 命令:
  9. UCS
  10. 当前 UCS 名称: *没有名称*
  11. 输入选项
  12. [新建(N)/移动(M)/正交(G)/上一个(P)/恢复(R)/保存(S)/删除(D)/应用(A)/?/世界(W)]
  13. <世界>: n

  14. 指定新 UCS 的原点或 [Z 轴(ZA)/三点(3)/对象(OB)/面(F)/视图(V)/X/Y/Z] <0,0,0>: z

  15. 指定绕 Z 轴的旋转角度 <90>: 30

  16. 命令:
  17. UCS
  18. 当前 UCS 名称: *没有名称*
  19. 输入选项
  20. [新建(N)/移动(M)/正交(G)/上一个(P)/恢复(R)/保存(S)/删除(D)/应用(A)/?/世界(W)]
  21. <世界>: n

  22. 指定新 UCS 的原点或 [Z 轴(ZA)/三点(3)/对象(OB)/面(F)/视图(V)/X/Y/Z] <0,0,0>: x

  23. 指定绕 X 轴的旋转角度 <90>: 30

  24. 命令: cr CIRCLE 指定圆的圆心或 [三点(3P)/两点(2P)/相切、相切、半径(T)]:
  25. 指定圆的半径或 [直径(D)]:
  26. 命令: li LIST
  27. 选择对象: 找到 1 个

  28. 选择对象:
  29.                   CIRCLE    Layer: "0"
  30.                             Space: Model space
  31.                    Handle = 70
  32.             center point, X= 472.0912  Y= -10.7099  Z=   0.0000
  33.             radius   95.2802
  34.      circumference  598.6634
  35.               area 28520.3972

  36. [color=blue]命令: (xdrx_matrix_ecs2wcs (car (entsel)))

  37. 选择对象: ((0.866025 -0.433013 0.25 0.0) (0.5 0.75 -0.433013 0.0) (0.0 0.5
  38. 0.866025 0.0) (0.0 0.0 0.0 1.0))[/color]

  39. [color=red]命令: ucs
  40. 当前 UCS 名称: *没有名称*
  41. 输入选项
  42. [新建(N)/移动(M)/正交(G)/上一个(P)/恢复(R)/保存(S)/删除(D)/应用(A)/?/世界(W)]
  43. <世界>: n
  44. 指定新 UCS 的原点或 [Z 轴(ZA)/三点(3)/对象(OB)/面(F)/视图(V)/X/Y/Z] <0,0,0>:[/color]
  45. 命令: cr CIRCLE 指定圆的圆心或 [三点(3P)/两点(2P)/相切、相切、半径(T)]:
  46. 指定圆的半径或 [直径(D)] <95.2802>:
  47. 命令: (xdrx_matrix_ecs2wcs (car (entsel)))

  48. 选择对象: ((0.866025 -0.433013 0.25 0.0) (0.5 0.75 -0.433013 0.0) (0.0 0.5
  49. 0.866025 0.0) (0.0 0.0 0.0 1.0))
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-2-27 10:49:40 | 显示全部楼层
;;"ECS的原点和WCS原点相同,只有X,Y轴不同的时候,返回的转换矩阵才不是上面的单位矩阵。"

;;这样说来,Z轴的旋转xdrx_matrix_ecs2wcs并不能求出。

;;也就是说函数XDRX_MATRIX_GETECS,其中法线向量(Z轴)旋转的话,函数并不能把它求出,
那还有甚么方法求Z轴旋转?

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-2-27 11:01:26 | 显示全部楼层
最初由 LUCAS 发布
[B];;"ECS的原点和WCS原点相同,只有X,Y轴不同的时候,返回的转换矩阵才不是上面的单位矩阵。"

;;这样说来,Z轴的旋转xdrx_matrix_ecs2wcs并不能求出。

;;也就是说函数XDRX_MATRIX_GETECS,其中法线向量(Z轴)旋转?.. [/B]


概念还是有点没有明白,Z轴是条件,就是组码210,知道Z轴,就可以求出X轴,然后求出Y轴。Z轴是平面的法向,是已知的。

只要是ACAD里面的实体,就可以用 xdrx_matrix_ecs2wcs 获得转换矩阵。

你说的对象UCS,可以用矩阵,以前给大家讨论的设置POLY的UCS可能是你的问题,看看下面的帖子,设置UCS到POLYLINE的指定段,关于向量的运用:

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2003-2-27 13:59:18 | 显示全部楼层
对于210组码,就是说只要Z高度一定的实体,不管UCS原点在哪里,其ECS-》WCS矩阵都相同。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-2-27 14:39:07 | 显示全部楼层

  1. ;;对region物件无效
  2. (defun c:UCS_Z(/ e)
  3.    (if (setq e (car (entsel)))
  4.      (progn
  5.         (command "._ucs" "n" "ob" e)
  6.         (command "._ucs" "n" "za" "" '(0 -1 0))
  7.      )
  8.    )
  9.    (princ)
  10. )


  11. 对region物件有效
  12. (defun c:UCS_Z(/ e)
  13.    (if (setq e (cadr (entsel)))
  14.      (progn
  15.         (command "._ucs" "n" "ob" e)
  16.         (command "._ucs" "n" "za" "" '(0 -1 0))
  17.      )
  18.    )
  19.    (princ)
  20. )

  21. 对region对象有效,是因为有点选动作,但如在选集中,
  22. 则对region无效,连双元表也对其无效(可能我对双元表用错了)。

  23. (defun C:UCS_Z (/ E)
  24.   (setq E (ssget '((0 . "region"))))
  25.   (command "._ucs" "n" "ob" (list (ssname E 0) '(0 0 0)))
  26. )

  27. 设 REGION对Z轴旋转30度,再對X轴旋转30度
  28. (不在世界坐标 OR  Z不等于0 ),即不能用vla-get-centroid取得质心,
  29. 但当对REGION作对象UCS则问题解决。


  30. 问题待解:
  31. 如何在选集中对REGION作对象UCS???

  32. ;;在质心上画点
  33. (defun C:CENTROID (/ HOLDOSMODE SS N CENT KEY KEY1 KEY2 TMP)
  34.   (defun DO_IT (ENT)
  35.     (setq
  36.       CENT
  37.        (vlax-get (vlax-ename->vla-object ENT) "centroid")
  38.     )
  39.     (prompt (strcat "\n矩心= " (vl-princ-to-string CENT)))
  40.     (command "_.POINT" CENT)
  41.   )
  42.   (vl-load-com)
  43.   (setq HOLDOSMODE (getvar "osmode"))
  44.   (while (= SS NIL)
  45.     (prompt "\n选择对象: ")
  46.     (setq
  47.       SS (ssget
  48.            '((0 . "region,lwpolyline,polyline,circle,ellipse,spline"))
  49.          )
  50.     )
  51.   )
  52.   (setq N 0)
  53.   (setvar "osmode" 0)
  54.   (setvar "PDMODE" 35)
  55.   (repeat (sslength SS)
  56.     (setq KEY1 (ssname SS N))
  57.     (setq KEY2 (vlax-ename->vla-object KEY1))
  58.     (setq KEY (cdr (assoc 0 (entget KEY1))))
  59.     (cond
  60.       ((= KEY "REGION")
  61.        ;;(M_UCS KEY2)
  62.        (DO_IT KEY1)
  63.        (command "_.UCS" "P")
  64.       )
  65.       ((or (= KEY "CIRCLE")
  66.            (= KEY "ELLIPSE")
  67.            (and
  68.              (or (= KEY "LWPOLYLINE")
  69.                  (= KEY "POLYLINE")
  70.                  (= KEY "SPLINE")
  71.              )
  72.              (= :vlax-true (vla-get-closed KEY2))
  73.            )
  74.        )
  75.        (command "_.COPY" KEY1 "" "0,0" "@")
  76.        (command "_.REGION" (entlast) "")
  77.        (setq TMP (entlast))
  78.        ;;(M_UCS (vlax-ename->vla-object TMP))
  79.        (DO_IT TMP)
  80.        (command "_.ERASE" TMP "")
  81.       )
  82.     )
  83.     (setq N (1+ N))
  84.   )
  85.   (setvar "osmode" HOLDOSMODE)
  86.   (princ)
  87. )
  88. (princ)


  89. ;;因求不出Z轴旋转或NEWUCS精度不足,故失败
  90. ;;-------------------------------------------------------
  91. (defun M_UCS (ENT)
  92.   (setq        UCS (XDRX_MATRIX_GETECS
  93.               (vlax-safearray->list
  94.                 (vlax-variant-value (vla-get-normal ENT))
  95.               )
  96.             )
  97.   )
  98.   (setq        NEWUCS (vla-add        (vla-get-usercoordinatesystems
  99.                           (setq        DOC (vla-get-activedocument
  100.                                       (vlax-get-acad-object)
  101.                                     )
  102.                           )
  103.                         )
  104.                         (vlax-3d-point '(0 0 0))
  105.                         (vlax-3d-point (nth 0 UCS))
  106.                         (vlax-3d-point (nth 1 UCS))
  107.                         "New_UCS"
  108.                )
  109.   )
  110.   (vla-put-activeucs DOC NEWUCS)
  111. )

  112. (defun XDRX_MATRIX_GETECS (NORMAL / ECS_X ECS_Y)
  113.   (setq NORMAL (xdrx_vector_normalize NORMAL))
  114.   (if (and
  115.         (< (abs (car NORMAL)) (/ 1 64.0))
  116.         (< (abs (cadr NORMAL)) (/ 1 64.0))
  117.       )
  118.     (setq ECS_X        (xdrx_vector_normalize
  119.                   (xdrx_vector_crossproduct
  120.                     '(0 1 0)
  121.                     NORMAL
  122.                   )
  123.                 )
  124.     )
  125.     (setq ECS_X        (xdrx_vector_normalize
  126.                   (xdrx_vector_crossproduct
  127.                     '(0 0 1)
  128.                     NORMAL
  129.                   )
  130.                 )
  131.     )
  132.   )
  133.   (setq ECS_Y (xdrx_vector_crossproduct NORMAL ECS_X))
  134.   (list ECS_X (xdrx_vector_normalize ECS_Y) NORMAL)
  135. )
  136. ;;--------------------------------------------------------
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 19:35 , Processed in 0.182998 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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