乐筑天下

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

[编程交流] 块的插入

[复制链接]

31

主题

107

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 15:08:09 | 显示全部楼层 |阅读模式
你好
 
我这里有点Lisp程序,我需要帮助。
我使用DoSLIb,它有很多优点。
 
这是我的Lisp程序:
 
 
  1. (defun c:INBLOCK ()
  2. (setq sl (dos_getdir "Choose Block_Library" "K:\\CAD\\Blocks\")) (dos_dwgpreview "Choose Block_Library" sl)
  3. (setq p0 (getpoint "\nChoose insertion point: "))
  4. (setvar "attdia" 1)
  5. (command "-insert" sl p0 1 1 0)
  6. (command "attdia" 0 "")
  7. (princ)
  8. )

 
如何插入选定的块?
它只要求我插入,然后什么也没有插入。
 
Thanx寻求帮助
回复

使用道具 举报

31

主题

107

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 15:12:19 | 显示全部楼层
这就解决了:
  1. (defun c:AIX:INBLOCK ( / sl)(setq sl nil)
  2. (setq sl (dos_dwgpreview "Choose block" "K:\\CAD\\Block\"))
  3. (if sl (command "-insert" sl pause "1" "1" "0")
  4.    (princ))
  5. )
回复

使用道具 举报

31

主题

107

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 15:15:44 | 显示全部楼层
我有一个小问题。。。
 
如果我运行此:
 
 
  1. (defun c:INBLOCK ( / sl oldlay)
  2. (setq oldlay (getvar "clayer"))
  3. (setq sl nil)
  4. (setvar "cmdecho" 0)
  5. (if (not (tblsearch "LAYER" "A-------O2-"))
  6.            (command "-layer" "M" "A-------O2-" "C" "red" "A-------O2-" "")
  7.            (setvar "clayer" "A-------O2-")
  8.            ) ; end if
  9.   
  10. (setq sl (dos_getdir "Choose symbols" "K:\\CAD\\Block"))(dos_dwgpreview "Choose symbols" sl)
  11. (prompt "\nChoose point to insert ...")
  12. (if sl (command "-insert" sl pause "1" "1" "0")
  13.    (princ))(setvar "clayer" oldlay)
  14. )

 
如果我取消该命令,则创建层A------O2。
我想要的是完全取消命令,以便lisp退出。
Thanx公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:18:31 | 显示全部楼层
层的创建是在程序暂停供用户输入之前进行的,因此层将在用户有机会取消任何操作之前创建
回复

使用道具 举报

31

主题

107

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 15:21:56 | 显示全部楼层
我该怎么改变呢??
所以程序取消图层创建??
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:26:54 | 显示全部楼层
也许可以在“选择符号”部分使用IF语句,然后再创建层,这样如果用户取消“选择符号”部分,就不会创建层。
回复

使用道具 举报

31

主题

107

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 15:30:34 | 显示全部楼层
thanx。。。
 
这就是我得到的:
 
  1. ;;;
  2. (defun C:describe ()
  3. ;;;Do the mapcar function for each layer in the drawing.
  4. (vlax-for layer
  5.        (vla-get-layers
  6.          (vla-get-activedocument
  7.        (vlax-get-acad-object)
  8.        )
  9.          )
  10. ;;;if the current layer being checked matches a predetermined name, add the needed description.
  11.    (mapcar
  12.      (function
  13.    (lambda (layname description)
  14.      (if (= (strcase (vla-get-name layer)) (strcase layname))
  15.        (vla-put-description layer description)
  16.        ()
  17.        )
  18.      )
  19.    )
  20.      '("A-------O2-" ) ; This is your list of layers needing a description.
  21.      '("arrow"); This is the descriptions for each layer.  Make sure the order is EXACTLY the same as in the layer list.
  22.      )
  23.    )
  24. (princ); Silent exit.
  25. )
  26.    (defun c:layercreation ()
  27.        (if  (tblsearch "LAYER" "A-------O2-")
  28. (command "_layer" "s" "A-------O2-" "")
  29.            (command "-layer" "M" "A-------O2-" "C" "red" "A-------O2-" "")
  30.          
  31.            ) ; end if
  32.          
  33.           );en defun
  34. (defun c:inarrow ( / sl oldlay)
  35. (setq oldlay (getvar "clayer"))
  36. (setq sl nil)
  37.   
  38. (setq sl (dos_dwgpreview "Choose arrows" "K:\\CAD\\\\block\\arrows"))
  39. (prompt "\nChoose insertion point")
  40. (if sl
  41.    (progn
  42.      (c:layercreation)
  43.      (c:describe)
  44.      (setvar "clayer" "A-------O2-")
  45.      (command "-insert" sl pause "1" "1" "0")
  46.    (setvar "clayer" oldlay)
  47.    
  48. );progn
  49.    );if
  50. (exit)
  51. )

 
Dos_dwgpreview有一个浏览按钮。
我不知道我是否可以禁用它。
这里的用户可以选择浏览到其他文件夹并选择其他块。
如果他这样做,那层仍然是一个----O2-。
如果不能禁用浏览按钮,我想要的是,如果用户选择转到另一个路径,或者层改为------O4-的路径。
这我做不到
 
我不知道怎么做。。什么是智能。
我有文件夹:

在此情况下:


标度符号
汽车
 
每一个都是layerdependent。
 
汽车以一种------O1的形式出现-
人们可能在--------10-
 
在lisp上方插入一个带有层A的箭头------O2-。。。
我想如果用户更改目录,它会将一层添加到该目录中。。。
 
这很难做到吗?
 
Thanx公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:34:08 | 显示全部楼层
我将函数“descripe”和“layercreation”定义为局部函数,即。
 
  1. (defun describe...

 
而不是
 
  1. (defun c:describe...

 
然后通过以下方式调用它们:
 
  1. (describe)

 
而不是
 
  1. (c:describe)
回复

使用道具 举报

31

主题

107

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 15:36:50 | 显示全部楼层
thanx。。
 
路径解决方案。。。
有可能做一个条件吗?
就像这个lisp只在指定的路径中工作一样?如果用户浏览到条件中未指定的另一个路径,它将提醒用户。
 
我认为这更容易。。。
这是一个好方法吗?
 
非常感谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:38:49 | 显示全部楼层
我不太确定如何使用代码中的“dos”元素
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 19:02 , Processed in 0.332023 second(s), 72 queries .

© 2020-2025 乐筑天下

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