wchsunshine 发表于 2022-3-4 21:57:53

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

本帖最后由 wchsunshine 于 2022-3-12 22:02 编辑

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

htlaser 发表于 2022-3-4 21:57:54

本帖最后由 htlaser 于 2022-3-7 18:36 编辑

wchsunshine 发表于 2022-3-7 12:56
我可不需要批量,也可不需要智能,这个求质心功能在CAXA中有,分几步完成就可以,它是输入命令后选择先一 ...
图形需处理闭合线条命令<ZHX>
ZNZX默认=>1 单个(图1 图2功能)

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

wchsunshine 发表于 2022-3-4 21:59:23

坐等大神帮忙解决

xj6019 发表于 2022-3-4 22:08:34

       
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)
)

xj6019 发表于 2022-3-4 22:10:14

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=91845&page=1&_dsign=31ffa960
http://bbs.mjtd.com/thread-92028-1-1.html?_dsign=21fb1f07
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=180024&highlight=CAD%D7%D4%B6%AF%C9%FA%B3%C9%C3%E6%D3%F2%B5%C4%D6%CA%D0%C4&_dsign=8ca21bfb

wchsunshine 发表于 2022-3-6 12:22:15

本帖最后由 wchsunshine 于 2022-3-6 12:56 编辑

xj6019 发表于 2022-3-4 22:08
22#
发表于 2016-10-13 16:36 | 只看该作者
;;; 对大师作品做了一些修改,框选多个闭合图形画质心点...
图一   图二可以实现   ,图三、图四实现不了,能不能优化下,或针对第二种重新写个lisp, 增加面积 或减少面积功能 实现多个图形的质心,用面域加减, 请大师帮忙。

wchsunshine 发表于 2022-3-6 12:23:16

本帖最后由 wchsunshine 于 2022-3-6 12:30 编辑

xj6019 发表于 2022-3-4 22:10
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=91845&page=1&_dsign=31ffa960
http://bbs.mjtd.com/t ...
这里的帖子图三、图四实现不了,能不能优化下改下程序,或针对第二种重新写个lisp,请大师帮忙

wchsunshine 发表于 2022-3-6 12:25:50

本帖最后由 wchsunshine 于 2022-3-6 12:54 编辑

xj6019 发表于 2022-3-4 22:08
22#
发表于 2016-10-13 16:36 | 只看该作者
;;; 对大师作品做了一些修改,框选多个闭合图形画质心点...
如果能再实现 增加面积 或减少面积功能 实现多个图形的质心,如图三图四就好了   

wchsunshine 发表于 2022-3-6 19:01:06

坐等大师帮忙解决

tigcat 发表于 2022-3-6 21:39:42

本帖最后由 tigcat 于 2022-3-6 21:51 编辑

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

;;;(setvar "cmdecho" 0)
(setq      ss(ssget
            '((0 . "PLINE,LWPOLYLINE,LINE,ARC,CIRCLE,SPLINE,ELLIPSE"))
            )
      i   -1
      x00
      y00
      num (sslength ss)
)
(while (setq e (ssname ss (setq i (1+ i))))
    (setq pt (centroid e)
          x0 (+ x0 (car pt))
          y0 (+ y0 (cadr pt))
    )
    (command "point" pt)
)
(command "point" "non"
         (list (/ x0 num) (/ y0 num))
)
(princ)
)
;; 闭合曲线质心子函数by_xyp
(defun Centroid      (s1 / s2 pt)
(vl-load-com)
(command "copy" s1 "" '(0 0) '(0 0))
(command "region" (entlast) "")
(setq      s2 (entlast)
      pt (vlax-get (vlax-ename->vla-object s2) 'Centroid)
)
(entdel s2)
pt
;;;(princ)
)




页: [1] 2
查看完整版本: 所有明经币求 求大神写个智能重心lisp,必谢-