乐筑天下

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

[编程交流] 帮助Lisp执行多个

[复制链接]

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:34:28 | 显示全部楼层 |阅读模式
大家好,
 
这可能是我的第一个lisp脚本之一。。。。我有点困了。
 
我想要创建的是一个应用程序,它可以自动创建边界、进行内部偏移、对创建的偏移进行圆角,最后删除原始边界。所有这些都应该在拾取点时工作。
 
当我发现我必须首先分解偏移元素,使所有线段成为多段线以进行适当的圆角(否则圆弧等不起作用),这就是我陷入困境的地方。
 
如果有人能给我任何有用的提示,我们将不胜感激。
 
thnx。
卡雷卡
 
以下是我取得的成绩代码:
 
  1. (defun c:xfillet (/ pt)
  2.    ; while picking point -----------------------------
  3.    (while (setq pt (getpoint "\nPick internal point: "))
  4.    (command "_.-boundary" "_a" "_i" "_n" "" "" "_non" pt "")
  5.        ; store original boundary object
  6.        (setq original_boundary (entlast))
  7.        ; make offset
  8.        (command "_.offset" 10 (entlast) "_non" pt "")
  9.       
  10.        ; explode offset
  11.        (command "_.explode" (entlast))
  12.        ; load selection set
  13.        (setq ss (ssget "_P"))
  14.       
  15.        ;counter
  16.        (setq x 1)
  17.       
  18.        ;loop for all elements -------------------
  19.        (repeat (sslength ss)
  20.                
  21.            (setq pa (getvar "peditaccept"))
  22.            
  23.            ; convert all segments into polylines -> so fillet works on all elements
  24.            (setvar "peditaccept" 1)
  25.            (command "pedit" ss nil)
  26.            (setvar "peditaccept" pa)
  27.            
  28.            ; copy element onto layer 0
  29.            (command "_.chprop" (entlast) "" "LA" "0" "")
  30.            
  31.            ; change color of element (included just for texting)
  32.            (command "change" (entlast) "" "prop" "color" x "")
  33.            ; ++++++++++++++++++++++++++++++++
  34.            ; ++++++++++++++++++++++++++++++++
  35.            
  36.            ; what I want to accomplish
  37.            
  38.            ; store first element
  39.            if x = 1 then
  40.            store element in el1
  41.            
  42.            ; loop though elements, make fillets bit by bit
  43.            if x >= 2
  44.            make fillet with el1
  45.            store new element as el1
  46.            
  47.            ; ++++++++++++++++++++++++++++++++
  48.            ; ++++++++++++++++++++++++++++++++
  49.            
  50.            (setvar "peditaccept" pa)
  51.            
  52.            ; counter up
  53.            (setq x (+ x 1))
  54.         
  55.         ; _end repeat
  56.         )
  57.         
  58.         ; delete original boundary
  59.         (command "_.erase" original_boundary "")
  60.    ) ; end while
  61.    
  62.    ;(princ)
  63. ) ; end
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-6 07:38:25 | 显示全部楼层
您好careca,欢迎来到论坛。
 
如果在命令行中将Peditacept系统变量设置为1,则
通过使用fillet命令行提示中的“多段线”选项,可以对偏移图元进行圆角。
我希望这对你有帮助。
083431mwprz3b1qpp1km6q.jpg
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:41:07 | 显示全部楼层
 
嗨,Dadgad,
谢谢你的回复。
 
我确实试过这个,但似乎不起作用。
当试图通过多段线一次完成所有操作时,将省去弧段。
 
这就是为什么我认为我循环了元素的选择集。。。
 
马丁
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-6 07:44:52 | 显示全部楼层
可以使用“多段线”命令创建圆弧。
指定起点,然后A>,以这种方式创建的任何弧都将是多段线。
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:48:29 | 显示全部楼层
 
好的,简而言之,以下是我想要实现的目标:
 
083433dqr6zdpbdkkylnbn.jpg
 
基本上是一个连续的点击操作,将我从第1步带到第6步。
但是,在第5步和第6步之间,需要分解偏移多段线以处理所有圆角,否则(原始)圆弧元素接触的边不起作用。
 
careca公司
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-6 07:51:46 | 显示全部楼层
我明白你的意思了,我很惊讶当边界命令创建闭合多段线时,
已使用多段线选项进行偏移,尽管是闭合多段线,仍会产生以下消息。。。。。另一条关于一条直线发散(折线弧)的信息不断出现。
083435vv99g86664438k4y.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:55:30 | 显示全部楼层
尝试一下:
 
  1. (defun c:xf ( / *error* cm e0 e1 e2 e3 el p1 pe )
  2.    (defun *error* ( msg )
  3.        (if (= 'int (type cm))
  4.            (setvar 'cmdecho cm)
  5.        )
  6.        (if (= 'int (type pe))
  7.            (setvar 'peditaccept pe)
  8.        )
  9.        (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
  10.            (princ (strcat "\nError: " msg))
  11.        )
  12.        (princ)
  13.    )
  14.    
  15.    (setq cm (getvar 'cmdecho)
  16.          pe (getvar 'peditaccept)
  17.    )
  18.    (setvar 'cmdecho 0)
  19.    (setvar 'peditaccept 1)
  20.    (while (setq p1 (getpoint "\nPick Internal Point <Exit>: "))
  21.        (setq e0 (entlast)
  22.              el nil
  23.        )
  24.        (command "_.-boundary" "_A" "_I" "_N" "" "_O" "_P" "" "_non" p1 "")
  25.        (setq e1 (entlast))
  26.        (if (not (eq e0 e1))
  27.            (progn
  28.                (command "_.offset" 10.0 e1 "_non" p1 "")
  29.                (setq e2 (entlast))
  30.                (if (not (eq e1 e2))
  31.                    (progn
  32.                        (command "_.chprop" e2 "" "_LA" "0" "_C" 1 "")
  33.                        (command "_.explode" e2)
  34.                        (setq e3 e2)
  35.                        (while (setq e3 (entnext e3))
  36.                            (setq el (cons e3 el))
  37.                        )
  38.                        (mapcar
  39.                           '(lambda ( a b ) (setvar 'filletrad 10.0) (command "_.fillet" a b))
  40.                            (cons (last el) el)
  41.                            el
  42.                        )
  43.                        (command "_.pedit" "_M")
  44.                        (while (setq e2 (entnext e2))
  45.                            (command e2)
  46.                        )
  47.                        (command "" "_J" "" "")
  48.                    )
  49.                    (alert "Unable to perform offset.")
  50.                )
  51.                (entdel e1)
  52.            )
  53.            (alert "Unable to detect boundary.")
  54.        )
  55.    )
  56.    (setvar 'peditaccept pe)
  57.    (setvar 'cmdecho cm)
  58.    (princ)
  59. )
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 07:59:26 | 显示全部楼层
李好极了。。。仅对代码进行了轻微修改(突出显示):
 
  1. (defun c:xf ( / *error* cm e0 e1 e2 e3 el p1 pe ) [highlight](vl-load-com)[/highlight]
  2.    (defun *error* ( msg )
  3.        (if (= 'int (type cm))
  4.            (setvar 'cmdecho cm)
  5.        )
  6.        (if (= 'int (type pe))
  7.            (setvar 'peditaccept pe)
  8.        )
  9.        (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
  10.            (princ (strcat "\nError: " msg))
  11.        )
  12.        (princ)
  13.    )
  14.    
  15.    (setq cm (getvar 'cmdecho)
  16.          pe (getvar 'peditaccept)
  17.    )
  18.    (setvar 'cmdecho 0)
  19.    (setvar 'peditaccept 1)
  20.    (while (setq p1 (getpoint "\nPick Internal Point <Exit>: "))
  21.        (setq e0 (entlast)
  22.              el nil
  23.        )
  24.        (command "_.-boundary" "_A" "_I" "_N" "" "_O" "_P" "" "_non" p1 "")
  25.        (setq e1 (entlast))
  26.        (if (not (eq e0 e1))
  27.            (progn
  28.                (command "_.offset" 10.0 e1 "_non" p1 "")
  29.                (setq e2 (entlast))
  30.                (if (not (eq e1 e2))
  31.                    (progn
  32.                        (command "_.chprop" e2 "" "_LA" "0" "_C" 1 "")
  33.                        (command "_.explode" e2)
  34.                        (setq e3 e2)
  35.                        (while (setq e3 (entnext e3))
  36.                            [highlight](setq el (cons (vlax-curve-getpointatparam e3 (+ (vlax-curve-getstartparam e3) (/ (- (vlax-curve-getendparam e3) (vlax-curve-getstartparam e3)) 2.0))) el))[/highlight]
  37.                        )
  38.                        (mapcar
  39.                           '(lambda ( a b ) (setvar 'filletrad 10.0) (command "_.fillet" a b))
  40.                            (cons (last el) el)
  41.                            el
  42.                        )
  43.                        (command "_.pedit" "_M")
  44.                        (while (setq e2 (entnext e2))
  45.                            (command e2)
  46.                        )
  47.                        (command "" "_J" "" "")
  48.                    )
  49.                    (alert "Unable to perform offset.")
  50.                )
  51.                (entdel e1)
  52.            )
  53.            (alert "Unable to detect boundary.")
  54.        )
  55.    )
  56.    (setvar 'peditaccept pe)
  57.    (setvar 'cmdecho cm)
  58.    (princ)
  59. )

 
M、 R。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:01:26 | 显示全部楼层
 
原来的不适合你吗?
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 08:03:28 | 显示全部楼层
我试着复制jpg中发布的case OP,用你们的原稿,它错误地将最后一行用圆弧圆角,但只在左边部分——一个拾取边界;正确的一个,它做得正确。。。我想它有一些与圆角-它不知道如何连接实体(直线圆角与弧延伸,使几乎整个圆),当他们提供,而不是像我的修改中点。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 05:05 , Processed in 0.634017 second(s), 74 queries .

© 2020-2025 乐筑天下

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