乐筑天下

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

[编程交流] 三维实体管道需要Lisp

[复制链接]

20

主题

70

帖子

50

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 18:33:57 | 显示全部楼层 |阅读模式
我正在寻找一个lisp来汇总三维管道实体的值,每个管道都有自己的层,代表不同的直径。
该信息存在于“特性”选项板中。(见所附图片-“长度”)
 
谢谢 193400o2oye61qoj6q1e26.jpg
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 18:39:05 | 显示全部楼层
此属性似乎无法通过VLisp ActiveX使用。。。
 
试试这个。。。
 
  1. (defun c:sumsweeplengths ( / TMatrixFromTo ss i sum ent dir1 dir2 dir3 pm zdir tmat ll ur len )
  2. (vl-load-com)
  3. (defun TMatrixFromTo ( from to )
  4.    (append
  5.      (mapcar
  6.        (function
  7.          (lambda    (v o)
  8.            (append (trans v from to T) (list o))
  9.          )
  10.        )
  11.        (list '(1. 0. 0.) '(0. 1. 0.) '(0. 0. 1.))
  12.        (trans '(0. 0. 0.) to from)
  13.      )
  14.      (list '(0. 0. 0. 1.))
  15.    )
  16. )
  17. (command "_.ucs" "_w")
  18. (prompt "\nSelect 3D SOLIDS created with SWEEP command")
  19. (setq ss (ssget '((0 . "3DSOLID"))))
  20. (setq i -1 sum 0.0)
  21. (while (setq ent (ssname ss (setq i (1+ i))))
  22.    (if ent (setq ent (vlax-ename->vla-object ent)))
  23.    (if (vlax-property-available-p ent 'SolidType)
  24.      (if (eq (vla-get-SolidType ent) "Sweep")
  25.        (progn
  26.          (setq dir1 (mapcar '+ (vlax-safearray->list (vlax-variant-value (vla-get-principaldirections ent))) '(0.0 0.0 0.0)))
  27.          (setq dir2 (cdddr (mapcar '+ (vlax-safearray->list (vlax-variant-value (vla-get-principaldirections ent))) '(0.0 0.0 0.0 0.0 0.0 0.0))))
  28.          (setq dir3 (cdddr (cdddr (mapcar '+ (vlax-safearray->list (vlax-variant-value (vla-get-principaldirections ent))) '(0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0)))))
  29.          (setq pm (vlax-safearray->list (vlax-variant-value (vla-get-principalmoments ent))))
  30.          (cond
  31.            ( (equal (cadr pm) (caddr pm) 1.0)
  32.              (setq zdir dir1)
  33.            )
  34.            ( (equal (car pm) (caddr pm) 1.0)
  35.              (setq zdir dir2)
  36.            )
  37.            ( (equal (car pm) (cadr pm) 1.0)
  38.              (setq zdir dir3)
  39.            )
  40.          )
  41.          (command "_.ucs" "_za" '(0.0 0.0 0.0) zdir)
  42.          (setq tmat (TMatrixFromTo 1 0))
  43.          (vla-transformby ent (vlax-tmatrix tmat))
  44.          (vla-getboundingbox ent 'll 'ur)
  45.          (setq ll (vlax-safearray->list ll))
  46.          (setq ur (vlax-safearray->list ur))
  47.          (cond
  48.            ( (and (> (caddr ur) 0) (> (caddr ll) 0) (> (caddr ur) (caddr ll)))
  49.              (setq len (abs (- (caddr ur) (caddr ll))))
  50.            )
  51.            ( (and (> (caddr ur) 0) (> (caddr ll) 0) (< (caddr ur) (caddr ll)))
  52.              (setq len (abs (- (caddr ll) (caddr ur))))
  53.            )
  54.            ( (and (< (caddr ur) 0) (< (caddr ll) 0) (< (caddr ur) (caddr ll)))
  55.              (setq len (abs (- (caddr ur) (caddr ll))))
  56.            )
  57.            ( (and (< (caddr ur) 0) (< (caddr ll) 0) (> (caddr ur) (caddr ll)))
  58.              (setq len (abs (- (caddr ll) (caddr ur))))
  59.            )
  60.            ( (and (< (caddr ur) 0) (> (caddr ll) 0))
  61.              (setq len (abs (- (caddr ll) (caddr ur))))
  62.            )
  63.            ( (and (> (caddr ur) 0) (< (caddr ll) 0))
  64.              (setq len (abs (- (caddr ur) (caddr ll))))
  65.            )
  66.          )
  67.          (setq tmat (TMatrixFromTo 0 1))
  68.          (vla-transformby ent (vlax-tmatrix tmat))
  69.          (command "_.ucs" "_p")
  70.        )
  71.      )
  72.    )
  73.    (setq sum (+ len sum))
  74. )
  75. (prompt "\nSum of all lengths of 3D SOLIDS created with SWEEP command is : ")(princ (rtos sum 2 20))
  76. (princ)
  77. )
  78. (defun c:ssl nil (c:sumsweeplengths))
HTH,M.R。
回复

使用道具 举报

20

主题

70

帖子

50

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 18:46:07 | 显示全部楼层
不知道为什么,但总和值不正确,使用此lisp扫描管道im
  1. (defun c:xpipe(/ ACTDOC ACTLAY ACTSP BASELINE
  2.          BASESET CIRENT DICOUNT DIVDID
  3.          EXCIR LAYST OBJTYPE OLDDIA
  4.          OLDECHO STARTPT XORD YORD
  5.          ZORD *ERROR*)
  6. (vl-load-com)
  7. (defun *error* (msg)
  8.    (vla-put-Lock actLay laySt)
  9.    (setvar "CMDECHO" oldEcho)
  10.    (vla-EndUndoMark actDoc)
  11.    (princ)
  12.    ); end of *error*
  13. (if(not pipe:exDia)(setq pipe:exDia 40.0))
  14. (setq actDoc
  15.    (vla-get-ActiveDocument
  16.      (vlax-get-Acad-object))
  17.   actLay(vla-get-ActiveLayer actDoc)
  18.        oldDia pipe:exDia
  19.        oldEcho(getvar "CMDECHO")
  20.   ); end setq
  21. (vla-StartUndoMark actDoc)
  22. (setvar "CMDECHO" 0)
  23. (if(= 0(vla-get-ActiveSpace actDoc))
  24.    (setq actSp(vla-get-PaperSpace actDoc))
  25.    (setq actSp(vla-get-ModelSpace actDoc))
  26.    ); end if
  27. (setq laySt(vla-get-Lock actLay))
  28. (vla-put-Lock actLay :vlax-false)
  29. (setq pipe:exDia
  30.    (getreal
  31.      (strcat
  32.        "\nSpecify pipe diameter <"(rtos pipe:exDia)">: ")))
  33. (if(null pipe:exDia)(setq pipe:exDia oldDia))
  34. (initget "Yes No")
  35.   (setq delFlag
  36.          (getkword "\nDelete extrude path(s)? [Yes/No] <No>: "))
  37.    (if(null delFlag)(setq delFlag "No"))
  38. (princ "\n<<< Select objects to extrude and press Enter >>>")
  39. (if
  40.    (setq baseSet
  41.      (ssget '((-4 . "<OR")(0 . "*LINE")(0 . "CIRCLE")
  42.           (0 . "ARC")(0 . "ELLIPSE")(-4 . "OR>")
  43.           (-4 . "<NOT")(-4 . "<OR")(0 . "SPLINE")
  44.                (0 . "MLINE")(-4 . "OR>")(-4 . "NOT>"))))
  45.    (progn
  46.      (setq baseSet(vl-remove-if 'listp
  47.                              (mapcar
  48.            'cadr
  49.            (ssnamex baseSet))))
  50.      (foreach pathEnt baseSet
  51.      (setq baseLine
  52.        (vlax-ename->vla-object pathEnt)
  53.       objType(vla-get-ObjectName baseLine)
  54.            startPt(vlax-curve-getStartPoint baseLine)
  55.            3dPos
  56.        (vlax-curve-getFirstDeriv baseLine
  57.          (vlax-curve-getParamAtPoint baseLine startPt))
  58.           diCount(strlen
  59.            (itoa
  60.         (apply 'max
  61.          (mapcar 'abs
  62.           (mapcar 'fix startPt)))))
  63.       divDid "1"
  64.       ); end setq
  65.      (repeat diCount
  66.   (setq divDid(strcat divDid "0"))
  67.   ); end repeat
  68.      (setq divDid(atoi divDid))
  69.      (if(/= 0.0(car 3dPos))
  70.   (setq XOrd(/(car 3dPos)divDid))
  71.   (setq XOrd (car 3dPos))
  72.   ); end if
  73.      (if(/= 0.0(cadr 3dPos))
  74.   (setq YOrd(/(cadr 3dPos)divDid))
  75.   (setq YOrd (cadr 3dPos))
  76.   ); end if
  77.      (if(/= 0.0(nth 2 3dPos))
  78.   (setq ZOrd(/(nth 2 3dPos)divDid))
  79.   (setq ZOrd (nth 2 3dPos))
  80.   ); end if
  81.      (setq 3dPos(list XOrd YOrd ZOrd))
  82. (setq exCir
  83.    (vla-addCircle actSp
  84.      (vlax-3d-Point startPt)
  85.      (/ pipe:exDia 2)))
  86. (vla-put-Normal exCir(vlax-3D-point 3dPos))
  87. (setq cirEnt(vlax-vla-object->ename exCir))
  88. (command "_.extrude" cirEnt "" "_p" pathEnt)
  89. (command "_.erase" cirEnt "")
  90. (if(= "Yes" delFlag)
  91.    (vla-delete baseLine)
  92.       ); end if
  93.   ); end foreach
  94.      (vla-put-Lock actLay laySt)
  95.      (setvar "CMDECHO" oldEcho)
  96.      (vla-EndUndoMark actDoc)
  97.       ); end progn
  98.      ); end if
  99.    (princ)
  100.    ); end  of c:xpipe
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 18:53:41 | 显示全部楼层
警告注释。。。若你们打算认真使用我的代码,请确保扫描的形状明显小于“线性”路径。。。路径必须是线性的-我只在圆柱和直棱镜上测试过。。。
 
您好,M.R。
回复

使用道具 举报

20

主题

70

帖子

50

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 18:57:16 | 显示全部楼层
是否可以创建一个忽略所有其他对象的程序,除非它们在“几何体”下具有“长度”数据的属性?
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 18:59:54 | 显示全部楼层
我不知道,我试过了,但没有成功。。。我已经更改了我的初始代码,应该可以正确工作,但只适用于线性扫描。。。
 
此处更改:
http://www.cadtutor.net/forum/showthread.php?88563-Need-A-Lisp-for-3d-solid-pipe-length&p=607317#post607317
 
M、 R。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 19:08:46 | 显示全部楼层
我必须恢复这条线。。。它没有得到应有的解决。。。如果有人知道如何访问3DSOLID实体的几何特性,请回复。。。问题是以曲线作为路径的扫描,如果访问几何体属性,则该信息可能对所有其他类型的3DSOLID实体有用。。。
 
谢谢,你好,马尔科·里巴。。。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 19:11:55 | 显示全部楼层
再次复活。。。如果你很聪明,请回复。。。
 
M、 R。
回复

使用道具 举报

20

主题

70

帖子

50

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 19:18:17 | 显示全部楼层
我也在等待,如果有人能做到这一点。。。如果这些信息存在于属性中,那么一定有办法!
回复

使用道具 举报

GP_

8

主题

248

帖子

245

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-5 19:23:42 | 显示全部楼层
@丹尼尔克
可以附着DWG文件的副本吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-19 01:14 , Processed in 3.197851 second(s), 75 queries .

© 2020-2025 乐筑天下

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