明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 547|回复: 11

[提问] 函数套函数中的选择问题

[复制链接]
发表于 2024-10-28 19:26:39 | 显示全部楼层 |阅读模式
(DEFUN  c:A1 (  / ss )
  (SETQ SS (SSGET));用这个选择集
  (setq err (vl-catch-all-apply 'hs-autoDim (list nil)))

  (C:Y)
  )
怎么将A1中的 定义的sst选择集,应用到以下的所有的子函数中去,不用重复选择


---------------------------------------------------
(DEFUN C:Y()
(setq err (vl-catch-all-apply 'hs-autoDim (list nil)))
)
此处引用hs-autoDim函数
---------------------------------------------------


---------------------------------------------------
(defun hs-autoDim (jianxiang  / ss)
(setq maxbox (hs-maxbox ss)))
此处引用hs-maxbox函数 选择集用 A1中的ss
---------------------------------------------------


---------------------------------------------------
(defun hs-maxbox (ss /  lst ll ur s1  p minx miny maxx maxy x)
(setq lst (HS-SS->LIST ss))
此处引用HS-SS->LIST函数 选择集用 A1中的ss
---------------------------------------------------


---------------------------------------------------
(defun hs-ss->list (ss / n i lst s1)
(setq n (sslength ss))
此处sslength  选择集用 A1中的ss
)
---------------------------------------------------

发表于 2024-10-28 20:19:17 | 显示全部楼层
先按照逻辑全部写成一个函数,这lisp基础就用子函数,子函数还就一句话,意义何在?
发表于 2024-10-28 20:24:48 | 显示全部楼层
这是引用自定义函数的问题吧
  1. (defun c:a1 (  / ss )
  2.   (setq ss (ssget));用这个选择集
  3.   (setq err (vl-catch-all-apply 'hs-autoDim (list SS)))
  4. )
  5. (defun hs-autoDim (ss  / maxbox)
  6.         (setq maxbox (hs-maxbox ss))
  7. )
  8. (defun hs-maxbox (ss /  lst ll ur s1  p minx miny maxx maxy x)
  9.         (setq lst (HS-SS->LIST ss))
  10. )
  11. (defun hs-ss->list (ss / n i lst s1)
  12.         (setq n (sslength ss))
  13.         (print n)
  14.         (princ)
  15. )
 楼主| 发表于 2024-10-29 07:25:48 来自手机 | 显示全部楼层
kozmosovia 发表于 2024-10-28 20:19
先按照逻辑全部写成一个函数,这lisp基础就用子函数,子函数还就一句话,意义何在?

我省略了很多没复制
 楼主| 发表于 2024-10-29 07:28:39 来自手机 | 显示全部楼层
我需要的是怎么把我在主程序中的选择集ss应用到,其他的子函数中去
 楼主| 发表于 2024-10-29 07:29:53 来自手机 | 显示全部楼层
其他的自定义函数都在y这个命令中。
发表于 2024-10-29 07:37:48 | 显示全部楼层
caoyongjun 发表于 2024-10-29 07:28
我需要的是怎么把我在主程序中的选择集ss应用到,其他的子函数中去

主程序返回ss,那么你就可以应用到其它函数了。

点评

麻烦写下,  发表于 2024-10-29 08:05
发表于 2024-10-29 08:11:31 来自手机 | 显示全部楼层
(defun hs-autoDim (jianxiang  / ss) 此处不写ss呢?
发表于 2024-10-29 10:03:13 | 显示全部楼层
除了(defun hs-autoDim (jianxiang  / ss)去掉ss,其他照参数传
发表于 2024-11-3 15:03:08 | 显示全部楼层
本帖最后由 llsheng_73 于 2024-11-3 15:18 编辑

如果后边这些函数都只是为前边的服务,别的地方不会调用它们,可以去掉它们的参数,直接引用调用它们的地方定义的变量,让局部变量成为范围内全局变量使用,不会成为真正的全局变量

  1. (defun c:tt(/ a b c)
  2.   (and(setq a(getreal))
  3.       (setq b(getreal))
  4.       (setq c(getreal))
  5.       (t1)
  6.       (t2)
  7.       (t3)))

  8. (defun t1()
  9.   (>(+ a b)c))
  10. (defun t2()
  11.   (>(+ a c)b))
  12. (defun t3()
  13.   (>(+ b c)a))

这是比较偷懒的做法,如果后续那些函数过程中不会修改参数变量,这样做也没什么不可以,但容易形成不好的习惯,正确的做法是,把引用到的变量都设置成参数,
  1. (defun c:tt(/ a b c)
  2.   (and(setq a(getreal))
  3.       (setq b(getreal))
  4.       (setq c(getreal))
  5.       (t1 a b c)
  6.       (t2 a b c)
  7.       (t3 a b c)))

  8. (defun t1(i j k / a)
  9.   (setq a(>(+ i j)k)))
  10. (defun t2(l m n / b)
  11.   (setq b(>(+ l n)m)))
  12. (defun t3(d e f)
  13.   (>(+ e f)d))

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

本版积分规则

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

GMT+8, 2024-11-22 20:30 , Processed in 0.172594 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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