乐筑天下

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

[编程交流] 管道弯头

[复制链接]

22

主题

272

帖子

254

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2022-7-6 09:24:16 | 显示全部楼层 |阅读模式
我们得到了一个从100毫米到1000毫米的铝管系统的大型项目,涉及许多弯头。我的问题是:是否有地方可以用lisp绘制弯头的侧视图,只需用户输入:管道外径、管段直径和弯头角度。
请帮助:)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:28:52 | 显示全部楼层
先试试这个:
 
  1. (defun c:duct (/ *error* oVars vLst dPt dOd Segs dAng vEnt i PntEve PntOdd
  2.             cAngE sPtE ePtE cAngO sPtO ePtO last_pt1 last_pt2)
  3. (defun *error* (msg)
  4.    (if oVars (mapcar 'setvar vLst oVars))
  5.    (princ (strcat "\nError: " (strcase msg))) (princ))
  6. (setq vLst '("CMDECHO" "OSMODE")
  7.    oVars (mapcar 'getvar vLst))
  8. (if (and (setq dPt (getpoint "\nSelect Point for Elbow: "))
  9.       (not (initget 7)) (setq dOd (getdist "\nSpecify Duct OD: "))
  10.       (not (initget 7)) (setq Segs (getint "\nSpecify No. of Segments: "))
  11.       (setq dAng (getreal "\nSpecify Elbow Angle: ")) (< 0 dAng 360))
  12.    (progn
  13.      (mapcar 'setvar vlst '(0 0))
  14.      (command "_arc" "_C" (polar dPt (/ pi 2) dOd) dPt "_A" (rtos dAng))
  15.      (setq vEnt (vlax-ename->vla-object (entlast)) i 0.0 inc (/ (vla-get-ArcLength vEnt) Segs))
  16.      (while (or  (setq PntEve (vlax-curve-GetPointatDist vEnt i)
  17.            PntOdd (vlax-curve-GetPointatDist vEnt (setq i (+ inc i)))))
  18.    (setq cAngE (+ (/ pi 2) (angle '(0 0 0) (vlax-curve-getFirstDeriv vEnt
  19.                         (vlax-curve-GetParamAtPoint vEnt PntEve)))))
  20.    (command "_line" (setq sPtE (polar PntEve cAngE 4.0)) (setq ePtE (polar PntEve (+ pi cAngE) 4.0)) "")
  21.    (if (and last_pt1 last_pt2) (progn (command "_line" last_pt1 sPtE "") (command "_line" last_pt2 ePtE "")))
  22.    (setq cAngO (+ (/ pi 2) (angle '(0 0 0) (vlax-curve-getFirstDeriv vEnt
  23.                         (vlax-curve-GetParamAtPoint vEnt PntOdd)))))
  24.    (command "_line" (setq sPtO (polar PntOdd cAngO 3.0)) (setq ePtO (polar PntOdd (+ pi cAngO) 3.0)) "")
  25.    (command "_line" sPtE sPtO "") (command "_line" ePtE ePtO "")
  26.    (setq last_pt1 sPtO last_pt2 ePtO)
  27.    (setq i (+ inc i)))
  28.      (vla-put-Color vEnt acblue))
  29.    (princ "\n<!> Points Specified Incorrectly <!>"))
  30. (mapcar 'setvar vLst oVars)
  31. (princ))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:32:50 | 显示全部楼层
很抱歉,这样更好:
 
  1. (defun c:duct  (/ *error* oVars    vLst dPt dOd Segs dAng vEnt i PntEve
  2.           PntOdd cAngE sPtE ePtE cAngO sPtO ePtO last_pt1 last_pt2)
  3. (defun *error*  (msg)
  4.    (if    oVars (mapcar 'setvar vLst oVars))
  5.    (princ (strcat "\nError: " (strcase msg))) (princ))
  6. (setq    vLst  '("CMDECHO" "OSMODE")
  7.    oVars (mapcar 'getvar vLst))
  8. (if (and (setq dPt (getpoint "\nSelect Point for Elbow: "))
  9.       (not (initget 7)) (setq dOd (getdist "\nSpecify Duct OD: "))
  10.       (not (initget 7)) (setq Segs (getint "\nSpecify No. of Segments: "))
  11.       (setq dAng (getreal "\nSpecify Elbow Angle: ")) (< 0 dAng 360))
  12.    (progn
  13.      (mapcar 'setvar vlst '(0 0))
  14.      (command "_arc" "_C" (polar dPt (/ pi 2) (* 1.5 dOd)) dPt "_A" (rtos dAng))
  15.      (setq vEnt (vlax-ename->vla-object (entlast)) i 0.0 inc (/ (vla-get-ArcLength vEnt) Segs))
  16.      (while (setq PntEve (vlax-curve-GetPointatDist vEnt i))
  17.    (setq cAngE (+ (/ pi 2) (angle '(0 0 0) (vlax-curve-getFirstDeriv vEnt
  18.                (vlax-curve-GetParamAtPoint vEnt PntEve)))))
  19.    (command "_line" (setq sPtE (polar PntEve cAngE (/ (+ dOd (* inc 2.0)) 2.0)))
  20.         (setq ePtE (polar PntEve (+ pi cAngE) (/ (+ dOd (* inc 2.0)) 2.0))) "")
  21.    (if (and last_pt1 last_pt2) (progn (command "_line" last_pt1 sPtE "") (command "_line" last_pt2 ePtE "")))
  22.    (if (setq PntOdd (vlax-curve-GetPointatDist vEnt (setq i (+ inc i))))
  23.      (progn
  24.        (setq cAngO    (+ (/ pi 2) (angle '(0 0 0) (vlax-curve-getFirstDeriv vEnt
  25.                              (vlax-curve-GetParamAtPoint vEnt PntOdd)))))
  26.        (command "_line" (setq sPtO (polar PntOdd cAngO (/ dOd 2.0)))
  27.             (setq ePtO (polar PntOdd (+ pi cAngO) (/ dOd 2.0))) "")
  28.        (command "_line" sPtE sPtO "") (command "_line" ePtE ePtO "")
  29.        (setq last_pt1 sPtO last_pt2 ePtO i (+ inc i)))))
  30.      (vla-put-Color vEnt acblue))
  31.    (princ "\n<!> Points Specified Incorrectly <!>"))
  32. (mapcar 'setvar vLst oVars)
  33. (princ))
回复

使用道具 举报

22

主题

272

帖子

254

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2022-7-6 09:34:20 | 显示全部楼层
李,这个rutine的Autocad版本有什么限制吗?
见图纸。
肘部图纸
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:37:12 | 显示全部楼层
不是限制,我只是觉得你想要这样的管道:
102417vjtte1uh18rrre17.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:41:53 | 显示全部楼层
好的,我在Lisp程序的顶部给了你一个“调整菜单”,你可以一直玩到心满意足为止
 
  1. (defun c:duct  (/ *error* oVars    vLst dPt dOd Segs dAng vEnt i PntEve PntOdd
  2.          cAngE sPtE ePtE cAngO sPtO ePtO last_pt1 last_pt2 Cent str)
  3. ;; ==== Adjustments ====
  4. (setq Cent T) ; Duct Centreline
  5. (setq str T) ; Straight/Corrugated Duct (T = Straight, nil = Corrugated)
  6. ;; =====================
  7. (defun *error*  (msg)
  8.    (if    oVars (mapcar 'setvar vLst oVars))
  9.    (princ (strcat "\nError: " (strcase msg)))
  10.    (princ))
  11. (setq    vLst  '("CMDECHO" "OSMODE")
  12.    oVars (mapcar 'getvar vLst))
  13. (if (and (setq dPt (getpoint "\nSelect Point for Elbow: "))
  14.       (not (initget 7))
  15.       (setq dOd (getdist "\nSpecify Duct OD: "))
  16.       (not (initget 7))
  17.       (setq Segs (getint "\nSpecify No. of Segments: "))
  18.       (setq dAng (getreal "\nSpecify Elbow Angle: "))
  19.       (< 0 dAng 360))
  20.    (progn
  21.      (mapcar 'setvar vlst '(0 0))
  22.      (or (and str (setq j 0.0)) (setq j 1.0))
  23.      (command "_arc" "_C" (polar dPt (/ pi 2) (* 1.5 dOd)) dPt "_A" (rtos dAng))
  24.      (setq vEnt (vlax-ename->vla-object (entlast))
  25.        i     0.0
  26.        inc     (/ (vla-get-ArcLength vEnt) Segs))
  27.      (while (setq PntEve (vlax-curve-GetPointatDist vEnt i))
  28.    (setq cAngE (+ (/ pi 2) (angle '(0 0 0) (vlax-curve-getFirstDeriv vEnt
  29.                (vlax-curve-GetParamAtPoint vEnt PntEve)))))
  30.    (command "_line" (setq sPtE (polar PntEve cAngE (/ (+ dOd (* j inc 2.0)) 2.0)))
  31.         (setq ePtE (polar PntEve (+ pi cAngE) (/ (+ dOd (* j inc 2.0)) 2.0))) "")
  32.    (if (and last_pt1 last_pt2)
  33.      (progn (command "_line" last_pt1 sPtE "") (command "_line" last_pt2 ePtE "")))
  34.    (if (setq PntOdd (vlax-curve-GetPointatDist vEnt (setq i (+ inc i))))
  35.      (progn
  36.        (setq cAngO    (+ (/ pi 2) (angle '(0 0 0) (vlax-curve-getFirstDeriv vEnt
  37.                              (vlax-curve-GetParamAtPoint vEnt PntOdd)))))
  38.        (command "_line" (setq sPtO (polar PntOdd cAngO (/ dOd 2.0)))
  39.             (setq ePtO (polar PntOdd (+ pi cAngO) (/ dOd 2.0))) "")
  40.        (command "_line" sPtE sPtO "")
  41.        (command "_line" ePtE ePtO "")
  42.        (setq last_pt1 sPtO last_pt2 ePtO i (+ inc i)))))
  43.      (if Cent (vla-put-Color vEnt acblue) (vla-delete vEnt)))
  44.    (princ "\n<!> Points Specified Incorrectly <!>"))
  45. (mapcar 'setvar vLst oVars)
  46. (princ))
回复

使用道具 举报

22

主题

272

帖子

254

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2022-7-6 09:46:04 | 显示全部楼层
我会在家试试。非常感谢李
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:47:20 | 显示全部楼层
 
 
没问题,我做得很开心
回复

使用道具 举报

22

主题

272

帖子

254

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2022-7-6 09:52:20 | 显示全部楼层
完美的
李,我会解释。。。
在附着的dwg上
肘部。图纸
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:54:12 | 显示全部楼层
好的,我回家后会看一看的
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 02:57 , Processed in 0.824948 second(s), 74 queries .

© 2020-2025 乐筑天下

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