乐筑天下

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

[编程交流] 偏移线X 2和更改铺层

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:48:45 | 显示全部楼层
好的,我有一个LISP,它会自动为你偏移所有的线,但我无法解决如何圆角所有的偏移线-如何告诉ACAD哪些线是用哪个线圆角的,以及如何存储所有新创建的线。
 
但试一试:
 
  1. (defun c:membrane (/ *error* varLst oldVars ss ssl index lins pt ent1 ent l1 l2)
  2. ;     --- Error Trap ---
  3.    (defun *error* (msg)
  4.    (mapcar 'setvar varLst oldVars)
  5.    (if (= msg "")
  6.        (princ "\nFunction Complete.")
  7.        (princ "\nError or Esc pressed... ")
  8.    ) ;_  end if
  9.    (princ)
  10.    ) ; end of *error*
  11.    (setq varLst  (list "CMDECHO" "CLAYER" "FILLETRAD")
  12.      oldVars (mapcar 'getvar varLst)
  13.    ) ; end setq
  14. ;    --- Error Trap ---
  15.    (setvar "cmdecho" 0)
  16.    (makelay "Membrane")
  17.    (setq ss    (ssget)
  18.      ssl    (sslength ss)
  19.      index    0
  20.      lins    0
  21.    ) ;_  end setq
  22.    (if
  23.    (setq pt (getpoint "\nSelect Point on Side of Lines to Offset: "))
  24.       (progn
  25.           (repeat ssl
  26.           (setq ent (ssname ss index))
  27.           (setq ent1 (entget ent))
  28.           (if (= "LINE" (cdr (assoc 0 ent1)))
  29.               (progn
  30.               (command "_offset" "5.0" ent pt "")
  31.               (setq l1 (entlast))
  32.               (command "_chprop" l1 "" "la" "Membrane" "c" "cyan" "lt" "awthidden2" "")
  33.               (command "_offset" "5.0" l1 pt "")
  34.               (setq l2 (entlast))
  35.               (command "_chprop" l2 "" "la" "Membrane" "c" "red" "lt" "continuous" "")
  36.               (setq lins (1+ lins))
  37.               ) ;_  end progn
  38.           ) ;_  end if
  39.           (setq index (1+ index))
  40.           ) ;_  end repeat
  41.       ) ;_  end progn
  42.       (alert "Please Select a Point.")
  43.    ) ;_  end if
  44.    (if    (= 1 lins)
  45.    (princ (strcat "\n" (itoa lins) " Line Offset."))
  46.    (princ (strcat "\n" (itoa lins) " Lines Offset."))
  47.    ) ;_  end if
  48.    (*error* "")
  49.    (princ)
  50. ) ;_  end defun
  51. ;;; I gave up at this point...
  52. ;;;        (setvar "filletrad" 0)
  53. ;;;        (setq ang1 (angget l1))
  54. ;;;        (setq ang2 (angget l2))
  55. ;;;        (setq mid1 (polar (cdr (assoc 10 l1)) ang1 (/ (len l1) 2)))
  56. ;;;        (setq mid2 (polar (cdr (assoc 10 l2)) ang2 (/ (len l2) 2)))
  57. ;;;        (command "_fillet"
  58. (defun makelay (lay)
  59.    (if    (not (tblsearch "Layer" lay))
  60.    (command "-layer" "m" lay "")
  61.    ) ;_  end if
  62. ) ;_  end defun
  63. (defun angget (lin)
  64.    (angle (cdr (assoc 10 lin)) (cdr (assoc 11 lin)))
  65. ) ;_  end defun
  66. (defun len (a)
  67.    (distance (cdr (assoc 10 a)) (cdr (assoc 11 a)))
  68. ) ;_  end defun
回复

使用道具 举报

24

主题

109

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 15:53:18 | 显示全部楼层
工作很好,李,谢谢,我本来以为这可以做到的,任何时候你偏移线,他们将圆角,直到你按下回车键(然后可以移动到一个新的部分)。但是如果这太难了,不要担心。谢谢你的帮助。我现在必须欠你两个案子。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:54:23 | 显示全部楼层
这就是选择集的工作方式,很难判断哪些行需要用哪些行填充。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:58:37 | 显示全部楼层
好的,为什么不试试Express工具中的“EXOFFSET”。
 
请参阅视频-尽管这些线必须是多段线才能使圆角工作。
exoffset演示。拉链
回复

使用道具 举报

24

主题

109

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 16:02:53 | 显示全部楼层
我们尽量不使用多段线。。。无论如何,这个程序做的仍然很好,谢谢你的帮助。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:04:35 | 显示全部楼层
 
没问题,很乐意帮忙
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 16:09:29 | 显示全部楼层
李·麦克,
将原始线更改为pline,根据需要进行偏移,然后全部分解。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:10:04 | 显示全部楼层
干杯,出租车,
当我有时间的时候,我会看看如何改变我的Lisp程序,谢谢你的提示!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:15:02 | 显示全部楼层
好的,加扎尔普,
 
使用CAB善意推荐的提示,我得出了以下结论:
 
  1. (defun c:membrane (/ *error* varLst oldVars ss ssl l1 pt l2 l3)
  2. ;     --- Error Trap ---
  3.    (defun *error* (msg)
  4.    (mapcar 'setvar varLst oldVars)
  5.    (command "_explode" l1)
  6.    (if (= msg "")
  7.        (princ "\nFunction Complete.")
  8.        (princ "\nError or Esc pressed... ")
  9.    ) ;_  end if
  10.    (princ)
  11.    ) ; end of *error*
  12.    (setq varLst  (list "CMDECHO" "CLAYER")
  13.      oldVars (mapcar 'getvar varLst)
  14.    ) ; end setq
  15. ;    --- Error Trap ---
  16.    (setvar "cmdecho" 0)
  17.    (makelay "Membrane")
  18.    (setq ss  (ssget)
  19.      ssl (sslength ss)
  20.    ) ;_  end setq
  21.    (if    (= ssl 1)
  22.    (command "_pedit" ss "Y" "")
  23.    (command "_pedit" "M" ss "" "Y" "J" "" "")
  24.    ) ;_  end if
  25.    (setq l1 (entlast))
  26.    (if
  27.    (setq pt (getpoint "\nSelect Point on Side of Lines to Offset: "))
  28.       (progn
  29.           (command "_offset" "5.0" l1 pt "")
  30.           (setq l2 (entlast))
  31.           (command "_chprop" l2 "" "la" "Membrane" "c" "cyan" "lt" "awthidden2" "")
  32.           (command "_offset" "5.0" l2 pt "")
  33.           (setq l3 (entlast))
  34.           (command "_chprop" l3 "" "la" "Membrane" "c" "red" "lt" "continuous" "")
  35.       ) ;_  end progn
  36.       (alert "Please Select a Point.")
  37.    ) ;_  end if
  38.    (command "_explode" l1)
  39.    (command "_explode" l2)
  40.    (command "_explode" l3)
  41.    (princ)
  42. ) ;_  end defun
  43. (defun makelay (lay)
  44.    (if    (not (tblsearch "Layer" lay))
  45.    (command "-layer" "m" lay "")
  46.    ) ;_  end if
  47. ) ;_  end defun
回复

使用道具 举报

24

主题

109

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 16:16:10 | 显示全部楼层
太棒了,李,做得很好。谢谢你和CAB
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 21:17 , Processed in 0.452823 second(s), 70 queries .

© 2020-2025 乐筑天下

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