请问如何使用别人的代码?
比如这位大神的代码,我想使用,但是,我发现它这段代码,没有启动命令,
甚至好像也没有选择集
然后最后输出的是一个“点”吗?
这个点怎么使用呢?
我想增加到这个lsp文件里,替换掉那个手动选择基点,那么该如何修改呢?
请教各位老师~!
[*];; 选择集中心点--ss 选择集----(一级)----------
[*](defun ssmpt (ss / i s1 box ptn a p1 p9 p5 num)
[*](setq num (sslength ss) i -1)
[*](if (< num 100)
[*] (progn
[*] (repeat num
[*] (setq s1 (ssname ss (setq i (1+ i))))
[*] (setq box (get-box s1) ptn (append box ptn))
[*] )
[*] (setq a (mapcar '(lambda (x) (apply 'mapcar (cons x ptn))) (list 'min 'max))
[*] p1 (car a)
[*] p9 (cadr a)
[*] p5 (sl:mid p1 p9)
[*] )
[*] )
[*] (progn
[*] (command "_zoom" "_object" ss "")
[*] (setq p5 (getvar "viewctr"))
[*] (command "_zoom" "_p")
[*] )
[*])
[*]p5
[*])
(setq ss (ssget) ptc (ssmpt ss))
你当他是个加工厂,你把东西丢给它出来的就是成品了,当然给它的东西要对头才行 start4444 发表于 2022-12-17 21:53
(setq ss (ssget) ptc (ssmpt ss))
你当他是个加工厂,你把东西丢给它出来的就是成品了,当然给它的东西 ...
还是没明白,它是自动运行的吧?怎么丢给它呢?怎么建立联系? 看起来你还没有建立起函数、子函数、函数的参数,这些概念。
先用起来吧,用多了就知道了。 你发的那位仁兄的代码是没法直接用的,在论坛搜搜其他人的代码吧 AndyWang 发表于 2022-12-18 00:09
你发的那位仁兄的代码是没法直接用的,在论坛搜搜其他人的代码吧
哦 多谢提醒
[*](defun c:fb()
[*](setvar "cmdecho" 0)
[*](defun sszxd (ss / n obj llp urp ls1 ls2)
[*] (repeat (setq n (sslength ss))
[*] (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
[*] (if (and (vlax-method-applicable-p obj 'getboundingbox)
[*] (not (vl-catch-all-error-p
[*] (vl-catch-all-apply 'vla-getboundingbox (list obj 'llp 'urp)))
[*] )
[*] )
[*] (setq ls1 (mapcar 'min (vlax-safearray->list llp) (cond (ls1) ((vlax-safearray->list llp))))
[*] ls2 (mapcar 'max (vlax-safearray->list urp) (cond (ls2) ((vlax-safearray->list urp))))
[*] )
[*] )
[*] );获取对象最大矩形边界框左下角和右上角的WCS坐标
[*] (if (and ls1 ls2)
[*] (apply 'mapcar
[*] (cons '(lambda (a b) (/ (+ a b) 2.0))
[*] (list ls1 ls2)
[*] )
[*] )
[*] );根据边界框坐标求中心点
[*])
[*](setq ss(ssget))
[*](command "measure" ss "10" "")
[*](setq dian(ssget "p"))
[*](setq i 0)
[*](setq lss nil)
[*](repeat (sslength dian)
[*] (setq point1(cdr(assoc 10 (entget(ssname dian i)))))
[*] (setq lss (cons point1 lss))
[*] (setq i (+ 1 i))
[*])
[*](command "erase" dian "")
[*](Setq kss (ssget "WP" lss))
[*](setq p2 (sszxd ss))
[*](setq p3 (sszxd kss))
[*](setq blname (rtos (* (getvar "cdate") 1e8)))
[*](command "change" ss "" "p" "c" "2" "")
[*](command "block" blname "non" p3 kss "")
[*](command "insert" blname "x" 1 "y" 1 "z" 1 "r" 0 "non" p2)
[*](setvar "cmdecho" 1)
[*](princ)
[*])
琢磨了大半夜,似乎明白了,原来子函数就是相当于“自定义的系统函数”
它不会自动运行,只有你调用它,它才会给你输出结果。
比如上述代码中,(setq p2 (sszxd ss)) 就是调用子函数的方式,
子函数建议放在开头的位置。其他位置我也没试过。
然后就是,上述代码中,我想把(setq ss(ssget))改成(setq ss(entsel))
插件就不能正常使用了,这是为什么呢?
有老师指导下吗?
aws 发表于 2022-12-18 09:12
[*](defun c:fb()
[*](setvar "cmdecho" 0)
[*](defun sszxd (ss / n obj llp urp ls1 ls2)
ssget 返回的是选择集,entsel 返回的是对象 a2580106803 发表于 2022-12-18 13:14
ssget 返回的是选择集,entsel 返回的是对象
是这样吗,我还以为,两者的区别仅仅是选取方式的不同,一个是框选,一个点选
页:
[1]