乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 13|回复: 13

[编程交流] 如何将WCMATCH添加到程序

[复制链接]

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-5 18:03:32 | 显示全部楼层 |阅读模式
这个小家伙将在你的绘图模型空间中勾勒出每个命名视图的轮廓。很有帮助,效果很好,虽然我相信它可以写得更好,这是它的原始形式,由未知作者在1993年写的,是一个更大的程序的一部分。
我的愿望是合并一个wcmatch语句,这样它只显示以H1结尾的视图,但我一直无法掌握wcmatch,所以我必须寻求这方面的帮助。
一个图形中只有一个命名视图以这种方式结束,但它存在于所有图形中,如果我能快速检查一个视图的位置,在将出现的许多命名视图中,它肯定会使图形检查更容易、更快。
 
提前思考:只要简单地合并一个合适的wcmatch语句,该程序也可以很容易地进行调整,以在将来显示其他特别命名的视图,如果需要的话。
 
问题是我不知道把它放在哪里,也不知道它应该如何配置。
它和while语句是“and”吗?
给它自己的“如果”行?如果是,在哪里?
“vname”呢?这是关键吗?
 
提前感谢您的帮助。
 
史蒂夫
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
274
发表于 2022-7-5 18:09:24 | 显示全部楼层
WCMATCH的使用:-
  1. _1$ (wcmatch "test-h1" "*h1")
  2. T
  3. _1$ (wcmatch "test-h12" "*h1")
  4. nil
  5. _1$ (wcmatch "test-h12" "*h1*")
  6. T

 
试试这个:-
  1. (defun c:test (/ tbdata vname Y X CP P1 P2 P3 P4)
  2. (if (setq tbdata (tblnext "VIEW" T))
  3.    (while tbdata
  4.      (setq vname (strcase (dxf 2 tbdata))) ;extract view name
  5.      (if [b](wcmatch vname "*H1")[/b]
  6. (progn
  7.   (setq        Y  (* (dxf 40 tbdata) 0.5) ;view height
  8.         X  (* (dxf 41 tbdata) 0.5) ;view width
  9.         CP (dxf 10 tbdata)
  10.         P1 (list (- (car CP) X) (- (cadr CP) Y))
  11.                                 ;lower left corner
  12.         P2 (list (- (car CP) X) (+ (cadr CP) Y))
  13.                                 ;upper left corner
  14.         P3 (list (+ (car CP) X) (+ (cadr CP) Y))
  15.                                 ;upper right corner
  16.         P4 (list (+ (car CP) X) (- (cadr CP) Y))
  17.                                 ;lower right corner
  18.   )                                ;setq
  19.   (grdraw P1 P2 7 1)                ; draws vector
  20.   (grdraw P2 P3 7 1)
  21.   (grdraw P3 P4 7 1)
  22.   (grdraw P4 P1 7 1)
  23. )                                ;* end PROGN
  24.      )                                        ;* end if
  25.      (setq tbdata (tblnext "VIEW"))        ;* get next view
  26.    )                                        ;* while end
  27. )                                        ;* endif
  28. (prompt " Done")
  29. (princ)
  30. )
回复

使用道具 举报

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-5 18:14:22 | 显示全部楼层
Satish Rajdev,
 
你的修改正是我想要的。
效果完美。你让它看起来很简单。
好啊我必须研究这个。
非常感谢。
 
史蒂夫
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
274
发表于 2022-7-5 18:21:10 | 显示全部楼层
不客气
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:22:13 | 显示全部楼层
FWIW,代码可以稍微缩短:
  1. (defun c:test ( / c l v x y )
  2.    (while (setq v (tblnext "view" (not v)))
  3.        (if (wcmatch (strcase (cdr (assoc 2 v))) "*H1")
  4.            (progn
  5.                (setq x (* 0.5 (cdr (assoc 40 v)))
  6.                      y (* 0.5 (cdr (assoc 41 v)))
  7.                      c (cdr (assoc 10 v))
  8.                      l (list (mapcar '- c (list x y))
  9.                              (mapcar '+ c (list x (- y)))
  10.                              (mapcar '+ c (list x y))
  11.                              (mapcar '+ c (list (- x) y))
  12.                        )
  13.                )
  14.                (mapcar '(lambda ( a b ) (grdraw a b 7 1)) (cons (last l) l) l)
  15.            )
  16.        )
  17.    )
  18.    (princ)
  19. )
回复

使用道具 举报

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-5 18:29:17 | 显示全部楼层
 
嘿,现在。太棒了。
我将研究这些差异。
李,谢谢你的程序升级。
 
史蒂夫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:32:48 | 显示全部楼层
不客气,史蒂夫,请随意提问代码。
回复

使用道具 举报

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-5 18:38:46 | 显示全部楼层
李,
 
在您的网站和Afralisp上花了一些时间试图破译您的代码后,出现了一些问题。
我理解grdraw部分的作用,但如果这是正确的项,它的“a b”(和λ)如何指向上面列表中的x和y坐标?
 
此外,在cons部分,为什么是“last”而不是“list”?
该框是通过从下到上处理列表来绘制的吗?
如果“l”列表表示直线长度或顶点,为什么只有3个而不是4个?
史蒂夫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:44:27 | 显示全部楼层
 
嗨,史蒂夫,
 
为了帮助解释如何计算mapcar表达式,请考虑以下控制台教程:
 
假设变量“l”被分配了以下四个坐标(矩形的顶点)列表:
表达式(cons(last l)l)将把列表中的最后一项推到列表的前面:
现在,考虑当提供的任何列表参数被完全处理时,mapcar将停止计算,例如:
因此,使用我们的两个列表评估以下mapcar表达式将得到以下结果:
要将其可视化,请考虑一个顶点字母为a到D的矩形,从左下角开始,逆时针绕矩形旋转:
 
190338uam66u6m3j5b6alu.png
 
现在,列表“l”包含顶点:
  1. 9
,表达式(cons(last l)l)包含顶点:
因此,mapcar表达式采用以下形式:
因此,grdraw函数使用以下参数进行评估:
  1. 12
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
274
发表于 2022-7-5 18:48:05 | 显示全部楼层
很好的解释
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 01:06 , Processed in 0.452527 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表