kisli

Ответы в темах

Просмотр 5 сообщений - с 1 по 5 (из 5 всего)
  • Автор
    Сообщения
  • #4692 Score: 10
    kisli
    Участник
    16 pts

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

    #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 )

     

    #4661 Score: 1
    kisli
    Участник
    16 pts

    По сравнению с VS есть пара серьезных недочетов, в основном вылеты и нестабильная работа, а так не плохо, есть даже конвертер кода из C# в Python и обратно, плюс работает на прямую, что несомненно удобно при отладке. Если проект разросся до 3+ классов то следует серьёзно подумать о переходе в VS.

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

    
    public void DeleteImportLine()
    {
    UIDocument uidoc = this.ActiveUIDocument;
    Document doc = uidoc.Document;
    //Создаем фильтр для выбора типов линий
    ElementClassFilter filter = new ElementClassFilter(typeof(LinePatternElement));
    
    //Собираем все элементы из документа
    FilteredElementCollector collector = new FilteredElementCollector(doc);
    //Отфильтровываем все что не соответствует фильтру
    collector.WherePasses(filter);
    //Добавляем все в список
    IList allLine = collector.ToElements();
    string data = "";
    //Отфильтровываем все что не начинается на IMPORT
    var delLine = allLine.Where(a => a.Name.ToString().StartsWith("IMPORT")).ToList();
    
    using ( Transaction t = new Transaction(doc, "Delete import lauers") )
    {
    t.Start();
    foreach ( LinePatternElement L in delLine )
    {
    //Удаляем
    ElementId id = L.Id;
    //текст можно отключить, это для контроля
    data += L.Name.ToString() + Environment.NewLine;
    doc.Delete(id);
    
    }
    t.Commit();
    }
    TaskDialog.Show("Line", "Удаленные типы линий: " + Environment.NewLine + data);
    }
    

     

    #4685 Score: 1
    kisli
    Участник
    16 pts

    Вот это мне нравиться, давайте дружить и решать проблемы, а не спорить у кого ботинки удобней!)

    #4838 Score: 1
    kisli
    Участник
    16 pts

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

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