Tekla Structures there are Locked Object
Блокировка объектов в текле — штука крайне полезная. Можно заморозить дизайн в текущем состоянии и быть уверенным в том, что коллеги в этой части конструкции ничего не поменяют. Это позволяет предотвратить ситуации связанные со случайными изменениями когда, например, в выборку перемещаемых объектов попадают детали из уже закоченных конструкций. От этого едет нумерация объектов, летят чертежи, происходят прочие неприятные вещи.
Однако иногда блокировка сама становится проблемой. Обычно в тех случаях когда приходится переделывать чью-то работу. Тогда назойливое сообщение не дает внести необходимые изменения. К тому же свойства среды нигде явным образом не сообщают о блокировке. Вот об этих случаях и поговорим
Сначала давайте разберемся, что и где можно заблокировать, для наглядности приведу такую схемку:
Итак заблокировать можно практически любой элемент в модели. А так же абстракции более высокого уровня — Сборку, Фазу, Проект.
Чтобы это сделать достаточно установить свойство OBJECT_LOCKED в true.
Вроде звучит просто, но если эти свойства не прописаны в objects.inp — то нигде в интерфейсе теклы вы его не найдете. И это полезно — поскольку позволяет вынести блокировку с уровня рядового инженера на уровень главного конструктора, или архитектора. Т.е. можно выделить возможность блокировать и разблокировать объекты и привязать их к определенной роли, которую так же можно написать. Т.е. не Steel_detailer, а Steel_Chief_Engineer например.
С этим разобрались, теперь уточним, что именно можно блокировать сверху вниз
- Project — всё понятно залоченный проект предотвращает любые изменения в себе.
- Phase — далеко не все применяют фазы с умом и по назначению. Но на самом деле большое количество данных можно вывести на уровень фазы, вместо того чтобы задавать их деталям индивидуально. Опять же атрибуты регламентируются значениями в objects.inp, и если вы не видите сообщения о том что фаза заблокирована, это не значит что она не заблокирована. Впрочем блокировка фазы никак не влияет на сборки и детали в неё включенные. В последних версиях теклы добавилась специальные кнопки в менеджере фаз, которые позволяют блокировать и разблокировать объекты привязанные к фазе.
- Assembly — вот тут, кстати, интересно — в документации явным образом не прописано, что можно блокировать сборки. Оно как бы имеется в виду по умолчанию.
- Part — блокируем отдельный элемент.
- Welds, Bolts, BooleanParts — если какой-то из этих элементов заблокирован (болты, сварка, подрезки) то так же возможности вносить изменения будут ограничины, а сообщение о наличии заблокированных элементов будет всплывать с изрядной регулярностью.
Для работы в модели этот список представляет исчерпывающим. Поправте в комментариях если что-то упустил.
Проблема обрисована, чтобы её решить есть несколько вариантов — во первых выснить, что же именно заблокировано. Это можно сделать с помощью команды Inquire — в пользовательских свойствах заблокированого элемента будет тот самый Locked: true; но искомый объект может скрываться на любом уровне в иерархии. И найти его в некоторых случаях может быть довольно трудоемко.
Чтобы не заниматься этим скучным делом лишний раз, можно воспользоваться скриптом, который разлочит все выделенные объекты.
namespace Tekla.Technology.Akit.UserScript { using TSM = Tekla.Structures.Model; using System; public class Script { public static void Run(Tekla.Technology.Akit.IScript akit) { MessageBox.Show(CAD_TeklaModelObject_UnLock().ToString()); } static int CAD_TeklaModelObject_UnLock() { TSM.UI.ModelObjectSelector selected = new TSM.UI.ModelObjectSelector(); TSM.ModelObjectEnumerator manyO = (selected.GetSelectedObjects() as TSM.ModelObjectEnumerator); int i=0; while (manyO.MoveNext()) { if ((manyO.Current as TSM.ModelObject) != null) { TSM.ModelObject pp = manyO.Current as TSM.ModelObject; pp.SetUserProperty("OBJECT_LOCKED", 0); pp.Modify(); i++; } } var model = new TSM.Model(); model.CommitChanges(); return i; } } }
Главное чтобы все объекты были в выборке — болты, сварка, детали, сборки, и т.п.
Отдельно хочу обратить ваше внимание на Сборки (Assemlby) их тоже можно блокировать. И чтобы их разблокировать их надо выделить именно как сборки.
Tekla 21.1 R10 выдает ошибку в строках 10, 11
ошибка CS0103
The Name «MessageBox» does not exist in the current context
(порядок работы с макросом???
1) выделить все объекты
2) запустить макрос)
Странно. MessageBox живет в using System;
В можно просто поменять строку в методе RUN
Вместо MessageBox.Show(CAD_TeklaModelObject_UnLock().ToString());
оставить только CAD_TeklaModelObject_UnLock();
проверка
Лето отпуск, все такое. )