明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1159|回复: 20

所有明经币求 求大神写个智能重心lisp,必谢-

[复制链接]
发表于 2022-3-4 21:57 | 显示全部楼层 |阅读模式
100明经币
本帖最后由 wchsunshine 于 2022-3-12 22:02 编辑

GIF效果,是其他软件的 ,它是输入命令后选择先一个图像为主,再根据命令栏提示选项:1、增加面积 2、减少面积(可多个图形),输入1或2 ,再手动选择面积,进行布尔运算,得到运算后的图形的质心。  坐等大神解决!!!!!!! 不需要弹出的XY坐标对话框,只要有点标记就OK了!
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

图形需处理闭合线条命令 ZNZX默认 =>1 单个 (图1 图2功能) =>2 并集 (图4 功能 直接框选 (曲线布尔的并集功能)) =>3 差集 (图3 功能 先选最大外框-->空格 再选内轮廓 (曲线布尔的差集功能))
发表于 2022-3-4 21:57 | 显示全部楼层
本帖最后由 htlaser 于 2022-3-7 18:36 编辑
wchsunshine 发表于 2022-3-7 12:56
我可不需要批量,也可不需要智能,这个求质心功能在CAXA中有,分几步完成就可以,它是输入命令后选择先一 ...

图形需处理闭合线条命令<ZHX>
ZNZX默认  =>1 单个  (图1 图2功能)

=>2 并集  (图4 功能 直接框选 (曲线布尔的并集功能))
=>3 差集  (图3 功能 先选最大外框-->空格  再选内轮廓  (曲线布尔的差集功能))

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2022-3-4 21:59 | 显示全部楼层
坐等大神帮忙解决

点评

(setq pt (vlax-safearray-&gt;list (vlax-variant-value (vla-get-centroid (vlax-ename-&gt;vla-object (car (entsel))))))),即得到质心的坐标 也是搜索来的 论坛相关资料感觉还是挺多的  发表于 2022-3-4 22:13
回复

使用道具 举报

发表于 2022-3-4 22:08 | 显示全部楼层
       
22#
发表于 2016-10-13 16:36 | 只看该作者
;;; 对大师作品做了一些修改,框选多个闭合图形画质心点 by:langjs;;;
;;; =================
(defun c:XX (/ en ent i obj pt ptls snap ss ss1)
  (setvar "cmdecho" 0) ; 关闭命令行显示
  (if (setq ss (ssget '((0 . "PLINE,LWPOLYLINE,LINE,ARC,CIRCLE,SPLINE,ELLIPSE"))))
    (progn
      (setq snap (getvar "osmode"))
      (setvar "osmode" 0)
      (setq en (entlast))
      (command ".region" ss ""); 对选择集做面域
      (if en
        (progn
          (setq ss (ssadd))
          (while (setq en (entnext en))
            (ssadd en ss)
          )
          (if (zerop (sslength ss))
            (setq ss nil)
          )
        )
        (setq ss (ssget "_x"))
      )
      (setq ss1 (ssadd))
      (repeat (setq i (sslength ss))
        (setq ent (ssname ss (setq i (1- i))))
        (if (= (cdr (assoc 0 (entget ent))) "REGION"); 如果成功生成面域
          (progn
            (vl-load-com)
            (setq obj (vlax-ename->vla-object ent))
            (setq pt (vlax-safearray->list (vlax-variant-value (vla-get-centroid obj)))); 取得质心坐标
            (command ".point" pt); 画质心点
            (setq ptls (entlast))
            (command ".explode" ent); 分解面域

            (setq NS (ssget "p"))
            (command "Peditaccept" "0"   ""); 打开多段线合并询问提示
            (command "pedit" "m" NS "" "y" "j" "" ""); 合并

            (setq ss1 (ssadd ptls ss1))
          )
        )
      )
      (sssetfirst nil ss1); 夹点亮显质心点
      (setvar "osmode" snap)
    )
    (princ "\n没有选择对象.")
  )
(setvar "cmdecho" 1) ; 开启命令行显示
  (princ)
)

评分

参与人数 2明经币 +2 收起 理由
Bao_lai + 1 很给力!
tigcat + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2022-3-4 22:10 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2022-3-6 12:22 | 显示全部楼层
本帖最后由 wchsunshine 于 2022-3-6 12:56 编辑
xj6019 发表于 2022-3-4 22:08
22#
发表于 2016-10-13 16:36 | 只看该作者
;;; 对大师作品做了一些修改,框选多个闭合图形画质心点  ...

图一   图二可以实现   ,图三、图四实现不了  ,能不能优化下,或针对第二种重新写个lisp, 增加面积 或减少面积功能 实现多个图形的质心,用面域加减, 请大师帮忙。
回复

使用道具 举报

 楼主| 发表于 2022-3-6 12:23 | 显示全部楼层
本帖最后由 wchsunshine 于 2022-3-6 12:30 编辑

这里的帖子图三、图四实现不了  ,能不能优化下改下程序,或针对第二种重新写个lisp,请大师帮忙
回复

使用道具 举报

 楼主| 发表于 2022-3-6 12:25 | 显示全部楼层
本帖最后由 wchsunshine 于 2022-3-6 12:54 编辑
xj6019 发表于 2022-3-4 22:08
22#
发表于 2016-10-13 16:36 | 只看该作者
;;; 对大师作品做了一些修改,框选多个闭合图形画质心点  ...

如果能再实现 增加面积 或减少面积功能 实现多个图形的质心,如图三图四就好了   
回复

使用道具 举报

 楼主| 发表于 2022-3-6 19:01 | 显示全部楼层
坐等大师帮忙解决
回复

使用道具 举报

发表于 2022-3-6 21:39 | 显示全部楼层
本帖最后由 tigcat 于 2022-3-6 21:51 编辑

  1. ;仅交流,不知道改的谁的了;注意事项1:程序不能用于直线(直线求形心俺不会)
  2. ;注意事项2:程序求形心未考虑多段线的面积(可补充函数获取面积来修正)
  3. (defun c:tt5 (/ ss i x0 y0 pt  num e)

  4. ;;;  (setvar "cmdecho" 0)
  5.   (setq        ss  (ssget
  6.               '((0 . "PLINE,LWPOLYLINE,LINE,ARC,CIRCLE,SPLINE,ELLIPSE"))
  7.             )
  8.         i   -1
  9.         x0  0
  10.         y0  0
  11.         num (sslength ss)
  12.   )
  13.   (while (setq e (ssname ss (setq i (1+ i))))
  14.     (setq pt (centroid e)
  15.           x0 (+ x0 (car pt))
  16.           y0 (+ y0 (cadr pt))
  17.     )
  18.     (command "point" pt)
  19.   )
  20.   (command "point" "non"
  21.            (list (/ x0 num) (/ y0 num))
  22.   )
  23.   (princ)
  24. )
  25. ;; 闭合曲线质心子函数by_xyp
  26. (defun Centroid        (s1 / s2 pt)
  27.   (vl-load-com)
  28.   (command "copy" s1 "" '(0 0) '(0 0))
  29.   (command "region" (entlast) "")
  30.   (setq        s2 (entlast)
  31.         pt (vlax-get (vlax-ename->vla-object s2) 'Centroid)
  32.   )
  33.   (entdel s2)
  34.   pt
  35. ;;;  (princ)
  36. )




回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 13:07 , Processed in 0.400730 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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