乐筑天下

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

[编程交流] LISP,替换l的智能方法

[复制链接]

5

主题

22

帖子

17

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 06:44:25 | 显示全部楼层 |阅读模式
你好
我正在寻找一种方法,用括号(块)查找并替换几行。有人有什么好主意吗?我要重放的所有线条都是线型“LBR”。
 
074429g6dd6n14gtpfaofx.jpg
 
我可能会试着修改这个脚本,帮助我写作。欢迎一些好点子,谢谢。
 
  1. ; Move linetype <LBR> to layer <LBR>
  2. (setq Layer "LBR")
  3. (if (tblsearch "LAYER" Layer)
  4.    (if (setq LSelect (ssget "_X" '((6 . "LBR"))))
  5.      ((lambda (j / sn)
  6.         (while
  7.           (setq sn (ssname LSelect (setq j (1+ j))))
  8.            (entupd
  9.              (cdr
  10.                (assoc
  11.                  -1
  12.                  (entmod (append (entget sn)
  13.                                  (list '(6 . "BYLAYER")
  14.                                        '(370 . -1)
  15.                                        '(62 . 256)
  16.                                        (cons 8 Layer)
  17.                                  )
  18.                          )
  19.                  )
  20.                )
  21.              )
  22.            )
  23.          )
  24.        )
  25.        -1
  26.      )
  27.    )
  28.    (princ (strcat "\n Layer name <" Layer "> is not found <!>"))
  29. )
  30. (if LSelect
  31.    (princ (strcat "\n <"
  32.                   (itoa (sslength LSelect))
  33.                   "> "
  34.                   (if (> (sslength LSelect) 1)
  35.                     "objects"
  36.                     "object"
  37.                   )
  38.                   " moved to layer <"
  39.                   Layer
  40.                   ">"
  41.           )
  42.    )
  43. )
  44. (princ)
  45. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:58:22 | 显示全部楼层
选择线并获取其中点,然后将其用作括号块相对于选定线的角度的插入点。
回复

使用道具 举报

5

主题

22

帖子

17

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 07:02:39 | 显示全部楼层
Thx,听起来很简单,当你说的时候,我想我必须检查线的角度,试试看
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:18:25 | 显示全部楼层
提示:
*选择线图元。
*从检索起点和终点(dxf 10和dxf 11)获得角度。
*中点=从起点或终点形成的直线长度的一半距离,例如(极轴)。
*在中点插入支架块。
*删除线图元(如果需要)。
 
上载样例图形。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:22:38 | 显示全部楼层
如果括号块的水平长度为1.0,则可以使用以下内容:
  1. ([color=BLUE]defun[/color] c:addbrackets ( [color=BLUE]/[/color] ang blk dis enx inc pt1 pt2 sel )
  2.    ([color=BLUE]if[/color]
  3.        ([color=BLUE]and[/color]
  4.            ([color=BLUE]setq[/color] blk (LM:ssget [color=MAROON]"\nSelect Bracket Block: "[/color] '([color=MAROON]"_+.:E:S"[/color] ((0 . [color=MAROON]"INSERT"[/color])))))
  5.            ([color=BLUE]setq[/color] sel (LM:ssget [color=MAROON]"\nSelect Lines for Brackets: "[/color] '(((0 . [color=MAROON]"LINE"[/color])))))
  6.        )
  7.        ([color=BLUE]progn[/color]
  8.            ([color=BLUE]setq[/color] blk ([color=BLUE]assoc[/color] 2 ([color=BLUE]entget[/color] ([color=BLUE]ssname[/color] blk 0))))
  9.            ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] inc ([color=BLUE]sslength[/color] sel))
  10.                ([color=BLUE]setq[/color] enx ([color=BLUE]entget[/color] ([color=BLUE]ssname[/color] sel ([color=BLUE]setq[/color] inc ([color=BLUE]1-[/color] inc))))
  11.                      pt1 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 10 enx))
  12.                      pt2 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 11 enx))
  13.                      ang ([color=BLUE]angle[/color] pt1 pt2)
  14.                      dis ([color=BLUE]distance[/color] pt1 pt2)
  15.                )
  16.                ([color=BLUE]if[/color] ([color=BLUE]and[/color] ([color=BLUE]<[/color] ([color=BLUE]/[/color] [color=BLUE]pi[/color] 2.0) ang) ([color=BLUE]<=[/color] ang ([color=BLUE]/[/color] ([color=BLUE]*[/color] 3.0 [color=BLUE]pi[/color]) 2.0)))
  17.                    ([color=BLUE]setq[/color] ang ([color=BLUE]+[/color] ang [color=BLUE]pi[/color]))
  18.                )
  19.                ([color=BLUE]entmake[/color]
  20.                    ([color=BLUE]list[/color] '(0 . [color=MAROON]"INSERT"[/color]) blk
  21.                        ([color=BLUE]cons[/color] 10
  22.                            ([color=BLUE]polar[/color]
  23.                                ([color=BLUE]mapcar[/color] '([color=BLUE]lambda[/color] ( a b ) ([color=BLUE]/[/color] ([color=BLUE]+[/color] a b) 2.0)) pt1 pt2)
  24.                                ([color=BLUE]-[/color] ang ([color=BLUE]/[/color] [color=BLUE]pi[/color] 2.0))
  25.                                ([color=BLUE]/[/color] dis 4.0)
  26.                            )
  27.                        )                              
  28.                        ([color=BLUE]cons[/color] 50 ang)
  29.                        ([color=BLUE]cons[/color] 41 dis)
  30.                        ([color=BLUE]cons[/color] 42 dis)
  31.                        ([color=BLUE]cons[/color] 43 dis)
  32.                    )
  33.                )
  34.            )
  35.        )
  36.    )
  37.    ([color=BLUE]princ[/color])
  38. )
  39. [color=GREEN];; ssget  -  Lee Mac[/color]
  40. [color=GREEN];; A wrapper for the ssget function to permit the use of a custom selection prompt[/color]
  41. [color=GREEN];;[/color]
  42. [color=GREEN];; Arguments:[/color]
  43. [color=GREEN];; msg    - selection prompt[/color]
  44. [color=GREEN];; params - list of ssget arguments[/color]
  45. ([color=BLUE]defun[/color] LM:ssget ( msg params [color=BLUE]/[/color] sel )
  46.    ([color=BLUE]princ[/color] msg)
  47.    ([color=BLUE]setvar[/color] 'nomutt 1)
  48.    ([color=BLUE]setq[/color] sel ([color=BLUE]vl-catch-all-apply[/color] '[color=BLUE]ssget[/color] params))
  49.    ([color=BLUE]setvar[/color] 'nomutt 0)
  50.    ([color=BLUE]if[/color] ([color=BLUE]not[/color] ([color=BLUE]vl-catch-all-error-p[/color] sel)) sel)
  51. )
  52. ([color=BLUE]princ[/color])
回复

使用道具 举报

5

主题

22

帖子

17

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 07:28:26 | 显示全部楼层
回复

使用道具 举报

5

主题

22

帖子

17

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 07:42:53 | 显示全部楼层
hi again,
i decided to draw a poly line insted, the proble is that i cant figure out in witch format the point is defined
 
;(setq BracketStart (643.75 320.00))
;(setq BracketEnd (31.25, 320.00))   
 
(setq BracketStart (getpoint "\nEnter start point: "))
(setq BracketEnd (getpoint "\nEnter end point: "))
 

[code](defun c:Bracket (/ BracketStart                   BracketEnd                   LegLength                   FirstLeg                   FirstMiddleLeg                   MidPoint                   LastMiddleLeg                   LastLeg                   PointList     ConstantSide                   BracketAngle                   BracketEnd     BracketLength     FirstAngle     LastAngle                   CurrentSettings  )  ;; Default Values (setq Bracket:LegLength 4.0CurrentSettings (mapcar '(lambda (x) (cons x (getvar x))) '("cmdecho" "clayer" "plinewid")) ) (setvar "CMDECHO" 0) ;; Begin Main Function (if   (and     ;(setq BracketStart (643.75 320.00))
回复

使用道具 举报

5

主题

22

帖子

17

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 07:48:42 | 显示全部楼层
works...
draws brackets on all lines with linetype "LBR"... now it's easy to add a script that removes all lines with linetype LBR
  1. (defun c:Bracket (/ BracketStart                   BracketEnd                   LegLength                   FirstLeg                   FirstMiddleLeg                   MidPoint                   LastMiddleLeg                   LastLeg                   PointList                   ConstantSide                   BracketAngle                   BracketEnd                   BracketLength                   FirstAngle                   LastAngle                   CurrentSettings  )  ;; Default Values (setq Bracket:LegLength 4.0CurrentSettings (mapcar '(lambda (x) (cons x (getvar x))) '("cmdecho" "clayer" "plinewid")) ) (setvar "CMDECHO" 0) (if    (if (setq lSet (ssget "_X" '((6 . "LBR"))))      (sssetfirst nil lSet)   )      (progn ;(1)     (setq inc (sslength lSet))     (repeat inc       (setq enx (entget (ssname lSet (setq inc (1- inc))))             ;pt1 (cdr (assoc 10 enx))             ;pt2 (cdr (assoc 11 enx))             BracketEnd (cdr (assoc 10 enx))             BracketStart (cdr (assoc 11 enx))       )              ; Begin Main Function       (if          (and           ;(setq BracketStart '(643.75 320.00 00.00))           ;(setq BracketEnd '(31.25 320.00 00.00))                      ;(setq BracketStart (getpoint "\nEnter start point: "))           ;(setq BracketEnd (getpoint "\nEnter end point: "))         )                  (progn           (setq ConstantSide   0.707106781185                 LegLength      Bracket:LegLength                 BracketLength  (distance BracketStart BracketEnd)                 BracketAngle   (angle BracketStart BracketEnd)                 FirstAngle     (+ BracketAngle (* pi (/ 45 180.0)))                 LastAngle      (+ BracketAngle (* pi (/ 135 180.0)))                 FirstLeg       (polar BracketStart FirstAngle LegLength)                 LastLeg        (polar BracketEnd LastAngle LegLength)                 FirstMiddleLeg (polar FirstLeg                                       BracketAngle                                       (- (/ (distance FirstLeg LastLeg) 2.0)                                          (* LegLength ConstantSide)                                       )                                )                 MidPoint       (polar FirstMiddleLeg FirstAngle LegLength)                 LastMiddleLeg  (polar LastLeg                                       (angle BracketEnd BracketStart)                                       (- (/ (distance FirstLeg LastLeg) 2.0)                                          (* LegLength ConstantSide)                                       )                                )                 PointList      (list BracketStart                                      FirstLeg                                      FirstMiddleLeg                                      MidPoint                                      LastMiddleLeg                                      LastLeg                                      BracketEnd                                )           )                        (if (tblsearch "LAYER" "TEXT")             (command "_.layer" "_Thaw" "Text" "_Set" "Text" "")             (command "_.layer" "_Make" "Text" "")           )                        (if             (and               Bracket:Type               (= (strcase Bracket:Type) "LINE")             )             (command "_.line")             (progn               (setvar "PLINEWID" 0)               (command "_.pline")             )           )                        (foreach n PointList             (command "_non" n)           )           (command "")           (mapcar '(lambda (x) (setvar (car x)(cdr x))) CurrentSettings)         )       ) ; End Main Function     )   ) ;End Progn (1) ) (sssetfirst nil nil)  (princ))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 14:49 , Processed in 1.337565 second(s), 71 queries .

© 2020-2025 乐筑天下

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