Jason Piercey
Usenet Archive
- Joined
- Jun 30, 2003
- Messages
- 868
- Reaction score
- 0
Is there some known problem with (vla-insertBlock)
and mirrored attributes? I am trying to polish up a
routine here and noticed if the selected attributed block is mirrored the newly created blocks attribs are backwards.
; mirrored attributed blocks are still a problem.
(defun c:blockClone (/ ent new p1 ename data old obj)
(setq *doc* (vla-get-activedocument (vlax-get-acad-object))) (while (not (setq ent (entsel "\nselect block to clone: ")))) (while (= "" (setq new (getstring t "\nspecify new block name: ")))) (initget 1) (setq p1 (getpoint "\nspecify insertion point: ")) (setq ename (car ent)) (setq data (entget ename)) (setq old (cdr (assoc 2 data)))
(cond
((cloneBlock old new)
(setq
obj
(vla-insertblock
(if (zerop (currentSpace))
(vla-get-paperspace *doc*)
(vla-get-modelspace *doc*)
)
(vlax-3d-point p1)
new
1 1 1 0
)
)
(vla-put-xscalefactor obj (cdr (assoc 41 data)))
(vla-put-yscalefactor obj (cdr (assoc 42 data)))
(vla-put-zscalefactor obj (cdr (assoc 43 data)))
(vla-put-rotation obj (cdr (assoc 50 data)))
)
(t (princ "\nunable to duplicate block"))
)
(princ)
)
;(cloneBlock "atr-note" "test")
(defun cloneBlock (old new / ename data lst)
(and
(tblsearch "block" old)
(not (tblsearch "block" new))
(setq ename (tblobjname "block" old))
(setq data (entget ename))
(setq data (subst (cons 2 new) (assoc 2 data) data))
(setq lst (nEnts ename "*"))
(setq data (cons data (mapcar 'entget lst)))
(mapcar 'entmake data)
(entmake '((0 . "ENDBLK")))
)
)
; Jason Piercey . June 2nd, 2003
; [ename] - entity name or vla-object - block, insert or polyline ; [filter] - string, re: wcmatch ; return: list of enames or nil ; revised: July 10th, 2003 - accepts ename or vla-object (defun nEnts (ename filter / data ent rtn) (or (= 'ename (type ename)) (setq ename (vlax-vla-object->ename ename)) ) (setq filter (strcase filter)) (while (and ename (setq ename (entnext ename))) (setq data (entget ename)) (setq ent (cdr (assoc 0 data))) (if (wcmatch ent filter) (setq rtn (cons ename rtn)) ) (if (= "SEQEND" ent) (setq ename nil)) ) (reverse rtn)
)
; determine which space is active
; return: integer
; 1 - model space
; -1 - floating model space
; 0 - paper space
(defun currentSpace (/ mode)
(setq mode (getvar "tilemode"))
(cond
((and (zerop mode) (<= 2 (getvar "cvport"))) -1)
(t mode)
)
)
and mirrored attributes? I am trying to polish up a
routine here and noticed if the selected attributed block is mirrored the newly created blocks attribs are backwards.
; mirrored attributed blocks are still a problem.
(defun c:blockClone (/ ent new p1 ename data old obj)
(setq *doc* (vla-get-activedocument (vlax-get-acad-object))) (while (not (setq ent (entsel "\nselect block to clone: ")))) (while (= "" (setq new (getstring t "\nspecify new block name: ")))) (initget 1) (setq p1 (getpoint "\nspecify insertion point: ")) (setq ename (car ent)) (setq data (entget ename)) (setq old (cdr (assoc 2 data)))
(cond
((cloneBlock old new)
(setq
obj
(vla-insertblock
(if (zerop (currentSpace))
(vla-get-paperspace *doc*)
(vla-get-modelspace *doc*)
)
(vlax-3d-point p1)
new
1 1 1 0
)
)
(vla-put-xscalefactor obj (cdr (assoc 41 data)))
(vla-put-yscalefactor obj (cdr (assoc 42 data)))
(vla-put-zscalefactor obj (cdr (assoc 43 data)))
(vla-put-rotation obj (cdr (assoc 50 data)))
)
(t (princ "\nunable to duplicate block"))
)
(princ)
)
;(cloneBlock "atr-note" "test")
(defun cloneBlock (old new / ename data lst)
(and
(tblsearch "block" old)
(not (tblsearch "block" new))
(setq ename (tblobjname "block" old))
(setq data (entget ename))
(setq data (subst (cons 2 new) (assoc 2 data) data))
(setq lst (nEnts ename "*"))
(setq data (cons data (mapcar 'entget lst)))
(mapcar 'entmake data)
(entmake '((0 . "ENDBLK")))
)
)
; Jason Piercey . June 2nd, 2003
; [ename] - entity name or vla-object - block, insert or polyline ; [filter] - string, re: wcmatch ; return: list of enames or nil ; revised: July 10th, 2003 - accepts ename or vla-object (defun nEnts (ename filter / data ent rtn) (or (= 'ename (type ename)) (setq ename (vlax-vla-object->ename ename)) ) (setq filter (strcase filter)) (while (and ename (setq ename (entnext ename))) (setq data (entget ename)) (setq ent (cdr (assoc 0 data))) (if (wcmatch ent filter) (setq rtn (cons ename rtn)) ) (if (= "SEQEND" ent) (setq ename nil)) ) (reverse rtn)
)
; determine which space is active
; return: integer
; 1 - model space
; -1 - floating model space
; 0 - paper space
(defun currentSpace (/ mode)
(setq mode (getvar "tilemode"))
(cond
((and (zerop mode) (<= 2 (getvar "cvport"))) -1)
(t mode)
)
)