Вопросы новичка

Автор Тема: Вопросы новичка  (Прочитано 4529 раз)

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

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

  • ADN Club
  • Сообщений: 36
  • Карма: 1
Вопросы новичка
« : 22-12-2013, 09:57:38 »
Здравствуйте.
Я только недавно начал изучать .NET API (для AutoCAD 2010), и периодически у меня возникают вопросы.
В перспективе их может быть много, поэтому темы решил не плодить - обойдусь пока одной.
Заранее спасибо за помощь.
« Последнее редактирование: 22-12-2013, 10:36:33 от Alex »

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

  • ADN Club
  • Сообщений: 36
  • Карма: 1
Re: Вопросы новичка
« Ответ #1 : 22-12-2013, 10:35:46 »
Первый вопрос - по поводу документации.
Где можно найти справочник по .NET API?
Мне уже отвечал Александр Ривилис: "Она в составе ObjectARX SDK (Managed Class Reference)".
У меня установлен ObjectARX SDK 2010, в папке docs есть несколько chm-файлов. Но ни в одном из них я не нашел полного описания всех классов.
Взять, к примеру, тот же RibbonButton. У него есть несколько свойств (LargeImage, CommandHandler и т. п.), но найти описание класса я навскидку не смог.
Есть ObjectARX Reference Guide и есть ObjectARX For AutoCAD 2010: Developer Guide, в котором приведено приблизительное соответствие между "ObjectARX class prefixes and .NET namespaces". Но там есть не все - в частности, Autodesk.Windows там не перечислен.
Подскажите, пожалуйста, где нужно искать.

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

  • ADN
  • *
  • Сообщений: 2468
  • Карма: 698
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Re: Вопросы новичка
« Ответ #2 : 22-12-2013, 10:39:11 »
Все мы в какой-то мере новички: всегда найдется кто-то, кто знает лучше. Пожалейте время того, кто будет искать похожие вопросы потом по форуму - следуйте правилам форума: один вопрос - одна тема.

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

  • ADN Club
  • Сообщений: 36
  • Карма: 1
Re: Вопросы новичка
« Ответ #3 : 22-12-2013, 11:06:50 »
Хорошо, учту. Просто мне показалось, что много простых вопросов вряд ли стоит выносить наружу. Ничего сверхъестественного я, скорее всего, спрашивать не буду.)

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Вопросы новичка
« Ответ #4 : 22-12-2013, 11:30:23 »
Для начала тебе следует избавиться от иллюзий на тему того, что мол справка ObjectARX содержит в себе полную информацию: это далеко не так (к сожалению). Конкретно по RibbonButton проверить наличие информации сейчас не могу, т.к. дома Linux. В данном случае, тебе будет полезно почитать на тему WPF, поскольку риббоны используют эту технологию. На тему WPF хорошей информации много (гугл в помощь). Навыки работы в WinForms не помогут при использовании WPF. Конструировать риббоны (и не только их) в AutoCAD можно не только с помощью программного кода, но и посредством XAML разметки (это одна из "фишек" WPF). Я на двг.ру когда-то по теме различные примеры показывал, например: тынц, тынц.

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

  • ADN Club
  • Сообщений: 36
  • Карма: 1
Re: Вопросы новичка
« Ответ #5 : 22-12-2013, 13:11:20 »
Спасибо, я это посмотрю. Хотя эта разметка выглядит как-то очень незнакомо. Как ее к коду прикручивать - совершенно непонятно. Может, со временем разберусь.
...
В целом процесс создания кнопок я стырил из доклада Mike Tuersley "Creating a Ribbon Bar for AutoCAD® with VB.NET". Оно работает, вопросов нет. И вообще примеров в Сети куча.
Но как-то хотелось бы знать, что этот код делает. Потому что просто из костылей все вязать - это как-то очень печально.
Вот кусок кода, который там приведен:
Imports System
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Windows
Imports Autodesk.Windows

Public Class Class1 Implements IExtensionApplication

Public Sub Initialize() Implements IExtensionApplication.Initialize
createRibbon()
End Sub

Public Sub Terminate() Implements IExtensionApplication.Terminate
End Sub

Private Sub CreateRibbon()
'declare a ribboncontrol object
Dim ribCntrl As RibbonControl = ComponentManager.Ribbon
'create a ribbontab
Dim ribTab As New RibbonTab()
'set a few properties
ribTab.Title = "AU2009"
ribTab.Id = "AU2009"
'add the tab to the ribbon
ribCntrl.Tabs.Add(ribTab)
'set as active tab
ribTab.IsActive = True
End Sub

End Class


Private Sub addContent(ByVal ribTab As RibbonTab)
'create the panel source
Dim ribSourcePanel As RibbonPanelSource = New RibbonPanelSource()
ribSourcePanel.Title = "Dev Tools"
'now the panel
Dim ribPanel As New RibbonPanel()
ribPanel.Source = ribSourcePanel
ribTab.Panels.Add(ribPanel)
'create a button
Dim ribButton1 As RibbonButton = New RibbonButton()
ribButton1.Text = "Net load"
ribButton1.CommandParameter = "NETLOAD "
ribButton1.ShowText = True
ribButton1.CommandHandler = New AdskCommandHandler()
'add the button
ribSourcePanel.Items.Add(ribButton1)
End Sub

Public Class AdskCommandHandler Implements System.Windows.Input.ICommand

Public Function CanExecute(ByVal parameter As Object) As Boolean _ Implements System.Windows.Input.ICommand.CanExecute
Return True
End Function

Public Event CanExecuteChanged As EventHandler Implements _ System.Windows.Input.ICommand.CanExecuteChanged

Public Sub Execute(ByVal parameter As Object) Implements _ System.Windows.Input.ICommand.Execute
Dim ribBtn As RibbonButton = TryCast(parameter, RibbonButton)
If ribBtn IsNot Nothing Then
Autodesk.AutoCAD.ApplicationServices.Application. DocumentManager.MdiActiveDocument. SendStringToExecute(_ ribBtn.CommandParameter, True, False, True)
End If
End Sub
End Class

Во-первых, откуда-то взялся класс IExtensionApplication. Видимо, именно благодаря ему можно использовать Initialize() и Terminate(). (Уже потом я наткнулся на запись в ивестном блоге http://through-the-interface.typepad.com/through_the_interface/2006/09/initialization_.html).
Во-вторых, объявляются всяческие Ribbon и RibbonTab. То, что это лента и вкладка на ленте, понятно на интуитивном уровне. Пока неважно - все равно они не главную роль играют в коде.
Потом на сцену выступают RibbonPanelSource и RibbonPanel. Не знаю, не понимаю, в чем отличие. Это, похоже, тоже разработка Autodesk (по крайней мере, находится оно в Autodesk.Window namespace).
После всего этого в коде появляется КНОПКА RibbonButton. У нее используются параметры Text, CommandParameter (это, видимо, команда AutoCAD, которая запускается при нажатии кнопки), ShowText (булевская переменная, видимо, отвечающая за отображение текста) и CommandHandler (обработчик, который будет исполняться при нажатии кнопки).
Затем определяется этот самый обработчик, причем отдельным классом. Отдельным классом он определен, как я понимаю, потому, что он должен реализовывать интерфейс System.Windows.Input.ICommand. В рамках класса AdskCommandHandler определены: функция CanExecute(), событие CanExecuteChanged и функция Execute() (все это просто для реализации интерфейса ICommand - так, CanExecute() в этом примере всегда возвращает true, а событие CanExecuteChanged вроде бы нигде не используется).
В итоге я добавил кнопку (с картинкой, там дальше в примере это было) и в Execute() поместил логику. Работает.
При этом я понятия не имею, какие еще у кнопки есть методы (то есть поля и методы я могу просмотреть в IDE, но что они делают - черт их знает).
Аналогичная ситуация и со многими другими объектами. И что делать?

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Вопросы новичка
« Ответ #6 : 22-12-2013, 13:49:17 »
Во-первых, откуда-то взялся класс IExtensionApplication. Видимо, именно благодаря ему можно использовать Initialize() и Terminate()
Тынц, тынц.

Цитировать
Хотя эта разметка выглядит как-то очень незнакомо. Как ее к коду прикручивать - совершенно непонятно.
...
Потом на сцену выступают RibbonPanelSource и RibbonPanel. Не знаю, не понимаю, в чем отличие.
...
При этом я понятия не имею, какие еще у кнопки есть методы (то есть поля и методы я могу просмотреть в IDE, но что они делают - черт их знает).
Аналогичная ситуация и со многими другими объектами. И что делать?
Я тебе уже ответил: если хочешь нормально разобраться в вопросе, то изучи технологию WPF, ибо механизм работы риббонов построен на ней. Сможешь в риббонах (и не только в них) делать намного более навороченные вещи, чем показывают даже в блогах разработчиков ADN. Литература по теме WPF (и не только по ней) мною была обозначена здесь (см. пункты 9-11).

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

  • Administrator
  • *****
  • Сообщений: 13177
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вопросы новичка
« Ответ #7 : 22-12-2013, 13:55:13 »
Alex,
В итоге я добавил кнопку (с картинкой, там дальше в примере это было) и в Execute() поместил логику. Работает.
Так замечательно же!  :)
При этом я понятия не имею, какие еще у кнопки есть методы (то есть поля и методы я могу просмотреть в IDE, но что они делают - черт их знает).
Задавай конкретные вопросы (один вопрос - одна тема). Не стесняйся. Если сами не будем знать ответы - передадим их в ADN DevHelp ("скорая помощь" разработчикам под платформы Autodesk). Раньше или позже, но ответ на свой вопрос ты получишь.
Онлайн документация (на английском) - Руководство разработчика - http://www.autodesk.com/autocad-net-developers-guide
Андрей Бушман частично его перевёл - ссылку он тебе сам даст.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • Сообщений: 36
  • Карма: 1
Re: Вопросы новичка
« Ответ #8 : 22-12-2013, 13:58:02 »
Спасибо всем за помощь. Буду потихоньку разбираться. Вопросы будут; наверное, много.)

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Вопросы новичка
« Ответ #9 : 22-12-2013, 13:59:22 »
ссылку он тебе сам даст.
А вы это сделать не можете по каким соображениям? ;)
Цитировать
Вопросы будут; наверное, много.)
Очень желательно, чтобы вопросы задавались не потому, что лень заглянуть в google\справку\SDK\блоги\известные сайты, а в случае, если нужная информация не была найдена в обозначенных источниках :)

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

  • Administrator
  • *****
  • Сообщений: 13177
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вопросы новичка
« Ответ #10 : 22-12-2013, 14:01:50 »
А вы это сделать не можете по каким соображениям? ;)
1. Не помню точную ссылку.
2. Думал, что тебе будет самому приятно её дать.
 ;D
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение