asos2000 发表于 2022-7-5 16:41:59

Lisp查找重心

是否有lisp来获取某个区域的重心
 
如果有可能得到几个区域的CG
 
我在想,lisp在CG中绘制了一个点,一个引线显示了指向CG的坐标(或任何东西)
如附件所示
 
Thanx公司

BIGAL 发表于 2022-7-5 16:46:03

只是一个脚注填充图案的中心不是所示3个对象的重心。
 
如果您挤出对象并减去孔,然后列出对象,您将获得真正的重心。这适用于混凝土倾斜面板,但不确定如何将3个面板的重心合并。第一原则可能适用于质心。

fixo 发表于 2022-7-5 16:50:32

嗨,比格尔
是的,你说得对
我删除了我的worng解决方案
 
~'J'~

asos2000 发表于 2022-7-5 16:53:35

thanx fixo公司
thanx BIGAL公司
这就是我要做的,但是
我正在搜索lisp,以节省每个区域挤出的时间
 
但是我不能得到一个以上的CG领域,在这种情况下,我必须使用另一个程序看起来像SAP或任何时候
 
我想在AutoCAD中做每件事
 
Thans全部

hendie 发表于 2022-7-5 16:55:37

我写了一个程序,把一个点放在一个实体或区域的质心上,这可能会有所帮助
美分
http://www.resourcecad.com/programs/
 
 
如果我没记错的话,如果选择多个实体或区域,然后使用MASSPROPS,它返回的质心就是所有对象的质心

ASMI 发表于 2022-7-5 16:59:45

在质心点绘制圆:
 
(defun c:gecen(/ cSet cLst oldSnp)
(vl-load-com)
(princ "\n<<<Select Regions or 3D-solids >>> ")
(if(setq cSet(ssget '((0 . "REGION,3DSOLID"))))
   (progn
   (setq cLst(mapcar 'vlax-ename->vla-object
                      (vl-remove-if 'listp
                        (mapcar 'cadr(ssnamex cSet))))
    oldSnp(getvar "OSMODE")
    ); end setq
   (mapcar 'setvar (list "OSMODE" "CMDECHO")(list 0 0))
   (foreach ent cLst
(if(vlax-property-available-p ent 'Centroid)
            (command "_.circle"(vlax-get ent 'Centroid)"50.0")
); end if
); end foreach
   (mapcar 'setvar (list "OSMODE" "CMDECHO")(list oldSnp 1))
   ); end progn
   ); end if
(princ)
); end of c:gecen

asos2000 发表于 2022-7-5 17:02:08

Thanx ASMI公司
 
Lisp程序很好
lisp能为选定的对象获得一个CG吗
 
当做

ASMI 发表于 2022-7-5 17:06:56

好啊
(defun c:gecen(/ cSet cLst oldSnp cCen cAre cmLst gCen)

(vl-load-com)

(princ "\n<<<Select Regions or 3D-solids >>> ")
(if(setq cSet(ssget '((0 . "REGION,3DSOLID"))))
   (progn
   (setq cLst(mapcar 'vlax-ename->vla-object
                      (vl-remove-if 'listp
                        (mapcar 'cadr(ssnamex cSet))))
    oldSnp(getvar "OSMODE")
    ); end setq
   (mapcar 'setvar (list "OSMODE" "CMDECHO")(list 0 0))
   (foreach ent cLst
(if(vlax-property-available-p ent 'Centroid)
(progn
    (setq cCen(vlax-get ent 'Centroid)
          cAre(vlax-get ent 'Area)
          cmLst(cons(list cCen cAre)cmLst)
          ); end setq
         (command "_.circle" cCen "50.0")
         ); end progn
); end if
); end foreach
   (if
   (and
cmLst
(/= 1(length cmLst))
); enad and
   (progn
(setq gCen
       (list
       (/
           (apply '+
              (mapcar '*
               (mapcar 'caar cmLst)(mapcar 'cadr cmLst)))
           (apply '+ (mapcar 'cadr cmLst))
           ); end /
       (/
           (apply '+
              (mapcar '*
               (mapcar 'cadar cmLst)(mapcar 'cadr cmLst)))
           (apply '+ (mapcar 'cadr cmLst))
           ); end /
       ); end list
      ); end setq
(command "_.circle" gCen "50")
(foreach pt(mapcar 'car cmLst)
(command "_.line" ptgCen "")
); end foreach
); end progn
   ); end if
   (mapcar 'setvar (list "OSMODE" "CMDECHO")(list oldSnp 1))
   ); end progn
   ); end if
(princ)
); end of c:gecen
 
我可以添加带有坐标的引线,但我不知道您需要的文本大小。或者您需要请求文本大小和圆直径

asos2000 发表于 2022-7-5 17:07:33

多好的Lisp程序啊
 
参考引线和文字,可以使用当前样式进行尺寸标注和文字标注吗。
 
关于选择对象,是否可以选择pline?或者在区域内单击以避免形状上出现任何空洞(如所附图片中的上部形状)
 
thanx公司

ASMI 发表于 2022-7-5 17:11:19

好啊也许明天,今天没有时间。
页: [1] 2
查看完整版本: Lisp查找重心