Перейти к публикации

Новичок в API


Рекомендованные сообщения

Добрый день.

Подскажите пожалуйста, как посмотреть логи подключения библиотеки к Компасу?

По совету интернетов, собрал "Step2" из SDK. Но при подключении к Компасу - ругань.

Скрытый текст

K62pEDY7QO.png

Через панельку ActiveX тоже не работает. Хотя там в списке библиотека есть

Удалил библиотеку из конфигурации.

Попробовал просто добавить через ActiveX - ошибка и список пуст.

Изменено пользователем streamdown
Ссылка на сообщение
Поделиться на других сайтах


UnPinned posts

 

Цитата из справки SDK.chm

Цитата

 

Создание прикладных библиотек  > Создание прикладных библиотек в различных средах программирования С#

 

Чтобы зарегистрировать библиотеку на компьютере пользователя, необходимо вос­пользоваться утилитой RegAsm.exe. Нажмите кнопку Пуск, вызовите команду Выпол­нить…, введите командную строку вида RegAsm.exe /codebase <файл_библиотеки> и на­жмите кнопку ОК.

 

Изменено пользователем KrissKross
Ссылка на сообщение
Поделиться на других сайтах

Не работает. Все шаги по обычной сборке сделал. В Компасе при попытке "добавить приложение" всё то же самое. Всплывашка об ошибке.

 

 

Скрытый текст

devenv_UhjBvf3OCl.png

devenv_9ubOfby6BP.png

devenv_2dVOh1lvZZ.png

 

Изменено пользователем streamdown
Ссылка на сообщение
Поделиться на других сайтах

Проделайте в ручную

Командная строка - запустить от имени администратора

посмотрите какой ответ

если все успешно - смотреть на вкладке ActiveX

Ссылка на сообщение
Поделиться на других сайтах

Ну, разницы вручную или из-под студии, которая тоже от имени администратора запущена - никакой. Ну да ладно))

Скрытый текст

9PCc7hr9Ab.png

 

2 часа назад, KrissKross сказал:

если все успешно - смотреть на вкладке ActiveX

 

25.04.2022 в 13:40, streamdown сказал:

Через панельку ActiveX тоже не работает. Хотя там в списке библиотека есть

 

Ссылка на сообщение
Поделиться на других сайтах

Компас был закрыт. Это я просто показал результат в cmd и рядом Компас, который попытался открыть dll-ку

Ссылка на сообщение
Поделиться на других сайтах

Всё повторил заново. Разархивировал, под админом VS. В постбилд добавил регистрацию. Собрал проект. Открыл Компас из-под Администратора добавил ActiveX - менюха появилась.

Ссылка на сообщение
Поделиться на других сайтах

Бинго

Значит - сделаем ремарку на будущее

 

1. Запускать регистрацию с правами администратора при закрытом Компасе,

RegAsm.exe /codebase <файл_библиотеки>

 

2. Компас запустить с правами администратора и добавить библиотеку в Конфигураторе в панели ActiveX 

 

Ссылка на сообщение
Поделиться на других сайтах
38 минут назад, KrissKross сказал:

Запускать регистрацию

Ещё вам ремарки))

Чтоб не мучаться с регистрацией, делаем так:

Цитата

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /codebase "$(TargetPath)"

вот сюда

Скрытый текст

devenv_tvTT629pSK.png

 

 

опционально

Далее, если проект большой и толстый, то временами там перелопачиваются интерфейсы. Для автоматической разрегистрации делаем так:

ПКМ на проекте - выгрузить проект - ПКМ на выгруженном проекте - изменить файл проекта. Идём в самый низ и добавляем:

Цитата

 <Target Name="BeforeClean">
      <Message Text="Разрегистрация!" />
      <Exec Command="C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe /unregister $(TargetPath)" />
  </Target>

вот так

Скрытый текст

devenv_E26lT9QoVN.png

 

При очистке будет автоматом разрегистрация

Так же, приложение подвисало намертво вместе с Компасом, если у него не будет ENDMENU.

Так как всё хотел повторить с нуля, то накопипастил да наудалял типа "ненужного". Ну и...поймал))

 

Скрытый текст

Вот это НЕ удалять

 

devenv_D34zFn6UZX.png

 

Изменено пользователем streamdown
Ссылка на сообщение
Поделиться на других сайтах

@KrissKross можете помочь с вроде бы простым действием?

В открытой сборке пробежаться по деталям и подсборкам и для каждого компонента/сборки прописать свойство "Суперсвойство" со значением "1"

Не обязательно за меня писать код. Просто по шагам. Мол

- так пробежаться

- так создать и внести свойство в ранее как то полученный объект/документ

Ссылка на сообщение
Поделиться на других сайтах

@streamdown  

Без кода - логика и немного нюансов

 

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

Ссылка на обсуждение этой проблемы

 

и так поехали - если у вас "простая" сборка без исполнений

можно пробежаться по всем компонентам в рамках главной сборки - не открывая каждую деталь в отдельном окне

 

1. Прохождение по компонентам

используем метод PartsEx[1] в вашем случае - 1

т.к. 0- все компоненты или 1 - Первые экземпляры вставок компонентов

 

если сборка - то соответственно рекурсивно у нее берем PartsEx и т.д.

 

2. Создать свойство "Суперсвойство" -

в ручную создаем его в собственной библиотеки свойств в файле MyProperties.lpt

чтобы был один идентификатор для всех вставляемых свойств

и добавляем AddProperty

 

 

Изменено пользователем KrissKross
Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, KrissKross сказал:

в собственной библиотеки свойств

А что насчёт IPropertyKeeper ?

Я попробовал пойти таким путём:

Скрытый текст

 


public void GetDetails(IPart7 part)
        {
            parts.Add(part);
            foreach (IPart7 part7 in part.Parts)
            {
                if (part7.Detail == true)
                {
                    parts.Add(part7);
                }
                else
                {
                    GetDetails(part7);
                }
            }
        }
        List<IPart7> parts = new List<IPart7>();
        // Работа с документом
        private void WorkDocument()
        {
            IKompasDocument3D document3D = (IKompasDocument3D) app.ActiveDocument;
            IPart7 part7 = document3D.TopPart;
            GetDetails(part7);

            IPropertyMng propertyManager = (IPropertyMng) app;
            if (propertyManager == null)
            {
                app.MessageBoxEx("Prop - null", "dsfsd", 0);
                return;
            }

            foreach (IPart7 part in parts)
            {
                var propertyKeeper = (IPropertyKeeper) part;
                if (propertyKeeper == null)
                {
                    app.MessageBoxEx("propertyKeeper - null", "", 0);
                    return;

                }
                var iProperty_Material = propertyManager.GetProperty(part, 4.0);
                if (iProperty_Material == null)
                {
                    app.MessageBoxEx("propMat - null", "", 0);
                    return;
                }

                propertyKeeper.GetPropertyValue(iProperty_Material, out var ttt, true, out var ii);
                app.MessageBoxEx(ttt.ToString(), "", 0);
               
            }

}

 

 

3 минуты назад, streamdown сказал:

var iProperty_Material = propertyManager.GetProperty(part, 4.0);

и вот тут null. Такое ощущение что чтоб добыть свойство нужно как-то IPart7 обработать или что-то из него получить.

P.S. Если честно, ожидал от системы такого уровня и такого позиционирования себя, много большего в части API. Или программирование под Компас это непопулярно?

Изменено пользователем streamdown
Ссылка на сообщение
Поделиться на других сайтах
1 час назад, streamdown сказал:

P.S. Если честно, ожидал от системы такого уровня и такого позиционирования себя, много большего в части API.

Обычные чувства при переходе из одного инструмента на другой

и это пройдет - как говориться

Ссылка на сообщение
Поделиться на других сайтах

@KrissKross не, я про

- SDK.chm. Фактически это Summary из кода. Да, так делают, но при этом оснащают примерами, вики или ещё как то.

- API5-API7. Тут мне непонятна вообще мотивация так делать. Да ещё и каст из одного в другое существует. :wallbash:

- Форум Аскона, где вроде бы должно быть море примеров. А местами пользователи делают одно и то же разными шагами и разным кодом. А иногда ни так и ни так не получается)))

Может быть дело в том, что задачи по программированию под Компас Асконовцы предпочитают брать на себя и типа за денюжку. Не спорю, есть в этом что-то рациональное.

Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, streamdown сказал:

и вот тут null.

Я через GetProperties получал массив свойств без проблем

Ссылка на сообщение
Поделиться на других сайтах

У меня так

Скрытый текст

KOMPAS_cH4EQEZJr4.png

 

Я чего ещё не понимаю. Я фактически кодом местами делаю CriticalException. На что Компас не реагирует никак. Поэтому, непонятно что именно произошло.

Кстати, а есть где инструкция как именно правильно отлаживать код разрабатываемой библиотеки с помощью VS и C#?

Ссылка на сообщение
Поделиться на других сайтах
28 минут назад, streamdown сказал:

У меня так

Делал так, все читает  и массивом и по отдельности...

Скрытый текст

К_API.jpg

 

Ссылка на сообщение
Поделиться на других сайтах

@kvin ага, с текущего документа читает. А вы попробуйте туда подсунуть part7

Всё. Понял

Скрытый текст



  foreach (IPart7 part in parts)
            {
                var propertyKeeper = (IPropertyKeeper)part;
                if (propertyKeeper == null)
                {
                    app.MessageBoxEx("propertyKeeper - null", "", 0);
                    return;
                }

                var props = (object[])propertyManager.GetProperties(part.OpenSourceDocument(null));
                if (props == null)
                {
                    app.MessageBoxEx("props - null", "", 0);
                }
                foreach (var prop in props)
                {
                    var prp = (_Property)prop;

                   var result =  propertyKeeper.GetPropertyValue(prp, out var val, true, out var fromSource);
                    app.MessageBoxEx(val.ToString(), "", 0);
                }
}

 

 

Блин, так и напрашивается своя библиотека для унификации этих действий. Очень много кастов

Изменено пользователем streamdown
Ссылка на сообщение
Поделиться на других сайтах

Вот к слову о справке

Скрытый текст

hh_s2TpTSvDhi.png

 

И ведь каст к _Property возымел успех. А к IProperty - нет.

Ну вот кто так делает? )))

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...