乐筑天下

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

[编程交流] 在华氏15度时进行转换

[复制链接]

57

主题

351

帖子

294

银币

后起之秀

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

铜币
285
发表于 2022-7-6 14:29:35 | 显示全部楼层 |阅读模式
我从cadtutor上得到了这个Lisp程序的词,它是阿斯米写的。有没有办法对其进行编辑,使其以15度的角度从一种管道尺寸过渡到另一种管道尺寸?
  1. CREATES DOUBLE LINE DUCT WITH CAPS AND CORNERS, NO TRANSITIONS
  2. (defun c:dpipe(/ actDoc ang1 ang2 ang3 ptLst enDist
  3.        fPt lEnt lObj lPln oldVars oldWd
  4.        plEnd plStart1 plStart2 prDir
  5.        segLst Start stDist stLst tAng
  6.        vlaPln *error*)
  7. (vl-load-com)
  8. (defun GetPlineVer(plObj)
  9.    (mapcar 'cdr
  10.     (vl-remove-if-not
  11.      '(lambda(x)(=(car x)10))
  12.      (entget plObj)))
  13.    ); end of GetPLineVer
  14. (defun asmi-PlineSegmentDataList(plObj / cLst outLst)
  15.   (setq cLst
  16.    (vl-remove-if-not
  17.      '(lambda(x)(member(car x) '(10 40 41 42)))
  18.      (entget plObj))
  19.     outLst '()
  20.    ); end setq
  21. (while cLst
  22.    (if(assoc 40 cLst)
  23.      (progn
  24.       (setq outLst
  25.      (append outLst
  26.       (list
  27. (list
  28.    (cdr(assoc 10 cLst))
  29.    (cdr(assoc 40 cLst))
  30.    (cdr(assoc 41 cLst))
  31.    (cdr(assoc 42 cLst))
  32.   ); end list
  33. ); end list
  34.      ); end if
  35. ); end setq
  36.       (repeat 4
  37. (setq cLst(cdr cLst))
  38. ); end repeat
  39.       ); end progn
  40.      (setq outLst
  41.      (append outLst
  42.      (list
  43.        (list
  44.   (cdr(assoc 10 cLst))
  45. ); end list
  46.        ); end list
  47.     ); end append
  48.    cLst nil
  49.    ); end setq
  50.      ); end if
  51.    ); end while
  52. outLst
  53.    ); end of asmi-GetPlineSegmentData
  54. (defun asmi-LayersUnlock(/ restLst)
  55. (setq restLst '())
  56. (vlax-for lay
  57.    (vla-get-Layers
  58.             (vla-get-ActiveDocument
  59.               (vlax-get-acad-object)))
  60.    (setq restLst
  61.     (append restLst
  62.       (list
  63.         (list
  64.          lay
  65.           (vla-get-Lock lay)
  66.   (vla-get-Freeze lay)
  67.          ); end list
  68.         ); end list
  69.       ); end append
  70.    ); end setq
  71.    (vla-put-Lock lay :vlax-false)
  72.    (if
  73.      (vl-catch-all-error-p
  74. (vl-catch-all-apply
  75. 'vla-put-Freeze(list lay :vlax-false)))
  76.      t)
  77.    ); end vlax-for
  78. restLst
  79. ); end of asmi-LayersUnlock
  80. (defun asmi-LayersStateRestore(StateList)
  81. (foreach lay StateList
  82.    (vla-put-Lock(car lay)(cadr lay))
  83.     (if
  84.      (vl-catch-all-error-p
  85. (vl-catch-all-apply
  86. 'vla-put-Freeze(list(car lay)(nth 2 lay))))
  87.      t)
  88.    ); end foreach
  89. (princ)
  90.     ); end of asmi-LayersStateRestore
  91. (defun PipeMLineStyle(/ dxfLst mlDict)
  92. (setq dxfLst
  93.   (list'(0 . "MLINESTYLE")'(102 . "{ACAD_REACTORS")'(102 . "}")
  94.    '(100 . "AcDbMlineStyle") '(2 . "DUCT_PIPE")
  95.    '(70 . 272)'(3 . "")'(62 . 256)'(51 . 1.5708)'(52 . 1.5708)
  96.    '(71 . 2)'(49 . 0.5)'(62 . 256)'(6 . "BYBLOCK")
  97.    '(49 . -0.5)'(62 . 256)'(6 . "BYBLOCK"))); end setq
  98.    (if
  99.     (null
  100.      (member
  101.       (assoc 2 dxfLst)
  102.         (dictsearch
  103.   (namedobjdict)
  104.   "ACAD_MLINESTYLE")))
  105.    (progn
  106.      (setq mlDict
  107.       (cdr
  108.         (assoc -1
  109.   (dictsearch
  110.     (namedobjdict)
  111.     "ACAD_MLINESTYLE"))))
  112.      (dictadd mlDict
  113.         (cdr(assoc 2 dxfLst))(entmakex dxfLst))
  114.      ); end progn
  115.    ); end if
  116. ); end of PipeMLineStyle
  117. (defun SideCalculate(Rad Ang)
  118. (setq Ang(- pi Ang))
  119. (*
  120.    (/
  121.      (sqrt(-(* 2(expt Rad 2))(* 2(expt Rad 2)(cos Ang))))
  122.      (sin(- pi Ang)))(sin(/(- pi(- pi Ang))2)
  123.     )
  124.    )
  125. ); end of SideCalculate
  126. (defun *error*(msg)
  127.    (setvar "CMDECHO" 0)
  128.    (if lObj
  129.      (command "_.erase"(entnext lObj)"")
  130.      (command "_.erase"(entlast)"")
  131.      ); end if
  132.    (if oldVars
  133.      (mapcar 'setvar
  134.      '("FILLMODE" "PLINEWID" "CMDECHO" "OSMODE")
  135.      oldVars); end mapcar
  136.     ); end if
  137.    (if stLst
  138.      (asmi-LayersStateRestore stLst)
  139.      ); end if
  140.     (if actDoc
  141.      (vla-EndUndoMark actDoc)
  142.      ); end if
  143.    (princ "*Cancel* ")
  144.    (princ)
  145.    ); end of *error*
  146. (PipeMLineStyle)
  147. (if(not dpipepWd)(setq dpipepWd 1.0))
  148. (setq oldWd dpipepWd
  149.        dpipepWd(getdist
  150.               (strcat "\nSpecify first segment width <" (rtos dpipepWd) ">: "))
  151. oldVars(mapcar 'getvar '("FILLMODE" "PLINEWID" "CMDECHO" "OSMODE"))
  152.        ); end setq
  153. (if(null dpipepWd)(setq dpipepWd oldWd))
  154. (mapcar 'setvar
  155. '("FILLMODE" "PLINEWID" "CMDECHO")
  156. (list 0 dpipepWd 1)); end mapcar
  157. (if(entlast)(setq lObj(entlast)))
  158. (vla-StartUndoMark
  159.   (setq actDoc
  160.    (vla-get-ActiveDocument
  161.      (vlax-get-acad-object))))
  162.   (setq fPt
  163. (getpoint "\nSpecify start point: ")
  164.     ); end setq
  165. (command "_.pline" fPt)
  166. (while(= 1(getvar "CMDACTIVE"))
  167.    (command pause)
  168.    ); end while
  169. (if
  170.    (not
  171.      (equal lObj(entlast)))
  172. (progn
  173. (setq lEnt(entlast)
  174.        stLst(asmi-LayersUnlock)
  175.   segLst(asmi-PlineSegmentDataList lEnt)
  176.   vlaPln(vlax-ename->vla-object lEnt)
  177. ); end setq
  178. (setvar "OSMODE" 0)
  179. (setvar "CMDECHO" 0)
  180. (while (/= 1(length segLst))
  181.       (setq stDist
  182.       (vlax-curve-getDistAtPoint vlaPln
  183. (caar segLst))
  184.      enDist
  185.       (vlax-curve-getDistAtPoint vlaPln
  186. (caadr segLst))
  187.      ); end setq
  188.    (if(< 2(length segLst))
  189.      (progn
  190.       (setq ang1
  191.       (+(/ pi 2)(angle(caar segLst)(caadr segLst)))
  192.      ang2
  193.       (+(/ pi 2)(angle(caadr segLst)(car(nth 2 segLst))))
  194.      ); end setq
  195.       ); end progn
  196.      ); end if
  197.    (if
  198.      (or
  199. (not Start)
  200. prDir
  201. );end or
  202.       (setq plStart1
  203.        (vlax-curve-getPointAtDist vlaPln
  204.   stDist)
  205.      Start T); end setq
  206.       (setq plStart1
  207.        (vlax-curve-getPointAtDist vlaPln
  208.   (+ stDist(SideCalculate(cadar segLst)ang3)))); end setq
  209.      ); end if
  210.      (if(and ang1 ang2)
  211.      (progn
  212.      (if(> ang1 ang2)
  213. (setq ang3(- ang1 ang2))
  214. (setq ang3(- ang2 ang1))
  215. ); end if
  216.       (setq ang3(- pi ang3)
  217.      tAng ang3)
  218.       (if(minusp ang3)(setq ang3(- ang3)))
  219.       ); end progn
  220.      ); end if
  221.    (if
  222.      (or
  223.        (equal ang1 ang2 0.000001)
  224. (= 2(length segLst))
  225.       ); end or
  226.         (setq plEnd
  227.            (vlax-curve-getPointAtDist vlaPln
  228.     enDist)
  229. prDir T); end setq
  230.          (setq plEnd
  231.            (vlax-curve-getPointAtDist vlaPln
  232.      (- enDist(SideCalculate(cadar segLst)ang3)))
  233. prDir nil); end setq
  234.      ); end if
  235.    (if
  236.      (< 2(length segLst))
  237.       (setq plStart2
  238.        (vlax-curve-getPointAtDist vlaPln
  239.   (+ enDist(SideCalculate(cadar segLst)ang3)))); end setq
  240.      ); end if
  241.       (if(< 2(length segLst))
  242.        (if
  243.   (=(cadar segLst)(nth 2(car segLst)))
  244.    (setq ptLst
  245.                     (mapcar
  246.        '(lambda(x)(trans x 0 1)); end lambda
  247.                 (list(polar plEnd ang1 (/(cadar segLst)2))
  248.        (polar plEnd (+ pi ang1)(/(cadar segLst)2))
  249.        (polar plStart2 (+ pi ang2)(/(cadar segLst)2))
  250.        (polar plStart2 ang2 (/(cadar segLst)2))
  251.         ); end list
  252.            ); end mapcar
  253.   ); end setq
  254.   (setq ptLst
  255.     (mapcar
  256.      '(lambda(x)(trans x 0 1)); end lambda
  257.         (list (polar plStart1 ang1 (/(cadar segLst)2))
  258.        (polar plStart1 (+ pi ang1)(/(cadar segLst)2))
  259.        (polar(caadr segLst)(+ pi ang2)(/(nth 2(car segLst))2))
  260.        (polar(caadr segLst)ang2(/(nth 2(car segLst))2))
  261.        ); end list
  262.            ); end mapcar
  263.   ); end setq
  264.        ); end if
  265. ); end if
  266.      (setq plStart1(trans plStart1 0 1)
  267.       plEnd(trans plEnd 0 1)
  268.   ); end setq
  269.     (if plStart2
  270.        (setq plStart2(trans plStart1 0 1))
  271.       ); end if
  272.       (if
  273. (and
  274.    (< 2(length segLst))
  275.   (or
  276.       (not(equal ang1 ang2 0.000001))
  277.       (/=(cadar segLst)(nth 2(car segLst)))
  278.     ); end or
  279.    ); end and
  280.       (progn
  281.         (setvar "PLINEWID" 0.0)
  282.         (command "_.pline")
  283. (mapcar 'command ptLst)(command "_c")
  284.         (setvar "PLINEWID" dpipepWd)
  285. ); end progn
  286. ); end if
  287.    (if
  288.      (and
  289.        (not(equal ang1 ang2 0.000001))
  290.        (< 2(length segLst))
  291.      ); end and
  292.      (progn
  293.        (setq lPln
  294.       (vlax-ename->vla-object(entlast))
  295.       tAng(- ang2 ang1)
  296.      ); end setq
  297.        (if(minusp tAng)(setq tAng(- tAng)))
  298.         (if
  299.    (and
  300.     (< 0 tAng)
  301.     (>= pi tAng)
  302.     ); end and
  303.   (progn
  304.          (vla-SetBulge lPln 1 (/(- ang2 ang1)4))
  305.          (vla-SetBulge lPln 3 (/(- ang1 ang2)4))
  306.          ); end progn
  307.   (progn
  308.     (if(< ang1 ang2)
  309.       (setq ang1(+ ang1 pi)
  310.      ang2(- ang2 pi)); end setq
  311.       (setq ang1(- ang1 pi)
  312.      ang2(+ ang2 pi)); end setq
  313.       ); end if
  314.      (vla-SetBulge lPln 1 (/(- ang2 ang1)4))
  315.          (vla-SetBulge lPln 3 (/(- ang1 ang2)4))
  316.     ); end progn
  317.   ); end if
  318.       ); end progn
  319. ); end if
  320. (if
  321.    (=(cadar segLst)(nth 2(car segLst)))
  322.      (command "_.mline" "_st" "DUCT_PIPE"
  323. "_S" (cadar segLst) "_J" "_Z"
  324. plStart1 plEnd "")
  325.    ); end if
  326.    
  327.    (setq segLst(cdr segLst)); end setq
  328.    ); end while
  329. (command "_.erase" lEnt "")
  330. (asmi-LayersStateRestore stLst)
  331. ); end progn
  332.    ); end if
  333. (vla-EndUndoMark actDoc)
  334. (mapcar 'setvar
  335.      '("FILLMODE" "PLINEWID" "CMDECHO" "OSMODE")
  336.      oldVars); end apply
  337. (princ)
  338. ); end of c:dpipeAttached Images
  339.   
  340. --------------------------------------------------------------------------------
  341. Last edited by ASMI : 24th Feb 2007 at 07:29 am. Reason: Fixed small bug  
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 14:54:25 | 显示全部楼层
嗨,Chelsea1307,
 
你所说的15度的过渡是什么意思?
你可能想在这个论坛上搜索wpipe。lsp例程。
这个论坛上有一些版本。
 
其中一些对我来说很好。试试看我会说。。。
回复

使用道具 举报

22

主题

272

帖子

254

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2022-7-6 15:15:05 | 显示全部楼层
尝试读取命令行:
 
D管道
指定第一段宽度:
 
指定起点:_。普林线
指定起点:
当前线宽为2.0000
指定下一点或[弧/半宽/长度/撤消/宽度]:
指定下一点或[弧(A)/闭合(C)/半宽(H)/长度(L)/撤消(U)/宽度(w)]:w
 
指定起始宽度:
 
指定结束宽度:1.5
 
计算你需要得到的度数和长度。
回复

使用道具 举报

57

主题

351

帖子

294

银币

后起之秀

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

铜币
285
发表于 2022-7-6 15:45:34 | 显示全部楼层
我希望从一个到另一个的变化始终处于相同的程度,无论它发生在3英寸还是3英尺都无关紧要,只要它以15度的速度发展,我附上了一张图片来展示我在说什么。除此之外,lisp非常适合绘制双线风管,我查看了本网站上发布的其他图片,除此之外,这张图片最适合我。
152936psyrvpynn14lpqns.jpg
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 00:35 , Processed in 0.443267 second(s), 62 queries .

© 2020-2025 乐筑天下

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