乐筑天下

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

[编程交流] 你如何检查存在

[复制链接]

2

主题

5

帖子

3

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:25:39 | 显示全部楼层 |阅读模式
Autocad Civil 3D 2010。
 
我试图通过lisp将一组视口比例导入到图形中。问题是,当我重置比例列表时,它只加载civil Scale。我还需要建筑规模。
 
我可以很容易地单独加载天平,如下所示:
(命令“-scalelistedit”“add”“1/16\”=1'-0\“0.0625:12”“e”);
 
但是,如果该比例已经存在,则scalelistedit需要稍有不同的选项,因此脚本暂停。
 
我在寻找这样的东西:
 
(如果(tblsearch“ViewportScale”“3/22\”=1'-0\“”)
(命令“-scalelistedit”add“3/32”=1'-0“Y”0.0938:12“e”)
(命令“-scalelistedit”“add”“3/32\”=1'-0\“0.0938:12”“e”)
)
 
但是,我在任何地方都找不到要搜索的有效表的列表,所以我甚至无法验证tblsearch命令在这里是否有效。
 
有什么建议吗?
回复

使用道具 举报

2

主题

5

帖子

3

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:30:15 | 显示全部楼层
也许在我走得太远之前,在Acad 2010中,自动将视口比例引入图形的标准方法是什么?
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 11:33:53 | 显示全部楼层
我不确定,我在很大程度上使用了视口工具栏,但我相信它可以设置缩放百分比。
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 11:40:22 | 显示全部楼层
我希望这能让你朝着正确的方向前进。
 
来自Acad帮助部分
 
视口的属性
 
  1. Displays the properties of the selected layout viewport.
  2. Property name
  3. (by category)
  4. [b]Description [/b]
  5. [b];[/b]
  6. [b]Geometry [/b]
  7. [b]Center X[/b]
  8. [b]Center Y[/b]
  9. [b]Center Z[/b]
  10. Specifies the X,Y,Z coordinate values for the center of the viewport Width Specifies the width of the viewport; the width of a viewport is the X axis measurement of the area within a viewport frame Height Specifies the height of the viewport; the height of a viewport is the Y axis measurement of the viewport frame
  11. [b];[/b]
  12. [b]Misc [/b]
  13. [b]On[/b] Determines whether the viewport is on or off
  14. [b]Clipped[/b] Determines whether viewport clipping is on or off
  15. [b]Display locked[/b] Determines whether viewport locking is on or off
  16. [color=magenta][b]Standard scale[/b] Specifies the standard scale for the viewport[/color]
  17. [color=magenta][b]Custom scale[/b] [/color][color=magenta]Specifies a custom scale for the viewport [/color]
  18. [b]UCS per viewport[/b] Determines whether the UCS is saved with the viewport or not
  19. [b]Shade Plot[/b] Specifies how views are plotted
回复

使用道具 举报

2

主题

5

帖子

3

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:44:06 | 显示全部楼层
要清楚的是,我并没有试图设置单个视口的比例。我试图填充窗口底部的可用视口列表,以及可以通过运行“Scalelistedit”命令手动编辑的列表。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:46:06 | 显示全部楼层
嗨,马特,
 
此功能可以帮助您检查存在哪些刻度:
 
  1. (defun GetScaleList (/ dic l)
  2. (vl-load-com)
  3. ;; Lee Mac  ~  25.03.10
  4. (if (not (vl-catch-all-error-p
  5.             (setq dic (vl-catch-all-apply
  6.                         (function vla-item)
  7.                           (list (vla-get-Dictionaries
  8.                                   (vla-get-ActiveDocument
  9.                                     (vlax-get-acad-object))) "ACAD_SCALELIST")))))
  10.    (vlax-for scl dic
  11.      (setq l (cons (cdr (assoc 300 (entget (vlax-vla-object->ename scl)))) l))))
  12. l)

 
 
另一个:
 
  1. (defun GetScaleList (/ dic)
  2. (vl-load-com)
  3. ;; Lee Mac  ~  25.03.10
  4. (if (setq dic (dictsearch (namedobjdict) "ACAD_SCALELIST"))
  5.    (mapcar
  6.      (function
  7.        (lambda (x) (cdr (assoc 300 (entget (cdr x))))))
  8.      (vl-remove-if-not
  9.        (function
  10.          (lambda (x) (= 350 (car x)))) dic))))
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 11:53:35 | 显示全部楼层
如果您要使用Lee Mac在上文第#6页中的第二个选项,您可以填充比例列表。不过,您需要编辑以下内容以满足您对建筑比例的需求,类似于您在第1篇文章中的示例。
  1. (setq scllst (getscalelist))
  2.      (if (not (member'"1" = 1'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 1'" "1:1"))
  3.    (if (not (member'"1" = 2'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 2'" "1:2" "e"))
  4.     (if (not (member'"1" = 3'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 3'" "1:3" "e"))
  5.     (if (not (member'"1" = 4'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 4'" "1:4" "e"))
  6.     (if (not (member'"1" = 5'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 5'" "1:5" "e"))
  7.     (if (not (member'"1" = 10'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 10'" "1:10" "e"))
  8.     (if (not (member'"1" = 20'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 20'" "1:20" "e"))
  9.     (if (not (member'"1" = 30'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 30'" "1:30" "e"))
  10.     (if (not (member'"1" = 40'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 40'" "1:40" "e"))
  11.     (if (not (member'"1" = 50'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 50'" "1:50" "e"))
  12.     (if (not (member'"1" = 60'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 60'" "1:60" "e"))
  13.     (if (not (member'"1" = 80'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 80'" "1:80" "e"))
  14.     (if (not (member'"1" = 100'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 100'" "1:100" "e"))
  15.     (if (not (member'"1" = 150'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 150'" "1:150" "e"))
  16.     (if (not (member'"1" = 200'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 200'" "1:200" "e"))
  17.     (if (not (member'"1" = 400'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 400'" "1:400" "e"))
  18.     (if (not (member'"1" = 500'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 500'" "1:500" "e"))
  19.     (if (not (member'"1" = 2000'" scllst))(vl-cmdf "-scalelistedit" "a" "1" = 2000'" "1:2000" "e"))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:56:47 | 显示全部楼层
也许用一种更简洁的方式来表达拉里
 
  1. (setq scllst (getscalelist))
  2. (mapcar
  3. (function
  4.    (lambda (name ratio)
  5.      (if (not (vl-position name scllst))
  6.        (vl-cmdf "_.-scalelistedit" "_a" name ratio "_e"))))
  7. '("1" = 1'" "1" = 2'" "1" = 3'")
  8. '(  "1:1"       "1:2"      "1:3"  ))
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 12:00:28 | 显示全部楼层
好多了。。。我必须学习并掌握mapcar&lambda
前一段时间,我为了一个特定的问题做了上述操作——它奏效了,所以我退出了。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:02:28 | 显示全部楼层
只需将lambda视为任何其他子功能,mapcar就可以正常使用它
 
我们可以将上述内容改写为:
 
  1. (defun checkScale (name ratio)
  2. (if (not (vl-position name scllst))
  3.    (vl-cmdf "_.-scalelistedit" "_a" name ratio "_e")))
  4. (setq scllst (getscalelist))
  5. (mapcar 'checkScale
  6. '("1" = 1'" "1" = 2'" "1" = 3'")
  7. '(  "1:1"       "1:2"      "1:3"  ))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 02:32 , Processed in 0.329921 second(s), 72 queries .

© 2020-2025 乐筑天下

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