乐筑天下

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

[编程交流] 绘图图例例程

[复制链接]

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-5 19:50:50 | 显示全部楼层 |阅读模式
大家好,
我正在创建一个例程,该例程将检查图形中的某些层,如果它们存在,则将相应的块添加到图形中。这些对应的块是图形的图例项。请参阅所附图片。
 
我有这个代码,我在这个网站上找到,并修改为插入一个特定的块,如果一个特定的层存在。我可以将所有图层添加到我要检查的层列表中,但如何将相应的块名列表添加到图形中?
 
如果能帮上忙,我将不胜感激。谢谢
  1. (defun c:LegendBatch (/ laylist)
  2. (setq laylist '("CCC_LAYOUT_PROPOSED_Carriageway_Hatch" ))
  3. ;(command "_.LAYER" "_Unlock" "0" "_ON" "0" "_Thaw" "0" "_Set" "0")
  4. (foreach l laylist
  5.    (if (tblsearch "LAYER" l)
  6.                         (if (setq pt (setq INPT (getpoint "\nPick Insertion Point: ")))
  7.                 (command "_.-insert" "Proposed Footpath" INPT "1" "1" "0")))   
  8. ;(command "_Unlock" l "_Thaw" l "_On" l)
  9.        (princ)))
  10. (command "")
  11. (prin1))

 
205056i94eabdtrsujz9e6.png
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-5 20:00:38 | 显示全部楼层
我试着这样做,但有些事情不对劲:
  1. (defun c:LegendBatch (/ laylist INPT block)
  2. (setq laylist '("CCC_LAYOUT_PROPOSED_Carriageway_Hatch" "CCC_LAYOUT_PROPOSED_Tactile_Paving_Yellow_Hex_Hatch"))
  3.   (foreach l laylist
  4. (cond       ((= l "CCC_LAYOUT_PROPOSED_Carriageway_Hatch")(= block "Proposed Footpath"))
  5.         ((= l "CCC_LAYOUT_PROPOSED_Tactile_Paving_Yellow_Hex_Hatch")(= block "Proposed Tactile Paving (Yellow)"))
  6. )
  7.    (if (tblsearch "LAYER" l)
  8.                         (if (setq pt (setq INPT (getpoint "\nPick Insertion Point: ")))
  9.                 (command "_.-insert" block INPT "1" "1" "0")))   
  10.        (princ)))
  11. (command "")
  12. (prin1))

 
我想说的是,如果l是A层,那么将块A添加到图形中,如果l是B层,那么将块B添加到图形中。我现在设置它的方式无法工作,因为它将在添加块之前循环所有层。
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-5 20:03:16 | 显示全部楼层
这是我最近的一次尝试,但似乎也不起作用。
 
  1. (defun c:LegendBatch (/ INPT)
  2. ;******************************************************************
  3. (if (not (tblsearch "LAYER" "CCC_LAYOUT_PROPOSED_Carriageway_Hatch"))
  4. (setq INPT (getpoint "\nPick Insertion Point: "))
  5.                    (command "_.-insert" "Proposed Footpath" INPT "1" "1" "0"))
  6. ;******************************************************************
  7. (if (not (tblsearch "LAYER" "CCC_LAYOUT_PROPOSED_Tactile_Paving_Yellow_Hex_Hatch"))
  8. (setq INPT (getpoint "\nPick Insertion Point: "))
  9.         (command "_.-insert" "Proposed Tactile Paving (Yellow)" INPT "1" "1" "0"))
  10. ;******************************************************************
  11.        (princ))

 
谁能指出我哪里出了错?我更喜欢使用laylist方法,因为它可能更有效。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:09:30 | 显示全部楼层
 
您需要先了解IF函数。
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-5 20:17:21 | 显示全部楼层
谢谢塔瓦。
 
我按照建议查看了链接。
 
我已将代码修改为:
  1. (defun c:LegendBatch (/ laylist b l)
  2. (setq laylist '("CCC_LAYOUT_PROPOSED_Carriageway_Hatch" "CCC_LAYOUT_PROPOSED_Tactile_Paving_Yellow_Hex_Hatch"))
  3. (foreach l laylist
  4.    (if (tblsearch "LAYER" l)
  5.         (if (= l "CCC_LAYOUT_PROPOSED_Carriageway_Hatch" (= b "Proposed Footpath")))
  6.         (if (= l "CCC_LAYOUT_PROPOSED_Tactile_Paving_Yellow_Hex_Hatch" (= b "Proposed Tactile Paving (Yellow)")))
  7.                         (if (setq pt (setq INPT (getpoint "\nPick Insertion Point: ")))
  8.                 (command "_.-insert" b INPT "1" "1" "0")))   
  9.        (princ)))
  10. (command "")
  11. (prin1))

 
它插入第一个块,但不插入第二个块。我错过了什么?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:23:31 | 显示全部楼层
 
IF函数仍然有很多错误
 
仔细看看下面的写作方法。[未经测试]
 
您可以向列表中添加图层名和块名的组合,就像我在下面的示例中所做的那样。
 
试试看,让我知道。
 
  1. (setq laylist '(("CCC_LAYOUT_PROPOSED_Carriageway_Hatch"
  2.                 "Proposed Footpath"
  3.                )
  4.                ("CCC_LAYOUT_PROPOSED_Tactile_Paving_Yellow_Hex_Hatch"
  5.                 "Proposed Tactile Paving (Yellow)"
  6.                )
  7.               )
  8. )
  9. (foreach l laylist
  10. (if (and (tblsearch "LAYER" (car l))
  11.           (tblsearch "BLOCK" (cadr l))
  12.      )
  13.    (command "_.-INSERT" (cadr l) "\" "1" "1" "0")
  14. )
  15. )
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-5 20:28:50 | 显示全部楼层
塔尔瓦特,
 
这非常有效,唯一的例外是它只插入图形中已经存在的块。如何绕过
并迫使其从支撑路径位置插入块?
 
谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:36:51 | 显示全部楼层
很好,
 
是的,当然可能,这样试试。
 
  1. 6
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-5 20:39:54 | 显示全部楼层
谢谢塔瓦。这实现了一个梦想。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:47:21 | 显示全部楼层
 
太好了,非常欢迎你。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 01:32 , Processed in 0.365390 second(s), 75 queries .

© 2020-2025 乐筑天下

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