明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 708|回复: 17

[提问] 获取块的中心点

[复制链接]
发表于 2024-1-18 12:17 | 显示全部楼层 |阅读模式
请教各位,怎么能获取块的中心点?通过组码只能获取到插入点。
 楼主| 发表于 2024-1-19 14:43 | 显示全部楼层
取得图块最小包络线,再用liuhe提供的程序,可暂时实现。谢谢大家
;;----------------=={ Minimum Bounding Box }==----------------;;
;;  Arguments:                                                ;;
;;  en - selection set to process                             ;;
;;  pr - precision of calculation, 0 < pr < 1  
(defun LM:MinBoundingBox ( en pr / an ba bb bm cn cv i l mb )
  (if en
    (progn
      (setq bb
        (LMistBoundingBox
            (setq l (cons (vla-copy (vlax-ename->vla-object en)) l))
        )
      )
      (setq pr (* pr pi)
            cn (apply 'mapcar (cons (function (lambda ( a b ) (/ (+ a b) 2.0))) bb))
            cv (vlax-3D-point cn)
            bm (* (- (caadr bb) (caar bb)) (- (cadadr bb) (cadar bb)))
            mb (cons 0.0 bb)
            an 0
      )
      (while (< (setq an (+ an pr)) pi)
        (foreach x l (vla-rotate x cv pr))
        (setq bb (LMistBoundingBox l)
              ba (* (- (caadr bb) (caar bb)) (- (cadadr bb) (cadar bb)))
        )
        (if (< ba bm) (setq bm ba mb (cons an bb)))
      )
      (foreach x l (vla-delete x))
      (LM:RotatePointsByMatrix
        (mapcar
          (function
            (lambda ( a )
              (mapcar (function (lambda ( b ) ((eval b) (cdr mb)))) a)
            )
          )
         '((caar cadar) (caadr cadar) (caadr cadadr) (caar cadadr))
        )
        cn (- (car mb))
      )
    )
  )
)
发表于 2024-1-18 17:09 | 显示全部楼层
  1. ;;45 [功能] 返回封闭曲线质心二维坐标
  2. ;; 示例:   (MJ:Centroid (car (entsel)))
  3. (defun c:tt()
  4.   (princ(MJ:Centroid (car (entsel))))
  5.   (princ))
  6. (defun MJ:Centroid (poly / pl ms va reg cen)
  7.    (setq   *ACAD*  (vlax-get-acad-object)
  8.       *DOC*   (vla-get-ActiveDocument *ACAD*))
  9.   (vl-load-com)
  10.   (setq pl (vlax-ename->vla-object poly)
  11. ms (vla-get-modelspace
  12.       *DOC*
  13.     )
  14. va (vlax-make-safearray vlax-vbObject '(0 . 0))
  15.   )
  16.   (vlax-safearray-put-element va 0 pl)
  17.   (setq reg (car (vlax-safearray->list
  18.      (vlax-variant-value (vla-addregion ms va))
  19.    )
  20.      )
  21. cen (vla-get-centroid reg)
  22.   )
  23.   (vla-delete reg)
  24.   (vlax-safearray->list (vlax-variant-value cen))
  25. )

 楼主| 发表于 2024-1-19 14:44 | 显示全部楼层
(defun hlkx ( en / s )
(if en
    (entmakex
      (append
        (list
          (cons 0 "LWPOLYLINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbPolyline")
          (cons 90 4)
          (cons 70 1)
        )
        (mapcar '(lambda ( p ) (cons 10 p)) (LM:MinBoundingBox en 0.001))
      )
    )
  )
  (entlast)
)
发表于 2024-1-18 12:26 | 显示全部楼层
算包围盒对角点 再计算对角点中点
发表于 2024-1-18 13:13 | 显示全部楼层
块中心点怎么定义的呢?
发表于 2024-1-18 13:22 | 显示全部楼层
块的几何中心?
发表于 2024-1-18 13:50 | 显示全部楼层
做成编组 通过编程识别另一个图元名 进行判断修改
 楼主| 发表于 2024-1-18 14:13 | 显示全部楼层
都是一些简单的、对称性的多边形等。描述可能不准确。
发表于 2024-1-18 20:45 | 显示全部楼层
  1. ;; (setq pt (ECenter (setq s1(car(entsel"\n选择: ")))))
  2. (defun ECenter (s1 / a b)
  3.   (vla-getboundingbox(vlax-ename->vla-object s1)'a'b)
  4.   (mapcar'(lambda(x y)(*(+ x y)0.5))(vlax-safearray->list a)(vlax-safearray->list b))
  5. )
发表于 2024-1-19 01:53 | 显示全部楼层
这个问题你们考虑简单了,XCLIP块,需要支持的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 05:50 , Processed in 0.171917 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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