REID7800 发表于 2022-7-6 11:09:17

Lisp动态块(&D)

我一直在寻找这样的代码。使用lisp,我希望插入一个动态块,自动选择数据库的拉伸夹点&当lisp完成时,数据库将爆炸。

REID7800 发表于 2022-7-6 11:14:23

我知道如何插入,但不知道插入后如何选择动态夹点。这就是我真正想要的

Andrew1979 发表于 2022-7-6 11:15:52

不知道该怎么做,或者是否可以做到,但是否需要使用动态块?您可以只编写一个lisp例程来绘制所需内容。如果你贴出这个帖子,也许我会更清楚你想要实现什么。
我编写了lisp例程来从一个点到另一个点绘制楼板托梁,并能够输入高度。如果你贴block,很乐意帮忙。

Lee Mac 发表于 2022-7-6 11:20:57

我不太确定使用LISP选择夹点要实现什么-为什么不手动选择夹点?
 
如果您想修改属性,则需要查看获取动态块属性的代码,我在这里编写了大量代码:
 

;; Retrieves All Properties from a Dynamic Block
;; Args: obj ~ Dynamic Block VLA-Object
;; Returns: ((<property name> <value>) ...)

(defun GetDynProps (obj)
;; Lee Mac~07.04.10
(mapcar
   (function
   (lambda (x / v)
       (list (vla-get-PropertyName x)
             (if (= 8192 (logand 8192 (vlax-variant-type (setq v (vla-get-value x)))))
               (vlax-safearray->list (vlax-variant-value v))
               (vlax-variant-value v)))))
   
   (vlax-invoke obj 'GetDynamicBlockProperties)))

;; Retrieves All Properties from a Dynamic Block
;; Args: obj ~ Dynamic Block VLA-Object
;; Returns: ((<property name> <value>) ...)

(defun GetDynProps (obj)
;; Lee Mac~07.04.10
(mapcar
   (function
   (lambda (x) (list (vla-get-PropertyName x) (vlax-get x 'Value))))

   (vlax-invoke obj 'GetDynamicBlockProperties)))

;; Changes a Dynamic Block Property Value
;; Args: obj~ Dynamic Block VLA-Object
;;       prop ~ Property Name
;;       val~ New Value
;; Returns: New Value (val)

(defun PutDynPropValue (obj prop val)
;; Lee Mac~07.04.10
(mapcar
   (function
   (lambda (x)
       (if (eq (strcase prop) (strcase (vla-get-propertyName x)))
         (vla-put-value x
         (vlax-make-variant val
             (vlax-variant-type (vla-get-value x)))))))

   (vlax-invoke obj 'GetDynamicBlockProperties)) val)

;; Retrieves the Allowed Values for a Specific Property
;; Args: obj~ Dynamic Block VLA-Object
;;       prop ~ Property Name
;; Returns: List of Allowed Values (or nil)

(defun GetPropAllowedValues (obj prop / a)
;; Lee Mac~07.04.10
(mapcar
   (function
   (lambda (x / w)
       (if (eq (strcase prop) (strcase (vla-get-propertyName x)))
         (setq a
         (mapcar
             (function
               (lambda (v)
               (if (= 8192 (logand 8192 (vlax-variant-type v)))
                   (vlax-safearray->list (vlax-variant-value v))
                     (vlax-variant-value v))))
            
             (if (< 0 (vlax-safearray-get-u-bound
                        (setq w (vlax-variant-value
                                  (vla-get-AllowedValues x))) 1))
               
               (vlax-safearray->list w)))))))
   
   (vlax-invoke obj 'GetDynamicBlockProperties)) a)

;; Retrieves the Allowed Values for a Specific Property
;; Args: obj~ Dynamic Block VLA-Object
;;       prop ~ Property Name
;; Returns: List of Allowed Values (or nil)

(defun GetPropAllowedValues (obj prop / a)
;; Lee Mac~07.04.10
(mapcar
   (function
   (lambda (x)
       (if (eq (strcase prop) (strcase (vla-get-propertyName x)))
         (setq a (vlax-get x 'AllowedValues)))))

   (vlax-invoke obj 'GetDynamicBlockProperties)) a)

;; Retrieves the Allowed Values for all Properties
;; Args: obj~ Dynamic Block VLA-Object
;; Returns: ((<property name> (<Allowed Values>)) ...)

(defun GetAllowedValues (obj)
;; Lee Mac~07.04.10
(mapcar
   (function
   (lambda (x / w)
       (list (vla-get-propertyname x)
             (mapcar
               (function
               (lambda (v)
                   (if (= 8192 (logand 8192 (vlax-variant-type v)))
                     (vlax-safearray->list (vlax-variant-value v))
                     (vlax-variant-value v))))

               (if (< 0 (vlax-safearray-get-u-bound
                        (setq w (vlax-variant-value
                                    (vla-get-AllowedValues x))) 1))
               
               (vlax-safearray->list w))))))
   
   (vlax-invoke obj 'GetDynamicBlockProperties)))

;; Retrieves the Allowed Values for all Properties
;; Args: obj~ Dynamic Block VLA-Object
;; Returns: ((<property name> (<Allowed Values>)) ...)

(defun GetAllowedValues (obj)
;; Lee Mac~07.04.10
(mapcar
   (function
   (lambda (x)
       (list (vla-get-propertyname x)
             (vlax-get x 'AllowedValues))))

   (vlax-invoke obj 'GetDynamicBlockProperties)))

REID7800 发表于 2022-7-6 11:23:14

我正在尝试阵列数据库。我和只知道基本Autocad命令的人一起工作。我试图获得一些视觉效果,这就是为什么我使用动态块中的动态块。这样他们就可以看到街区要走多远。当他们完成切割后,只要把它炸开,一切就会恢复正常。
样本。图纸

Lee Mac 发表于 2022-7-6 11:26:48

这可能会给你一些思考的食物:
 

(defun c:InsertBlock ( / block space point )
(vl-load-com)
;; Lee Mac~05.05.10

(setq block nil) ;; Block Name or nil

(setq space
   (if
   (or
       (eq AcModelSpace
         (vla-get-ActiveSpace
         (setq doc
             (vla-get-ActiveDocument
               (vlax-get-acad-object)
             )
         )
         )
       )
       (eq :vlax-true
         (vla-get-MSpace doc)
       )
   )
   (vla-get-ModelSpace doc)
   (vla-get-PaperSpace doc)
   )
)      

(if (setq block (GetBlock block))
   (while
   (setq point
       (getpoint "\nSpecify Point for Insertion: "))
   
   (InsertBlock space block point)
   )
)

(princ)
)

(defun GetBlock ( block )
;; Lee Mac~05.05.10
(cond
   (
   (not
       (and
         (or block
         (setq block
             (getfiled "Select Block" "" "dwg" 16)
         )
         )
         (or
         (and
             (eq "" (vl-filename-extension block))
             (or
               (tblsearch "BLOCK" block)
               (setq block
               (findfile
                   (strcat block ".dwg")
               )
               )
             )
         )
         (setq block (findfile block))
         )
       )
   )
    nil
   )
   ( block )
)
)

(defun InsertBlock ( Block Name Point )
(vla-InsertBlock Block
   (vlax-3D-point Point) Name 1. 1. 1. 0.
)
)

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

REID7800 发表于 2022-7-6 11:28:57

我想用lisp排列块。当你有一个很长的跨度时,上面的代码可能会变得乏味。动态块位于上面的dwg中。块名称:面板

Lee Mac 发表于 2022-7-6 11:33:33

上面的更新代码-可以将其放入数组中:
 

(defun c:InsertBlock ( / block tag space point )
(vl-load-com)
;; Lee Mac~05.05.10

(setq block "PANEL") ;; Block Name or nil

(setq tag nil)   ;; Tag Name or nil

(setq space
   (if
   (or
       (eq AcModelSpace
         (vla-get-ActiveSpace
         (setq doc
             (vla-get-ActiveDocument
               (vlax-get-acad-object)
             )
         )
         )
       )
       (eq :vlax-true
         (vla-get-MSpace doc)
       )
   )
   (vla-get-ModelSpace doc)
   (vla-get-PaperSpace doc)
   )
)      

(if
   (and
   (setq block (GetBlock block))
   (setq *num*
       (1-
         (cond
         (
             (getint
               (strcat "\nSpecify Starting Number <"
               (itoa
                   (setq *num*
                     (cond ( *num* ) ( 1 ))
                   )
               )
               "> : "
               )
             )
         )
         ( *num* )
         )
       )
   )
   )

   (while
   (setq *num* (1+ *num*)
         point (getpoint "\nSpecify Point for Insertion: "))
   
   (if (and (setq obj (InsertBlock space block point)) tag)
       (PutAttValue obj tag (itoa *num*))
   )
   )
)

(princ)
)

(defun PutAttValue ( object tag value )
;; Lee Mac~05.05.10
(mapcar
   (function
   (lambda ( attrib )
       (and
         (eq tag (vla-get-TagString attrib))
         (vla-put-TextString attrib value)
       )
   )
   )
   (vlax-invoke object 'GetAttributes)
)
value
)

(defun GetBlock ( block )
;; Lee Mac~05.05.10
(cond
   (
   (not
       (and
         (or block
         (setq block
             (getfiled "Select Block" "" "dwg" 16)
         )
         )
         (or
         (and
             (vl-position
               (vl-filename-extension block) '("" nil)
             )
             (or
               (tblsearch "BLOCK" block)
               (setq block
               (findfile
                   (strcat block ".dwg")
               )
               )
             )
         )
         (setq block (findfile block))
         )
       )
   )
    nil
   )
   ( block )
)
)

(defun InsertBlock ( Block Name Point )
(if
   (not
   (vl-catch-all-error-p
       (setq result
         (vl-catch-all-apply (function vla-insertblock)
         (list Block (vlax-3D-point point) Name 1. 1. 1. 0.)
         )
       )
   )
   )
   result
)
)

REID7800 发表于 2022-7-6 11:37:24

不完全是我想要的。。。为什么它在计数?

Lee Mac 发表于 2022-7-6 11:40:48

 
伙计,我要看你之前发布的内容——如何更好地编写代码,其中包括一个计数。
页: [1] 2
查看完整版本: Lisp动态块(&D)