Корректировка размеров

Главная Форумы Задать вопрос Корректировка размеров

В этой теме 12 ответов, 5 участников, последнее обновление  Alex Babinoff 2 года/лет, 6 мес. назад.

Просмотр 13 сообщений - с 1 по 13 (из 13 всего)
  • Автор
    Сообщения
  • #4683 Score: 1

    kisli
    Участник
    16 pts

    Всем доброго времени суток. Думаю все кто работают в Ревит сталкивались с одним его минусом, то что размеры не растаскиваются по умолчанию. То есть имея много размеров тонких конструкций.

     

    В справке у класса Dimension Есть параметр который можно вроде как устанавливать, 

    но на одном забугорном форуме однозначно сказали что, мол нельзя менять положение текста размеров, правда как я понял имелись в виду только те что уже проставлены. PS Там этот вопрос обсуждаля ещё в 2012 году может сейчас все и не так)

    Но может есть возможность задавать этот параметр до его простановки?

     

     

    #4688 Score: 2

    kisli
    Участник
    16 pts

    В общем если кому то интересно, то такая возможность имеется, и размерный текст можно двигать програмно. Если кому интересно то вот код макроса… Он на C# но думаю все всем понятно, и при желании его можно к питону в легкую запилить, и наверное в динамо)

    
    public void DimText()
    {
    Document doc = this.ActiveUIDocument.Document;
    //Application app = this.Application;
    UIDocument uidoc = new UIDocument(doc);
    //Выбираес размеры
    IList elementList = uidoc.Selection.PickElementsByRectangle();
    
    using (Transaction t = new Transaction(doc,"Move dim text"))
    {
    t.Start();
    //проходимся по каждому размеру
    foreach (Dimension element in elementList)
    {
    //если количество сегментов больше 1 то работаем с каждым сегментом по отдельности
    if (element.NumberOfSegments>1)
    {
    foreach (DimensionSegment S in element.Segments)
    {
    data+=S.ValueString+Environment.NewLine;
    S.TextPosition=new XYZ(S.TextPosition.X+1,S.TextPosition.Y + 1, 0);
    }
    }
    //Если 1 то с самим размером
    else
    element.TextPosition=new XYZ(element.TextPosition.X+1,element.TextPosition.Y + 1, 0);
    }
    t.Commit();
    }
    }
    
    

    Надо бы еще допилить фильтры, чтоб он не редактировал размеры больше определенного значения, и настроить правила разноса и можно сделать не хуже чем в в Allplan )

     

    #4692 Score: 10

    kisli
    Участник
    16 pts

    В общем такая штука получилась, иногда глючит но жизнь облегчает, если кому то надо обращайтесь)

    #4693 Score: 1

    Legantmar
    Хранитель
    464 pts

    круто, молодец!

    #4707 Score: 0

    Alex Babinoff
    Модератор
    14 pts

    Надо! Ещё как надо. Как узнал сегодня вечером, что завтра к обеду за час надо тыщу с хвостом размеров выдать, сразу вспомнил где видел подобное ) Вот только на питон так просто не переведу.

    #4716 Score: 0

    Александр
    Участник

    А можно что-то подобное для оборудования сделать? чтобы размеры до элемента от  стены получить?

    #4717 Score: 0

    kisli
    Участник
    16 pts

    Можно, во всяком случае не вижу никаких ограничений для такой реализации, хотя мало ли)) Иногда простое действие приходится реализовывать с помощью таких костылей, что мама не горюй)

    #4718 Score: 1

    Legantmar
    Хранитель
    464 pts
    #4749 Score: 0

    ent1g
    Участник
    8 pts

    Товарищ kisli, а как Вы настроили правило разноса размеров в разные стороны?

    #4751 Score: 0

    kisli
    Участник
    16 pts

    В каждом экземпляре объекта Dimension есть параметр TextPosition  и если цепочка то нужно работать с DimensionSegment, собственно если значение размера меньше определенного значения, то делаете смещение параметра TextPosition

     

     

    #4837 Score: 0

    Alex Babinoff
    Модератор
    14 pts

    Ещё раз доброго. Таки перепиливаю ваш скрипт в питоне и с DimensionSegment и TextPosition разобрались. Интересует ещё вот какой вопрос, у вас на видео, при запуске скрипта происходит выбор элементов рамкой, так понимаю это PickElementsByRectangle Method, но вот в чём вопрос, при создании размера у него же в задаваемых параметрах должна быть линия, по которой этот размер создаётся. Получается можно как-то получить геометрию этой рамки, и на основании её сгенерировать линию? Не могу найти, как эту геометрию получить. Или же у вас там как-то по другому?

    #4838 Score: 1

    kisli
    Участник
    16 pts

    По другому, я нахожу центральную точку стены, и от ней строю перпендикуляр произвольной длинны, там важно направление, это и есть та линия что я использую в размерах

    #4842 Score: 1

    Alex Babinoff
    Модератор
    14 pts

    Вот как-то так это получилось в динамо и питоне:

    Наверняка можно сделать всё целиком в одном питон скрипте, но мой уровень до такого не дотягивает. Потому начальная фильтрация элементов в динамо, потом уже построение размера питоном, а потом его выравнивание вторым питоном.

     

Просмотр 13 сообщений - с 1 по 13 (из 13 всего)

Для ответа в этой теме необходимо авторизоваться.