Lisp动态块(&D)
我一直在寻找这样的代码。使用lisp,我希望插入一个动态块,自动选择数据库的拉伸夹点&当lisp完成时,数据库将爆炸。 我知道如何插入,但不知道插入后如何选择动态夹点。这就是我真正想要的 不知道该怎么做,或者是否可以做到,但是否需要使用动态块?您可以只编写一个lisp例程来绘制所需内容。如果你贴出这个帖子,也许我会更清楚你想要实现什么。我编写了lisp例程来从一个点到另一个点绘制楼板托梁,并能够输入高度。如果你贴block,很乐意帮忙。 我不太确定使用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)))
我正在尝试阵列数据库。我和只知道基本Autocad命令的人一起工作。我试图获得一些视觉效果,这就是为什么我使用动态块中的动态块。这样他们就可以看到街区要走多远。当他们完成切割后,只要把它炸开,一切就会恢复正常。
样本。图纸 这可能会给你一些思考的食物:
(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.
)
)
我不知道您试图填充的标记的名称,因此我无法继续使用此代码。 我想用lisp排列块。当你有一个很长的跨度时,上面的代码可能会变得乏味。动态块位于上面的dwg中。块名称:面板 上面的更新代码-可以将其放入数组中:
(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
)
)
不完全是我想要的。。。为什么它在计数?
伙计,我要看你之前发布的内容——如何更好地编写代码,其中包括一个计数。
页:
[1]
2