Source code for mastoron.view

import revitron
import mastoron
from revitron import _
from collections import defaultdict
from mastoron.variables import NAME, SCHEME_NAME, VIEWS, MASTORON_VIEWS, MASTORON_COLORSCHEME


[docs]class ElementOverrides: """ Class for handling graphical element overrides. """
[docs] def __init__(self, view, element): """ Inits a new ElementOverrids instance. Args: element (object): A Revit element """ self.overrides = revitron.DB.OverrideGraphicSettings() self.element = element self.id = element.Id self.view = view
[docs] def set(self, color, patternId, overrideCutPattern=True): """ Sets graphical element overrides in the active view. Args: color (int): A list or tuple (r, g, b) pattern (object): An element id of a Revit fill pattern overrideCutPattern (bool, optional): Override cut pattern. Defaults to True. """ patternColor = revitron.DB.Color(color[0], color[1], color[2]) x = 0.7 lineColor = revitron.DB.Color(color[0] * x, color[1] * x, color[2] * x) self.overrides.SetSurfaceForegroundPatternColor(patternColor) self.overrides.SetSurfaceForegroundPatternId(patternId) self.overrides.SetProjectionLineColor(lineColor) if overrideCutPattern: self.overrides.SetCutForegroundPatternColor(patternColor) self.overrides.SetCutForegroundPatternId(patternId) self.view.SetElementOverrides(self.id, self.overrides) return self.element
[docs] def clear(self): """ Clears a graphical element overrides in view. """ self.view.SetElementOverrides((self.id), self.overrides) return self.element
[docs]class AffectedViews: """ Class for handling views affected by mastoron. """ def __init__(self): self.affectedViews = mastoron.ConfigStorage().get( MASTORON_VIEWS, defaultdict())
[docs] def delete(self, colorScheme, viewId): """ Removes an affected view from the revitron DocumentConfigStorage. Args: colorScheme (dict): A mastoron color scheme viewId (object or str): A Revit element id """ del self.affectedViews[colorScheme[NAME]][str(viewId)] if len(self.affectedViews[colorScheme[NAME]]) == 0: del self.affectedViews[colorScheme[NAME]] mastoron.ConfigStorage().set(MASTORON_VIEWS, self.affectedViews)
[docs] def get(self, colorScheme): return self.affectedViews[colorScheme[NAME]]
[docs]class AffectedElements: """ Class for handling elements affected by mastoron. """ def __init__(self): self.affectedViews = mastoron.ConfigStorage().get( MASTORON_VIEWS, defaultdict())
[docs] def get(self, colorScheme, viewId=None): """ Gets all Revit element ids of objects overridden by mastoron. Returns:: If a viewId was provided a list of element ids. if no viewId was provided a dict of view ids with the ids of overridden elements. Args: colorScheme (dict): A mastoron colorScheme viewId (Id or string, optional): A Revit element Id. Defaults to None. Returns: mixed: dict or list """ if not colorScheme[NAME] in self.affectedViews: self.affectedViews[colorScheme[NAME]] = {} schemeViews = self.affectedViews[colorScheme[NAME]] if viewId: if not str(viewId) in schemeViews: schemeViews[str(viewId)] = [] return schemeViews[str(viewId)] else: return schemeViews
[docs] def dump(self, colorScheme, viewId, overriddenElements): """ Saves the colorscheme override information for affected elements to the Revitron document config. Args: colorScheme (dict): A mastoron color scheme viewId (element id or string): A Revit element id overriddenElements (string): A list of Revit element ids """ if not colorScheme[NAME] in self.affectedViews: self.affectedViews[colorScheme[NAME]] = {} overriddenElements = [str(x) for x in set(overriddenElements)] self.affectedViews[colorScheme[NAME]][str(viewId)] = overriddenElements mastoron.ConfigStorage().set(MASTORON_VIEWS, self.affectedViews)
[docs] @staticmethod def purge(view, scheme): """ Deletes all overriddenElements for given color scheme stored in the mastoron config of given view. Args: view (object): A Revit view scheme (dict): A mastoron color scheme """ overriddenElements = AffectedElements.get(view) for id, value in overriddenElements.items(): if value == scheme[NAME]: del overriddenElements[id] AffectedElements.set(view, overriddenElements)
[docs] def delete(self, colorScheme, viewId, elementId): self.affectedViews[colorScheme[NAME]][str(viewId)].remove(str(elementId)) if len(self.affectedViews[colorScheme[NAME]][str(viewId)]) == 0: del self.affectedViews[colorScheme[NAME]][str(viewId)] mastoron.ConfigStorage().set(MASTORON_VIEWS, self.affectedViews)