kisli
Ответы в темах
-
АвторСообщения
-
В общем если кому то интересно, то такая возможность имеется, и размерный текст можно двигать програмно. Если кому интересно то вот код макроса… Он на 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 )
По сравнению с 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); }
-
АвторСообщения