Tekla Structures there are Locked Object

Tekla Structures: There are locked objects, operation could not be performed

Блокировка объектов в текле — штука крайне полезная. Можно заморозить дизайн в текущем состоянии и быть уверенным в том, что коллеги в этой части конструкции ничего не поменяют. Это позволяет предотвратить ситуации связанные со случайными изменениями когда, например, в выборку перемещаемых объектов попадают детали из уже закоченных конструкций. От этого едет нумерация объектов, летят чертежи, происходят прочие неприятные вещи.

Однако иногда блокировка сама становится проблемой. Обычно в тех случаях когда приходится переделывать чью-то работу. Тогда назойливое сообщение не дает внести необходимые изменения. К тому же свойства среды нигде явным образом не сообщают о блокировке. Вот об этих случаях и поговорим

Сначала давайте разберемся, что и где можно заблокировать, для наглядности приведу такую схемку:

Tekla_Structures_ThereAreLockedObjects_LockedHierarchy Phase, Assembly, Part, Bolt, Weld locked

Итак заблокировать можно практически любой элемент в модели. А так же абстракции более высокого уровня — Сборку, Фазу, Проект.

Чтобы это сделать достаточно установить свойство 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 Structures Select Assemblies