ADN Club > Civil 3D API
Вкладка с кнопкой на панели Civil
(1/1)
D_TRex:
Здравствуйте, для классического када работает вот этот пример https://adn-cis.org/forum/index.php?topic=8214.0, а вот при создании проекта для Civil не понимает всё что связано с "Ribbon".
Я сперва начал грузить все библиотеки что были задействованы в приложении для классического када потому что оно запускается в Civil, но думаю что это не верный подход.
Дмитрий Загорулькин:
--- Цитата: D_TRex от 04-04-2023, 05:31:30 ---а вот при создании проекта для Civil не понимает всё что связано с "Ribbon".
--- Конец цитаты ---
Подключены AcWindow.dll и AdWindow.dll? Лежат в папке: C:\Program Files\Autodesk\AutoCAD <номер версии>\
D_TRex:
Спасибо, я подключал от сюда (C:\Autodesk\ObjectARX_for_AutoCAD_2021_Win_64bit_dlm\inc) и существующие ошибки решались, но возникали новые, а по пути что Вы указали всё подошло.
D_TRex:
Дабы тема имела логическое завершение закину код из вопроса переработанный в VB вдруг я не один такой. Заодно и код на изменение описания колодца
--- Код - vb.net [Выбрать] ---Imports System.DrawingImports System.Windows.InputImports Autodesk.AutoCAD.ApplicationServicesImports Autodesk.AutoCAD.RuntimeImports Autodesk.Windows ' This line is not mandatory, but improves loading performances<Assembly: ExtensionApplication(GetType(CData.MyPlugin))> Namespace CData Public Class MyPlugin Implements IExtensionApplication Public Sub Initialize() Implements IExtensionApplication.Initialize Dim ribCntrl As RibbonControl = Autodesk.Windows.ComponentManager.Ribbon Dim ribTab As RibbonTab For i = 0 To ribCntrl.Tabs.Count - 1 If ribCntrl.Tabs.Item(i).Title = "TRex" Then ribTab = ribCntrl.Tabs.Item(i) Exit For End If Next ' проверяю если уже есть панель, то обращаюсь к ней, если нет то создаю новую If IsNothing(ribTab) = True Then ribTab = New RibbonTab() ribTab.Title = "TRex" ribTab.Id = "RibbonExample_ID" ribCntrl.Tabs.Add(ribTab) End If Dim ribSourcePanel As RibbonPanelSource = New RibbonPanelSource ribSourcePanel.Title = "Элементы сети" Dim ribPanel As RibbonPanel = New RibbonPanel ribPanel.Source = ribSourcePanel ribTab.Panels.Add(ribPanel) ' кнопка RenStrPlan переименовать колодец на плане Dim tRenStrPlan As New RibbonToolTip tRenStrPlan.IsHelpEnabled = False Dim ribBtnRenStrPlan As New RibbonButton ribBtnRenStrPlan.CommandParameter = "RenStrPlan" tRenStrPlan.Command = "RenStrPlan" ribBtnRenStrPlan.Name = "rbtnRenStrPlan" ribBtnRenStrPlan.Text = "Rename" & vbLf & "Struct" tRenStrPlan.Title = "RenStrPlan" ribBtnRenStrPlan.CommandHandler = New RibbonCommandHandler() ribBtnRenStrPlan.Orientation = Windows.Controls.Orientation.Vertical ribBtnRenStrPlan.Size = RibbonItemSize.Large ' преобразование картинки по пути в изображение Dim btmRenStrPlan As New Bitmap(My.Application.Info.DirectoryPath & "\Icon\cdata.png") ribBtnRenStrPlan.LargeImage = CModul.BitmapToImage(btmRenStrPlan) ribBtnRenStrPlan.ShowImage = True ribBtnRenStrPlan.ShowText = True tRenStrPlan.Content = "Переименовать колодец на плане" ribBtnRenStrPlan.ToolTip = tRenStrPlan ribSourcePanel.Items.Add(ribBtnRenStrPlan) ribSourcePanel.Items.Add(New RibbonSeparator) End Sub Public Sub Terminate() Implements IExtensionApplication.Terminate ' Do plug-in application clean up here End Sub End Class Public Class RibbonCommandHandler Implements System.Windows.Input.ICommand Public Function CanExecute(parameter As Object) As Boolean Return True End Function Public Event CanExecuteChanged As EventHandler Private Event ICommand_CanExecuteChanged As EventHandler Implements ICommand.CanExecuteChanged Public Sub Execute(parameter As Object) Dim doc As Document = Application.DocumentManager.MdiActiveDocument If TypeOf parameter Is RibbonButton Then Dim button As RibbonButton = TryCast(parameter, RibbonButton) doc.Editor.WriteMessage(vbLf & "RibbonButton Executed: " + button.Text + vbLf) End If End Sub Private Function ICommand_CanExecute(parameter As Object) As Boolean Implements ICommand.CanExecute Return True End Function Private Sub ICommand_Execute(parameter As Object) Implements ICommand.Execute Dim doc As Document = Application.DocumentManager.MdiActiveDocument If TypeOf parameter Is RibbonButton Then Dim button As RibbonButton = TryCast(parameter, RibbonButton) Application.DocumentManager.MdiActiveDocument.SendStringToExecute(button.CommandParameter & " ", True, False, True) End If End Sub End Class End Namespace
Знаю правила что один вопрос одна тема, но вопрос типа логической переменной (нет или да) можно ли из модуля "myCommands.vb" управлять WinForm?
Дмитрий Загорулькин:
--- Цитата: D_TRex от 04-04-2023, 13:35:10 ---Спасибо, я подключал от сюда (C:\Autodesk\ObjectARX_for_AutoCAD_2021_Win_64bit_dlm\inc)
--- Конец цитаты ---
Вообще, это лучше, чем подключать из папки автокада. Надо только разобраться, почему ошибки возникают. Может часть ссылок взята из другого места и поэтому возникает конфликт? Или версия ARX не соответствует версии Автокада.
А ещё лучше - подключать нужные ссылки через Nuget-пакеты. Там для автокадов всех версий есть нужные пакеты.
Навигация
Перейти к полной версии