乐筑天下

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

[编程交流] Autocad开源绘图

[复制链接]

4

主题

24

帖子

26

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:43:52 | 显示全部楼层
我找到了一种没有txt Datei的oder方法,在lisp上我添加了两个函数,一个用于打开块,另一个用于重新定义块。
 
  1. (defun partsearch (n /)
  2. (cond
  3. ((findfile n)) ;;; first search the dir's in AutoCAD's "env" variable, then search the additional places listed below:
  4. ((findfile (strcat "H:/bloc/profile/" n))) ;;;<--- this is an example path
  5. ((findfile (strcat "H:/bloc/gomme/" n)));;;<--- this is another example path
  6. ;;; etc, etc. List as many block folder
  7. ;;; paths as you need, following the patterns
  8. (t (progn
  9. (prompt
  10. (strcat "** PartSearch Error ** Required file (" n ") could not be found."))
  11. (terpri)
  12. )
  13. )
  14. )
  15. );defun
  16. ;;; ----------- Open source drawing of selected Block--------------
  17. (defun c:OpenBL ( / cmdecho regen n bpath)
  18. (setq cmdecho (getvar "cmdecho"))
  19. (setq regen (getvar "regenmode"))
  20. (setvar "cmdecho" 0)
  21. (setvar "regenmode" 0)
  22. (setq ent (car (entsel "\nSelect Block Entity: ")))
  23.                 (if  (eq (cdr (assoc 0 (entget ent))) "INSERT")
  24.                  (progn
  25.                  (setq BLKN (vla-get-effectivename
  26.                                        (vlax-ename->vla-object ent)))
  27.                  )
  28.                  )
  29. (setq bpath (partsearch (strcat blkn ".dwg")))
  30. (if bpath
  31. (if (= 0 (getvar "SDI"))
  32. (vla-activate (vla-open (vla-get-documents (vlax-get-acad-object)) bpath))
  33. (vla-sendcommand
  34. (vla-get-activedocument
  35. (vlax-get-acad-object))
  36. (strcat "(command "_.open")\n" bpath "\n") )
  37. )
  38. )
  39. (setvar "cmdecho" cmdecho)
  40. (setvar "regenmode" 1)
  41. (princ)
  42. ); close defun
  43. (princ)
  44. ;;; ----------- Insert & rededine Block --------------
  45. (defun c:ReInsertBL ( / cmdecho regen n bpath)
  46. (setq cmdecho (getvar "cmdecho"))
  47. (setq regen (getvar "regenmode"))
  48. (setvar "cmdecho" 0)
  49. (setvar "regenmode" 0)
  50. (setq ent (car (entsel "\nSelect Block Entity: ")))
  51.                 (if  (eq (cdr (assoc 0 (entget ent))) "INSERT")
  52.                  (progn
  53.                  (setq BLKN (vla-get-effectivename
  54.                                        (vlax-ename->vla-object ent)))
  55.                  )
  56.                  )
  57. (setq bpath (partsearch (strcat blkn ".dwg")))
  58. (if bpath
  59. (vl-cmdf "insert" (strcat blkn "=" bpath) )
  60. (command)
  61. )
  62. (setvar "cmdecho" cmdecho)
  63. (setvar "regenmode" 1)
  64. (princ)
  65. ); close defun
  66. (princ)
回复

使用道具 举报

4

主题

24

帖子

26

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:45:06 | 显示全部楼层
通过第一个lisp命令“openBL”,如果该图形已经打开,Autocad是否可能不打开该图形!!!!
谁能帮帮我吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:49:46 | 显示全部楼层
请尝试以下代码:
 
  1. (defun c:openbl ( / blk lst src usr )
  2.    (cond
  3.        (   (not (setq blk (selectblock "\nSelect block to open source drawing: "))))
  4.        (   (not (setq src (findblock (strcat blk ".dwg"))))
  5.            (princ (strcat "\n" blk ".dwg not found."))
  6.        )
  7.        (   (progn
  8.                (vlax-for doc (vla-get-documents (vlax-get-acad-object))
  9.                    (setq lst (cons (cons (strcase (vla-get-fullname doc)) doc) lst))
  10.                )
  11.                (assoc (strcase src) lst)
  12.            )
  13.            (vla-activate (cdr (assoc (strcase src) lst)))
  14.        )
  15.        (   (setq usr (LM:dwgopen-p src))
  16.            (princ (strcat "\n" src " is currently in use by " usr))
  17.        )
  18.        (   (LM:open src))
  19.    )
  20.    (princ)
  21. )
  22. (defun c:reinsertbl ( / blk src val var )
  23.    (cond
  24.        (   (not (setq blk (selectblock "\nSelect block to redefine: "))))
  25.        (   (not (setq src (findblock (strcat blk ".dwg"))))
  26.            (princ (strcat "\n" blk ".dwg not found."))
  27.        )
  28.        (   (setq var '(cmdecho regenmode)
  29.                  val  (mapcar 'getvar var)
  30.            )
  31.            (mapcar 'setvar var '(0 0))
  32.            (command "_.-insert" (strcat blk "=" src) nil)
  33.            (mapcar 'setvar var val)
  34.        )
  35.    )
  36.    (princ)
  37. )         
  38. (defun selectblock ( msg / obj rtn )
  39.    (while
  40.        (progn (setvar 'errno 0) (setq obj (car (entsel msg)))
  41.            (cond
  42.                (   (= 7 (getvar 'errno))
  43.                    (princ "\nMissed, try again.")
  44.                )
  45.                (   (/= "INSERT" (cdr (assoc 0 (entget obj))))
  46.                    (princ "\nSelected object is not a block.")
  47.                )
  48.                (   (vlax-property-available-p (setq obj (vlax-ename->vla-object obj)) 'effectivename)
  49.                    (null (setq rtn (vla-get-effectivename obj)))
  50.                )
  51.                (   (null (setq rtn (vla-get-name obj))))
  52.            )
  53.        )
  54.    )
  55.    rtn
  56. )
  57. (defun findblock ( dwg )
  58.    (vl-some '(lambda ( p ) (findfile (strcat p dwg)))
  59.       '(   ""
  60.            "H:/bloc/profile/"
  61.            "H:/bloc/gomme/"
  62.        )
  63.    )
  64. )
  65. ;; Drawing Open-p  -  Lee Mac
  66. ;; Returns the owner of an open drawing, else nil if the drawing is unopen.
  67. ;; dwg - [str] Drawing filename
  68. (defun LM:dwgopen-p ( dwg / dwl tmp usr )
  69.    (if (and (setq dwl (findfile (strcat (substr dwg 1 (- (strlen dwg) 3)) "dwl")))
  70.             (null (vl-file-delete dwl))
  71.        )
  72.        (if (setq tmp (open dwl "r"))
  73.            (progn
  74.                (setq usr (read-line tmp)
  75.                      tmp (close tmp)
  76.                )
  77.                usr
  78.            )
  79.            "<Unknown>"
  80.        )
  81.    )
  82. )
  83. ;; Open  -  Lee Mac
  84. ;; Uses the 'Open' method of the Shell Object to open the specified file or folder.
  85. ;; tar - [str/int] File, folder or ShellSpecialFolderConstants enum
  86. (defun LM:open ( tar / shl rtn )
  87.    (if (and (or (= 'int (type tar)) (setq tar (findfile tar)))
  88.             (setq shl (vla-getInterfaceObject (vlax-get-acad-object) "shell.application"))
  89.        )
  90.        (progn
  91.            (setq rtn (vl-catch-all-apply 'vlax-invoke (list shl 'open tar)))
  92.            (vlax-release-object shl)
  93.            (not (vl-catch-all-error-p rtn))
  94.        )
  95.    )
  96. )
  97. (vl-load-com) (princ)
回复

使用道具 举报

4

主题

24

帖子

26

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:53:20 | 显示全部楼层
嗨,李,
我测试了您的lisp,它与目录链接“H:/bloc/gomme/”和“H:/bloc/gomme/”一起工作。我将这个direntory链接更改为:
“P:/GBR\U GreatBritain/02-DESIGN/02-05-BLOCKS/Shields/”
“P:/GBR\u GreatBritain/02-DESIGN/02-05-BLOCKS/Casting/”
“P:/GBR\u GreatBritain/02-DESIGN/02-05-BLOCKS/Mouldings/”
“P:/GBR\u GreatBritain/02-DESIGN/02-05-BLOCKS/Accessories/”
现在lisp不起作用,块未找到。你知道为什么吗?
回复

使用道具 举报

4

主题

24

帖子

26

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:54:58 | 显示全部楼层
嗨,李,
我想我发现了问题:绿色改装
我还更改了块选择方法,因为我想选择嵌套块:修改为红色,可以吗???
 
 
  1. (defun c:openbl ( / blk lst src usr )
  2.    (cond
  3.        (   (not (setq blk (selectblock "\nSelect block to open source drawing: "))))
  4.        (   (not (setq src (findblock (strcat blk ".dwg"))))
  5.            (princ (strcat "\n" blk ".dwg not found."))
  6.        )
  7.        (   (progn
  8.                (vlax-for doc (vla-get-documents (vlax-get-acad-object))
  9.                    (setq lst (cons (cons (strcase (vla-get-fullname doc)) doc) lst))
  10.                )
  11.                (assoc (strcase src) lst)
  12.            )
  13.            (vla-activate (cdr (assoc (strcase src) lst)))
  14.        )
  15.        (   (setq usr (LM:dwgopen-p src))
  16.            (princ (strcat "\n" src " is currently in use by " usr))
  17.        )
  18.        (   (LM:open src))
  19.    )
  20.    (princ)
  21. )
  22. ;;
  23. (defun c:reinsertbl ( / blk src val var )
  24. [b][i][color=red](while (/=(type(setq e (car(last(nentsel "\nSelect block to redefine: "))))) 'ENAME))
  25. (setq obj (vlax-ename->vla-object e))
  26. (if (= (vlax-get-property obj 'ObjectName) "AcDbBlockReference")
  27. (setq blk (vlax-get-property obj
  28. (if (vlax-property-available-p obj 'effectivename)'effectivename 'name))
  29. );setq
  30. );if[/color][/i][/b]
  31.         (setq src (findblock (strcat blk ".dwg")))
  32.            (princ (strcat "\n" blk ".dwg not found."))
  33.       
  34.        (   (setq var '(cmdecho regenmode)
  35.                  val  (mapcar 'getvar var)
  36.            )
  37.            (mapcar 'setvar var '(0 0))
  38.            (command "_.-insert" (strcat blk "=" src))
  39.            (mapcar 'setvar var val)
  40.        )
  41.    
  42.    (princ)
  43. )      
  44. ;;   
  45. (defun selectblock ( msg / obj rtn )
  46. [b][i][color=red](while (/=(type(setq e (car(last(nentsel "\nSelect block to redefine: "))))) 'ENAME))
  47. (setq obj (vlax-ename->vla-object e))
  48. (if (= (vlax-get-property obj 'ObjectName) "AcDbBlockReference")
  49. (setq rtn (vlax-get-property obj
  50. (if (vlax-property-available-p obj 'effectivename)'effectivename 'name))
  51. );setq
  52. );if[/color][/i][/b]
  53. )
  54. ;;
  55. (defun findblock ( dwg )
  56.    (vl-some '(lambda ( p ) (findfile (strcat p dwg)))
  57.       '(   ""
  58. [color=seagreen]"P:\\GBR_GreatBritain\\02-DESIGN\\02-05-BLOCKS\\Profiles\"
  59. "P:\\GBR_GreatBritain\\02-DESIGN\\02-05-BLOCKS\\Gaskets\"
  60. "P:\\GBR_GreatBritain\\02-DESIGN\\02-05-BLOCKS\\Castings\"
  61. "P:\\GBR_GreatBritain\\02-DESIGN\\02-05-BLOCKS\\MouldingPieces\"[/color]
  62.        )
  63.    )
  64. )
  65. ;; Drawing Open-p  -  Lee Mac
  66. ;; Returns the owner of an open drawing, else nil if the drawing is unopen.
  67. ;; dwg - [str] Drawing filename
  68. (defun LM:dwgopen-p ( dwg / dwl tmp usr )
  69.    (if (and (setq dwl (findfile (strcat (substr dwg 1 (- (strlen dwg) 3)) "dwl")))
  70.             (null (vl-file-delete dwl))
  71.        )
  72.        (if (setq tmp (open dwl "r"))
  73.            (progn
  74.                (setq usr (read-line tmp)
  75.                      tmp (close tmp)
  76.                )
  77.                usr
  78.            )
  79.            "<Unknown>"
  80.        )
  81.    )
  82. )
  83. ;; Open  -  Lee Mac
  84. ;; Uses the 'Open' method of the Shell Object to open the specified file or folder.
  85. ;; tar - [str/int] File, folder or ShellSpecialFolderConstants enum
  86. (defun LM:open ( tar / shl rtn )
  87.    (if (and (or (= 'int (type tar)) (setq tar (findfile tar)))
  88.             (setq shl (vla-getInterfaceObject (vlax-get-acad-object) "shell.application"))
  89.        )
  90.        (progn
  91.            (setq rtn (vl-catch-all-apply 'vlax-invoke (list shl 'open tar)))
  92.            (vlax-release-object shl)
  93.            (not (vl-catch-all-error-p rtn))
  94.        )
  95.    )
  96. )
  97. (vl-load-com) (princ)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:57:21 | 显示全部楼层
请尝试以下操作:
恐怕我无法就您的路径提供建议-如果找不到块,则路径一定不正确。
 
回复

使用道具 举报

4

主题

24

帖子

26

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 18:00:10 | 显示全部楼层
嗨,李
这正是我需要的,非常感谢
弗朗辛
回复

使用道具 举报

4

主题

24

帖子

26

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 18:04:56 | 显示全部楼层
你好
最后一个请求是,我有一个lisp用于重新定义图形中的许多块。这个lisp很好用,但是当一个有很多块的大图时,例程有时需要2分钟甚至更多。有没有办法优化这个lisp。也许只重新定义修改日期早于绘图日期的块!!!
我还希望通过脚本和批处理来实现这一点,我发现了这个解决方案:http://www.widom-assoc.com/AU-CP12-3L.pdf但我需要时间来理解它是如何工作的。
 
 
  1. 12
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:07:32 | 显示全部楼层
 
不客气,弗朗辛。
 
 
以下代码是否更快?
 
  1. 13
回复

使用道具 举报

4

主题

24

帖子

26

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 18:12:12 | 显示全部楼层
你好,李,
我尝试了你的Lisp程序,但我变成了唯一的信息,比如:
 
忽略块EF4318的重复定义。
忽略块EP1780的重复定义。
忽略块EP1781的重复定义。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 09:10 , Processed in 0.555045 second(s), 70 queries .

© 2020-2025 乐筑天下

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