Denis
Ответы в темах
-
АвторСообщения
-
Попробовал изменить Text Font у элементов внутри семейств, но не получилось. Скрипт меняет параметры, но не получается перезаписать семейства, в которых произведены изменения.
Код:
import clr clr.AddReference("RevitNodes") import Revit clr.ImportExtensions(Revit.Elements) # Import DocumentManager and TransactionManager clr.AddReference("RevitServices") import RevitServices from RevitServices.Persistence import DocumentManager from RevitServices.Transactions import TransactionManager doc = DocumentManager.Instance.CurrentDBDocument # Import RevitAPI clr.AddReference("RevitAPI") import Autodesk from Autodesk.Revit.DB import * import System clr.AddReference('RevitAPIUI') from Autodesk.Revit.UI import * import sys pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib' sys.path.append(pyt_path) class FamilyOption(IFamilyLoadOptions): def OnFamilyFound(self,familyInUse,overwriteParameterValues): overwriteParameterValues = True return True def OnSharedFamilyFound(self, sharedFamily, familyInUse, FamilySource, overwriteParameterValues): overwriteParameterValues = True return True NameOfType = IN[0] result = [] def setWhatYouNeed(d, s): TransactionManager.Instance.ForceCloseTransaction() familyDoc = doc.EditFamily(s) # owner = familyDoc.OwnerFamily ElementTypes = FilteredElementCollector(d).OfClass(ElementType).ToElements() TransactionManager.Instance.EnsureInTransaction(d) for i in ElementTypes: for j in i.Parameters: if j.Definition.Name == "Text Font": i.LookupParameter("Text Font").Set(IN[0]) result.append(i.LookupParameter("Text Font").AsString()) TransactionManager.Instance.TransactionTaskDone() TransactionManager.Instance.ForceCloseTransaction() familyDoc.LoadFamily(doc, FamilyOption()) familyDoc.Close(False) for symbol in IN[1]: setWhatYouNeed(UnwrapElement(symbol).Symbol.Family.Document, UnwrapElement(symbol).Symbol.Family) OUT = result
Сам скрипт:
P.S. Буду рад помощи, если у кого-то есть идеи давайте обсуждать)
Несколько дней назад начал заниматься данной темой. Сейчас все работает (PAS, FAS, Power, PLC). Все логично, но требуется создание дополнительных параметров.
Патч панели используются для RJ45?
Я не проверял ваши скрипты, но, у моей програмки логика простая – создаете класс для каждой панели, после этого каждая цепь находит свобю панель и обритает свой номер. Задает максимальное количество патч портов. После этого переносите параметры с цепи в семейство и делаете теги.
Все намного интереснее, когда делаете автоматику внутри revit, там уже не получится “в лоб”Может быть кому понадобиться – у меня немного другой код для изменения Text Font в проекте (IN[0] – название стиля):
import clr clr.AddReference('RevitAPI') from Autodesk.Revit.DB import * clr.AddReference("RevitServices") import RevitServices from RevitServices.Persistence import DocumentManager from RevitServices.Transactions import TransactionManager from System.Collections.Generic import * doc = DocumentManager.Instance.CurrentDBDocument ElementTypes = FilteredElementCollector(doc).OfClass(ElementType).ToElements() TransactionManager.Instance.EnsureInTransaction(doc) for i in ElementTypes: for j in i.Parameters: if j.Definition.Name == "Text Font": i.LookupParameter("Text Font").Set(IN[0]) TransactionManager.Instance.TransactionTaskDone()
Недавно столкнулся с такой задачей. И самое универсальное, что смогу придумать это доставать из ревита образующие каждой комнаты, а после этого все сводится к простой математической задаче нахождения точки в замкнутом пространстве.
По поводу образующих – советую использовать Faces или Edges. Лично я использовал Edges.
Результатом доволен полностью. -
АвторСообщения