明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1045|回复: 8

请问如何使用别人的代码?

[复制链接]
发表于 2022-12-17 21:16:38 | 显示全部楼层 |阅读模式
比如这位大神的代码,我想使用,
但是,我发现它这段代码,没有启动命令,
甚至好像也没有选择集
然后最后输出的是一个“点”吗?

这个点怎么使用呢?
我想增加到这个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
  • )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2022-12-17 21:53:55 | 显示全部楼层
(setq ss (ssget) ptc (ssmpt ss))  
你当他是个加工厂,你把东西丢给它出来的就是成品了,当然给它的东西要对头才行
 楼主| 发表于 2022-12-17 22:06:59 | 显示全部楼层
start4444 发表于 2022-12-17 21:53
(setq ss (ssget) ptc (ssmpt ss))  
你当他是个加工厂,你把东西丢给它出来的就是成品了,当然给它的东西 ...

还是没明白,它是自动运行的吧?怎么丢给它呢?怎么建立联系?
发表于 2022-12-17 22:57:31 | 显示全部楼层
看起来你还没有建立起函数、子函数、函数的参数,这些概念。
先用起来吧,用多了就知道了。
发表于 2022-12-18 00:09:31 | 显示全部楼层
你发的那位仁兄的代码是没法直接用的,在论坛搜搜其他人的代码吧
 楼主| 发表于 2022-12-18 03:42:41 | 显示全部楼层
AndyWang 发表于 2022-12-18 00:09
你发的那位仁兄的代码是没法直接用的,在论坛搜搜其他人的代码吧

哦 多谢提醒
 楼主| 发表于 2022-12-18 09:12:43 | 显示全部楼层
  • (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))
插件就不能正常使用了,这是为什么呢?
有老师指导下吗?
发表于 2022-12-18 13:14:07 | 显示全部楼层
aws 发表于 2022-12-18 09:12
  • (defun c:fb()
  •   (setvar "cmdecho" 0)
  •   (defun sszxd (ss / n obj llp urp ls1 ls2)

  • ssget 返回的是选择集,entsel 返回的是对象
     楼主| 发表于 2022-12-19 08:07:45 | 显示全部楼层
    a2580106803 发表于 2022-12-18 13:14
    ssget 返回的是选择集,entsel 返回的是对象

    是这样吗,我还以为,两者的区别仅仅是选取方式的不同,一个是框选,一个点选
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

    GMT+8, 2024-11-25 10:25 , Processed in 0.199262 second(s), 24 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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