明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 747|回复: 6

[提问] 请问如何复数执行修改

[复制链接]
发表于 2020-12-11 10:15:36 | 显示全部楼层 |阅读模式
本帖最后由 ga619091 于 2020-12-11 10:23 编辑

新手一枚这次再修改源码上遇到了问题
原本的源码只能对单一图形做动
想改成对复数图形做动命令
已经知道复数对象的框选
(setq ssa (ssget":S" '((0 . "lwpolyline")))) 改成 (setq ssa (ssget '((0 . "lwpolyline"))))
但此命令还是只执行一次
想要复数执行上网爬文可能是需要用到repeat
但我加上repeat怎么执行都是错误
所以想请问该怎么修改才能复数执行命令
(defun c:test ()
(setq cmd (getvar "cmdecho"))
(setq osm (getvar "osmode"))
(setvar "cmdecho" 0)
(command "undo" "be")
(If (progn
(princ "請選取矩形:")
(setq ssa (ssget":S" '((0 . "lwpolyline"))))
)
(progn
(setq dxf (entget (ssname ssa 0)))
(setq pts (mapcar 'cdr (vl-remove-if '(lambda(x)(/= (car x) 10)) dxf)))
(setq p1 (apply 'mapcar (cons 'min pts)))
(setq p3 (apply 'mapcar (cons 'max pts)))
(setq p2 (list (car p3) (cadr p1)))
(setq p4 (list (car p1) (cadr p3)))
(setq p14m1 (mapcar '(lambda(a b)(* 0.5 (+ a b))) p1 p4))
(setq p14m2 (mapcar '+ p14m1 '(5 0)))
(setq p12m1 (mapcar '(lambda(a b)(* 0.5 (+ a b))) p1 p2))
(setq p12m2 (mapcar '+ p12m1 '(0 5)))
(setq p23m1 (mapcar '(lambda(a b)(* 0.5 (+ a b))) p2 p3))
(setq p23m2 (mapcar '+ p23m1 '(-5 0)))
(setq p34m1 (mapcar '(lambda(a b)(* 0.5 (+ a b))) p3 p4))
(setq p34m2 (mapcar '+ p34m1 '(0 -5)))
(setvar "osmode" 0)
(mapcar '(lambda(pts)
(command "_line" (car pts) (cadr pts) "" "_chprop" (entlast) "" "c" BYLAYER "")
)
(list (list p14m1 p14m2)
(list p12m1 p12m2)
(list p23m1 p23m2)
(list p34m1 p34m2)
)
)
(mapcar '(lambda(pt dxy)
(setq pt1 (mapcar '+ pt dxy))
(command "_Circle" pt1 1.55 "_chprop" (entlast) "" "c" BYLAYER "")
(command "_Circle" pt1 1.80 "_chprop" (entlast) "" "c" BYLAYER "")
)
(list p1 p3 )
(list '(8 8) '(-8 -8))   
)
)
)
(mapcar '(lambda(pt dxy)
(setq pt1 (mapcar '+ pt dxy))
(command "_Circle" pt1 1.50 "_chprop" (entlast) "" "c" BYLAYER "")
)
(list p2 p4 )
(list '(-8 8) '(8 -8))
)
(command "undo" "e")
(setvar "osmode" osm)
(setvar "cmdecho" cmd)
(princ)
)

发表于 2020-12-11 11:10:32 | 显示全部楼层
本帖最后由 start4444 于 2020-12-11 11:12 编辑

改了选择方式之外还要相应把处理过程循环一一处理才行
(defun c:tt5 (/ cmd dxf en i osm p1 p12m1 p12m2 p14m1 p14m2 p2 p23m1 p23m2 p3 p34m1 p34m2 p4 pts ssa)
        (setq cmd (getvar "cmdecho"))
        (setq osm (getvar "osmode"))
        (setvar "cmdecho" 0)
        (command "undo" "be")
        (If (progn(princ "請選取矩形:")(setq ssa (ssget '((0 . "lwpolyline")))))               
                        (progn (setq i -1)
                    (while (setq en (ssname ssa (setq i (1+ i))))
                                (setq dxf (entget en))
                                (setq pts (mapcar 'cdr (vl-remove-if '(lambda(x)(/= (car x) 10)) dxf)))
                                (setq p1 (apply 'mapcar (cons 'min pts)))
                                (setq p3 (apply 'mapcar (cons 'max pts)))
                                (setq p2 (list (car p3) (cadr p1)))
                                (setq p4 (list (car p1) (cadr p3)))
                                (setq p14m1 (mapcar '(lambda(a b)(* 0.5 (+ a b))) p1 p4))
                                (setq p14m2 (mapcar '+ p14m1 '(5 0)))
                                (setq p12m1 (mapcar '(lambda(a b)(* 0.5 (+ a b))) p1 p2))
                                (setq p12m2 (mapcar '+ p12m1 '(0 5)))
                                (setq p23m1 (mapcar '(lambda(a b)(* 0.5 (+ a b))) p2 p3))
                                (setq p23m2 (mapcar '+ p23m1 '(-5 0)))
                                (setq p34m1 (mapcar '(lambda(a b)(* 0.5 (+ a b))) p3 p4))
                                (setq p34m2 (mapcar '+ p34m1 '(0 -5)))
                                (setvar "osmode" 0)
                                (mapcar '(lambda(pts)
                                                                         (command "_line" (car pts) (cadr pts) "" "_chprop" (entlast) "" "c" BYLAYER)
                                                                 )
                                        (list (list p14m1 p14m2)
                                                (list p12m1 p12m2)
                                                (list p23m1 p23m2)
                                                (list p34m1 p34m2)
                                        )
                                )
                                (mapcar '(lambda(pt dxy)
                                                                         (setq pt1 (mapcar '+ pt dxy))
                                                                         (command "_Circle" pt1 1.55 "_chprop" (entlast) "" "c" BYLAYER )
                                                                         (command "_Circle" pt1 1.80 "_chprop" (entlast) "" "c" BYLAYER )
                                                                 )
                                        (list p1 p3 )
                                        (list '(8 8) '(-8 -8))
                                )                                       
                (mapcar '(lambda(pt dxy)
                                                         (setq pt1 (mapcar '+ pt dxy))
                                                         (command "_Circle" pt1 1.50 "_chprop" (entlast) "" "c" BYLAYER)
                                                 )
                        (list p2 p4 )
                        (list '(-8 8) '(8 -8))
                ))))
        (command "undo" "e")
        (setvar "osmode" osm)
        (setvar "cmdecho" cmd)
        (princ)
)

点评

学习了,我会自己在研究S大处理过程的循环是怎么用的  发表于 2020-12-11 11:18
回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-11 10:34:52 | 显示全部楼层
上个图说说代码是干嘛用的,你说的复数是不是批量的意思,最好把原始代码贴上来不要改动过的
 楼主| 发表于 2020-12-11 10:50:38 | 显示全部楼层
start4444 发表于 2020-12-11 10:34
上个图说说代码是干嘛用的,你说的复数是不是批量的意思,最好把原始代码贴上来不要改动过的

贴的源码就是没有改过的
原本的效果是只能框选单一矩形做动命令
我想要改成多个矩形框选也能做动命令
发表于 2020-12-11 11:38:20 | 显示全部楼层
本帖最后由 lee50310 于 2020-12-11 11:48 编辑

樓上改得較優..

发表于 2020-12-11 12:11:14 | 显示全部楼层
又出现"VVC: Internal Error",能有个统一的方法修改么?cad2016常出现,能写个lisp统一解决更好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-17 17:14 , Processed in 0.211373 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表