乐筑天下

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

[编程交流] 需要帮助绘制复杂的tubi

[复制链接]

15

主题

53

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 20:09:36 | 显示全部楼层 |阅读模式
我有我一直在研究的代码
 
  1. (defun c:setstarttray ()
  2. ;Sets the start point and angle of tubing
  3. (setq pt (getpoint "\nSpecify start point: "))
  4. (setq ANGL (getangle pt "\nSpecify angle: "))
  5. )
  6. (defun c:DRAWTRAY ()
  7. (setvar "ORTHOMODE" 1)                ;orthomode should be off
  8. (setvar "OSMODE" 0)
  9. (command "LAYER" "M" "CABLE_TRAY" "C" "T" "255,255,0" "" "")
  10. (setq Tlength (getdist pt "\nSpecify Tray Length: "))
  11. (setq A (polar pt (+ angl (dtr 90))) (/ 600 2))  ;Overall width = 600
  12. (setq B (polar pt (- angl (dtr 90))) (/ 600 2))
  13. (setq pt (polar pt ANGL TLength))
  14. (setq C (polar A ANGL TLength))
  15. (setq D (polar B ANGL TLength))
  16. (command "PLINE" A B D C "C")
  17. (setq LASTPLINE (entlast))
  18. (command "-bhatch" "P" "EXT250" "" "" "S" LASTPLINE "" "")
  19. )
  20. (defun c:test ()
  21. (setq pt1 (getpoint "\nSet Start Point: "))
  22. (setq pt2 (getpoint pt1 "\nSet End Point: "))
  23. (cond
  24.         ((/= (ssget PT1) nil)
  25.                 (setq ss (ssget PT1))
  26.                 (setq ent (ssname ss 0))
  27.         )
  28.         ((= (ssget PT1) nil)
  29.                 (setq ent nil)
  30.         )
  31. )
  32. (cond
  33.         ((= (ssget PT1) nil)
  34.                 (princ)
  35.         )
  36.         ((/= (ssget PT1) nil)
  37.                 (setq obj (entget ent))
  38.                         (setq typeinfo1 (substr (cdr (assoc 0 obj))1))
  39.                         (setq layerinfo1 (substr (cdr (assoc 8 obj))1))
  40.                         (setq pointinfo (cdr (massoc 10 obj)))
  41.                         (setq pointinfo1 (car pointinfo))
  42.                         (setq pointinfo2 (caddr pointinfo))
  43.                         (setq 1stpt (car pointinfo1))
  44.                         (setq 2ndpt (car pointinfo2))
  45.                        
  46.                         (setq midpt(SubstNth (/ (+ 1stpt 2ndpt) 2) 0 pointinfo1))        ;really shouldnt be using midpoints, should be snapping to the existing entity
  47.                         (princ midpt)
  48.                        
  49.                         (if (and (= typeinfo1 "LWPOLYLINE") (= layerinfo1 "CABLE_TRAY"))
  50.                                 (progn
  51.                                         (setq newpt (cadr midpt))
  52.                                         (setq newpt (+ 800 newpt))
  53.                                         (princ newpt)
  54.                                         (princ "\n")
  55.                                         (setq newmidpt (SubstNth newpt 1 midpt))
  56.                                         (setq TLength (distance pt1 pt2))
  57.                                         (setq ANGL (angle pt1 pt2))
  58.                                         (setq insang (- (rtd ANGL) 90))
  59.                                         (if (= INSANG 0)
  60.                                                 (command "-insert" "3-WAY TRAY" midpt "1" "1" INSANG)
  61.                                                 (setq A newmidpt (chang (+ angl (dtr 90))) (/ 600 2))  ;divided by 2 is the width
  62.                                                 (setq B newmidpt (chang (- angl (dtr 90))) (/ 600 2))
  63.                                                 (setq pt newmidpt ANGL TLength)
  64.                                                 (setq C A ANGL (- TLength 800))                ; The continuing pipe should continue from the t-bend if the length specified
  65.                                                 (setq D B ANGL (- TLength 800))                        ; by user is greater than the length of the t-bend
  66.                                                 (command "PLINE" A B D C "C")
  67.                                         )
  68.                                 )
  69.                         )
  70.                 )       
  71.         )
  72. (princ)
  73. )
  74. (defun massoc (key alist / x nlist)
  75. (foreach x alist
  76.         (if (eq key (car x))
  77.                 (setq nlist (cons (cdr x) nlist))
  78.         )
  79. )
  80. (reverse nlist)
  81. )
  82. (defun LM:SubstNth ( a n l )
  83.    (if l
  84.        (if (zerop n)
  85.            (cons a (cdr l))
  86.            (cons (car l) (LM:SubstNth a (1- n) (cdr l)))
  87.        )
  88.    )
  89. )

 
这段代码的目的是绘制非常复杂的管道,但是我还没有弄清楚如何在正交模式关闭和应该关闭时进行补偿。这个想法是通过调用一个函数来构造管道,该函数将设置管道的起点和角度。接下来,一个名为drawtray的函数调用从已绘制的最后一个管的上一个点或从最初设置的起点开始连续绘制管。
 
有一个函数我没有能够正确编写,它叫做test。如果此功能检测到具有第一个点的管,则会插入一个称为“三向托盘”的块,并且它应该分割管,以便在放置三向托盘时有三个实体。有一个图表可以帮助解释这一点,但我一直在努力为此编写代码。出于说明目的,该块被涂成绿色,但实际上与管位于同一层。
 
210940y9ffuh79gh9y9889.jpg
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 09:24 , Processed in 0.470494 second(s), 57 queries .

© 2020-2025 乐筑天下

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