乐筑天下

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

[编程交流] 每次完成多个偏移PLINE

[复制链接]

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 23:18:39 | 显示全部楼层 |阅读模式
该lisp可能对任何寻求多个偏移样条线的人有用,但可以选择创建样条线,但只需要1个例程,而不是3或4个例程
 
方法创建具有不同选项的样条线拾取点偏移,它会一直接受输入,直到按为止,可以是3个选项中的任何一个。
 
001840lnhjjjm1nevm33rd.jpg
 
您可以用3种不同的方式输入选项
 
输入3,它将向右偏移3个单位,宽度为零-3表示向左偏移3个单位。
输入15,3,它将使pline偏移15个单位,宽度为3
输入15,3140,它将使pline偏移15个单位,宽度为3,颜色为140
 
代码可以很容易地更改以支持层名称
输入15,3,电气
 
  1. ; multiple pline including width & col function
  2. ; single entry is offset only
  3. ; two values 3,1 means offset 3 with width 1
  4. ; three values 3,2,1 means offset 3 with start width 2 end 1
  5. ; by Alan H March 2014
  6. ; thanks to Lee-mac for this defun
  7. (defun _csv->lst ( str / pos )
  8. (if (setq pos (vl-string-position 44 str))
  9.    (cons (substr str 1 pos) (_csv->lst (substr str (+ pos 2))))
  10.    (list str)
  11.    )
  12. )
  13. (defun aH:multpl ( / pt1 pt2 pt3 obj1 obj2 dist1 pwidst plcol lst howmany)
  14. (setvar "PLINEWID" 0) ;set PL width to 0
  15. (command "_pline")
  16. (while (= (getvar "cmdactive") 1 ) (command pause)
  17. )
  18. (setq pt1 nil)
  19. (setq obj1 (entlast)) ; grab pline
  20. (setq pt1 (getvar "lastpoint")) ; last pt
  21. (command "circle" pt1 1.0) ; do something smart here like screen scale for circle
  22. (setq obj2  (entlast)) ;grab circle
  23. (setq pt2 (vlax-invoke (vlax-ename->vla-object obj1) 'intersectWith (vlax-ename->vla-object obj2) acextendnone)); find int point
  24. (setq ang (angle pt1 pt2)) ;angle of pline now know left - right
  25. (command "erase" "last" "") ; remove circle
  26. (while (/= (setq offval (getstring "Enter offset distance -ve for left")) "")
  27. (setq lst (cons (_csv->lst offval) lst))
  28. (setq howmany (length (nth 0 lst))) ;determines single or multi answer
  29. (if (= howmany 1)(setq dist1 (atof (nth 0 (nth 0 lst)))) )
  30. (if (= howmany 2)
  31.   (progn
  32.   (setq dist1 (atof (nth 0 (nth 0 lst))))
  33.   (setq pwidst (atof (nth 1 (nth 0 lst))))
  34.   ) ; progn
  35. ); if
  36. (if (= howmany 3)
  37.   (progn
  38.   (setq dist1 (atof (nth 0 (nth 0 lst))))
  39.   (setq pwidst (atof (nth 1 (nth 0 lst))))
  40.   (setq pLcol (atof (nth 2 (nth 0 lst))))
  41.   ) ; progn
  42. ); if
  43. (if (> dist1 0.0)
  44. (setq pt3 (polar pt2 (+ ang (/ pi 2.0)) (abs dist1)))
  45. (setq pt3 (polar pt2 (- ang (/ pi 2.0)) (abs dist1)))
  46. )
  47. (command "offset" (abs dist1) obj1 pt3 "")
  48. (if (>= howmany 2)
  49. (vla-put-ConstantWidth (vlax-ename->vla-object (entlast)) pwidst)
  50. )
  51. (if (= howmany 3)
  52. (vla-put-color (vlax-ename->vla-object (entlast)) plcol) ; note color as a number
  53. )
  54. ) ; end while
  55. (command "erase" obj1 "")
  56. ) ; end defun
  57. (AH:multpl)
  58. (princ)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:09 , Processed in 1.408453 second(s), 70 queries .

© 2020-2025 乐筑天下

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