2D схемы на листе.
Главная › Форумы › Python › Помогите с питон кодом › 2D схемы на листе.
- В этой теме 31 ответ, 9 участников, последнее обновление 8 лет, 6 месяцев назад сделано Alexandr Popov.
-
АвторСообщения
-
Здравствуйте,
Удивлён, что до сих пор на форуме не поднимался вопрос о создании 2Д схем на основании модели.
Известная проблема Ревита – Результаты электрических рассчётов нельзя использовать в пользовательских (ГОСТовских) схемах. Результат вычислений можно посмотреть только в табличном виде.
Судя по анонсу некоторых курсов, вполне возможно взять внутренние параметры и переприсвоить их семейству-схеме, но этому учат за деньги. Предлагаю рассекретить этот процесс на базе форума, поскольку это очень важно и сильно поможет в работе всем электрикам.Итак задача:
1. Получить электрические данные по имени щита. Количество групп в щите, мощность и ток каждой группы.
2. Разместить на листе семейства аннотаций схем. Для каждой группы своё семейство + семейство с описанием параметров щита в целом (Общая нагрузка, Общий ток).
3. В параметры аннотационных семейств вписать электрические встроенные параметры.Как получать электрические встроенные параметры я, думаю, разберусь.
А вот как разместить семейства на листе? Нодов я не нашел (можно размещать только виды). Конечно, можно размещать схемы где-то в модели, за пределами архитектуры, но я считаю это не корректным.Я могу автоматизировать то, что сделано хотя бы один раз вручную. Мы можем по результату анализа модели размещать на 2д виде аннотации, т.е. строить схемы. Но мне нужны семейства которые размещать и правила размещения. Так же модель, которую анализировать.
Спасибо за ответы. Сейчас копаюсь и разбираюсь.
Александр, На данный момент меня интересует не столько готовый скрипт, сколько желание научиться делать скрипты самому, поэтому надеюсь на помощь в коде
Теперь отвечаю на вопросы:
1. К сожалению, не вижу смысла рисовать схемы средствами Динамо. Готовые семейства аннотации.
На данный момент я делаю схемы в нескольких стилях. Например, рассчётная-схема для проекта, схема-наклейка на щит, кабельный журнал (который по сути, та же схема, только в табличном виде).
Возможно, как-нибудь потом перерисую всё это линиями Динамо, но пока нет времени.
2. Правила размещения разные. Лично я не заморачивался бы именно правилами размещения. Если я буду знать, как вставить одно семейство на лист, то я вставлю и все остальные, задавая шаг отступа.
Картинку того, что я примерно хочу, прикладываю. К сожалению, пока это для меня самый большой вопрос, поскольку я не нашел информации о том, как работать с листами. Тем не менее, я уже смогу вставить нужные мне семейства в модель, а потом копипастнуть это всё вручную на лист. Уже значительно меньше работы, чем вручную. Да и в ручную я часто допускаю опечатки при переносе информации из таблички в готовое семейство-схему.
3. Конкретная модель тоже на данный момент не важна. Для меня важно понимание, как я могу добраться до внутренностей Ревита и вычленить оттуда любую нужную мне информацию. В данном случае, я хочу добраться до библиотеки RevitAPI.dll, залезть в Revit.DB.Electrical в класс ElectricalSystem и считывать оттуда информацию о состоянии переменных. На данный момент я этим и занимаюсь. Если самому добраться не получиться – буду спрашивать.Проектный портал, например, реализовал это как-то так. Без апи не обошлось.
Vladimir, как я говорил в первом посте, я знаю, что такое возможно. Однако Вы не приводите реализацию скрипта, а без реализации даже самые крутые показательные видео похожи на бесполезную рекламу.
Если хотите помочь, то запишите, пожалуйста, какой-нибудь урок по теме, поскльку вопрос очень востребован.
Повторюсь, что на данный момент у меня не решен единственный вопрос – размещение семейств с параметрами на листе.ИваСерж, если бы я что-то понимал в электрике…у меня в планах есть решение этих вопросов по электрике и слаботочке, но пока совсем нет на это времени.
Соглашусь с ИваСерж. Здесь вопрос больше в том как разместить на Печатном листе элементы по определенным правилам.
Я бы предложил размещать схемы на чертежном виде или легенде, а затем уже этот вид размещать на листе
Alexandr Popov, буду искать в этом направлении.
Насколько я понимаю, посредсвом “чистого” Динамо вставить что-либо в легенду не получиться.
На международном форуме у человека не получилось, а ответ он так и не получил… -detail-conponent-types-in-a-legend
Сейчас попробую разобраться в ноде FamilyInstanseByView. У меня есть подозрение, что для вставки семейства в легенду нужно использовать
другой метод, чем для вставки семейства в 3Д пространство.
Может, у кого-то уже есть решение какой коммандой вставлять?Судя по форумам и по документации Ревит АПИ я не смог найти метод, которым я могу создать новое семейство в Легенде или Чертежном Виде.
По записи в блоге Джереми Таммик от 2010 года элементы на Легенде можно только копировать.
Я вижу два пути решения:
1. Сделать Легенду, повкидывать туда все нужные семейства (3х ф. Автомат, 1ф. Автомат, 1ф. Узо, Контактор и т.п.). По условию выбирать, какое семейство в какую точку копировать, После того, как схема сформируется, удалить или скрыть семейства, которые использовались для копирования.
2. Создать вид, который находится вне модели (например, выше уровня кровли или ниже уровня подвала), в этот вид вставлять схемы. Динамо с задачей должно справиться.
Поскольку и то и то решение это “костыль”, то сейчас пойду по пути №2, который мне понятен. Метод №1 интересней, но, к сожалению, я пока его не осилю.Нужна помощь.
1. Не могу понять, как работает GetParameterValueByName.
Из элемента ElectricalSystems мне надо извлечь параметр “Сечение” посредством Питона. Динамо спокойно извлекает. Что я делаю не так? (см. строку 17)2. На вход поступает ElectricalSystem. В этой системе есть вложенный класс WireType, в котором есть Insulation. Я почему-то не могу получить имя изоляции.
в коде бардак, elementListSection к чему сделан пустым списком изначально, если он является просто промежуточной переменной в цикле? лишняя скобка в последней строке цикла. Метод для получения параметра записан неверно. Unwrap для провода зачем нужен? Если нетрудно, поделись файлом для примера, а то у меня ничего электрического нет. Опытным путем мной было установлено, что получать параметры методом библиотеки RevitNods можно вот так
лучше конечно освоить метод получения параметров стандартными средствами Ревит АПИ, на форуме об этом достаточно информацииimport clr
clr.AddReference(‘ProtoGeometry’)
from Autodesk.DesignScript.Geometry import *
clr.AddReference(‘RevitAPI’)
from Autodesk.Revit.DB import *# Import DocumentManager and TransactionManager
clr.AddReference(“RevitServices”)
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager# Import ToDSType(bool) extension method
clr.AddReference(“RevitNodes”)
import Revit
clr.ImportExtensions(Revit.Elements)doc = DocumentManager.Instance.CurrentDBDocument
#The inputs to this node will be stored as a list in the IN variable.
view = UnwrapElement(IN[0])
Text = IN[1]
h = IN[2]
len1 = IN[3]
baseVec = XYZ(1,0,0)
upVec = XYZ(0,1,0)
count = h.Count
Point=[]
for h1 in h:
p1 = XYZ(-50,h1,0)
Point.append(p1)
i=0
TransactionManager.Instance.EnsureInTransaction(doc)
a = FilteredElementCollector(doc,view.Id).OfCategory(BuiltInCategory.OST_TextNotes)
for k in a:
b=UnwrapElement(k).Id
doc.Delete(b)
while i<count:
len=len1[i]*2*0.00328
#Text.Length*0.01
origin = XYZ(Point[i].X*0.00328,Point[i].Y*0.00328,0)
note = doc.Create.NewTextNote(view, origin, baseVec, upVec, len, TextAlignFlags.TEF_ALIGN_CENTER,Text[i]);
i=i+1TransactionManager.Instance.TransactionTaskDone()
#Assign your output to the OUT variable
if count == 0 :
OUT = “Failed to create detail lines.”
else:
OUT = “Successfully created %s textnotes.” % countНормально вставляется и на легенду и на чертежный вид.
И семейства 2д типовой аннотации вставляю и параметры в них заполняю.
import clr
clr.AddReference(‘ProtoGeometry’)
from Autodesk.DesignScript.Geometry import *
clr.AddReference(‘RevitAPI’)
from Autodesk.Revit.DB import *
clr.AddReference(“RevitNodes”)
import Revit
clr.ImportExtensions(Revit.GeometryConversion)# Import DocumentManager and TransactionManager
clr.AddReference(“RevitServices”)
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager# Import ToDSType(bool) extension method
clr.AddReference(“RevitNodes”)
import Revit
clr.ImportExtensions(Revit.Elements)doc = DocumentManager.Instance.CurrentDBDocument
#The inputs to this node will be stored as a list in the IN variable.
dataEnteringNode = IN
point = IN[0]
view = UnwrapElement(IN[1])
fam = UnwrapElement(IN[2])
name = IN[3]
num = IN[4]
TransactionManager.Instance.EnsureInTransaction(doc)
a = FilteredElementCollector(doc,UnwrapElement(view).Id).OfCategory(BuiltInCategory.OST_GenericAnnotation)
for k in a:
b=UnwrapElement(k).Id
doc.Delete(b)
i=0
while i<point.Count:
dl = doc.Create.NewFamilyInstance(point[i],fam,view)
n = dl.LookupParameter(“Имя”).Set(name[i])
n1 = dl.LookupParameter(“Номер”).Set(num[i])
i=i+1
TransactionManager.Instance.TransactionTaskDone()
OUT = dl -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.