乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 69|回复: 2

[编程交流] 重心

[复制链接]

41

主题

120

帖子

84

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
200
发表于 2022-7-5 19:48:32 | 显示全部楼层 |阅读模式
如何获取块中包含的重心实体。
 
 
 
 
我用过
 
  1. (vlax-safearray->list(vlax-variant-value(vla-get-centroid vlaobject)))

不幸的是,我不知道如何转换为全局坐标系
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:20:26 | 显示全部楼层
使用gile的refgeom函数相对于块参考几何图元变换点,例如:
  1. (defun c:test ( / cen ent )
  2.    (princ "\nSelect a block reference containing a solid: ")
  3.    (if (setq ent (ssget "_+.:E:S" '((0 . "INSERT"))))
  4.        (progn
  5.            (setq ent (ssname ent 0))
  6.            (vlax-for obj (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (cdr (assoc 2 (entget ent))))
  7.                (if (vlax-property-available-p obj 'centroid)
  8.                    (setq cen (vlax-get obj 'centroid))
  9.                )
  10.            )
  11.            (if cen
  12.                (entmake
  13.                    (list
  14.                       '(0 . "POINT")
  15.                        (cons 10 (apply '(lambda ( m v ) (mapcar '+ (mxv m cen) v)) (refgeom ent)))
  16.                    )
  17.                )
  18.                (princ "\nNo block components found with Centroid property.")
  19.            )
  20.        )
  21.    )
  22.    (princ)
  23. )
  24. ;; RefGeom (gile)
  25. ;; Returns a list whose first item is a 3x3 transformation matrix and
  26. ;; second item the object insertion point in its parent (xref, block or space)
  27. (defun refgeom ( ent / ang enx mat ocs )
  28.    (setq enx (entget ent)
  29.          ang (cdr (assoc 050 enx))
  30.          ocs (cdr (assoc 210 enx))
  31.    )
  32.    (list
  33.        (setq mat
  34.            (mxm
  35.                (mapcar '(lambda ( v ) (trans v 0 ocs t))
  36.                   '(
  37.                        (1.0 0.0 0.0)
  38.                        (0.0 1.0 0.0)
  39.                        (0.0 0.0 1.0)
  40.                    )
  41.                )
  42.                (mxm
  43.                    (list
  44.                        (list (cos ang) (- (sin ang)) 0.0)
  45.                        (list (sin ang) (cos ang)     0.0)
  46.                       '(0.0 0.0 1.0)
  47.                    )
  48.                    (list
  49.                        (list (cdr (assoc 41 enx)) 0.0 0.0)
  50.                        (list 0.0 (cdr (assoc 42 enx)) 0.0)
  51.                        (list 0.0 0.0 (cdr (assoc 43 enx)))
  52.                    )
  53.                )
  54.            )
  55.        )
  56.        (mapcar '- (trans (cdr (assoc 10 enx)) ocs 0)
  57.            (mxv mat (cdr (assoc 10 (tblsearch "block" (cdr (assoc 2 enx))))))
  58.        )
  59.    )
  60. )
  61. ;; Matrix Transpose  -  Doug Wilson
  62. ;; Args: m - nxn matrix
  63. (defun trp ( m )
  64.    (apply 'mapcar (cons 'list m))
  65. )
  66. ;; Matrix x Matrix  -  Vladimir Nesterovsky
  67. ;; Args: m,n - nxn matrices
  68. (defun mxm ( m n )
  69.    ((lambda ( a ) (mapcar '(lambda ( r ) (mxv a r)) m)) (trp n))
  70. )
  71. ;; Matrix x Vector  -  Vladimir Nesterovsky
  72. ;; Args: m - nxn matrix, v - vector in R^n
  73. (defun mxv ( m v )
  74.    (mapcar '(lambda ( r ) (apply '+ (mapcar '* r v))) m)
  75. )
  76. (vl-load-com) (princ)
回复

使用道具 举报

41

主题

120

帖子

84

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
200
发表于 2022-7-5 20:54:23 | 显示全部楼层
这是一个很棒的功能,非常感谢。
 
 
函数取第一个实体块的重心
有没有一种方法,没有“联合”来确定两个物体的重心。。。固体?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 13:18 , Processed in 0.468150 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表