明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1967|回复: 1

回关于橡皮筋问题——在Lisp中

[复制链接]
发表于 2003-10-21 10:59:00 | 显示全部楼层 |阅读模式
这是我编的程序中的一个函数,分析分析一下吧
(defun select_a_pmx        (/ tp val fg ent_pmx pt pt_array n pt1 pt2)
;选择或画出剖切线,返回顶点表pt_array(点1 点2 ...)
        (princ "选择(Select)/<第1点>:")
        (setq fg 0)
        (while fg
                (setq tp (car (setq val (grread nil 5))))
                (cond
                        ((= 2 tp)
                         (if (or (= 83 (cadr val)) (= 115 (cadr val)))
                                 (setq fg nil)
                         )
                        )
                        ((= 3 tp) (setq fg nil))        ;83、115分别为字母"S"、"s"的ASCII码
                )
        )
        (cond
                ((= 2 tp)                                                ;键盘按
                 (while
                         (null (setq ent_pmx (car (entsel "\n请选择一条剖切线:"))))
                 )
                 (setq pt_array (reverse (plvt ent_pmx)))
                )
                ((= 3 tp)                                                ;鼠标
                 (setq pt                (reverse (cdr (reverse (cadr val))))
                           pt_array        (list pt)
                 )
                 (setq n  1
                           fg 0
                 )
                 (while        fg
                         (setq n   (1+ n)
                                   pt1 pt
                         )
                         (princ (strcat "\n第" (itoa n) "点:\n"))
                         (setq pt2 (cadr (grread 0 5)))
                         (grdraw pt1 pt2 -1)
                         (while
                                 (and (/= 3 (car (setq val (grread 0 5))))
                                          (/= 11 (car val))
                                 )
                                        (grdraw pt1 pt2 -1)
                                        (setq pt2 (cadr val))
                                        (grdraw pt1 pt2 -1)
                         )
                         (if (= 3 (car val))
                                 (progn        (setq pt           (reverse (cdr (reverse (cadr val))))
                                                          pt_array (cons pt pt_array)
                                                )
                                 )
                                 (progn (grdraw pt1 pt2 -1) (setq fg nil))
                         )
                 )
                 (setq pt_array (reverse pt_array))
                 (command "redraw")
                 (apply 'command (cons "pline" pt_array))
                 (command)
                 (setq ent_pmx (ssname (ssget "L") 0))
                )
        )
        (setq pt_array (list pt_array ent_pmx))
)
主要分析grread函数!
发表于 2003-10-21 12:21:00 | 显示全部楼层
这样使用GRREAD总觉得不是很合适
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 18:40 , Processed in 0.210211 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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