乐筑天下

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

[编程交流] Lisp动态块(&D)

[复制链接]

6

主题

20

帖子

14

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 11:09:17 | 显示全部楼层 |阅读模式
我一直在寻找这样的代码。使用lisp,我希望插入一个动态块,自动选择数据库的拉伸夹点&当lisp完成时,数据库将爆炸。
回复

使用道具 举报

6

主题

20

帖子

14

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 11:14:23 | 显示全部楼层
我知道如何插入,但不知道插入后如何选择动态夹点。这就是我真正想要的
回复

使用道具 举报

52

主题

156

帖子

104

银币

后起之秀

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

铜币
260
发表于 2022-7-6 11:15:52 | 显示全部楼层
不知道该怎么做,或者是否可以做到,但是否需要使用动态块?您可以只编写一个lisp例程来绘制所需内容。如果你贴出这个帖子,也许我会更清楚你想要实现什么。
我编写了lisp例程来从一个点到另一个点绘制楼板托梁,并能够输入高度。如果你贴block,很乐意帮忙。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:20:57 | 显示全部楼层
我不太确定使用LISP选择夹点要实现什么-为什么不手动选择夹点?
 
如果您想修改属性,则需要查看获取动态块属性的代码,我在这里编写了大量代码:
 
  1. ;; Retrieves All Properties from a Dynamic Block
  2. ;; Args: obj ~ Dynamic Block VLA-Object
  3. ;; Returns: ((<property name> <value>) ...)
  4. (defun GetDynProps (obj)
  5. ;; Lee Mac  ~  07.04.10
  6. (mapcar
  7.    (function
  8.      (lambda (x / v)
  9.        (list (vla-get-PropertyName x)
  10.              (if (= 8192 (logand 8192 (vlax-variant-type (setq v (vla-get-value x)))))
  11.                (vlax-safearray->list (vlax-variant-value v))
  12.                (vlax-variant-value v)))))
  13.      
  14.    (vlax-invoke obj 'GetDynamicBlockProperties)))
  15. ;; Retrieves All Properties from a Dynamic Block
  16. ;; Args: obj ~ Dynamic Block VLA-Object
  17. ;; Returns: ((<property name> <value>) ...)
  18. (defun GetDynProps (obj)
  19. ;; Lee Mac  ~  07.04.10
  20. (mapcar
  21.    (function
  22.      (lambda (x) (list (vla-get-PropertyName x) (vlax-get x 'Value))))
  23.    (vlax-invoke obj 'GetDynamicBlockProperties)))
  24. ;; Changes a Dynamic Block Property Value
  25. ;; Args: obj  ~ Dynamic Block VLA-Object
  26. ;;       prop ~ Property Name
  27. ;;       val  ~ New Value
  28. ;; Returns: New Value (val)
  29. (defun PutDynPropValue (obj prop val)
  30. ;; Lee Mac  ~  07.04.10
  31. (mapcar
  32.    (function
  33.      (lambda (x)
  34.        (if (eq (strcase prop) (strcase (vla-get-propertyName x)))
  35.          (vla-put-value x
  36.            (vlax-make-variant val
  37.              (vlax-variant-type (vla-get-value x)))))))
  38.    (vlax-invoke obj 'GetDynamicBlockProperties)) val)
  39. ;; Retrieves the Allowed Values for a Specific Property
  40. ;; Args: obj  ~ Dynamic Block VLA-Object
  41. ;;       prop ~ Property Name
  42. ;; Returns: List of Allowed Values (or nil)
  43. (defun GetPropAllowedValues (obj prop / a)
  44. ;; Lee Mac  ~  07.04.10
  45. (mapcar
  46.    (function
  47.      (lambda (x / w)
  48.        (if (eq (strcase prop) (strcase (vla-get-propertyName x)))
  49.          (setq a
  50.            (mapcar
  51.              (function
  52.                (lambda (v)
  53.                  (if (= 8192 (logand 8192 (vlax-variant-type v)))
  54.                    (vlax-safearray->list (vlax-variant-value v))
  55.                      (vlax-variant-value v))))
  56.             
  57.              (if (< 0 (vlax-safearray-get-u-bound
  58.                         (setq w (vlax-variant-value
  59.                                   (vla-get-AllowedValues x))) 1))
  60.                
  61.                (vlax-safearray->list w)))))))
  62.    
  63.    (vlax-invoke obj 'GetDynamicBlockProperties)) a)
  64. ;; Retrieves the Allowed Values for a Specific Property
  65. ;; Args: obj  ~ Dynamic Block VLA-Object
  66. ;;       prop ~ Property Name
  67. ;; Returns: List of Allowed Values (or nil)
  68. (defun GetPropAllowedValues (obj prop / a)
  69. ;; Lee Mac  ~  07.04.10
  70. (mapcar
  71.    (function
  72.      (lambda (x)
  73.        (if (eq (strcase prop) (strcase (vla-get-propertyName x)))
  74.          (setq a (vlax-get x 'AllowedValues)))))
  75.    (vlax-invoke obj 'GetDynamicBlockProperties)) a)
  76. ;; Retrieves the Allowed Values for all Properties
  77. ;; Args: obj  ~ Dynamic Block VLA-Object
  78. ;; Returns: ((<property name> (<Allowed Values>)) ...)
  79. (defun GetAllowedValues (obj)
  80. ;; Lee Mac  ~  07.04.10
  81. (mapcar
  82.    (function
  83.      (lambda (x / w)
  84.        (list (vla-get-propertyname x)
  85.              (mapcar
  86.                (function
  87.                  (lambda (v)
  88.                    (if (= 8192 (logand 8192 (vlax-variant-type v)))
  89.                      (vlax-safearray->list (vlax-variant-value v))
  90.                        (vlax-variant-value v))))
  91.                (if (< 0 (vlax-safearray-get-u-bound
  92.                           (setq w (vlax-variant-value
  93.                                     (vla-get-AllowedValues x))) 1))
  94.                  
  95.                  (vlax-safearray->list w))))))
  96.    
  97.    (vlax-invoke obj 'GetDynamicBlockProperties)))
  98. ;; Retrieves the Allowed Values for all Properties
  99. ;; Args: obj  ~ Dynamic Block VLA-Object
  100. ;; Returns: ((<property name> (<Allowed Values>)) ...)
  101. (defun GetAllowedValues (obj)
  102. ;; Lee Mac  ~  07.04.10
  103. (mapcar
  104.    (function
  105.      (lambda (x)
  106.        (list (vla-get-propertyname x)
  107.              (vlax-get x 'AllowedValues))))
  108.    (vlax-invoke obj 'GetDynamicBlockProperties)))
回复

使用道具 举报

6

主题

20

帖子

14

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 11:23:14 | 显示全部楼层
我正在尝试阵列数据库。我和只知道基本Autocad命令的人一起工作。我试图获得一些视觉效果,这就是为什么我使用动态块中的动态块。这样他们就可以看到街区要走多远。当他们完成切割后,只要把它炸开,一切就会恢复正常。
样本。图纸
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:26:48 | 显示全部楼层
这可能会给你一些思考的食物:
 
  1. (defun c:InsertBlock ( / block space point )
  2. (vl-load-com)
  3. ;; Lee Mac  ~  05.05.10
  4. (setq block nil) ;; Block Name or nil
  5. (setq space
  6.    (if
  7.      (or
  8.        (eq AcModelSpace
  9.          (vla-get-ActiveSpace
  10.            (setq doc
  11.              (vla-get-ActiveDocument
  12.                (vlax-get-acad-object)
  13.              )
  14.            )
  15.          )
  16.        )
  17.        (eq :vlax-true
  18.          (vla-get-MSpace doc)
  19.        )
  20.      )
  21.      (vla-get-ModelSpace doc)
  22.      (vla-get-PaperSpace doc)
  23.    )
  24. )        
  25. (if (setq block (GetBlock block))
  26.    (while
  27.      (setq point
  28.        (getpoint "\nSpecify Point for Insertion: "))
  29.      
  30.      (InsertBlock space block point)
  31.    )
  32. )
  33. (princ)
  34. )
  35. (defun GetBlock ( block )
  36. ;; Lee Mac  ~  05.05.10
  37. (cond
  38.    (
  39.      (not
  40.        (and
  41.          (or block
  42.            (setq block
  43.              (getfiled "Select Block" "" "dwg" 16)
  44.            )
  45.          )
  46.          (or
  47.            (and
  48.              (eq "" (vl-filename-extension block))
  49.              (or
  50.                (tblsearch "BLOCK" block)
  51.                (setq block
  52.                  (findfile
  53.                    (strcat block ".dwg")
  54.                  )
  55.                )
  56.              )
  57.            )
  58.            (setq block (findfile block))
  59.          )
  60.        )
  61.      )
  62.     nil
  63.    )
  64.    ( block )
  65. )
  66. )
  67. (defun InsertBlock ( Block Name Point )
  68. (vla-InsertBlock Block
  69.    (vlax-3D-point Point) Name 1. 1. 1. 0.
  70. )
  71. )

 
我不知道您试图填充的标记的名称,因此我无法继续使用此代码。
回复

使用道具 举报

6

主题

20

帖子

14

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 11:28:57 | 显示全部楼层
我想用lisp排列块。当你有一个很长的跨度时,上面的代码可能会变得乏味。动态块位于上面的dwg中。块名称:面板
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:33:33 | 显示全部楼层
上面的更新代码-可以将其放入数组中:
 
  1. (defun c:InsertBlock ( / block tag space point )
  2. (vl-load-com)
  3. ;; Lee Mac  ~  05.05.10
  4. (setq block "PANEL") ;; Block Name or nil
  5. (setq tag nil)   ;; Tag Name or nil
  6. (setq space
  7.    (if
  8.      (or
  9.        (eq AcModelSpace
  10.          (vla-get-ActiveSpace
  11.            (setq doc
  12.              (vla-get-ActiveDocument
  13.                (vlax-get-acad-object)
  14.              )
  15.            )
  16.          )
  17.        )
  18.        (eq :vlax-true
  19.          (vla-get-MSpace doc)
  20.        )
  21.      )
  22.      (vla-get-ModelSpace doc)
  23.      (vla-get-PaperSpace doc)
  24.    )
  25. )        
  26. (if
  27.    (and
  28.      (setq block (GetBlock block))
  29.      (setq *num*
  30.        (1-
  31.          (cond
  32.            (
  33.              (getint
  34.                (strcat "\nSpecify Starting Number <"
  35.                  (itoa
  36.                    (setq *num*
  37.                      (cond ( *num* ) ( 1 ))
  38.                    )
  39.                  )
  40.                  "> : "
  41.                )
  42.              )
  43.            )
  44.            ( *num* )
  45.          )
  46.        )
  47.      )
  48.    )
  49.    (while
  50.      (setq *num* (1+ *num*)
  51.            point (getpoint "\nSpecify Point for Insertion: "))
  52.      
  53.      (if (and (setq obj (InsertBlock space block point)) tag)
  54.        (PutAttValue obj tag (itoa *num*))
  55.      )
  56.    )
  57. )
  58. (princ)
  59. )
  60. (defun PutAttValue ( object tag value )
  61. ;; Lee Mac  ~  05.05.10
  62. (mapcar
  63.    (function
  64.      (lambda ( attrib )
  65.        (and
  66.          (eq tag (vla-get-TagString attrib))
  67.          (vla-put-TextString attrib value)
  68.        )
  69.      )
  70.    )
  71.    (vlax-invoke object 'GetAttributes)
  72. )
  73. value
  74. )
  75. (defun GetBlock ( block )
  76. ;; Lee Mac  ~  05.05.10
  77. (cond
  78.    (
  79.      (not
  80.        (and
  81.          (or block
  82.            (setq block
  83.              (getfiled "Select Block" "" "dwg" 16)
  84.            )
  85.          )
  86.          (or
  87.            (and
  88.              (vl-position
  89.                (vl-filename-extension block) '("" nil)
  90.              )
  91.              (or
  92.                (tblsearch "BLOCK" block)
  93.                (setq block
  94.                  (findfile
  95.                    (strcat block ".dwg")
  96.                  )
  97.                )
  98.              )
  99.            )
  100.            (setq block (findfile block))
  101.          )
  102.        )
  103.      )
  104.     nil
  105.    )
  106.    ( block )
  107. )
  108. )
  109. (defun InsertBlock ( Block Name Point )
  110. (if
  111.    (not
  112.      (vl-catch-all-error-p
  113.        (setq result
  114.          (vl-catch-all-apply (function vla-insertblock)
  115.            (list Block (vlax-3D-point point) Name 1. 1. 1. 0.)
  116.          )
  117.        )
  118.      )
  119.    )
  120.    result
  121. )
  122. )
回复

使用道具 举报

6

主题

20

帖子

14

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 11:37:24 | 显示全部楼层
不完全是我想要的。。。为什么它在计数?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:40:48 | 显示全部楼层
 
伙计,我要看你之前发布的内容——如何更好地编写代码,其中包括一个计数。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 11:17 , Processed in 0.547356 second(s), 72 queries .

© 2020-2025 乐筑天下

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