乐筑天下

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

[编程交流] Lisp查找重心

[复制链接]

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-5 17:15:40 | 显示全部楼层
找到了一些时间。
 
  1. (defun c:gecen(/ actDoc cSet cLst oldSnp cCen cAre cmLst gCen enPt)
  2. (vl-load-com)
  3. (princ "\n<<<Select Regions or 3D-solids >>> ")
  4. (if(setq cSet(ssget '((0 . "REGION,3DSOLID"))))
  5.    (progn
  6.      (setq cLst(mapcar 'vlax-ename->vla-object
  7.                       (vl-remove-if 'listp
  8.                         (mapcar 'cadr(ssnamex cSet))))
  9.     oldSnp(getvar "OSMODE")
  10.     ); end setq
  11.      (mapcar 'setvar (list "OSMODE" "CMDECHO")(list 0 0))
  12.      (vla-StartUndoMark
  13. (setq actDoc(vla-get-ActiveDocument
  14.               (vlax-get-acad-object))))
  15.      (foreach ent cLst
  16. (if(vlax-property-available-p ent 'Centroid)
  17.   (progn
  18.     (setq cCen(vlax-get ent 'Centroid)
  19.           cAre(vlax-get ent 'Area)
  20.           cmLst(cons(list cCen cAre)cmLst)
  21.           ); end setq
  22.            ); end progn
  23.   ); end if
  24. ); end foreach
  25.    (if
  26.      (and
  27. cmLst
  28. (/= 1(length cmLst))
  29. ); enad and
  30.      (progn
  31. (setq gCen
  32.        (list
  33.          (/
  34.            (apply '+
  35.               (mapcar '*
  36.                  (mapcar 'caar cmLst)(mapcar 'cadr cmLst)))
  37.            (apply '+ (mapcar 'cadr cmLst))
  38.            ); end /
  39.          (/
  40.            (apply '+
  41.               (mapcar '*
  42.                  (mapcar 'cadar cmLst)(mapcar 'cadr cmLst)))
  43.            (apply '+ (mapcar 'cadr cmLst))
  44.            ); end /
  45.          ); end list
  46.       enPt(polar gCen(/ pi 3)
  47.                    (*(getvar "DIMTXT")(getvar "DIMSCALE")5))
  48.       ); end setq
  49. (command "_.qleader" gCen enPt "" "" "temp_text" "")
  50. (vla-put-TextString
  51.     (vlax-ename->vla-object(entlast))
  52.     (strcat "x="(rtos(car gCen)2(getvar "DIMDEC"))
  53.             "\\P"
  54.             "y="(rtos(cadr gCen)2(getvar "DIMDEC"))
  55.             ); end strcat
  56.     ); end vla-put-TextString
  57. (foreach pt(mapcar 'car cmLst)
  58.   (command "_.line" pt  gCen "")
  59.   (setq enPt(polar pt(/ pi 3)
  60.                    (*(getvar "DIMTXT")(getvar "DIMSCALE")5)))
  61.   (command "_.qleader" pt enPt "" "" "temp_text" "")
  62.   (vla-put-TextString
  63.     (vlax-ename->vla-object(entlast))
  64.     (strcat "x="(rtos(car pt)2 2)
  65.             "\\P"
  66.             "y="(rtos(cadr pt)2 2)
  67.             ); end strcat
  68.     ); end vla-put-TextString
  69.   ); end foreach
  70. ); end progn
  71.      ); end if
  72.      (mapcar 'setvar (list "OSMODE" "CMDECHO")(list oldSnp 1))
  73.      (vla-EndUndoMark actDoc)
  74.      ); end progn
  75.    ); end if
  76. (princ)
  77. ); end of c:gecen

 
它好吗?当前UCS中的坐标。
174203nr7mua87rra5uw7w.jpg
回复

使用道具 举报

2

主题

19

帖子

19

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-5 17:17:41 | 显示全部楼层
谢谢ASMI
我测试了一下,一直都很好
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

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

铜币
262
发表于 2022-7-5 17:22:09 | 显示全部楼层
这是很棒的Lisp程序
但是这个Lisp程序能得到这个形状的重心吗?
174204n0e000cvh22qha2y.jpg
回复

使用道具 举报

20

主题

81

帖子

61

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 17:24:23 | 显示全部楼层
我喜欢这个脚本,但它不适用于实体
我得到了这个错误:
  1. ; error: ActiveX Server returned the error: unknown name: "AREA"

我对visuallisp知之甚少,所以有谁能解决这个问题?
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-5 17:28:34 | 显示全部楼层
可以从实体而不是面积中检索体积
这是速成版,虽然不那么优雅
未经测试,自己动手
  1. (defun c:gec(/ actDoc cSet cLst oldSnp cCen cAre cmcList cmvList gCen enPt)
  2. (vl-load-com)
  3. (princ "\n<<<Select Regions or 3D-solids >>> ")
  4. (if(setq cSet(ssget '((0 . "REGION,3DSOLID"))))
  5.    (progn
  6.      (setq cLst(mapcar 'vlax-ename->vla-object
  7.                       (vl-remove-if 'listp
  8.                         (mapcar 'cadr(ssnamex cSet))))
  9.     oldSnp(getvar "OSMODE")
  10.     ); end setq
  11.      (mapcar 'setvar (list "OSMODE" "CMDECHO")(list 0 0))
  12.      (vla-StartUndoMark
  13. (setq actDoc(vla-get-ActiveDocument
  14.        (vlax-get-acad-object))))
  15.      (foreach obj cLst
  16. (if (vlax-property-available-p obj 'Centroid)
  17.   (cond ((eq "AcDbRegion" (vla-get-objectname obj))
  18.   (progn
  19.     (setq cCen(vlax-get obj 'Centroid)
  20.    cAre(vlax-get obj 'Area)
  21.    cmcList(cons(list cCen cAre)cmcList)
  22.    ); end setq
  23.            ); end progn
  24.   )
  25. ((eq "AcDb3dSolid" (vla-get-objectname obj))
  26.   (progn
  27.     (setq cCen(vlax-get obj 'Centroid)
  28.    cVol(vlax-get obj 'Volume)
  29.    cmvList(cons(list cCen cVol)cmvList)
  30.    ); end setq
  31.            ); end progn
  32.   ))
  33.   ); end if
  34. ); end foreach
  35.    (if
  36.      (and
  37. cmcList
  38. (/= 1(length cmcList))
  39. ); enad and
  40.      (progn
  41. (setq gCen
  42.        (list
  43.   (/
  44.     (apply '+
  45.        (mapcar '*
  46.    (mapcar 'caar cmcList)(mapcar 'cadr cmcList)))
  47.     (apply '+ (mapcar 'cadr cmcList))
  48.     ); end /
  49.   (/
  50.     (apply '+
  51.        (mapcar '*
  52.    (mapcar 'cadar cmcList)(mapcar 'cadr cmcList)))
  53.     (apply '+ (mapcar 'cadr cmcList))
  54.     ); end /
  55.   ); end list
  56.       enPt (polar gCen(/ pi 3)
  57.      (* (getvar "DIMTXT")(getvar "DIMSCALE") 5))
  58.       ); end setq
  59. (command "_.qleader" "_non" gCen "_non" enPt "" "" "#" "")
  60. (vla-put-TextString
  61.     (vlax-ename->vla-object(entlast))
  62.     (strcat "x="(rtos(car gCen)2(getvar "DIMDEC"))
  63.      "[url="file://\\P"]\\P[/url]"
  64.      "y="(rtos(cadr gCen)2(getvar "DIMDEC"))
  65.      ); end strcat
  66.     ); end vla-put-TextString
  67. (foreach pt(mapcar 'car cmcList)
  68.   (command "_.line" "_non" pt  "_non" gCen "")
  69.   (setq enPt(polar pt(/ pi 3)
  70.      (*(getvar "DIMTXT")(getvar "DIMSCALE")5)))
  71.   (command "_.qleader" pt enPt "" "" "#" "")
  72.   (vla-put-TextString
  73.     (vlax-ename->vla-object(entlast))
  74.     (strcat "x="(rtos(car pt)2 2)
  75.      "[url="file://\\P"]\\P[/url]"
  76.      "y="(rtos(cadr pt)2 2)
  77.      ); end strcat
  78.     ); end vla-put-TextString
  79.   ); end foreach
  80. ); end progn
  81.      ); end if
  82. (if
  83.      (and
  84. cmvList
  85. (/= 1(length cmvList))
  86. ); enad and
  87.      (progn
  88. (setq gCen
  89.        (list
  90.   (/
  91.     (apply '+
  92.        (mapcar '*
  93.    (mapcar 'caar cmvList)(mapcar 'cadr cmvList)))
  94.     (apply '+ (mapcar 'cadr cmvList))
  95.     ); end /
  96.   (/
  97.     (apply '+
  98.        (mapcar '*
  99.    (mapcar 'cadar cmvList)(mapcar 'cadr cmvList)))
  100.     (apply '+ (mapcar 'cadr cmvList))
  101.     ); end /
  102.   ); end list
  103.       enPt (polar gCen(/ pi 3)
  104.      (* (getvar "DIMTXT")(getvar "DIMSCALE") 5))
  105.       ); end setq
  106. (command "_.qleader" "_non" gCen "_non" enPt "" "" "#" "")
  107. (vla-put-TextString
  108.     (vlax-ename->vla-object(entlast))
  109.     (strcat "x="(rtos(car gCen)2(getvar "DIMDEC"))
  110.      "[url="file://\\P"]\\P[/url]"
  111.      "y="(rtos(cadr gCen)2(getvar "DIMDEC"))
  112.      ); end strcat
  113.     ); end vla-put-TextString
  114. (foreach pt(mapcar 'car cmvList)
  115.   (command "_.line" "_non" pt  "_non" gCen "")
  116.   (setq enPt(polar pt(/ pi 3)
  117.      (*(getvar "DIMTXT")(getvar "DIMSCALE")5)))
  118.   (command "_.qleader" pt enPt "" "" "#" "")
  119.   (vla-put-TextString
  120.     (vlax-ename->vla-object(entlast))
  121.     (strcat "x="(rtos(car pt)2 2)
  122.      "[url="file://\\P"]\\P[/url]"
  123.      "y="(rtos(cadr pt)2 2)
  124.      ); end strcat
  125.     ); end vla-put-TextString
  126.   ); end foreach
  127. ); end progn
  128.      )
  129.      (mapcar 'setvar (list "OSMODE" "CMDECHO")(list oldSnp 1))
  130.      (vla-EndUndoMark actDoc)
  131.      ); end progn
  132.    ); end if
  133. (princ)
  134. ); end of c:gec

 
~'J'~
回复

使用道具 举报

0

主题

3

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 17:30:33 | 显示全部楼层
我用这个lsp代码很好。。。
这个代码太多了帮我
我们可以用这个lsp做更多的工作吗
就像我想把我的使用转移到区域中心一样
&然后将区域质量特性作为文本或多行文字插入到图形中
谢谢和问候
回复

使用道具 举报

20

主题

81

帖子

61

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 17:32:42 | 显示全部楼层
它只在x轴和y轴上工作。我自己尝试添加Z,但只成功添加了一个与y值相同的Z值。
  1. (defun c:gec(/ actDoc cSet cLst oldSnp cCen cAre cmcList cmvList gCen enPt)
  2. (vl-load-com)
  3. (princ "\n<<<Select Regions or 3D-solids >>> ")
  4. (if(setq cSet(ssget '((0 . "REGION,3DSOLID"))))
  5.    (progn
  6.      (setq cLst(mapcar 'vlax-ename->vla-object
  7.                       (vl-remove-if 'listp
  8.                         (mapcar 'cadr(ssnamex cSet))))
  9.     oldSnp(getvar "OSMODE")
  10.     ); end setq
  11.      (mapcar 'setvar (list "OSMODE" "CMDECHO")(list 0 0))
  12.      (vla-StartUndoMark
  13. (setq actDoc(vla-get-ActiveDocument
  14.        (vlax-get-acad-object))))
  15.      (foreach obj cLst
  16. (if (vlax-property-available-p obj 'Centroid)
  17.   (cond ((eq "AcDbRegion" (vla-get-objectname obj))
  18.   (progn
  19.     (setq cCen(vlax-get obj 'Centroid)
  20.    cAre(vlax-get obj 'Area)
  21.    cmcList(cons(list cCen cAre)cmcList)
  22.    ); end setq
  23.            ); end progn
  24.   )
  25. ((eq "AcDb3dSolid" (vla-get-objectname obj))
  26.   (progn
  27.     (setq cCen(vlax-get obj 'Centroid)
  28.    cVol(vlax-get obj 'Volume)
  29.    cmvList(cons(list cCen cVol)cmvList)
  30.    ); end setq
  31.            ); end progn
  32.   ))
  33.   ); end if
  34. ); end foreach
  35.    (if
  36.      (and
  37. cmcList
  38. (/= 1(length cmcList))
  39. ); enad and
  40.      (progn
  41. (setq gCen
  42.        (list
  43.   (/
  44.     (apply '+
  45.        (mapcar '*
  46.    (mapcar 'caar cmcList)(mapcar 'cadr cmcList)))
  47.     (apply '+ (mapcar 'cadr cmcList))
  48.     ); end /
  49.   (/
  50.     (apply '+
  51.        (mapcar '*
  52.    (mapcar 'cadar cmcList)(mapcar 'cadr cmcList)))
  53.     (apply '+ (mapcar 'cadr cmcList))
  54.     ); end /
  55.   ); end list
  56.       enPt (polar gCen(/ pi 3)
  57.      (* (getvar "DIMTXT")(getvar "DIMSCALE") 5))
  58.       ); end setq
  59. (command "_.qleader" "_non" gCen "_non" enPt "" "" "#" "")
  60. (vla-put-TextString
  61.     (vlax-ename->vla-object(entlast))
  62.     (strcat "x="(rtos(car gCen)2(getvar "DIMDEC"))
  63.      "\\P"
  64.      "y="(rtos(cadr gCen)2(getvar "DIMDEC"))
  65.            "\\P"
  66.      "z="(rtos(cadr gCen)2(getvar "DIMDEC"))
  67.      ); end strcat
  68.     ); end vla-put-TextString
  69. (foreach pt(mapcar 'car cmcList)
  70.   (command "_.line" "_non" pt  "_non" gCen "")
  71.   (setq enPt(polar pt(/ pi 3)
  72.      (*(getvar "DIMTXT")(getvar "DIMSCALE")5)))
  73.   (command "_.qleader" pt enPt "" "" "#" "")
  74.   (vla-put-TextString
  75.     (vlax-ename->vla-object(entlast))
  76.     (strcat "x="(rtos(car pt)2 2)
  77.      "\\P"
  78.      "y="(rtos(cadr pt)2 2)
  79. "\\P"
  80.      "z="(rtos(cadr pt)2 2)
  81.      ); end strcat
  82.     ); end vla-put-TextString
  83.   ); end foreach
  84. ); end progn
  85.      ); end if
  86. (if
  87.      (and
  88. cmvList
  89. (/= 1(length cmvList))
  90. ); enad and
  91.      (progn
  92. (setq gCen
  93.        (list
  94.   (/
  95.     (apply '+
  96.        (mapcar '*
  97.    (mapcar 'caar cmvList)(mapcar 'cadr cmvList)))
  98.     (apply '+ (mapcar 'cadr cmvList))
  99.     ); end /
  100.   (/
  101.     (apply '+
  102.        (mapcar '*
  103.    (mapcar 'cadar cmvList)(mapcar 'cadr cmvList)))
  104.     (apply '+ (mapcar 'cadr cmvList))
  105.     ); end /
  106.   ); end list
  107.       enPt (polar gCen(/ pi 3)
  108.      (* (getvar "DIMTXT")(getvar "DIMSCALE") 5))
  109.       ); end setq
  110. (command "_.qleader" "_non" gCen "_non" enPt "" "" "#" "")
  111. (vla-put-TextString
  112.     (vlax-ename->vla-object(entlast))
  113.     (strcat "x="(rtos(car gCen)2(getvar "DIMDEC"))
  114.      "\\P"
  115.      "y="(rtos(cadr gCen)2(getvar "DIMDEC"))
  116. "\\P"
  117.      "z="(rtos(cadr gCen)2(getvar "DIMDEC"))
  118.      ); end strcat
  119.     ); end vla-put-TextString
  120. (foreach pt(mapcar 'car cmvList)
  121.   (command "_.line" "_non" pt  "_non" gCen "")
  122.   (setq enPt(polar pt(/ pi 3)
  123.      (*(getvar "DIMTXT")(getvar "DIMSCALE")5)))
  124.   (command "_.qleader" pt enPt "" "" "#" "")
  125.   (vla-put-TextString
  126.     (vlax-ename->vla-object(entlast))
  127.     (strcat "x="(rtos(car pt)2 2)
  128.      "\\P"
  129.      "y="(rtos(cadr pt)2 2)
  130.            "\\P"
  131.      "z="(rtos(cadr pt)2 2)
  132.      ); end strcat
  133.     ); end vla-put-TextString
  134.   ); end foreach
  135. ); end progn
  136.      )
  137.      (mapcar 'setvar (list "OSMODE" "CMDECHO")(list oldSnp 1))
  138.      (vla-EndUndoMark actDoc)
  139.      ); end progn
  140.    ); end if
  141. (princ)
  142. ); end of c:gec
回复

使用道具 举报

0

主题

3

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 17:38:46 | 显示全部楼层
我又找到了一个很好的短代码lsp。。。
此lsp标记区域中心。。。带圆圈。。。
知道我想将ucs移动到区域中心。。。然后将质量特性直接作为文本输入cad
有人知道
massproperty。图纸
RCG。lsp
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:40:59 | 显示全部楼层
这些Lisp程序很好。有谁知道有没有一个可以在一系列物体的重心处生成一个圆(就好像它们是由UNION命令组合在一起的,比如说)。
 
如果我有三个对象,而不是生成三个圆,是否可以在c.o.g处为所有三个零件创建一个圆(就像组合的一样)?
 
这将有助于我不合并他们,这就是所有。值得一问。
 
非常感谢您的回复和上述已经完成的工作。
内森
回复

使用道具 举报

3

主题

10

帖子

7

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 17:42:24 | 显示全部楼层
你好
我无法上传文件。
给我你的邮件地址,我会给你发送质心例程。
当做
佩特科夫斯基
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-24 15:32 , Processed in 2.001205 second(s), 73 queries .

© 2020-2025 乐筑天下

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