zzl9105 发表于 2018-5-27 10:39:49

坐标转换、主函数调用子函数的相关讨论

本帖最后由 zzl9105 于 2018-5-27 12:13 编辑

主函数调用子函数,主函数这样调用它:(setq ptb (Q-UCS-PT_LIST ptb))
ptb为点坐标表集,是多个点坐标的集合。
子函数格式按下面写法:子函数功能是 转换wcs下的坐标点集ptb到ucs下的坐标点集pt_list,UCS坐标系统是WCS绕Z轴旋转90度。

(defun Q-UCS-PT_LIST (/ pt_list)
       (if (ssget '((0 . "TEXT")(8 . "旋转90度")))
         (progn
                (command "ucs""z""90")
                (setq pt_listnil)                     ;先定义为空集
                (foreach pt ptb
                     (setq pt_list (cons pt_list '(trans pt 0 1)))      
                )

                (setq Xmin (car (car pt_list)))
                (setq Ymin (cadr (car pt_list)))
                (foreach pt ptb
                     (if (>= Xmin (car pt)) (setq Xmin (car pt)))
                     (if (>= Ymin (cadr pt)) (setq Ymin (cadr pt)))
                )
                (command "ucs"" ")
                pt_list
            )
      )
)

调用没有成功,不知道是子函数没有写成功,还是主函数调用子函数的格式不对,
请高手指点,谢谢!

被承包的东子 发表于 2018-5-28 11:25:18

就比如 你的这个函数,我稍作补充,修改
(defun c:主函数名 ()
(setq ptb1 点列表1);获得ptb1
(setq ptb2 点列表2);获得ptb2
(setq pt_list1 (Q-UCS-PT_LIST ptb1 ));用子函数 调用主函数的ptb1处理获得pt_list1
(setq pt_list2 (Q-UCS-PT_LIST ptb2 ));用子函数 调用主函数的ptb2处理获得pt_list2
)
(defun Q-UCS-PT_LIST (ptb / pt_list);这边加一个参数ptb
       (if (ssget '((0 . "TEXT")(8 . "旋转90度")))
         (progn
                (command "ucs""z""90")
                (setq pt_listnil)                     ;先定义为空集
                (foreach pt ptb
                     (setq pt_list (cons pt_list '(trans pt 0 1)))      
                )

                (setq Xmin (car (car pt_list)))
                (setq Ymin (cadr (car pt_list)))
                (foreach pt ptb
                     (if (>= Xmin (car pt)) (setq Xmin (car pt)))
                     (if (>= Ymin (cadr pt)) (setq Ymin (cadr pt)))
                )
                (command "ucs"" ")
                pt_list
            )
      )
)

被承包的东子 发表于 2018-5-28 11:17:38

zzl9105 发表于 2018-5-28 11:00
需要一个主要格式,子函数为处理任何一表的功能,主函数为调用这一子函数,用来处理多个坐标表集,如多个表 ...
其实你写这么长看起来,理解起来真有点累;这个子函数,说白了就是你自己定义一个函数,用法类似于cad已有的函数;比如先定义子函数(defun 子函数名 (参数A 参数B 参数C / 变量 A ...) 对参数A 参数B 参数C三个参数的“计算”得出结果A);然后调用的时候就需要 (子函数名 参数A 参数B 参数C)这种格式来调用,其中参数ABC一个都不能少,也不能多,最后输出 结果A。

qyming 发表于 2018-5-27 11:23:13

ptb是什么????

qyming 发表于 2018-5-27 11:26:19

(defun Q-UCS-PT_LIST (ptb/ pt_list)

qyming 发表于 2018-5-27 11:26:19

(defun Q-UCS-PT_LIST (ptb/ pt_list)

zzl9105 发表于 2018-5-27 12:08:21

qyming 发表于 2018-5-27 11:26
(defun Q-UCS-PT_LIST (ptb/ pt_list)

主函数有两个地主需要调整这个子函数,一个地方是定义了ptb地方,别一个地方是ptb2。那我子函数的全局函数,需要定义两个么,即ptb,ptb2么?

gdslqs 发表于 2018-5-27 12:40:27

调用子函数格式不对,子函数(defun Q-UCS-PT_LIST (/ pt_list)这个是无参数的(/前面为参数),调用格式就是( Q-UCS-PT_LIST),带参数时(defun Q-UCS-PT_LIST (参数1 参数2 / pt_list)...调用格式就是( Q-UCS-PT_LIST 参数1 参数2)

zzl9105 发表于 2018-5-28 09:18:52

本帖最后由 zzl9105 于 2018-5-28 09:23 编辑

gdslqs 发表于 2018-5-27 12:40
调用子函数格式不对,子函数(defun Q-UCS-PT_LIST (/ pt_list)这个是无参数的(/前面为参数),调用格式就是( ...
主函数有ptb和ptb2坐标点集(多点坐标)需要处理,无参数能将处理对象处理成功么?不带对象,子函数能识别处理对象吗?还是需要在子函数中定义好参数1,参数2?参数1、2就是子函数的(全局坐标)要处理的主函数目标对象,是么?

zzl9105 发表于 2018-5-28 11:00:19

需要一个主要格式,子函数为处理任何一表的功能,主函数为调用这一子函数,用来处理多个坐标表集,如多个表ptb1,ptb2,ptb3等,这个主子函数的全局变量和局部变更,应该如何定义,子函数中的表达式,如何才知道它能够接力主函数中的处理对象进行处理呢,因为子函数中的一个目标处理对象,需要对应主函数中的多个目标对象。请大牛指点一下,谢谢了!!!
页: [1] 2
查看完整版本: 坐标转换、主函数调用子函数的相关讨论