乐筑天下

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

[编程交流] 组合三个lisp例程int

[复制链接]

39

主题

180

帖子

141

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
195
发表于 2022-7-6 08:19:51 | 显示全部楼层 |阅读模式
大家好,
 
我需要一些帮助,我有三个lisp例程,我想合并成一个例程。它们都使用相同的对象来获得结果,所以我想知道是否有方法将它们结合在一起。其顺序如下:
 
1.olo(偏移多段线)
2.exl(拉伸长度)我看到的唯一一点是,它需要使用输入进行放置,我希望它将结果放置在线的外侧。通过创建一个分解的矩形来运行lisp例程,看看它做了什么。
3.pte(面板标签扩展)
 
它们都能自己完美运行,但我只是想加快进程。这是我正在使用的代码。任何帮助都将不胜感激。
 
谢谢
布瑞恩
 
  1. ;|    OFFSET POLYLINES
  2. [email="mfuccaro@hotmail.com"]mfuccaro@hotmail.com[/email]    September 2003
  3. |;
  4. (defun c:olo( / plines    ; selection set of polylines
  5.            ext    ; extrnal point
  6.             dist    ; distance to offset
  7.             poly    ; a polyline from plines
  8.             plist    ; the list of poly
  9.             del    ; polyline to delete
  10.             int    ; internal point
  11.             i)
  12. (command "undo" "begin")
  13. (princ "select polylines")
  14. (setq plines (ssget)
  15.    i 0
  16.    ext (getvar "limmax")
  17.    dist (getdist (strcat "distance <" (if olddist
  18.                                          (rtos olddist)   ;use old value as default
  19.                                           "") ">")))
  20. (if (not dist) (setq dist olddist))                      ;reuse old distance if user press <Enter>
  21. (repeat (sslength plines)
  22.    (setq poly (ssname plines i))
  23.    (setq plist (entget poly))
  24.    (command "offset" dist poly ext "")
  25.    (setq del (entlast)
  26.      int (polar
  27.        (cdr (assoc 10 (entget del)))
  28.             (angle
  29.               (cdr (assoc 10 (entget del)))
  30.               (cdr (assoc 10 plist)))
  31.             (* 2 (distance (cdr (assoc 10 plist))
  32.                    (cdr (assoc 10 (entget del)))))))
  33.    (command "offset" dist poly int "")
  34.     (command "_.change" (entlast) "" "_p" "_la" (getvar 'clayer) "")
  35.   (entdel del)
  36.    (setq i (1+ i)))
  37. (command "undo" "end")
  38. (setq olddist dist)                                      ;preserve current distance for next run
  39. (princ)
  40. )
  41. ;Extrusion Length
  42. (defun c:EXTL (/ cEnt tStr tBox tHgt tWid gr sPt cPt lAng bPt tPt pt1 pt2 pt3 pt4)
  43. (vl-load-com)
  44. (if (and (setq cEnt (car (entsel "\nSelect Object: ")))
  45.           (member (cdr (assoc 0 (entget cEnt)))
  46.                   '("LWPOLYLINE" "POLYLINE" "LINE")))
  47.    (progn
  48.      (setq tStr (strcat "1@" (rtos (- (vla-get-length
  49.                         (vlax-ename->vla-object cEnt)) 4.0)) (strcat "''"))
  50.            tBox (textbox (list (cons 1 tStr) (cons 40 (getvar "TEXTSIZE"))))
  51.            tHgt (- (cadadr tBox) (cadar tBox))
  52.            twid (- (caadr tBox) (caar tBox)))
  53.      (princ "\nPosition Text...")
  54.      (while (eq 5 (car (setq gr (grread t 5 0))))
  55.        (redraw)
  56.        (if (listp (setq sPt (cadr gr)))
  57.          (progn
  58.            (setq cPt  (vlax-curve-getClosestPointto cEnt sPt)
  59.                  lAng (angle cPt sPt)
  60.                  bpt  (polar cPt lAng (/ (getvar "TEXTSIZE") 2.))
  61.                  tpt  (polar bpt lAng tHgt)
  62.                  mPt  (polar bPt lAng (/ tHgt 2.))
  63.                  pt1  (polar bpt (+ lAng (/ pi 2.)) (/ tWid 2.))
  64.                  pt2  (polar bPt (- lAng (/ pi 2.)) (/ tWid 2.))
  65.                  pt3  (polar tpt (+ lAng (/ pi 2.)) (/ tWid 2.))
  66.                  pt4  (polar tPt (- lAng (/ pi 2.)) (/ tWid 2.)))
  67.            (grvecs (list -3 pt1 pt2 pt3 pt4 pt1 pt3 pt2 pt4)))))
  68.      (if (eq 3 (car gr))
  69.        (progn
  70.          (setq lAng (- lAng (/ pi 2.)))
  71.          (cond ((and (> lAng (/ pi 2)) (<= lAng pi))
  72.                 (setq lAng (- lAng pi)))
  73.                ((and (> lAng pi) (<= lAng (/ (* 3 pi) 2)))
  74.                 (setq lAng (+ lAng pi))))
  75.          (Make_Text mPt tStr lAng))))
  76.    (princ "\n<!> Incorrect Selection <!>"))
  77. (redraw)
  78. (princ))
  79. (defun Make_Text  (pt val rot)
  80. (entmake
  81.    (list
  82.      (cons 0 "TEXT")
  83.      (cons 8 (getvar "CLAYER"))
  84.      (cons 62 1)
  85.      (cons 10 pt)
  86.      (cons 40 (getvar "TEXTSIZE"))
  87.      (cons 1 val)
  88.      (cons 50 rot)
  89.      (cons 7 (getvar "TEXTSTYLE"))
  90.      (cons 71 0)
  91.      (cons 72 1)
  92.      (cons 73 2)
  93.      (cons 11 pt))))
  94. ;;; PANEL TAB EXTENSIONS
  95. (defun c:PTE(/ lSet actDoc lDel doMode objLst)
  96. (vl-load-com)
  97. (princ "\n>>> Select lines to extend/reduce <<< ")
  98. (if
  99. (and
  100. (setq lSet
  101. (ssget
  102. '((0 . "LINE"))));
  103. (setq lDel
  104. (getreal "\nSpecify : "))
  105. ); end and
  106. (progn
  107. (initget 1 "Positive Negative Both")
  108. (setq doMode
  109. (getkword "\nSpecify direction [Positive/Negative/Both]: ")
  110. objLst(mapcar 'vlax-ename->vla-object
  111. (vl-remove-if 'listp
  112. (mapcar 'cadr(ssnamex lSet))))); end setq
  113. (vla-StartUndoMark
  114. (setq actDoc
  115. (vla-get-ActiveDocument
  116. (vlax-get-acad-object)))); end vla-StartUndoMark
  117. (if(member doMode '("Negative" "Both"))
  118. (foreach ln objLst
  119. (vlax-put ln 'startpoint
  120. (polar
  121. (vlax-get ln 'startpoint)
  122. (vlax-get ln 'angle)(- lDel))); end vlax-put
  123. ); end foreach
  124. ); end if
  125. (if(member doMode '("Positive" "Both"))
  126. (foreach ln objLst
  127. (vlax-put ln 'endpoint
  128. (polar
  129. (vlax-get ln 'endpoint)
  130. (vlax-get ln 'angle)lDel))
  131. ); end foreach
  132. ); end if
  133. (vla-EndUndoMark actDoc)
  134. ); end progn
  135. ); end if
  136. (princ)
  137. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 08:09 , Processed in 0.465943 second(s), 54 queries .

© 2020-2025 乐筑天下

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