Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Разработка приложений под Open API T-FLEX CAD (.NET)
 
В T-FLEX CAD разработан функционал для создания собственных приложений на основе технологии .NET. Пользователь может создавать приложения, использующие функционал параметрического и геометрического ядер T-FLEX CAD.
Думаю эта тема скоро станет востребованной, поэтому взял на себя смелость создать соответствующую ветку. Существующая ветка "Вопросы по API" в основном посвящена макросам. Несмотря на то, что в принципе макросы и отдельные приложения строятся на одних и тех же методах, все же есть различия в подходе создания и применения: макросы, на мой взгляд, предназначены для решения локальных задач - типа задачи объединения нескольких комманд в один вызов макроса, а приложения решают более серьезные задачи.
Сейчас осваиваю программирование под T-FLEX CAD и как у всех начинающих - много вопросов. По-началу вопросы адресовал разработчикам, а потом подумал, что многие проблемы, с которыми сталкиваюсь сам при освоении, возникают и у других пользователей. К тому же осваивать новое лучше не в одиночку. Надеюсь, что этой темой заинтересуются еще пользователи и мы вместе сможем осваивать материал быстрее. Очень ценны советы Brom25. Надеюсь, что ответы на вопросы мы сможем получать и от разработчиков.

Вот мой первый вопрос (перенесен из ветки "Вопросы по API"):
Как создавать контекстное меню в С# разобрался. Причем, задал вызов меню на элементе control. Когда приложение запущено, но файл еще не открыт контекстное меню работает, но при открытии файла в control - контекстное меню работать отказывается. В руководстве по API есть описание вызова:

__delegate void ControlContextMenu(Object* sender, ControlEventArgs* e);

Как его вызвать понять не могу - примера нет.
Страницы: Пред. 1 2 3 4 След.
Ответы
 
Есть форма в проекте вижуала. На этой форме размещены объект Control и FilePreview. При попытке открыть дизайн этой формы выдаются предупреждения (см. картинку) и дизайн не показывается.
Захожу по адресу Tools\Choose Toolbox Items и обновляю путь до библиотеки TFlexAPI.dll. После этого дизайн формы открывается. После сохранения проекта и перезагрузки вижуала проблема повторяется. Вопрос: как сделать так, чтоб не заходя каждый раз после загрузки вижуала в Tools\Choose Toolbox Items, проект открывался нормально?
Visual Errors.JPG (79.32 КБ)
Изменено: Brom25 - 03.08.2009 23:08:16
Кто ищет - тот всегда найдет!
 
А никак. Только каждый раз подключать библиотеку. Сейчас махнул на этот VS и пересел на бесплатный (с открытым кодом) Sharpdevelop_3.0_Final. В нем достаточно один раз подключить - и работать не парясь. Вообще и функционал у него богаче, чем у VS Express, да и глюков тех пока не наблюдал (возможно все впереди).

Вот ссылочка: http://build.sharpdevelop.net/buildartefacts/
 
tipman мне говорил, что выход есть, но об этом может поведать скорее Александр Сысоев. Тем не менее спасибо за информацию и ссылку :) .
Если не секрет, давно перешел на Sharpdevelop_3.0_Final?
Кто ищет - тот всегда найдет!
 
Недавно, в отпуск вышел. Пару вечеров посидел с задачкой в VSExpress - эта проблема меня окончательно "добила", решил найти альтернативу. Нашел, установил Sharpdevelop и тренируюсь на простых примерах, юзаю taoFramework и хочу разобраться с OpenGl.
 
Серьезно!! :) taoFramework - это что за зверь такой?

P.S. Я тут как в "глуши" со своим интернетом через мобильник - не знаю что вокруг твориться. Скорость сам понимаешь... Да вот хоть у тебя спрошу :) Но Sharpdevelop_3.0_Final скачаю - на работе.
Изменено: Brom25 - 03.08.2009 23:57:17
Кто ищет - тот всегда найдет!
 
Тоже бесплатная штука под OpenGl.

Вот ссылочка:http://esate.ru/page.php?where=yroki-OpenGL-c-sharp

Правда сайт они пока не доделали, и не пишут когда планируют выложить следующие уроки. Но штука интересная.
 
Хорошо, поинтересуюсь как-нибудь на досуге...
Кто ищет - тот всегда найдет!
 
Вообще, чем дальше влезаю в программирование, тем меньше хочется возвращаться к выпуску КД. Всю романтику проектирования "убивают" наши "доблестные, особо одаренные" отечественные технологи. На двух предприятиях с этими техносапиенс столкнулся - видимо они везде такие - ни хрена ничего делать не хотят - горой стоят за технологию 20-30 летней давности.

А в программировании - нет технологов!!!
Изменено: Сергей Максимов - 04.08.2009 00:07:46
 
Цитата
Brom25 пишет:

Если не секрет, давно перешел на Sharpdevelop_3.0_Final?
Попробовал создать в Sharpdevelop аналог TFlex Viewer - работать в принципе достаточно удобно.
Написанную программку и описание шагов по созданию приложения в Sharpdevelop выложил на сайте http://www.tflex-nord.narod.ru в разделе API.
Проверил - можно записать установленный Sharpdevelop на флэшку и, например, ходить к пользователям - отлавливать глюки в своих программах прямо у них на машинах, запуская Sharpdevelop с флэшки. Это удобно когда пользователи разбросаны на сотни метров, а то и более километра.
Изменено: Сергей Максимов - 29.08.2009 14:07:26
 
Цитата
Сергей Максимов пишет:

Проверил - можно записать установленный Sharpdevelop на флэшку и, например, ходить к пользователям

Прикольно, возьму на заметку. Кстати, у меня в Sharpdevelop проблема не решилась:

Цитата
Brom25 пишет:

Есть форма в проекте вижуала. На этой форме размещены объект Control и FilePreview. При попытке открыть дизайн этой формы выдаются предупреждения (см. картинку) и дизайн не показывается.

Почему - :idontnow:
Кто ищет - тот всегда найдет!
 
Цитата
Brom25 пишет:

Есть форма в проекте вижуала. На этой форме размещены объект Control и FilePreview. При попытке открыть дизайн этой формы выдаются предупреждения (см. картинку) и дизайн не показывается.

Почему - Не знаю
В описании работы с SharpDevelop изменил пункт 4. Теперь все должно работать.
Изменено: Сергей Максимов - 31.08.2009 00:54:10
 
Как понял из "Руководства по Open Api" класс TFlex.Drawing.Graphics предназначен для вывода в собственные окна графических изображений, без внесения изменений в документ T-Flex Cad.
Может кто посоветует как решить задачу для внешнего приложения с использованием Control?
А именно, как динамически прорисовать в окне Control маркер, например, узла или линии построения. Сейчас эту задачу решил, на мой взгляд не очень удачно - через TFlex.Model.Model2D:
Код
void TFcontrolMouseMoved(object sender, TFlex.ControlEventArgs e)
{
   //Получить координаты точки
   System.Drawing.Point clickPoint = new System.Drawing.Point(e.x + dx, e.y + dy);

  //Привести координаты точки к документу TFlex
   TFlex.Drawing.Point point = TFcontrol.Graphics.GetWCSPoint(clickPoint);

  //Здесь создается объект, например, свободный узел, запоминается его DisplayName, а при создании следующего узла после перемещения мыши первый узел удаляется с перерисовкой экрана.

if (CreateFreeNode_chckBx.Checked == true)
{
     if (displayNameDeleteNode != null)
     {
   DeleteElement delNode = new   DeleteElement(document, displayNameDeleteNode);
               
   displayNameDeleteNode = null;
      }
            
   CreateFreeNode createNewNode = new CreateFreeNode();
   createNewNode.CreateNode(document, point);
            
   displayNameDeleteNode = createNewNode.NodeDisplayName;
}
      
//Перерисовать документ         
TFcontrol.Redraw();
}

Создается эффект перемещаемого вместе с курсором свободного узла. При этом, естественно, нагружается процессор. Предполагаю, что эта задача должна решаться как-то проще, возможно через TFlex.Drawing.

Возможно как-то так:
Код
//Получить координаты точки
System.Drawing.Point clickPoint = new System.Drawing.Point(e.x + dx, e.y + dy);

//Привести координаты точки к документу TFlex
TFlex.Drawing.Point point = TFcontrol.Graphics.GetWCSPoint(clickPoint);
            
System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, Width, Height);
            
TFlex.Drawing.Rectangle window = new TFlex.Drawing.Rectangle(0, 0, TFcontrol.Size.Width, TFcontrol.Size.Height);
            
IntPtr hWnd = new IntPtr(TFcontrol.Size.Width);
            
TFlex.Drawing.Graphics draw = new TFlex.Drawing.Graphics(hWnd, rect, window);
            
draw.BeginDraw();
      
//Курсор необходимо выводить при помощи режима XOR (исключающее "или")
RasterOperation rop = draw.SetRop(RasterOperation.XOR);
int color = draw.SetColor(TFlex.Drawing.Graphics.MarkColor);
            
draw.DrawMarker(MarkerType.FreeNode, point);
            
//Возвращаем обратно изменённые режимы
draw.Rop = rop;
draw.Color = color;
            
draw.EndDraw();      

Но изображение узла при этом на элементе Control не наблюдается. Что-то не так.
Заранее благодарен за ответ.
Изменено: Сергей Максимов - 04.09.2009 23:23:13
 
Цитата
Но изображение узла при этом на элементе Control не наблюдается. Что-то не так.
Сергей, вы неправильно получаете хэндл в этой строке: IntPtr hWnd = new IntPtr(TFcontrol.Size.Width);
Надо как то так: IntPtr hWnd = TFControl.Handle;
Изменено: Nord777 - 03.10.2009 13:22:56
 
Не помогает. :idontnow:
 
Цитата
Сергей Максимов пишет:

Не помогает.
Я к сожалению пока не могу проверить, TFlex установлен только на работе, а я на больничном. Попробуйте следующее:
в процедуру TFcontrolMouseMoved вставьте TFcontrol.Refresh(чтобы там была только одна эта строка), а весь остальной код перенесите в обработчик события Paint вашего контрола. Ну соответственно код придется немного доработать напильником...
Если в программировании не сильны - скиньте ваш код, а я, как только смогу - проверю.
 
К сожалению ничего не получится.
Компонент TFlex.Control способен отображать только обьекты чертежа.

Цитата
Сергей Максимов пишет:
Как понял из "Руководства по Open Api" класс TFlex.Drawing.Graphics предназначен для вывода в собственные окна графических изображений
Это возможно если прога работает в самой системе TFlex в виде плагина. Именно плагины позволяют извлечь из Api максимальную пользу.


Цитата
Сергей Максимов пишет:
Создается эффект перемещаемого вместе с курсором свободного узла. При этом, естественно, нагружается процессор
Попробуйте так:
Код
   TFlex.Model.Model2D.FreeNode FNod;

   private void TfControl_MouseMoved(object sender, TFlex.ControlEventArgs e)
   {
      if (doc == null) return;
 
      System.Drawing.Point p1 = new System.Drawing.Point(e.x, e.y);
      TFlex.Drawing.Point p2 = TfControl.Graphics.GetWCSPoint(p1);

      doc.BeginChanges("FreeNode");
      if (FNod == null) FNod = new TFlex.Model.Model2D.FreeNode(doc, p2.X, p2.Y); 
      FNod.X = p2.X;
      FNod.Y = p2.Y;
      doc.EndChanges();
      TfControl.Refresh();
   }
Изменено: Nord777 - 05.10.2009 17:01:56
 
То, что надо. Спасибо большое.
 
После отключения dll-ок в меню "Сервис" остаются пункты меню. Как удалить эти пункты?
Кто ищет - тот всегда найдет!
 
пуск - TFlex - Восстановить стандартные установки системы
Конструктору - конструирование, программисту - программирование
 
Спасибо!

PS Надо было сразу к тебе обратиться :)
Кто ищет - тот всегда найдет!
Страницы: Пред. 1 2 3 4 След.