乐筑天下

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

[编程交流] 重复或循环

[复制链接]

39

主题

180

帖子

141

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
195
发表于 2022-7-6 08:17:05 | 显示全部楼层 |阅读模式
大家好,
 
我已经想出了合并我的三个Lisp rputine,但它仍然需要工作,我需要重复例程的最后一部分,直到右键单击,我不知道这让我发疯。谁能帮帮我吗。还有一种方法可以使用例程第一部分的结果来运行例程的其余部分吗?
 
谢谢,布莱恩
 
 
  1. (defun c:test1( / plines    ; selection set of polylines
  2.            ext    ; extrnal point
  3.             dist    ; distance to offset
  4.             poly    ; a polyline from plines
  5.             plist    ; the list of poly
  6.             del    ; polyline to delete
  7.             int    ; internal point
  8.             i)
  9. (command "undo" "begin")
  10. (princ "select polylines")
  11. (setq plines (ssget)
  12.    i 0
  13.    ext (getvar "limmax")
  14.    dist (getdist (strcat "distance <" (if olddist
  15.                                          (rtos olddist)   ;use old value as default
  16.                                           "") ">")))
  17. (if (not dist) (setq dist olddist))                      ;reuse old distance if user press <Enter>
  18. (repeat (sslength plines)
  19.    (setq poly (ssname plines i))
  20.    (setq plist (entget poly))
  21.    (command "offset" dist poly ext "")
  22.    (setq del (entlast)
  23.      int (polar
  24.        (cdr (assoc 10 (entget del)))
  25.             (angle
  26.               (cdr (assoc 10 (entget del)))
  27.               (cdr (assoc 10 plist)))
  28.             (* 2 (distance (cdr (assoc 10 plist))
  29.                    (cdr (assoc 10 (entget del)))))))
  30.    (command "offset" dist poly int "")
  31.     (command "_.change" (entlast) "" "_p" "_la" (getvar 'clayer) "")
  32.   (entdel del)
  33.    (setq i (1+ i)))
  34. (command "undo" "end")
  35. (setq olddist dist)                                      ;preserve current distance for next run
  36. (vl-load-com)
  37. (princ "\n>>> Select lines to extend/reduce <<< ")
  38. (if
  39. (and
  40. (setq lSet
  41. (ssget
  42. '((0 . "LINE"))));
  43. (setq lDel
  44. (getreal "\nSpecify : "))
  45. ); end and
  46. (progn
  47. (initget 1 "Positive Negative Both")
  48. (setq doMode
  49. (getkword "\nSpecify direction [Positive/Negative/Both]: ")
  50. objLst(mapcar 'vlax-ename->vla-object
  51. (vl-remove-if 'listp
  52. (mapcar 'cadr(ssnamex lSet))))); end setq
  53. (vla-StartUndoMark
  54. (setq actDoc
  55. (vla-get-ActiveDocument
  56. (vlax-get-acad-object)))); end vla-StartUndoMark
  57. (if(member doMode '("Negative" "Both"))
  58. (foreach ln objLst
  59. (vlax-put ln 'startpoint
  60. (polar
  61. (vlax-get ln 'startpoint)
  62. (vlax-get ln 'angle)(- lDel))); end vlax-put
  63. ); end foreach
  64. ); end if
  65. (if(member doMode '("Positive" "Both"))
  66. (foreach ln objLst
  67. (vlax-put ln 'endpoint
  68. (polar
  69. (vlax-get ln 'endpoint)
  70. (vlax-get ln 'angle)lDel))
  71. ); end foreach
  72. ); end if
  73. (vla-EndUndoMark actDoc)
  74. ); end progn
  75. ); end if
  76. (vl-load-com)
  77. (if (and (setq cEnt (car (entsel "\nSelect Object: ")))
  78.           (member (cdr (assoc 0 (entget cEnt)))
  79.                   '("LWPOLYLINE" "POLYLINE" "LINE")))
  80.    (progn
  81.      (setq tStr (strcat "1@" (rtos (- (vla-get-length
  82.                         (vlax-ename->vla-object cEnt)) 5.38)) (strcat "''"))
  83.            tBox (textbox (list (cons 1 tStr) (cons 40 (getvar "TEXTSIZE"))))
  84.            tHgt (- (cadadr tBox) (cadar tBox))
  85.            twid (- (caadr tBox) (caar tBox)))
  86.      (princ "\nPosition Text...")
  87.          
  88.       (while (eq 5 (car (setq gr (grread t 5 0))))
  89.             (redraw)
  90.        (if (listp (setq sPt (cadr gr)))
  91.          (progn
  92.            (setq cPt  (vlax-curve-getClosestPointto cEnt sPt)
  93.                  lAng (angle cPt sPt)
  94.                  bpt  (polar cPt lAng (/ (getvar "TEXTSIZE") 2.))
  95.                  tpt  (polar bpt lAng tHgt)
  96.                  mPt  (polar bPt lAng (/ tHgt 2.))
  97.                  pt1  (polar bpt (+ lAng (/ pi 2.)) (/ tWid 2.))
  98.                  pt2  (polar bPt (- lAng (/ pi 2.)) (/ tWid 2.))
  99.                  pt3  (polar tpt (+ lAng (/ pi 2.)) (/ tWid 2.))
  100.                  pt4  (polar tPt (- lAng (/ pi 2.)) (/ tWid 2.)))
  101.            (grvecs (list -3 pt1 pt2 pt3 pt4 pt1 pt3 pt2 pt4)))))
  102.      (if (eq 3 (car gr))
  103.        (progn
  104.          (setq lAng (- lAng (/ pi 2.)))
  105.          (cond ((and (> lAng (/ pi 2)) (<= lAng pi))
  106.                 (setq lAng (- lAng pi)))
  107.                ((and (> lAng pi) (<= lAng (/ (* 3 pi) 2)))
  108.                 (setq lAng (+ lAng pi))))
  109.          (Make_Text mPt tStr lAng))))
  110.    (princ "\n<!> Incorrect Selection <!>"))
  111. (redraw)
  112. (princ))
  113. (defun Make_Text  (pt val rot)
  114. (entmake
  115.    (list
  116.      (cons 0 "TEXT")
  117.      (cons 8 (getvar "CLAYER"))
  118.      (cons 62 1)
  119.      (cons 10 pt)
  120.      (cons 40 (getvar "TEXTSIZE"))
  121.      (cons 1 val)
  122.      (cons 50 rot)
  123.      (cons 7 (getvar "TEXTSTYLE"))
  124.      (cons 71 0)
  125.      (cons 72 1)
  126.      (cons 73 2)
  127.      (cons 11 pt)))
  128.    
  129. )
  130. (princ)
回复

使用道具 举报

5

主题

194

帖子

193

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-6 08:28:25 | 显示全部楼层
嗨,布莱恩,
 
您似乎很好地处理了自动/可视lisp函数。你能解释一下你的计划到底想实现什么吗?
 
当做
 
杰米
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:33:22 | 显示全部楼层
我想我认出了一些密码
 
http://www.cadtutor.net/forum/showthread.php?36659-lisp将带有pline leangth的文本放在第行上方,p=241565,viewfull=1#post241565
 
哇!那太老了。。。
回复

使用道具 举报

39

主题

180

帖子

141

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
195
发表于 2022-7-6 08:41:57 | 显示全部楼层
你好
 
当lisp例程运行时,它可以很好地完成前两部分,但当它到达最后一部分时,它只允许我选择一行,然后结束命令,我想做的是选择需要的行,然后右键单击命令。任何想法。
回复

使用道具 举报

39

主题

180

帖子

141

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
195
发表于 2022-7-6 08:44:33 | 显示全部楼层
嗨,李
 
是的,李,它确实是PLLEN的一部分。你很久以前写的lsp例程。多亏了像你这样的人,我们新手可以学习如何编写适合我们需要的例程。非常感谢李。
 
布瑞恩
回复

使用道具 举报

18

主题

434

帖子

422

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
94
发表于 2022-7-6 08:52:31 | 显示全部楼层
我同意你的观点!http://www.cadtutor.net/forum/showthread.php?756-偏移多个对象
 
Brian,如果你从别人那里获取代码,你应该发布一个简短的通知。人们花时间免费提供日常活动,至少把自己的名字留给子孙后代。
回复

使用道具 举报

39

主题

180

帖子

141

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
195
发表于 2022-7-6 09:02:30 | 显示全部楼层
你好
 
我无意冒犯任何人。当我将它们组合在一起时,我只使用了与lisp例程的函数相关的行。许多道歉。我以后会记住这一点。
 
布瑞恩
回复

使用道具 举报

18

主题

434

帖子

422

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
94
发表于 2022-7-6 09:08:51 | 显示全部楼层
没有冒犯,这只是一句友好的警告。如果你将来能记住这一点,那就好了。
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-6 09:11:35 | 显示全部楼层
 
Brian,fuccaro和Lee都是多年来为帮助本网站和其他地方的其他人贡献了大量代码、专业知识和精力的领军人物。大概你也注意到了fuccaro发布的代码眨眼:
回复

使用道具 举报

18

主题

434

帖子

422

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
94
发表于 2022-7-6 09:17:15 | 显示全部楼层
谢谢爸爸!
我认为我们可以考虑这个问题属于过去。我刚刚在这里发布了一个关于版权的帖子链接,现在我自己认为这个话题已经结束了。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

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

© 2020-2025 乐筑天下

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