Autocad и плагин с использованием Winforms.

Автор Тема: Autocad и плагин с использованием Winforms.  (Прочитано 20427 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DenisАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 63
  • Карма: 2
Здравствуйте.
Как написать плагин,подгружаемый через dll и работающим при помощи ввода команд (данных) я разобрался благодаря Вам.
Теперь возник вопрос,а как сделать плагин с заранее нарисованным и продуманным интерфейсом? То есть идея такая,что в Автокаде должно появиться окно,в котором производятся определенные действия.
Сам я пользуюсь Visual Studio Express 2012.
Подскажите пожалуйста,в каком направлении мне двигаться.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Как и обычную ВинГуй программу - подключаешь windows.forms и по нужной команде (или событию) вызываешь окно модально или не модально (но тогда лучше с TopMost=true).

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Пока делал пример убедился, что WPF лучше) ИМХО

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Окно, а точнее UserForm можно зпихнуть в палитру, а начиная с 2015, его можно запихнуть в закладку
и WPF лучшее  ::)

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Окно, а точнее UserForm можно зпихнуть в палитру,
На палитрах AutoCAD можно размещать как элементы управления WinForm, так и элементы управления WPF.
Цитата: Denis
Подскажите пожалуйста,в каком направлении мне двигаться.
Два нюанса:
1. Открывать в AutoCAD окна Form (WinForms) следует при помощи статических методов:
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog (Form)
  2. Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog (Form)
2. Открывать в AutoCAD окна Window (WPF) следует при помощи статических методов:
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.ApplicationServices.Application.ShowModalWindow (Window)  
  2. Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessWindow (Window)
Дополнительно в IDE смотри перегруженные версии всех указанных выше методов (в документации обозначены не все).

А в остальном всё делается практически так же, как и в любом WPF\WinForm приложении. Здесь обозначена литература по теме: п. 8-11.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
WPF лучше) ИМХО

WPF лучшее  ::)

Пару оговорок:
WPF чуть менее универсальна по применению, т.к. появилась с NET 3.0.
WPF приложения кушают больше памяти.(вычитал в каком-то форуме)

И еще вопрос, кто пробовал применить WPF в палитре PaletteSet?
В 2009 когда-то пробовал добавить через Add(), но кроме Windows.Forms.Control он ничего не принимал.
С какой версии автокада добавили поддержку WPF в PaletteSet?


Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
WPF приложения кушают больше памяти.(вычитал в каком-то форуме)
На заборах тоже пишут... WPF выполняет прорисовку графики при помощи видеокарты, посредством DirectX. WinForms рисует за счёт ЦП. Т.о. прорисовка графики WPF выполняется шустрее, причём чем больше рисовать, тем разница заметней. Насчёт объёмов памяти - я не замерял, ибо не критично (не ест он столько памяти, чтобы компьютер на лопатки ложился, а ловить блох не вижу смысла).

И еще вопрос, кто пробовал применить WPF в палитре PaletteSet?
В 2009 когда-то пробовал добавить через Add(), но кроме Windows.Forms.Control он ничего не принимал.
С какой версии автокада добавили поддержку WPF в PaletteSet?
Плохо пробовал. Я в 2009-м акаде на палитрах размещаю преимущественно WPF контент. Контрол WPF следует размещать на палитре опосредованно, через контрол ElementHost, специально для этих целей существующий. Здесь можешь глянуть мой пример кода.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
На заборах тоже пишут... WPF выполняет прорисовку графики при помощи видеокарты, посредством DirectX. WinForms рисует за счёт ЦП.
При помощи чего и так понятно. И что есть ускорение прорисовки тоже понятно.
На форуме обсуждалось WinForms&WPF и представитель фирмы по разработке ПО написал, что тестили WPF и приложения созданные с помощью этой технологии потребляют больше памяти, чем WinForms приложения.

Плохо пробовал. Я в 2009-м акаде на палитрах размещаю преимущественно WPF контент. Контрол WPF следует размещать на палитре опосредованно, через контрол ElementHost, специально для этих целей существующий. Здесь можешь глянуть мой пример кода.
А за ссылку спасибо!


Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Открывать в AutoCAD окна Form (WinForms) следует при помощи статических методов:
Я, например, это тоже знаю - но не знаю почему - кто нибудь мне может сказать что теоретически (или практически) может произойти если я буду использовать .Show и .ShowDialog.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
то нибудь мне может сказать что теоретически (или практически) может произойти если я буду использовать .Show и .ShowDialog.
Я в таких случаях сталкивался с аварийным завершением работы AutoCAD 2009. Происходило это не стабильно, но достаточно часто. Замена вызова на альтернативу от Autodesk устранило проблему. Считаю, что лучше перестраховаться и дёргать "кукол" за обозначенные кукловодом "верёвочки", дабы "пьеса" не завершилась неожиданным финалом. :) Причём в официальной документации автодеск эти методы долгие годы отсутствовали (некоторые их перегруженные версии отсутствуют до сих пор).

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Autocad и плагин с использованием Winforms.
« Ответ #10 : 08-07-2015, 12:18:11 »
Есть "падающий" пример с WinForms - я "подергаю" - мне не лень. ИХМО данный функционал (сейчас говорю только касательно WinForms - WPF в автокаде практически не использую) похоже задел на будующее которое не настанет (хотели, но "ниосилили"). Я вставлял готовые WinForm модули (dll) в плагин автокада (часть функционала продублированная в другом месте, которую для удобства можно вызывать и из под акада) она активно работает с формами, естественно вызывая их обычными методами - работают с ними достаточно плотно и сейчас - пока чего-то не падало (хотя я и не исключаю, что может). В общем если есть конкретные примеры (а еще лучше причины) - то я крайне заинтересован.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Autocad и плагин с использованием Winforms.
« Ответ #11 : 08-07-2015, 13:03:44 »
Есть "падающий" пример с WinForms - я "подергаю" - мне не лень. ИХМО данный функционал (сейчас говорю только касательно WinForms - WPF в автокаде практически не использую) похоже задел на будующее которое не настанет (хотели, но "ниосилили"). Я вставлял готовые WinForm модули (dll) в плагин автокада (часть функционала продублированная в другом месте, которую для удобства можно вызывать и из под акада) она активно работает с формами, естественно вызывая их обычными методами - работают с ними достаточно плотно и сейчас - пока чего-то не падало (хотя я и не исключаю, что может). В общем если есть конкретные примеры (а еще лучше причины) - то я крайне заинтересован.
Я сейчас не помню, какую именно решал задачу, в процессе которой открывал окошки, и какие именно дальнейшие манипуляции приводили к Fatal Error (это было давно, в 2009-м году). :( На старом сайте себе "зарубок" на эту тему не сделал видимо, т.к. найти сейчас не смог. Если я верно помню, то на наличие обозначенных не документированных методов мне указал А.Н. Ривилис. Помню, что после внесённых обозначенных изменений фатал прекратил появляться.

С тех пор, вместо Show и ShowDialog я стал использовать обозначенные методы автодеска, а так же перестал воспринимать содержимое документации ObjectARX как 100% точный источник информации, т.к. обозначенные методы (да и не только они, как выяснилось позднее) не были обозначены в ней.
Однако использование "родных" методов автодеска может дать неожиданный результат, если использовать не тот вариант перегрузки метода: реализация по умолчанию, к примеру, ShowModelessWindow(Window formToShow) такова, что размеры и позиция окна сохраняются:
Код - C# [Выбрать]
  1. public static void ShowModelessWindow(Window formToShow)
  2. {
  3.     ShowModelessWindow(IntPtr.Zero, formToShow, true); // По умолчанию последний аргумент - true
  4. }
  5.  
  6. public static unsafe void ShowModelessWindow(IntPtr owner, Window formToShow, [MarshalAs(UnmanagedType.U1)] bool persistSizeAndPosition){
  7. ...
  8. }
Т.е. чтобы избежать грабли, обозначенные в англоязычной заметке, в коде лучше открывать модальное окошко так:
Код - C# [Выбрать]
  1. ShowModelessWindow(IntPtr.Zero, formToShow, false);
Для немодальных окон и для Forms всё аналогично.
« Последнее редактирование: 08-07-2015, 15:07:41 от Андрей Бушман »

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Autocad и плагин с использованием Winforms.
« Ответ #12 : 08-07-2015, 14:45:04 »
Возможно то, что мне сейчас смутно помнится, как-то связано с проблемой, указанной мною здесь (см. строку кода 122 и комментарий к ней):
Код - C# [Выбрать]
  1. //Окно откроется, но есть проблема: временами, при попытке что-то сделать с
  2. // окном (помимо закрытия) может возникать Fatal error, а может и не возникать
  3. //(закономерности не выявил)...
  4. frm.Show();
Но там я экспериментировал с разными доменами... Домены могут работать в разных потоках (Thread), а для устойчивой работы GUI (WinForms\WPF) требуется [STAThread].

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Autocad и плагин с использованием Winforms.
« Ответ #13 : 08-07-2015, 15:06:42 »
Я добавил информацию в #11.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: Autocad и плагин с использованием Winforms.
« Ответ #14 : 08-07-2015, 15:11:21 »
Вопрос не по теме, но тоже про интерфейс в автокаде.

можно вывести сообщение в командную строку автокада:
editor.WriteMessage()
А есть ли в Api автокада аналог lisp команды
(alert message)

т.е. всплывающее окошко с сообщением.
Или для этих целей нужно WinForm использовать?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Autocad и плагин с использованием Winforms.
« Ответ #15 : 08-07-2015, 15:14:53 »
Или для этих целей нужно WinForm использовать?
Чем не подошли стандартные?
Код - C# [Выбрать]
  1. System.Windows.MessageBox.Show("");
  2. System.Windows.Forms.MessageBox.Show("");

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: Autocad и плагин с использованием Winforms.
« Ответ #16 : 08-07-2015, 15:18:08 »
Чем не подошли стандартные?
Устраивает полностью, но мучает вопрос, не будет ли конфликта с автокадом, связанного с:
    Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog (Form)
    Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog (Form)
???

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Autocad и плагин с использованием Winforms.
« Ответ #17 : 08-07-2015, 15:20:35 »
Вон оно что... :)
Ну тогда:
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("");

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: Autocad и плагин с использованием Winforms.
« Ответ #18 : 08-07-2015, 15:27:02 »
Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("");

Спасибо, то что надо! )))

Оффлайн DenisАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 63
  • Карма: 2
Re: Autocad и плагин с использованием Winforms.
« Ответ #19 : 08-07-2015, 23:17:48 »
Здравствуйте.
Спасибо за Ваши ответы!
Вы не могли бы посмотреть мой проект?после запуска netload вываливаются ошибки о том,что нельзя загрузить этот файл.Может быть беглый взгляд покажет мой косяк.
Заранее спасибо!

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Autocad и плагин с использованием Winforms.
« Ответ #20 : 08-07-2015, 23:24:23 »
Включу силу предсказания и не поднимаясь с дивана с телефона отвечу - скорее всего версия net framework не соответствует версии, прописанной в acad.exe.config

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Autocad и плагин с использованием Winforms.
« Ответ #21 : 08-07-2015, 23:30:43 »
после запуска netload вываливаются ошибки о том,что нельзя загрузить этот файл
Давай полное сообщение сюда и укажи версию AutoCAD и Visual Studio.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Autocad и плагин с использованием Winforms.
« Ответ #22 : 08-07-2015, 23:37:37 »
после запуска netload вываливаются ошибки о том,что нельзя загрузить этот файл
Грузишь-то хоть из локального каталога, не из сетевого?

Оффлайн DenisАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 63
  • Карма: 2
Re: Autocad и плагин с использованием Winforms.
« Ответ #23 : 08-07-2015, 23:47:03 »
Все,разобрался. Проблема была в битности файла базы данных,точнее dll, которую я подключал еще.
Спасибо!

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Autocad и плагин с использованием Winforms.
« Ответ #24 : 09-07-2015, 17:42:34 »
Я, например, это тоже знаю - но не знаю почему - кто нибудь мне может сказать что теоретически (или практически) может произойти если я буду использовать .Show и .ShowDialog.
Иконка в заголовке диалога будет неправильная :)
А если серьезно, то акадовские методы назначают владельцем окошка автокад-приложение, со всеми вытекающими последствиями.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Autocad и плагин с использованием Winforms.
« Ответ #25 : 10-07-2015, 01:38:52 »
А если серьезно, то акадовские методы назначают владельцем окошка автокад-приложение, со всеми вытекающими последствиями.
Далеко не только это. Reflector или ILSpy помогут понять в чем особенность.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Autocad и плагин с использованием Winforms.
« Ответ #26 : 10-07-2015, 10:40:26 »
Reflector или ILSpy помогут понять в чем особенность.

1. Отключает уведомление приложения о переключении между MDI окнами, если изначально уведомление было активировано.
2. Если последний параметр метода - true, то после загрузки окна назначает ему позицию и размеры прописанные в реестре.
3. Назначает окну иконку автокада.
4. Назначает окну владельца, если он был указан первым параметром.
5. Отображает окно.
6. По закрытию окна возвращает в исходное состояние переключатель, указанный в п.1.


Оффлайн DenisАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 63
  • Карма: 2
Re: Autocad и плагин с использованием Winforms.
« Ответ #27 : 10-07-2015, 13:20:17 »
Я извиняюсь за вопрос не в тему,но у меня почему-то один блок при двойном клике на нем открывает Enhanced Attribute Editor, а другой ( который автоматически генерится из базы данных) в Edit Block Definitions. Хотелось бы понять, как сделать так,чтобы второй тоже открывался в Enhanced Attribute Editor.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Autocad и плагин с использованием Winforms.
« Ответ #28 : 10-07-2015, 13:21:21 »
Я извиняюсь за вопрос не в тему,но
Не извиняйся. Просто создай отдельную тему.

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Autocad и плагин с использованием Winforms.
« Ответ #29 : 29-05-2022, 17:38:37 »
Здравствуйте, не могу запустить эту команду
Код - vb.net [Выбрать]
  1. ShowModelessWindow(IntPtr.Zero, formToShow, false)
  2.  

Скачал визард от сюда https://adn-cis.org/forum/index.php?topic=9839.0 скачал и установил ObjectARX, но пишет вот такой текст на VB



Я подозреваю что надо добавить ссылку на библиотеку.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Autocad и плагин с использованием Winforms.
« Ответ #30 : 29-05-2022, 18:23:23 »
D_TRex,
А причем здесь ObjectARX Wizard? Он нужен только если ты программируешь на C++.
Ты же собираешься использовать AutoCAD .NET API? Тогда тебе нужен AutoCAD .NET Wizard. Причем для каждой версии AutoCAD и VS он свой. Качать отсюда: https://www.autodesk.com/developer-network/platform-technologies/autocad



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Autocad и плагин с использованием Winforms.
« Ответ #31 : 29-05-2022, 18:29:41 »
Я может быть не правильно поставил вопрос. У меня появился выбор шаблона с выбором языка программирования. Вопрос в том как открыть форму в автокаде?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Autocad и плагин с использованием Winforms.
« Ответ #32 : 29-05-2022, 19:13:18 »
Я может быть не правильно поставил вопрос. У меня появился выбор шаблона с выбором языка программирования. Вопрос в том как открыть форму в автокаде?
Код - vb.net [Выбрать]
  1. Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog (Form frm)
Код - vb.net [Выбрать]
  1. Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog (Form frm)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Autocad и плагин с использованием Winforms.
« Ответ #33 : 29-05-2022, 19:41:43 »
Это я пробовал, но ошибка на картинке в моем сообщении, скачал чужой проект на С++ буду разбираться. Это всё новое для меня - не понимаю что и к чему.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Autocad и плагин с использованием Winforms.
« Ответ #34 : 29-05-2022, 19:43:54 »
скачал чужой проект на С++ буду разбираться.
На C++? Сочувствую.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Re: Autocad и плагин с использованием Winforms.
« Ответ #35 : 29-05-2022, 20:52:25 »
Смотри, где у тебя выполняются обращения к F_Layout и что они из себя представляют. Что-то я подозреваю, что ошибка совсем в другом месте.Не видел предыдущих сообщений, сорри.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Autocad и плагин с использованием Winforms.
« Ответ #36 : 30-05-2022, 04:49:39 »
На C++? Сочувствую.
Вот в этом проекте форма с расширением *.cs то есть если не ошибаюсь то это класс.
Картинка с шибкой - вот она.

Я почему думаю что у меня не хватает каких то библиотек, так как студия ожидает от меня URL  а не форму (ну то есть пишет в подсказках об этом. Попалась небольшая книга по созданию палетты, но тоже не возможно добавить туда данные так как ожидается URL.

Настройку проводил по вот этим урокам https://knowledge.autodesk.com/support/autocad/learn-explore/caas/simplecontent/content/lesson-1-the-basic-autocad-plug.html вот там на начальной странице, где указывается расположение библиотек и выбор автокада для тестов я тоже не добавлял ни одной галочки, на что это влияет.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Re: Autocad и плагин с использованием Winforms.
« Ответ #37 : 30-05-2022, 07:49:43 »
Off-Topic: показать
cs - это файл C#. А что там написано - класс, интерфейс или перечисление - это уже отдельная песня.

Строку, на которой генерируется ошибка (как минимум) покажи. Гадать можно очень долго
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Autocad и плагин с использованием Winforms.
« Ответ #38 : 30-05-2022, 08:34:16 »
Пост номер 29, там и срока кода и скрин ошибки и описание (я бы скинул проект, но так как я только пару дней как пробую, то есть я не понимаю что тут и от куда берётся, в общем там обрывки кода в основном. Ну можно сказать что проблема решилась, другим образом правда, в общем
Код - vb.net [Выбрать]
  1. UserControl1
оказывается создаётся и на нём уже вешаем нужные контроли и его добавляем к палетте AutoCAD
Код чужой, из просторов "гугл в помощь" но код добавлю
Код - vb.net [Выбрать]
  1. Imports System.Runtime
  2. Imports Autodesk.AutoCAD.Runtime
  3. Imports Autodesk.AutoCAD.ApplicationServices
  4. Imports Autodesk.AutoCAD.DatabaseServices
  5. Imports Autodesk.AutoCAD.Geometry
  6. Imports Autodesk.AutoCAD.EditorInput
  7.  
  8. ' This line is not mandatory, but improves loading performances
  9. <Assembly: CommandClass(GetType(AutoCAD_VB_plug_in1.MyCommands))>
  10. Namespace AutoCAD_VB_plug_in1
  11.  
  12.     Public Class MyCommands
  13.  
  14.         Public ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
  15.  
  16.         'Polar Function
  17.         Public Shared Function polar(ByVal p0 As Point3d, ByVal ang As Double, ByVal dist As Double)
  18.             Return New Point3d(p0.X + dist * Math.Cos(ang), p0.Y + dist * Math.Sin(ang), p0.Z)
  19.         End Function
  20.  
  21.         'Drawx Function
  22.         Public Sub drawX(ByVal p0 As Point3d, ByVal clr As Integer)
  23.             Dim vs As Double = (Application.GetSystemVariable("VIEWSIZE") / 40.0)
  24.             Dim p1 As Point3d = polar(p0, (Math.PI * 0.25), vs)
  25.             Dim p2 As Point3d = polar(p0, (Math.PI * 0.75), vs)
  26.             Dim p3 As Point3d = polar(p0, (Math.PI * 1.25), vs)
  27.             Dim p4 As Point3d = polar(p0, (Math.PI * 1.75), vs)
  28.             ed.DrawVector(p0, p1, clr, False)
  29.             ed.DrawVector(p0, p2, clr, False)
  30.             ed.DrawVector(p0, p3, clr, False)
  31.             ed.DrawVector(p0, p4, clr, False)
  32.         End Sub
  33.  
  34.         Friend Shared m_ps As Autodesk.AutoCAD.Windows.PaletteSet = Nothing
  35.         Friend Shared mypalette As UserControl1 = New UserControl1()
  36.  
  37.         <CommandMethod("NewAX")>
  38.         Public Sub NewAX()
  39.             If m_ps Is Nothing Then
  40.                 m_ps = New Autodesk.AutoCAD.Windows.PaletteSet("My Palette")
  41.                 m_ps.Add("My Palette", mypalette)
  42.             End If
  43.             If m_ps.Visible = False Then
  44.                 m_ps.Visible = True
  45.             End If
  46.             pickpoints()
  47.         End Sub
  48.  
  49.         Public Sub pickpoints()
  50.             Dim opt As PromptPointOptions = New PromptPointOptions("")
  51.             opt.Message = vbCrLf & "Select First Point: "
  52.             Dim ret As PromptPointResult
  53.             ret = ed.GetPoint(opt)
  54.             If ret.Status = PromptStatus.OK Then
  55.                 Dim p0 As Point3d = ret.Value
  56.                 drawX(p0, 2)
  57.                 opt.Message = vbCrLf & "Select Second Point: "
  58.                 opt.BasePoint = p0
  59.                 opt.UseBasePoint = True
  60.                 ret = ed.GetPoint(opt)
  61.                 If ret.Status = PromptStatus.OK Then
  62.                     Dim p1 As Point3d = ret.Value
  63.                     drawX(p1, 2)
  64.                 Else
  65.                     Dim p0X As Double = p0.X
  66.                     Dim p0Y As Double = p0.Y
  67.                     Dim p0Z As Double = p0.Z
  68.                     mypalette.Label1.Text = "Northing: " & p0Y.ToString("N3")
  69.                     mypalette.Label2.Text = "Easting: " & p0X.ToString("N3")
  70.                     mypalette.Label3.Text = "Elevation: " & p0Z.ToString("N3")
  71.                 End If
  72.             End If
  73.         End Sub
  74.     End Class
  75.  
  76. End Namespace
Сама функция не выводит результатов, но теперь уже буду разбираться куда вставить команду и как получить результаты

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Re: Autocad и плагин с использованием Winforms.
« Ответ #39 : 30-05-2022, 23:05:59 »
А если попробовать выполнить код из примеров по SDK, касаемо работы с ToolPalette? Там все понятно будет?
Спрашиваю потому, что с ToolPalette лично я не работал - ну не сильно они мне (пока) нравятся
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Autocad и плагин с использованием Winforms.
« Ответ #40 : 31-05-2022, 14:16:27 »
Примеры да изучаю, но пока не очень успешно, переменные совсем другие - я и так то только со шпаргалкой, а тут совсем туго. Мне нужно окно ввода (вывода) не особо важно будет это палитра или WinForm. Всё идёт к созданию (редактированию) листов, иной раз слетает принтер (это очень редко), иной раз по шаблону листов наклепал, а они в цвете, а цветов уйма и надо им менять схему в монохром, иной раз следующий лист это копия предыдущего и надо просто сдвинуть в сторону на размер формата, иной раз листов много, стандартный постоянно пытается показать миниатюру или почему то ещё висит, а мне просто надо открыть нужный лист - да часть этого решает подшивка, но тоже подвисает и не допускает многопользовательского редактирования. Поэтому я стараюсь выжать максимум из того что могу.