无私奉献了此源代码,使我能给自己的程序顺利增加了
拖放中实现点捕捉 的功能。
开心之余,也对这个函数本身很好奇,于是就逐句分析了源程序并做了注释,在此记录下来供自己和网友查阅。
再次声明:本文列出的源代码,其版权归明经通道的超版 Gu_xl
所有;原帖地址是: http://bbs.mjtd.com/thread-91191-1-1.html
本人在此只是根据自己的理解对源程序进行了注释和说明;说明和注释有谬误之处尽管拍砖。
;;;==================================================================
;;gxl-Sel-ReDrawSel 重画选择集中的对象,Sel 为选择集或图元名 mode 为方式码
;;;重画选择集中的对象,mode 为方式码,
;;;方式码 1 在屏幕重画该选择集对象
;;;方式码 2 隐藏该选择集对象
;;;方式码 3 “醒目显示”该选择集对象
;;;方式码 4 取消“醒目显示”该选择集对象
;;;==================================================================
;;; 笨猫注释:此例程比较简单,主要就是使用了 redraw
函数,遍历选择集里面的每一个实体,对其应用redraw函数;
;;; 注意,redraw函数的第一个参数为实体名,所以要用ssname函数从选择集sel中提取。
;;; 另外,原代码中这个函数的定义是在
gxl-Ge-grread函数定义的里面的,我觉得还是拿出来比较方便;这个例程还是蛮有用的。
;;; 用户没有输入 mode 参数,redraw不会报错
(defun gxl-Sel-ReDrawSel (Sel mode / m
n)
(if sel ;;; --> 如果存在sel参数
(progn
(cond
((= 'pickset (type Sel)) ;;; --- >
用type函数判断sel是不是选择集
(setq
m (sslength Sel)
n
0)
(repeat m
(redraw (ssname Sel n) mode)
(setq n (1+ n))
)
)
((=
'ename (type Sel)) ;;; --->
用type函数判断sel是不是实体名
(redraw Sel mode)
)
)
)
)
) ;defun
gxl-Sel-ReDrawSel
;;;gxl-Ge-grread 自定义带捕捉的GrRead函数
;;;参数:GR_MODE = 函数GrRead的参数表 如: (list [track] [allkeys
[curtype]),参数个数按需要设置,可为nil
;;; STARTPT =
基点,计算垂足点、正交模式等坐标的基点,若为nil,则基点默认为系统变量LastPoint值
;;; SS =
捕捉避开的物体,可以是选择集或图元名
(DEFUN gxl-Ge-grread (GR_MODE STARTPT SS / GET_OSMODE
GETGRVECS DRAWVECS TIME
F3
F8 STR_OSMODE
LST_OSMODE DRAFTOBJ AUTOSNAPMARKERSIZE
AUTOSNAPMARKERCOLOR DRAG
DRAGMODE GHOSTPT X0
Y0
X1 Y1
Z1
DISTPERPIXEL BOLD
)
;;;分列字串
;;;
笨猫注释:此例程输入参数为字符串str和字符串del,返回一个表,表内的元素分别为del之前的字符串和del之后的字符串
;;;; 例如,输入 (gxl-strparse "abcdefgdef12345"
"def") 返回的结果是 ("abc" "g" "12345")
(defun gxl-StrParse ( str del / pos lst )
(while (setq pos (vl-string-search del
str)) ;;
找到字串del在字串str中的位置,赋值给pos;注意,字符串的位置序号是从0开始的
(setq lst (cons (substr
str 1 pos) lst) ;;
将str中从第1位开始,长度为pos的子字串提取出来,作为一个元素,然后添加到表lst前面,
;;;
并赋值给lst
str (substr str (+ pos 1 (strlen del)))
;;
将str中del之后的部分取出来,并赋值给str;然后执行while循环,判断str中是否存在多个del
)
)
(if (= " " Del) ;; 如果del是空格
(vl-remove "" (reverse
(cons str lst)));; 反向排列表lst中的元素并去除字符串中的空格
(reverse (cons str lst))
;; 反向排列表lst中的元素, ,
)
) ;; 函数gxl-StrParse定义结束
;;;返回捕捉模式字串<