Корректировка размеров
Главная › Форумы › Задать вопрос › Корректировка размеров
- В этой теме 19 ответов, 6 участников, последнее обновление 5 лет, 2 месяца назад сделано yuriy.
-
АвторСообщения
-
Всем доброго времени суток. Думаю все кто работают в Ревит сталкивались с одним его минусом, то что размеры не растаскиваются по умолчанию. То есть имея много размеров тонких конструкций.
В справке у класса Dimension Есть параметр который можно вроде как устанавливать,
но на одном забугорном форуме однозначно сказали что, мол нельзя менять положение текста размеров, правда как я понял имелись в виду только те что уже проставлены. PS Там этот вопрос обсуждаля ещё в 2012 году может сейчас все и не так)
Но может есть возможность задавать этот параметр до его простановки?
В общем если кому то интересно, то такая возможность имеется, и размерный текст можно двигать програмно. Если кому интересно то вот код макроса… Он на 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 )
Надо! Ещё как надо. Как узнал сегодня вечером, что завтра к обеду за час надо тыщу с хвостом размеров выдать, сразу вспомнил где видел подобное ) Вот только на питон так просто не переведу.
АлександрУчастникА можно что-то подобное для оборудования сделать? чтобы размеры до элемента от стены получить?
Можно, во всяком случае не вижу никаких ограничений для такой реализации, хотя мало ли)) Иногда простое действие приходится реализовывать с помощью таких костылей, что мама не горюй)
можно еще посмотреть эти скрипты:
Авторазмер между осей и проемами шахт Auto dimension grids and shaft
Товарищ kisli, а как Вы настроили правило разноса размеров в разные стороны?
В каждом экземпляре объекта Dimension есть параметр TextPosition и если цепочка то нужно работать с DimensionSegment, собственно если значение размера меньше определенного значения, то делаете смещение параметра TextPosition
Ещё раз доброго. Таки перепиливаю ваш скрипт в питоне и с DimensionSegment и TextPosition разобрались. Интересует ещё вот какой вопрос, у вас на видео, при запуске скрипта происходит выбор элементов рамкой, так понимаю это PickElementsByRectangle Method, но вот в чём вопрос, при создании размера у него же в задаваемых параметрах должна быть линия, по которой этот размер создаётся. Получается можно как-то получить геометрию этой рамки, и на основании её сгенерировать линию? Не могу найти, как эту геометрию получить. Или же у вас там как-то по другому?
Выложите пожалуйста скрипт. Давно интересует эта тема
Помогите собрать решение
/*
* Created by SharpDevelop.
* User: user
* Date: 23.08.2019
* Time: 15:05
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;
using System.Collections.Generic;
using System.Linq;namespace test
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
[Autodesk.Revit.DB.Macros.AddInId(“2453F3E5-7147-4793-949F-4CA4035A27B2″)]
public partial class ThisApplication
{
private void Module_Startup(object sender, EventArgs e)
{}
private void Module_Shutdown(object sender, EventArgs e)
{}
public void DimText(){
Document doc = this.ActiveUIDocument.Document;
//Application app = this.Application;
UIDocument uidoc = new UIDocument(doc);
//Выбираес размеры
IList<Element> 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();
}
}#region Revit Macros generated code
private void InternalStartup()
{
this.Startup += new System.EventHandler(Module_Startup);
this.Shutdown += new System.EventHandler(Module_Shutdown);
}
#endregion
}
}Выдает ошибку:
Имя “data” отсутствует в текущем контексте (CS0103)
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.