2D схемы на листе.

Главная Форумы Python Помогите с питон кодом 2D схемы на листе.

Просмотр 15 сообщений - с 1 по 15 (из 32 всего)
  • Автор
    Сообщения
  • #3658 Score: 0
    ИваСерж
    Хранитель
    134 pts

    Здравствуйте,
    Удивлён, что до сих пор на форуме не поднимался вопрос о создании 2Д схем на основании модели.
    Известная проблема Ревита – Результаты электрических рассчётов нельзя использовать в пользовательских (ГОСТовских) схемах. Результат вычислений можно посмотреть только в табличном виде.
    Судя по анонсу некоторых курсов, вполне возможно взять внутренние параметры и переприсвоить их семейству-схеме, но этому учат за деньги. Предлагаю рассекретить этот процесс на базе форума, поскольку это очень важно и сильно поможет в работе всем электрикам.

    Итак задача:
    1. Получить электрические данные по имени щита. Количество групп в щите, мощность и ток каждой группы.
    2. Разместить на листе семейства аннотаций схем. Для каждой группы своё семейство + семейство с описанием параметров щита в целом (Общая нагрузка, Общий ток).
    3. В параметры аннотационных семейств вписать электрические встроенные параметры.

    Как получать электрические встроенные параметры я, думаю, разберусь.
    А вот как разместить семейства на листе? Нодов я не нашел (можно размещать только виды). Конечно, можно размещать схемы где-то в модели, за пределами архитектуры, но я считаю это не корректным.

    #3659 Score: 0
    Legantmar
    Хранитель
    475 pts
    #3660 Score: 0
    Alexandr Popov
    Модератор
    44 pts

    Я могу автоматизировать то, что сделано хотя бы один раз вручную. Мы можем по результату анализа модели размещать на 2д виде аннотации, т.е. строить схемы. Но мне нужны семейства которые размещать и правила размещения. Так же модель, которую анализировать.

    #3661 Score: 0
    ИваСерж
    Хранитель
    134 pts

    Спасибо за ответы. Сейчас копаюсь и разбираюсь.
    Александр, На данный момент меня интересует не столько готовый скрипт, сколько желание научиться делать скрипты самому, поэтому надеюсь на помощь в коде
    Теперь отвечаю на вопросы:
    1. К сожалению, не вижу смысла рисовать схемы средствами Динамо. Готовые семейства аннотации.
    На данный момент я делаю схемы в нескольких стилях. Например, рассчётная-схема для проекта, схема-наклейка на щит, кабельный журнал (который по сути, та же схема, только в табличном виде).
    Возможно, как-нибудь потом перерисую всё это линиями Динамо, но пока нет времени.
    2. Правила размещения разные. Лично я не заморачивался бы именно правилами размещения. Если я буду знать, как вставить одно семейство на лист, то я вставлю и все остальные, задавая шаг отступа.
    Картинку того, что я примерно хочу, прикладываю. К сожалению, пока это для меня самый большой вопрос, поскольку я не нашел информации о том, как работать с листами. Тем не менее, я уже смогу вставить нужные мне семейства в модель, а потом копипастнуть это всё вручную на лист. Уже значительно меньше работы, чем вручную. Да и в ручную я часто допускаю опечатки при переносе информации из таблички в готовое семейство-схему.
    3. Конкретная модель тоже на данный момент не важна. Для меня важно понимание, как я могу добраться до внутренностей Ревита и вычленить оттуда любую нужную мне информацию. В данном случае, я хочу добраться до библиотеки RevitAPI.dll, залезть в Revit.DB.Electrical в класс ElectricalSystem и считывать оттуда информацию о состоянии переменных. На данный момент я этим и занимаюсь. Если самому добраться не получиться – буду спрашивать.

    #3663 Score: 0
    Vladimir
    Участник
    13 pts

    Проектный портал, например, реализовал это как-то так. Без апи не обошлось.

     

    #3664 Score: 0
    ИваСерж
    Хранитель
    134 pts

    Vladimir, как я говорил в первом посте, я знаю, что такое возможно. Однако Вы не приводите реализацию скрипта, а без реализации даже самые крутые показательные видео похожи на бесполезную рекламу.
    Если хотите помочь, то запишите, пожалуйста, какой-нибудь урок по теме, поскльку вопрос очень востребован.
    Повторюсь, что на данный момент у меня не решен единственный вопрос – размещение семейств с параметрами на листе.

    #3665 Score: 0
    Vladimir
    Участник
    13 pts

    ИваСерж, если бы я что-то понимал в электрике…у меня в планах есть решение этих вопросов по электрике и слаботочке, но пока совсем нет на это времени.

    #3666 Score: 0
    Артем Манютин
    Участник
    3 pts

    Соглашусь с ИваСерж. Здесь вопрос больше в том как разместить на Печатном листе элементы по определенным правилам.

     

    #3667 Score: 0
    Alexandr Popov
    Модератор
    44 pts

    Я бы предложил размещать схемы на чертежном виде или легенде, а затем уже этот вид размещать на листе

    #3668 Score: 0
    ИваСерж
    Хранитель
    134 pts

    Alexandr Popov, буду искать в этом направлении.
    Насколько я понимаю, посредсвом “чистого” Динамо вставить что-либо в легенду не получиться.
    На международном форуме у человека не получилось, а ответ он так и не получил… -detail-conponent-types-in-a-legend
    Сейчас попробую разобраться в ноде FamilyInstanseByView. У меня есть подозрение, что для вставки семейства в легенду нужно использовать
    другой метод, чем для вставки семейства в 3Д пространство.
    Может, у кого-то уже есть решение какой коммандой вставлять?

    #3669 Score: 0
    ИваСерж
    Хранитель
    134 pts

    Судя по форумам и по документации Ревит АПИ я не смог найти метод, которым я могу создать новое семейство в Легенде или Чертежном Виде.
    По записи в блоге Джереми Таммик от 2010 года элементы на Легенде можно только копировать.
    Я вижу два пути решения:
    1. Сделать Легенду, повкидывать туда все нужные семейства (3х ф. Автомат, 1ф. Автомат, 1ф. Узо, Контактор и т.п.). По условию выбирать, какое семейство в какую точку копировать, После того, как схема сформируется, удалить или скрыть семейства, которые использовались для копирования.
    2. Создать вид, который находится вне модели (например, выше уровня кровли или ниже уровня подвала), в этот вид вставлять схемы. Динамо с задачей должно справиться.
    Поскольку и то и то решение это “костыль”, то сейчас пойду по пути №2, который мне понятен. Метод №1 интересней, но, к сожалению, я пока его не осилю.

    #3670 Score: 0
    ИваСерж
    Хранитель
    134 pts

    Нужна помощь.
    1. Не могу понять, как работает GetParameterValueByName.
    Из элемента ElectricalSystems мне надо извлечь параметр “Сечение” посредством Питона. Динамо спокойно извлекает. Что я делаю не так? (см. строку 17)

    2. На вход поступает ElectricalSystem. В этой системе есть вложенный класс WireType, в котором есть Insulation. Я почему-то не могу получить имя изоляции.

    #3671 Score: 0
    Khasan Mamaev
    Модератор
    187 pts

    в коде бардак, elementListSection к чему сделан пустым списком изначально, если он является просто промежуточной переменной в цикле? лишняя скобка в последней строке цикла. Метод для получения параметра записан неверно. Unwrap для провода зачем нужен? Если нетрудно, поделись файлом для примера, а то у меня ничего электрического нет. Опытным путем мной было установлено, что получать параметры методом библиотеки RevitNods можно вот так

    лучше конечно освоить метод получения параметров стандартными средствами Ревит АПИ, на форуме об этом достаточно информации

    #3673 Score: 0
    Alexandr Popov
    Модератор
    44 pts

    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+1

    TransactionManager.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

     

    Нормально вставляется и на легенду и на чертежный вид.

    #3674 Score: 0
    Alexandr Popov
    Модератор
    44 pts

    И семейства 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

Просмотр 15 сообщений - с 1 по 15 (из 32 всего)
  • Для ответа в этой теме необходимо авторизоваться.