| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Другие CAD системы > Tekla > Tekla. Open API. Создание пользовательских плагинов и макросов

Tekla. Open API. Создание пользовательских плагинов и макросов

Ответ
Поиск в этой теме
Непрочитано 02.03.2017, 12:58 1 | #1
Tekla. Open API. Создание пользовательских плагинов и макросов
PashaStr
 
инженер-конструктор
 
Минск
Регистрация: 24.04.2011
Сообщений: 320

Вдохновившись фильмами по пользовательским компонентам на ютьюбе уважаемых 100k и andrejjerdna, написал свой небольшой скрипт по прикреплению вертикальной панели-стены к нижней грани плиты перекрытия. В режиме отладки в Visual Studio всё прекрасно работает. Но появилось пару вопросов:
  1. Как закинуть готовый код (в виде dll или exe) в теклу? Интересует именно сам синтаксис в коде (для того чтобы текла "увидела" компонент). Требуется ли делать форму для плагина или допустимо использовать его без вызова формы? Примеры учебных плагинов просто идут все с формами и в лоб как-то не получилось решить вопрос.
  2. Можно ли в таком простом виде перекинуть его в макрос, сохранив функционал? Если да, есть ли у кого-нибудь простой пример макроса с выбором элементов, точек без формы
Код:
[Выделить все]
 
public class pk_Connect
    {        
        public static void WallSlabAttach()
        {
            Picker picker = new Picker();
            Beam panel=picker.PickObject(Picker.PickObjectEnum.PICK_ONE_OBJECT, "Pick PANEL") as Beam;
            double panelZ = panel.StartPoint.Z;
            ContourPlate TopSlab = PickSlab();
            Point TopSlabPoint = TopSlab.Contour.ContourPoints[0] as Point;
            double SlabZBottom = TopSlabPoint.Z-Convert.ToDouble(TopSlab.Profile.ProfileString);
            double HeightWall = SlabZBottom - panelZ;
            panel.Profile.ProfileString=Convert.ToString(HeightWall) +"*100";
            panel.Modify();
                   }
        private static ContourPlate PickSlab()
        {
            Picker picker = new Picker();
            ModelObject mo = picker.PickObject(Picker.PickObjectEnum.PICK_ONE_PART, "Pick a SLAB");
            ContourPlate slab = mo as ContourPlate;
            return slab;
        }
    }
Сам проект VS во вложении

Вложения
Тип файла: rar pk_tekla_1ext_wall_slab_adjust.rar (1.02 Мб, 172 просмотров)


Последний раз редактировалось PashaStr, 02.03.2017 в 13:19.
Просмотров: 42462
 
Непрочитано 02.03.2017, 13:34
1 | #2
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


О пакете с Open API есть примеры плагинов.
Суть в том, что плагин имеет четкую структуру, необходимо соблюдать их логику. Как-то так...
Миниатюры
Нажмите на изображение для увеличения
Название: Скриншот 02-03-2017 133358.png
Просмотров: 1141
Размер:	44.0 Кб
ID:	184493  
andrejjerdna вне форума  
 
Автор темы   Непрочитано 02.03.2017, 13:55
#3
PashaStr

инженер-конструктор
 
Регистрация: 24.04.2011
Минск
Сообщений: 320


Цитата:
Сообщение от andrejjerdna Посмотреть сообщение
О пакете с Open API есть примеры плагинов.
Суть в том, что плагин имеет четкую структуру, необходимо соблюдать их логику. Как-то так...
Примеры я смотрел. Правильно ли понимаю, что для плагинов обязателен интерфейс (форма)?
PashaStr вне форума  
 
Непрочитано 02.03.2017, 13:57
#4
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от PashaStr Посмотреть сообщение
Примеры я смотрел. Правильно ли понимаю, что для плагинов обязателен интерфейс (форма)?
Можно без формы сделать, если ничего в плагине не хотите менять потом.
andrejjerdna вне форума  
 
Автор темы   Непрочитано 02.03.2017, 20:27
#5
PashaStr

инженер-конструктор
 
Регистрация: 24.04.2011
Минск
Сообщений: 320


Цитата:
Сообщение от andrejjerdna Посмотреть сообщение
Можно без формы сделать, если ничего в плагине не хотите менять потом
Решение оказалось значительно проще. Делать динамический плагин мне нет необходимости. Так что просто скомпилировал в exe и добавил как приложение в теклу.
Но после 2 часов колупания в примерах, понял как синтаксис плагинов, так и "смысловую" разницу плагинов и приложений. Так, что спасибо)
PashaStr вне форума  
 
Непрочитано 06.07.2017, 10:31
#6
DonJad


 
Регистрация: 20.12.2005
Murmansk
Сообщений: 106


Можно сделать кнопочную форму, на кнопки забиндить свои методы. Скопилить, оттестировать.
А потом получившийся класс и методы обернуть в Tekla Macro script.

Как это делается можно посмотреть на примере этого скрита

Но логика в целом примитивна, мы внутри

Код:
[Выделить все]
namespace Tekla.Technology.Akit.UserScript
{

}
закидываем наши классы полностью - например форму, или какие то статик классы с нужными методами.

и там же добавляем собственно сам класс скрипта который вызывает нашу форму
Код:
[Выделить все]
	    
public class Script
        {
            public static void Run(Tekla.Technology.Akit.IScript akit)
            {
                Application.EnableVisualStyles();
                Application.Run(new Form1());
            }
        }

Т.е. получается чтото такое:

Код:
[Выделить все]
...
using TSM = Tekla.Structures.Model; 

namespace Tekla.Technology.Akit.UserScript
{
	    public class Script
        {
            public static void Run(Tekla.Technology.Akit.IScript akit)
            {
                Application.EnableVisualStyles();
                Application.Run(new Form1());
            }
        }

    public class Form1 : System.Windows.Forms.Form
    {
       // тут добавляем всё из нашего приложения form1.design.cs + form1.cs
    }
    public static class WhatEver
   {
   }

}
Таким макаром можно конвертировать приложения в макросы, или наоборот, из макроса стырить функционал и добавить в свое приложение.
Ну и главное преимущество в том что макрос автоматом копилится во время исполнения. Соответственно можно не переживать за перекопиляцию при переходе на новую версию теклы.
__________________
Tekla support
DonJad вне форума  
 
Автор темы   Непрочитано 06.07.2017, 10:45
#7
PashaStr

инженер-конструктор
 
Регистрация: 24.04.2011
Минск
Сообщений: 320


DonJad спасибо за ответ. С макросами разобрался уже.
Для форм всё же на мой взгляд поудобнее будет в VS работать на мой взгляд (отладка и т.д.), но макросы для небольшого количества кода одназначно выигрывают перед полноценными приложениями.
PashaStr вне форума  
 
Непрочитано 06.07.2017, 11:22
#8
DonJad


 
Регистрация: 20.12.2005
Murmansk
Сообщений: 106


При отладке приложения и формы без конечно VS никуда.

Но когда всё отлажено и толково работает в производственной среде, то имеет смысл оформить результат в виде макроса, чтобы не возвращаться больше к вопросам связанным с перекомпиляцией приложения под каждую используемую версию.
Да и другим пользователям в таком виде пересылать результат сильно проще - один малюсенький текстовый файл, вместо архива с экзешником дллками.

Чтобы не переживать за то, что исходный код утечет можно применить обсфукацию.
__________________
Tekla support
DonJad вне форума  
 
Автор темы   Непрочитано 06.07.2017, 11:31
#9
PashaStr

инженер-конструктор
 
Регистрация: 24.04.2011
Минск
Сообщений: 320


Цитата:
Сообщение от DonJad Посмотреть сообщение
можно применить обсфукацию.
обсфукация вроде же для dll и exe? или для макросов можно применить?
PashaStr вне форума  
 
Непрочитано 13.04.2018, 16:17
#10
Konstruktiv54


 
Регистрация: 31.01.2007
Новосибирск
Сообщений: 1,040
<phrase 1=


помогите разобраться, как в плагине задать значения параметров по дефолту?
в примерах, есть вот такой метод, но у меня это не работает ((
или надо в форме, для комбобокса какие-то свойства прописывать дополнительно?

Код:
[Выделить все]
private void GetValuesFromDialog()
{
      _Class = _data.Class;

      if (IsDefaultValue(_Class))
           _Class = "4";
}
Konstruktiv54 вне форума  
 
Непрочитано 13.04.2018, 17:25
#11
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от Konstruktiv54 Посмотреть сообщение
помогите разобраться, как в плагине задать значения параметров по дефолту?
в примерах, есть вот такой метод, но у меня это не работает ((
или надо в форме, для комбобокса какие-то свойства прописывать дополнительно?

Код:
[Выделить все]
private void GetValuesFromDialog()
{
      _Class = _data.Class;

      if (IsDefaultValue(_Class))
           _Class = "4";
}
class вроде должен быть int, а не string, если ввиду имеется именно цвет объекта.
andrejjerdna вне форума  
 
Автор темы   Непрочитано 13.04.2018, 17:47
#12
PashaStr

инженер-конструктор
 
Регистрация: 24.04.2011
Минск
Сообщений: 320


Я бы предположил, что так более правильно
Код:
[Выделить все]
private void GetValuesFromDialog()
{
      _Class = _data.Class;

      if (IsDefaultValue(_Class))
          { 
          _Class = "4";
          }
}
PashaStr вне форума  
 
Непрочитано 13.04.2018, 17:49
#13
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


_Class = "4"; в скобки брать не обязательно в данном случае.
andrejjerdna вне форума  
 
Непрочитано 13.04.2018, 18:32
#14
Konstruktiv54


 
Регистрация: 31.01.2007
Новосибирск
Сообщений: 1,040
<phrase 1=


Цитата:
class вроде должен быть int, а не string, если ввиду имеется именно цвет объекта.
не, класс - точно стринг. ладно, буду дальше воевать )
Konstruktiv54 вне форума  
 
Непрочитано 13.04.2018, 18:49
#15
nieghbor


 
Регистрация: 08.09.2015
Сообщений: 37


Цитата:
Сообщение от Konstruktiv54 Посмотреть сообщение
не, класс - точно стринг. ладно, буду дальше воевать )
класс (цвет) - int. Если, конечно, имеется ввиду именно цвет в этом случае.
nieghbor вне форума  
 
Непрочитано 13.04.2018, 18:55
#16
Konstruktiv54


 
Регистрация: 31.01.2007
Новосибирск
Сообщений: 1,040
<phrase 1=


может я куда-то не туда смотрю...ну вроде это тот самый класс, который отвечает за цвет.
Offtop: о! 888 сообщение ))
Миниатюры
Нажмите на изображение для увеличения
Название: 2018-04-13_22-54-23.png
Просмотров: 435
Размер:	17.3 Кб
ID:	201276  
Konstruktiv54 вне форума  
 
Непрочитано 13.04.2018, 19:15
#17
nieghbor


 
Регистрация: 08.09.2015
Сообщений: 37


Свойство "class" для детали должно иметь значение int. Так же и для арматуры.
Хотя, цвет балки к примеру, или жб колонны изменять не пробовал таким способом. Может быть есть различия?
Цвет какого объекта должен меняться?
Миниатюры
Нажмите на изображение для увеличения
Название: 123.jpg
Просмотров: 152
Размер:	56.5 Кб
ID:	201277  

Последний раз редактировалось nieghbor, 13.04.2018 в 19:33.
nieghbor вне форума  
 
Автор темы   Непрочитано 08.09.2018, 09:45
#18
PashaStr

инженер-конструктор
 
Регистрация: 24.04.2011
Минск
Сообщений: 320


Добрый день! Появилась задача "повесить" вызов MessageDialog на сочетание клавиш. Записал макрос встроенным менеджером макросов и получил такой код (см. ниже). Но вызов результирующего макроса, который должен включать данную панель просто не срабатывает, панель не появляется. Может быть кто-нибудь сталкивался с такими проблемами и может подсказать решение?

Код:
[Выделить все]
#pragma warning disable 1633 // Unrecognized #pragma directive
#pragma reference "Tekla.Macros.Akit"
#pragma reference "Tekla.Macros.Runtime"
#pragma warning restore 1633 // Unrecognized #pragma directive

namespace UserMacros {
    public sealed class Macro {
        [Tekla.Macros.Runtime.MacroEntryPointAttribute()]
        public static void Run(Tekla.Macros.Runtime.IMacroRuntime runtime) {
            Tekla.Macros.Akit.IAkitScriptHost akit = runtime.Get<Tekla.Macros.Akit.IAkitScriptHost>();
            akit.CheckValue("MessageDialog", 1);
        }
    }
}
PashaStr вне форума  
 
Непрочитано 22.12.2018, 15:35
#19
Konstruktiv54


 
Регистрация: 31.01.2007
Новосибирск
Сообщений: 1,040
<phrase 1=


Добрый день.
Может кто-нибудь объяснить как им образом class Beam, получает type?
Одно понятно, если второй узел имеет точно такие же координаты X, Y как и первый, то type = Beam.BeamTypeEnum.COLUMN.
а какие условия должны быть выполнены, что бы получить тип Pad_footing или Panel?

Последний раз редактировалось Konstruktiv54, 22.12.2018 в 15:47.
Konstruktiv54 вне форума  
 
Непрочитано 22.12.2018, 17:46
#20
art_rrc


 
Регистрация: 28.01.2013
Минск
Сообщений: 379


Цитата:
Сообщение от Konstruktiv54 Посмотреть сообщение
а какие условия должны быть выполнены, что бы получить тип Pad_footing или Panel?
Материал должен быть бетон, как минимум
art_rrc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Другие CAD системы > Tekla > Tekla. Open API. Создание пользовательских плагинов и макросов

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание просечно-вытяжного листа в Tekla. safronsafronov Tekla 8 21.04.2016 03:26
AUTOCAD 2010 перестал переключаться в многооконный режим. Проблемы с переменными Андрей Х. AutoCAD 24 27.05.2015 10:17
Acaddoc.lsp - насколько вредный Alexander88 LISP 1 10.06.2014 09:29
Автозагрузка приложения до загрузки чертежа Ax3 Программирование 14 15.02.2008 23:29