如何将WCMATCH添加到程序
这个小家伙将在你的绘图模型空间中勾勒出每个命名视图的轮廓。很有帮助,效果很好,虽然我相信它可以写得更好,这是它的原始形式,由未知作者在1993年写的,是一个更大的程序的一部分。我的愿望是合并一个wcmatch语句,这样它只显示以H1结尾的视图,但我一直无法掌握wcmatch,所以我必须寻求这方面的帮助。
一个图形中只有一个命名视图以这种方式结束,但它存在于所有图形中,如果我能快速检查一个视图的位置,在将出现的许多命名视图中,它肯定会使图形检查更容易、更快。
提前思考:只要简单地合并一个合适的wcmatch语句,该程序也可以很容易地进行调整,以在将来显示其他特别命名的视图,如果需要的话。
问题是我不知道把它放在哪里,也不知道它应该如何配置。
它和while语句是“and”吗?
给它自己的“如果”行?如果是,在哪里?
“vname”呢?这是关键吗?
提前感谢您的帮助。
史蒂夫 WCMATCH的使用:-
_1$ (wcmatch "test-h1" "*h1")
T
_1$ (wcmatch "test-h12" "*h1")
nil
_1$ (wcmatch "test-h12" "*h1*")
T
试试这个:-
(defun c:test (/ tbdata vname Y X CP P1 P2 P3 P4)
(if (setq tbdata (tblnext "VIEW" T))
(while tbdata
(setq vname (strcase (dxf 2 tbdata))) ;extract view name
(if (wcmatch vname "*H1")
(progn
(setq Y(* (dxf 40 tbdata) 0.5) ;view height
X(* (dxf 41 tbdata) 0.5) ;view width
CP (dxf 10 tbdata)
P1 (list (- (car CP) X) (- (cadr CP) Y))
;lower left corner
P2 (list (- (car CP) X) (+ (cadr CP) Y))
;upper left corner
P3 (list (+ (car CP) X) (+ (cadr CP) Y))
;upper right corner
P4 (list (+ (car CP) X) (- (cadr CP) Y))
;lower right corner
) ;setq
(grdraw P1 P2 7 1) ; draws vector
(grdraw P2 P3 7 1)
(grdraw P3 P4 7 1)
(grdraw P4 P1 7 1)
) ;* end PROGN
) ;* end if
(setq tbdata (tblnext "VIEW")) ;* get next view
) ;* while end
) ;* endif
(prompt " Done")
(princ)
) Satish Rajdev,
你的修改正是我想要的。
效果完美。你让它看起来很简单。
好啊我必须研究这个。
非常感谢。
史蒂夫 不客气 FWIW,代码可以稍微缩短:
(defun c:test ( / c l v x y )
(while (setq v (tblnext "view" (not v)))
(if (wcmatch (strcase (cdr (assoc 2 v))) "*H1")
(progn
(setq x (* 0.5 (cdr (assoc 40 v)))
y (* 0.5 (cdr (assoc 41 v)))
c (cdr (assoc 10 v))
l (list (mapcar '- c (list x y))
(mapcar '+ c (list x (- y)))
(mapcar '+ c (list x y))
(mapcar '+ c (list (- x) y))
)
)
(mapcar '(lambda ( a b ) (grdraw a b 7 1)) (cons (last l) l) l)
)
)
)
(princ)
)
嘿,现在。太棒了。
我将研究这些差异。
李,谢谢你的程序升级。
史蒂夫 不客气,史蒂夫,请随意提问代码。 李,
在您的网站和Afralisp上花了一些时间试图破译您的代码后,出现了一些问题。
我理解grdraw部分的作用,但如果这是正确的项,它的“a b”(和λ)如何指向上面列表中的x和y坐标?
此外,在cons部分,为什么是“last”而不是“list”?
该框是通过从下到上处理列表来绘制的吗?
如果“l”列表表示直线长度或顶点,为什么只有3个而不是4个?
史蒂夫
嗨,史蒂夫,
为了帮助解释如何计算mapcar表达式,请考虑以下控制台教程:
假设变量“l”被分配了以下四个坐标(矩形的顶点)列表:
表达式(cons(last l)l)将把列表中的最后一项推到列表的前面:
现在,考虑当提供的任何列表参数被完全处理时,mapcar将停止计算,例如:
因此,使用我们的两个列表评估以下mapcar表达式将得到以下结果:
要将其可视化,请考虑一个顶点字母为a到D的矩形,从左下角开始,逆时针绕矩形旋转:
现在,列表“l”包含顶点:
9,表达式(cons(last l)l)包含顶点:
因此,mapcar表达式采用以下形式:
因此,grdraw函数使用以下参数进行评估:
12 很好的解释
页:
[1]
2