Okay here's hafl of the idea Woodman78, [Up to the point where i scratch my head and wondering what the radio buttons are for]
Redefine your DBlock and remove all Default values.
Re-write the way the program select the DBlocks
For now I grayed out Apply to All Layout [as of this time]
The code to include the ff LM routines [You know where to find this] http://www.lee-mac.com/dynamicblockfunctions.html
LM:GetVisibilityState
LM:SetVisibilityState
LM:GetVisibilityParameterName
and pBe's [included in the post]
_AttFunc
_PutValtoVar
_AssignVal
_ReduceList
Lisp Code
Code:
(defun c:attab12 ( / bn Adoc Layt BlkColl RevList)
(setq bn "rev-box" Visname "Visibility1")
(setq aDoc (vla-get-ActiveDocument (vlax-get-acad-object))
Layt (vla-get-layouts aDoc))
(setq BlkColl nil lytn (vla-get-name (vla-get-ActiveLayout aDoc)))
(if (foreach layoutname (layoutlist)
(vlax-for itm (vlax-get (vla-item Layt layoutname) 'Block)
(if (and
(eq (vla-get-ObjectName itm) "AcDbBlockReference")
(vlax-property-available-p itm 'effectivename)
(eq (vla-get-EffectiveName itm) bn)
(eq (LM:GetVisibilityParameterName itm) Visname)
)
(setq BlkColl
(cons (list layoutname
(LM:GetVisibilityState
itm)
itm)
BlkColl)))))
(ddisplay lytn BlkColl)
)
)
(defun ddisplay (clay lst / dcl_id RevList ByList DateList DescList
DescList RButtons ATTData NewVal VisState RunHere)
(setq RevList '("L1-REV" "L2-REV" "L3-REV" "L4-REV" "L5-REV"
"L6-REV" "L7-REV" "L8-REV" "L9-REV")
ByList '("L1-BY" "L2-BY" "L3-BY" "L4-BY" "L5-BY" "L6-BY"
"L7-BY" "L8-BY" "L9-BY")
DateList '("L1-DATE" "L2-DATE" "L3-DATE" "L4-DATE" "L5-DATE"
"L6-DATE" "L7-DATE" "L8-DATE" "L9-DATE")
DescList '("L1-DESCRIPTION" "L2-DESCRIPTION" "L3-DESCRIPTION" "L4-DESCRIPTION"
"L5-DESCRIPTION" "L6-DESCRIPTION" "L7-DESCRIPTION" "L8-DESCRIPTION"
"L9-DESCRIPTION")
RButtons '("rbl1" "rbl2" "rbl3" "rbl4" "rbl5" "rbl6" "rbl7" "rbl8" "rbl9"))
(setq ATTData (_AttFunc (last (setq CRevB (assoc clay lst))) nil))
(setq dcl_id (load_dialog "attab.dcl"))
(if (not (new_dialog "attab12" dcl_id))
(exit))
(set_tile (if (null rbd) "rbl1" (strcat "rbl" rbd)) "1")
(_AssignVal RevList (_ReduceList "REV" ATTData))
(_AssignVal ByList (_REDUCELIST "BY" ATTData))
(_AssignVal DateList (_REDUCELIST "DATE" ATTData))
(_AssignVal DescList (_REDUCELIST "DESCRIPTION" ATTData))
(action_tile "accept" "(setq NewVal (_PutValtoVar (mapcar 'car ATTData)))
(setq VisState (_PutValtoVar RButtons))
(setq RunHere (get_tile \"rb1\"))
(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
(start_dialog)
(unload_dialog dcl_id)
(if (and NewVal VisState)
(progn
(foreach Blk (if (eq RunHere "1") (list CRevB) lst)
( _AttFunc (last Blk) NewVal)
(LM:SetVisibilityState (last Blk)
(strcat "Line" (setq rbd (itoa (1+ (vl-position "1" (mapcar 'cadr VisState))))))
)))
)
)
Code:
(defun _ReduceList (str lst)
(vl-remove-if-not '(lambda (ly)(wcmatch (car ly) (strcat "*" str)) ) lst))
(defun _AssignVal (lst1 lst2)
(mapcar '(lambda (d1 d2)
(set_tile d1 (cadr d2))) lst1 lst2))
(defun _PutValtoVar (lst_)
(mapcar '(lambda (vr)
(list vr (set (read vr) (get_tile vr))))
lst_)
)
(defun _AttFunc (en lst / vals v)
(mapcar (function (lambda (at)
(setq vals (list (vla-get-tagstring at)(vla-get-textstring at)))
(if (and lst (setq v (assoc (car vals) lst)))
(vla-put-textstring at (cadr v))) vals))
(vlax-invoke (if (eq (type en) 'VLA-OBJECT)
en (vlax-ename->vla-object en)) 'Getattributes)
)
)
REMINDER:
The Only thing I changed on the DCL is capitalize all key values except those "rbl1" "rbl2"...... and "br1" "br2" "accept" cancel"
Try it. HTH
rev-box.dwg <---- modified Dynamic Block
CODE UPDATED
Bookmarks