Load this routine in this drawing. Do not run the routine, I already have.
Change a number on the chart.
It should change the totals
Peter Jamtgaard
Code:
(defun C:Riser3 (/ intCount entSelection lstEntity lstObjects objSelection ssSelections )
(setq blnChangeText nil)
(while (setq dprTotal (entsel "\nSelect text for total: "))
(setq strGroup (strcase (substr (getstring "\nEnter Group Letter: ") 1 1)))
(setq objTotal (vlax-ename->vla-object (car dprTotal)))
(vlax-ldata-put objTotal "total" strGroup)
(if (wcmatch (strcase (vla-get-objectname objTotal)) "*TEXT")
(progn
(setq ssSelections (ssget (list (cons 0 "*TEXT")))
lstHandles nil
)
(repeat (setq intCount (sslength ssSelections))
(setq intCount (1- intCount)
entSelection (ssname ssSelections intCOunt)
objSelection (vlax-ename->vla-object entSelection)
lstObjects (cons objSelection lstObjects)
)
(vlax-ldata-put objSelection "item" strGroup)
)
(setObjectReactorRiser lstObjects)
(setq lstObjects nil)
)
)
)
(princ)
)
(defun SetObjectReactorRiser (lstObjects)
(if (not rxnRiser)
(setq rxnRiser (vlr-object-reactor lstObjects "Riser"
'((:vlr-Modified . Riser2)))
rxnComEndRiser (vlr-editor-reactor nil '((:vlr-commandended . Riser3)))
)
(foreach objLayer lstObjects
(vlr-owner-add rxnRiser objLayer)
)
)
)
; Object Reactor
(defun Riser2 (objOwner objReactor lstEntity)
(if (not RerunRiser)
(if (vlax-ldata-get objOwner "item")
(setq blnChangedText 'T)
)
)
)
; Command Ended Reactor
(defun Riser3 (CALL CALLBACK / lstGroups)
(if blnChangedText
(foreach strGroup (getGroupLetters)
(setq RiserRerun 'T)
(setTotal strGroup)
(setq RiserRerun nil)
)
)
(setq blnChangeText nil)
)
(defun getGroupLetters (/ lstGroupLetters strGroupLetter)
(vlax-for objLayout (vla-get-layouts
(vla-get-activedocument
(vlax-get-acad-object)
)
)
(vlax-for objBlock (vla-get-block objLayout)
(if (wcmatch (strcase (vla-get-objectname objBlock)) "*TEXT")
(if (setq strGroupLetter (vlax-ldata-get objBlock "total"))
(if (not (member strGroupLetter lstGroupsLetters))
(setq lstGroupLetters (cons strGroupLetter lstGroupLetters))
)
)
)
)
)
(if lstGroupLetters
(acad_strlsort lstGroupLetters)
)
)
(defun setTotal (strGroup / dblTotal lstObjects objTotal )
(setq dblTotal 0)
(vlax-for objLayout (vla-get-layouts
(vla-get-activedocument
(vlax-get-acad-object)
)
)
(vlax-for objBlock (vla-get-block objLayout)
(if (wcmatch (strcase (vla-get-objectname objBlock)) "*TEXT")
(if (= strGroup (vlax-ldata-get objBlock "item"))
(setq lstObjects (cons objBlock lstObjects))
(if (= strGroup (vlax-ldata-get objBlock "total"))
(setq objTotal objBlock)
)
)
)
)
)
(if (and lstObjects objTotal)
(progn
(foreach objText lstObjects
(setq dblTotal (+ dblTotal (atof (vla-get-textstring objText))))
)
(vla-put-textstring objTotal (itoa (fix dblTotal)))
)
)
)
(defun StartRiser (/ lstObjects)
(vlax-for objLayout (vla-get-layouts
(vla-get-activedocument
(vlax-get-acad-object)
)
)
(vlax-for objBlock (vla-get-block objLayout)
(if (wcmatch (strcase (vla-get-objectname objBlock)) "*TEXT")
(if (setq strGroup (vlax-ldata-get objBlock "item"))
(progn
(setq lstObjects (cons objBlock lstObjects))
)
)
)
)
)
(setObjectReactorRiser lstObjects)
)
(startriser)