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

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

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

Ответ
Поиск в этой теме
Непрочитано 02.03.2017, 12:58 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.
Просмотров: 42429
 
Непрочитано 05.02.2019, 10:32
#41
100k

Жалкий инженеришка-проектаст
 
Регистрация: 31.01.2010
Сообщений: 1,986


Цитата:
Сообщение от PashaStr Посмотреть сообщение
тогда уже надо программированием на жизнь зарабатывать, а не раскладкой арматуры
есесна
Цитата:
Сообщение от andrejjerdna Посмотреть сообщение
Это реально наверное. Только надо где-то достаточно большую подборку готового, чтобы программу можно было обучить. Или как-то по другому двигаться?
да, на готовых примерах.

Последний раз редактировалось 100k, 05.02.2019 в 10:37.
100k вне форума  
 
Непрочитано 19.02.2019, 19:33
#42
Konstruktiv54


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


можно как-нибудь через api достучаться до соседней детали, солид ее определить?
myPart.GetSurfaceObjects(); - ноль эмоций, выдает пустоту, кто-нибудь сталкивался?

Последний раз редактировалось Konstruktiv54, 19.02.2019 в 19:51.
Konstruktiv54 вне форума  
 
Непрочитано 19.02.2019, 21:15
#43
Evgeni U

инженер-проектировщик
 
Регистрация: 07.08.2011
Казань
Сообщений: 33


Цитата:
Сообщение от Konstruktiv54 Посмотреть сообщение
можно как-нибудь через api достучаться до соседней детали, солид ее определить?
myPart.GetSurfaceObjects(); - ноль эмоций, выдает пустоту, кто-нибудь сталкивался?
А вы предварительно создали поверхность для myPart?
Evgeni U вне форума  
 
Непрочитано 20.02.2019, 04:27
#44
Konstruktiv54


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


хм...нет не задал, а как это сделать? и как потом применить? .GetSurfaceObjects() - не принимает ни одного аргумента
Konstruktiv54 вне форума  
 
Непрочитано 20.02.2019, 19:56
1 | #45
Evgeni U

инженер-проектировщик
 
Регистрация: 07.08.2011
Казань
Сообщений: 33


Цитата:
Сообщение от Konstruktiv54 Посмотреть сообщение
хм...нет не задал, а как это сделать? и как потом применить? .GetSurfaceObjects() - не принимает ни одного аргумента
SurfaceObjects - это обработка поверхности https://teklastructures.support.tekl...tment_to_parts

Для работы просто с гранями детали - myPart.GetSolid() -> mySolid.GetFaceEnumerator()
Evgeni U вне форума  
 
Непрочитано 20.02.2019, 20:02
#46
Konstruktiv54


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


ааа...понятно, а я уже было обрадовался, когда нашел GetSurfaceObjects, думал он присоединенные к поверхности соседние объекты находит ))
Part.GetSurfaceObjects - Method Returns an enumerator of all the connected surface objects.
Konstruktiv54 вне форума  
 
Непрочитано 20.02.2019, 20:06
1 | #47
Evgeni U

инженер-проектировщик
 
Регистрация: 07.08.2011
Казань
Сообщений: 33


Цитата:
Сообщение от Konstruktiv54 Посмотреть сообщение
ааа...понятно, а я уже было обрадовался, когда нашел GetSurfaceObjects, думал он присоединенные к поверхности соседние объекты находит ))
Это только через костыли.
Evgeni U вне форума  
 
Непрочитано 21.02.2019, 09:44
1 | #48
100k

Жалкий инженеришка-проектаст
 
Регистрация: 31.01.2010
Сообщений: 1,986


Проще всего сначала проверить пересечения тел деталей через OBB. Если нет пересечения OBB деталей значит они не контачат между собой. Если пересечения OBB есть, надо дальше искать контактные поверхности и тд.
100k вне форума  
 
Непрочитано 25.02.2019, 10:44
#49
Konstruktiv54


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


Еще вопрос возник, а что в плагинах нельзя ссылаться на свои выделенные библиотеки?
Я создал свою dll, по типу cs_net_lib, но если она лежит где-то на диске, то Текла ее не находит, и при запуске плагина ругается.
При попытке положить ее в папку рядом с cs_net_lib, Текла вылетает при самом старте с каким то огромным окном ошибок, никто не сталкивался?
----
upd: разобрался сам, просто библиотека была создана как netstandart, почему-то ((

Последний раз редактировалось Konstruktiv54, 25.02.2019 в 13:25.
Konstruktiv54 вне форума  
 
Непрочитано 26.02.2019, 11:36
1 | #50
100k

Жалкий инженеришка-проектаст
 
Регистрация: 31.01.2010
Сообщений: 1,986


Konstruktiv54, Можно ссылаться на свои библиотеки.
Есть способ лучше. В солюшен можно сделать несколько проектов, добавить ссылки из одного проекта на другой. Это позволит сразу работать над текущим проектом и библиотекой в VS.
Так же необходимо прописать в настройках солюшен "события сборки" и при компиляции dll эта самая dll скопируется по указанному пути. Следовательно в папке теклы у вас будет последняя сборка вашего ПО.
Это очень экономит время.
Выглядит это примерно так
copy "$(ProjectDir)$(OutDir)$(TargetFileName)" "c:\TeklaStructures\$(TSdir)\nt\bin\plugins\sv\$(TargetFileName)"
copy "$(ProjectDir)$(OutDir)$(TargetName).pdb" "c:\TeklaStructures\$(TSdir)\nt\bin\plugins\sv\$(TargetName).pdb"
100k вне форума  
 
Непрочитано 26.02.2019, 14:34
#51
Konstruktiv54


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


Цитата:
Сообщение от 100k Посмотреть сообщение
copy "$(ProjectDir)$(OutDir)$(TargetFileName)" "c:\TeklaStructures\$(TSdir)\nt\bin\plugins\sv\$(TargetFileName)"
copy "$(ProjectDir)$(OutDir)$(TargetName).pdb" "c:\TeklaStructures\$(TSdir)\nt\bin\plugins\sv\$(TargetName).pdb"
Событиями я пользуюсь, да. А *.pdb разве тоже надо копировать?
С одним солюшеном надо будет попробовать наверно
У меня сейчас так идет, есть рабочий солюшен, в котором весь функционал построен как приложения, в нем же разрабатывается dll. И второй солюшен под под плагины, в нем я работаю когда уже отлажен основной алгоритм на уровне приложения...
Konstruktiv54 вне форума  
 
Непрочитано 26.02.2019, 14:42
#52
100k

Жалкий инженеришка-проектаст
 
Регистрация: 31.01.2010
Сообщений: 1,986


Цитата:
Сообщение от Konstruktiv54 Посмотреть сообщение
pdb разве тоже надо копировать?
Это файл для режима отладки.
100k вне форума  
 
Непрочитано 28.02.2019, 17:36
#53
Konstruktiv54


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


Цитата:
Сообщение от 100k Посмотреть сообщение
Есть способ лучше. В солюшен можно сделать несколько проектов, добавить ссылки из одного проекта на другой. Это позволит сразу работать над текущим проектом и библиотекой в VS.
Я все думаю над этим делом...а можно как нибудь сделать приложение, которое являлось бы фантомом плагина, что бы оно могло заимствовать его методы и прочее...
что бы отладку производить без подключения к процессу?
Уперся в то, что не могу нестатические методы плагина передать куда-то.
Konstruktiv54 вне форума  
 
Непрочитано 28.02.2019, 19:34
#54
100k

Жалкий инженеришка-проектаст
 
Регистрация: 31.01.2010
Сообщений: 1,986


Konstruktiv54,
Все гораздо проще.
Можно запускать плагин в виде приложения. Достаточно добавить "Main()" и запускать плагин как "Приложение Windows" а не "Библиотека классов"
Миниатюры
Нажмите на изображение для увеличения
Название: test.png
Просмотров: 106
Размер:	39.5 Кб
ID:	211470  
100k вне форума  
 
Непрочитано 28.02.2019, 19:49
#55
Konstruktiv54


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


а можно все содержимое Мэйна посмотреть?, а то я не могу допереть как это работает
Konstruktiv54 вне форума  
 
Непрочитано 28.02.2019, 20:03
#56
100k

Жалкий инженеришка-проектаст
 
Регистрация: 31.01.2010
Сообщений: 1,986


Konstruktiv54,
Вызов плагина, это нижние две строчки (закоментированные)
100k вне форума  
 
Непрочитано 28.02.2019, 21:41
#57
Konstruktiv54


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


Разобрался! Заработало! преогромное спасибо!
--------
upd: я правильно понимаю, что в этом случае надо в ДАТУ ручками отдельно вбивать данные?

Последний раз редактировалось Konstruktiv54, 28.02.2019 в 22:29.
Konstruktiv54 вне форума  
 
Непрочитано 01.03.2019, 08:03
#58
CuPo>I<a

Металлоконструкции
 
Регистрация: 28.02.2009
Златоуст
Сообщений: 480


Цитата:
Сообщение от Konstruktiv54 Посмотреть сообщение
ручками отдельно вбивать данные?
да
CuPo>I<a вне форума  
 
Автор темы   Непрочитано 11.03.2019, 15:38
#59
PashaStr

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


Добрый день! При создании программно текста не удаётся избавится от выноски, есть ли возможность как-нибудь программно удалить/изменить свойства текста? Не могу найти нужный метод в справочнике апи.
Миниатюры
Нажмите на изображение для увеличения
Название: text.png
Просмотров: 107
Размер:	82.4 Кб
ID:	211773  
PashaStr вне форума  
 
Непрочитано 11.03.2019, 17:42
#60
100k

Жалкий инженеришка-проектаст
 
Регистрация: 31.01.2010
Сообщений: 1,986


Можно попробовать создать файл атрибутов этой метки с нужными настройками назвать его например "standard001" и загрузить его послед создания экземпляра этой метки, потом отредактивовать нужные поля и сделать insert
100k вне форума  
Ответ
Вернуться   Форум 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