明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1480|回复: 14

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

[复制链接]
发表于 2018-5-27 10:39 | 显示全部楼层 |阅读模式
本帖最后由 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_list  nil)                     ;先定义为空集
                (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 | 显示全部楼层
就比如 你的这个函数,我稍作补充,修改
(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_list  nil)                     ;先定义为空集
                (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:59
回复 支持 1 反对 0

使用道具 举报

发表于 2018-5-28 11:17 | 显示全部楼层
zzl9105 发表于 2018-5-28 11:00
需要一个主要格式,子函数为处理任何一表的功能,主函数为调用这一子函数,用来处理多个坐标表集,如多个表 ...

其实你写这么长看起来,理解起来真有点累;这个子函数,说白了就是你自己定义一个函数,用法类似于cad已有的函数;比如先定义子函数(defun 子函数名 (参数A 参数B 参数C / 变量 A ...) 对参数A 参数B 参数C三个参数的“计算”得出结果A);然后调用的时候就需要 (子函数名 参数A 参数B 参数C)这种格式来调用,其中参数ABC一个都不能少,也不能多,最后输出 结果A。
发表于 2018-5-27 11:26 来自手机 | 显示全部楼层
(defun Q-UCS-PT_LIST (ptb  / pt_list)
发表于 2018-5-27 11:26 来自手机 | 显示全部楼层
(defun Q-UCS-PT_LIST (ptb  / pt_list)
 楼主| 发表于 2018-5-27 12:08 | 显示全部楼层
qyming 发表于 2018-5-27 11:26
(defun Q-UCS-PT_LIST (ptb  / pt_list)

主函数有两个地主需要调整这个子函数,一个地方是定义了ptb地方,别一个地方是ptb2。那我子函数的全局函数,需要定义两个么,即ptb,ptb2么?
发表于 2018-5-27 12:40 | 显示全部楼层
调用子函数格式不对,子函数(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)
 楼主| 发表于 2018-5-28 09:18 | 显示全部楼层
本帖最后由 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就是子函数的(全局坐标)要处理的主函数目标对象,是么?
 楼主| 发表于 2018-5-28 11:00 | 显示全部楼层
需要一个主要格式,子函数为处理任何一表的功能,主函数为调用这一子函数,用来处理多个坐标表集,如多个表ptb1,ptb2,ptb3等,这个主子函数的全局变量和局部变更,应该如何定义,子函数中的表达式,如何才知道它能够接力主函数中的处理对象进行处理呢,因为子函数中的一个目标处理对象,需要对应主函数中的多个目标对象。请大牛指点一下,谢谢了!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-9 21:21 , Processed in 0.177543 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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