明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: xunifengshen

[提问] 如何获取块内某点的全局坐标

[复制链接]
发表于 前天 09:13 | 显示全部楼层
光算基点没有用,块的比例,旋转和镜像都有影响。所以需要用正经的块转换矩阵进行transform
回复 支持 反对

使用道具 举报

发表于 前天 09:55 | 显示全部楼层
xunifengshen 发表于 2025-9-1 09:02
我就是没法获取全局坐标啊 块基点和块内坐标岂不是一样的道理 获取的块基点都是0  没什么用

发图看看   
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 10:47 | 显示全部楼层

不好意思  现在网站不能上传文件和图片了 我大约描述下吧 当我选择两个相同的块时 这两个块都有一个相同的圆 我把这两个圆心坐标找出来 后续操作 比如 连线
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 10:49 | 显示全部楼层
kozmosovia 发表于 2025-9-1 09:13
光算基点没有用,块的比例,旋转和镜像都有影响。所以需要用正经的块转换矩阵进行transform

这个矩阵确实是很好 但是这个方法有点技术含量  有点吃不透了 我就想着通过一个方法获取两个相同块内的相同元素 比如一个圆的圆心 找出这两个坐标 然后连线
回复 支持 反对

使用道具 举报

发表于 前天 11:12 | 显示全部楼层
本帖最后由 caoyin 于 2025-9-3 00:38 编辑

;;p1是块定义内的点,P2是块参照所在空间的点

(setq en  (car (entsel "\n选择块参照: "))
      mat (RefGeom en)
      p2  (mapcar '+ (mxv (car mat) p1) (cadr mat))
)


;; RefGeom (gile)
;; returns a list which first item is a 3x3 transformation matrix (rotation,
;; scales, normal) and second item the object insertion point in its parent
;; (xref, bloc or space)
;;
;; Argument : an ename
(defun RefGeom (ename / elst ang norm)
  (setq elst (entget ename)
        ang  (cdr (assoc 50 elst))        
        norm (cdr (assoc 210 elst))
  )
  (list
    (mxm
      (mapcar (function (lambda (v) (trans v 0 norm T)))
          '((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0))
      )
      (mxm
        (list (list (cos ang) (- (sin ang)) 0.0)
              (list (sin ang) (cos ang) 0.0)
              '(0.0 0.0 1.0)
        )
        (list (list (cdr (assoc 41 elst)) 0.0 0.0)
              (list 0.0 (cdr (assoc 42 elst)) 0.0)
              (list 0.0 0.0 (cdr (assoc 43 elst)))
        )
      )
    )
    (trans (cdr (assoc 10 elst)) norm 0)
  )
)

;;; VXV Returns the dot product of 2 vectors
(defun vxv (v1 v2)
  (apply '+ (mapcar '* v1 v2))
)
;; TRP Transpose a matrix -Doug Wilson-
(defun trp (m)
  (apply 'mapcar (cons 'list m))
)
;; MXV Apply a transformation matrix to a vector -Vladimir Nesterovsky-
(defun mxv (m v)
  (mapcar '(lambda (r) (vxv r v)) m)
)
;; MXM Multiply two matrices -Vladimir Nesterovsky-
(defun mxm (m q)
  (mapcar '(lambda (r) (mxv (trp q) r)) m)
)

评分

参与人数 1明经币 +1 收起 理由
aihuyujian + 1 测试可行,还是有现成的代码好啊,矩阵早忘.

查看全部评分

回复 支持 反对

使用道具 举报

发表于 前天 11:19 | 显示全部楼层
xunifengshen 发表于 2025-9-1 10:49
这个矩阵确实是很好 但是这个方法有点技术含量  有点吃不透了 我就想着通过一个方法获取两个相同块内的相 ...

简易方式:在圆心放置一个非常小的属性,然后直接从块参照提取块内属性,通过取属性的定位点获取实际的圆心WCS的坐标。这样就完全不用考虑矩阵。
回复 支持 反对

使用道具 举报

发表于 前天 11:32 | 显示全部楼层
kozmosovia 发表于 2025-9-1 11:19
简易方式:在圆心放置一个非常小的属性,然后直接从块参照提取块内属性,通过取属性的定位点获取实际的圆 ...
不推荐这样
1.结果错误:属性和属性定义可以不在一个位置的
2.方法不好
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 11:32 | 显示全部楼层
caoyin 发表于 2025-9-1 11:12
;;p1是块内点,P2是当前空间的点

(setq en  (car (entsel "\n选择块参照: "))

选择块参照: ; 错误: no function definition: REFGEOM
回复 支持 反对

使用道具 举报

发表于 前天 11:33 | 显示全部楼层
xunifengshen 发表于 2025-9-1 11:32
选择块参照: ; 错误: no function definition: REFGEOM

后面的引用程序没看到吗?
回复 支持 反对

使用道具 举报

发表于 前天 11:34 | 显示全部楼层
本帖最后由 kozmosovia 于 2025-9-1 12:08 编辑
caoyin 发表于 2025-9-1 11:32
不推荐这样
1.结果错误:属性和属性定义可以不在一个位置的
2.方法不好

属性是可以lockpoisiton的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-3 16:41 , Processed in 0.152408 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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