Вкладка с кнопкой на панели Civil

Автор Тема: Вкладка с кнопкой на панели Civil  (Прочитано 10897 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Здравствуйте, для классического када работает вот этот пример https://adn-cis.org/forum/index.php?topic=8214.0, а вот при создании проекта для Civil не понимает всё что связано с "Ribbon".

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

Отмечено как Решение D_TRex 04-04-2023, 13:35:22

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Вкладка с кнопкой на панели Civil
« Ответ #1 : 04-04-2023, 10:50:00 »
а вот при создании проекта для Civil не понимает всё что связано с "Ribbon".
Подключены AcWindow.dll и AdWindow.dll? Лежат в папке: C:\Program Files\Autodesk\AutoCAD <номер версии>\

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

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Вкладка с кнопкой на панели Civil
« Ответ #2 : 04-04-2023, 13:35:10 »
Спасибо, я подключал от сюда (C:\Autodesk\ObjectARX_for_AutoCAD_2021_Win_64bit_dlm\inc) и существующие ошибки решались, но возникали новые, а по пути что Вы указали всё подошло.

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

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Вкладка с кнопкой на панели Civil
« Ответ #3 : 04-04-2023, 20:19:06 »
Дабы тема имела логическое завершение закину код из вопроса переработанный в VB вдруг я не один такой. Заодно и код на изменение описания колодца
Код - vb.net [Выбрать]
  1. Imports System.Drawing
  2. Imports System.Windows.Input
  3. Imports Autodesk.AutoCAD.ApplicationServices
  4. Imports Autodesk.AutoCAD.Runtime
  5. Imports Autodesk.Windows
  6.  
  7. ' This line is not mandatory, but improves loading performances
  8. <Assembly: ExtensionApplication(GetType(CData.MyPlugin))>
  9.  
  10. Namespace CData
  11.  
  12.     Public Class MyPlugin
  13.         Implements IExtensionApplication
  14.  
  15.         Public Sub Initialize() Implements IExtensionApplication.Initialize
  16.             Dim ribCntrl As RibbonControl = Autodesk.Windows.ComponentManager.Ribbon
  17.             Dim ribTab As RibbonTab
  18.             For i = 0 To ribCntrl.Tabs.Count - 1
  19.                 If ribCntrl.Tabs.Item(i).Title = "TRex" Then
  20.                     ribTab = ribCntrl.Tabs.Item(i)
  21.                     Exit For
  22.                 End If
  23.             Next
  24.             ' проверяю если уже есть панель, то обращаюсь к ней, если нет то создаю новую
  25.             If IsNothing(ribTab) = True Then
  26.                 ribTab = New RibbonTab()
  27.                 ribTab.Title = "TRex"
  28.                 ribTab.Id = "RibbonExample_ID"
  29.                 ribCntrl.Tabs.Add(ribTab)
  30.             End If
  31.             Dim ribSourcePanel As RibbonPanelSource = New RibbonPanelSource
  32.             ribSourcePanel.Title = "Элементы сети"
  33.             Dim ribPanel As RibbonPanel = New RibbonPanel
  34.             ribPanel.Source = ribSourcePanel
  35.             ribTab.Panels.Add(ribPanel)
  36.  
  37.             ' кнопка RenStrPlan переименовать колодец на плане
  38.             Dim tRenStrPlan As New RibbonToolTip
  39.             tRenStrPlan.IsHelpEnabled = False
  40.             Dim ribBtnRenStrPlan As New RibbonButton
  41.             ribBtnRenStrPlan.CommandParameter = "RenStrPlan"
  42.             tRenStrPlan.Command = "RenStrPlan"
  43.             ribBtnRenStrPlan.Name = "rbtnRenStrPlan"
  44.             ribBtnRenStrPlan.Text = "Rename" & vbLf & "Struct"
  45.             tRenStrPlan.Title = "RenStrPlan"
  46.             ribBtnRenStrPlan.CommandHandler = New RibbonCommandHandler()
  47.             ribBtnRenStrPlan.Orientation = Windows.Controls.Orientation.Vertical
  48.             ribBtnRenStrPlan.Size = RibbonItemSize.Large
  49.             ' преобразование картинки по пути в изображение
  50.             Dim btmRenStrPlan As New Bitmap(My.Application.Info.DirectoryPath & "\Icon\cdata.png")
  51.             ribBtnRenStrPlan.LargeImage = CModul.BitmapToImage(btmRenStrPlan)
  52.             ribBtnRenStrPlan.ShowImage = True
  53.             ribBtnRenStrPlan.ShowText = True
  54.             tRenStrPlan.Content = "Переименовать колодец на плане"
  55.             ribBtnRenStrPlan.ToolTip = tRenStrPlan
  56.             ribSourcePanel.Items.Add(ribBtnRenStrPlan)
  57.             ribSourcePanel.Items.Add(New RibbonSeparator)
  58.         End Sub
  59.  
  60.         Public Sub Terminate() Implements IExtensionApplication.Terminate
  61.             ' Do plug-in application clean up here
  62.         End Sub
  63.     End Class
  64.  
  65.     Public Class RibbonCommandHandler
  66.         Implements System.Windows.Input.ICommand
  67.         Public Function CanExecute(parameter As Object) As Boolean
  68.             Return True
  69.         End Function
  70.  
  71.         Public Event CanExecuteChanged As EventHandler
  72.         Private Event ICommand_CanExecuteChanged As EventHandler Implements ICommand.CanExecuteChanged
  73.  
  74.         Public Sub Execute(parameter As Object)
  75.             Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  76.  
  77.             If TypeOf parameter Is RibbonButton Then
  78.                 Dim button As RibbonButton = TryCast(parameter, RibbonButton)
  79.                 doc.Editor.WriteMessage(vbLf & "RibbonButton Executed: " + button.Text + vbLf)
  80.             End If
  81.         End Sub
  82.  
  83.         Private Function ICommand_CanExecute(parameter As Object) As Boolean Implements ICommand.CanExecute
  84.             Return True
  85.         End Function
  86.  
  87.         Private Sub ICommand_Execute(parameter As Object) Implements ICommand.Execute
  88.             Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  89.  
  90.             If TypeOf parameter Is RibbonButton Then
  91.                 Dim button As RibbonButton = TryCast(parameter, RibbonButton)
  92.                 Application.DocumentManager.MdiActiveDocument.SendStringToExecute(button.CommandParameter & " ", True, False, True)
  93.             End If
  94.         End Sub
  95.     End Class
  96.  
  97. End Namespace

Знаю правила что один вопрос одна тема, но вопрос типа логической переменной (нет или да) можно ли из модуля "myCommands.vb" управлять WinForm?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Вкладка с кнопкой на панели Civil
« Ответ #4 : 06-04-2023, 10:46:01 »
Спасибо, я подключал от сюда (C:\Autodesk\ObjectARX_for_AutoCAD_2021_Win_64bit_dlm\inc)
Вообще, это лучше, чем подключать из папки автокада. Надо только разобраться, почему ошибки возникают. Может часть ссылок взята из другого места и поэтому возникает конфликт? Или версия ARX не соответствует версии Автокада.
А ещё лучше - подключать нужные ссылки через Nuget-пакеты. Там для автокадов всех версий есть нужные пакеты.