• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

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

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Импорт библиотеки фрагментов

Автор MrBarry, 06.10.23, 10:46:27

« назад - далее »

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

p3452

MrBarry, можно использовать примеры по SDK:
Библ_фрагм.png
Step3a, Step5

Warlock-72

Цитата: Валерий Изранов от 06.10.23, 13:06:15Давайте у Модератора форума спросим про соблюдение Правил форума в части использования русского языка.
В чем заключается Ваша претензия? Озвучьте конкретно.
Судя по всему, Вы подразумеваете якобы несоблюдение Правил Форума. Какой пункт не соблюдается?
Конкретику, пожалуйста...

Валерий Изранов

#22
Warlock-72,
Из Правил форума
3.5. Основной язык Форума - русский.

MrBarry писал Здаров, надо значится мне из библы фрагментов файликом хапнуть фрагмент и впендюрить в мой чертёж. Чё как делать, классы там, методы, намекните по-братски, это очень далеко от русского.
Все таки Модератор должен оценить сообщение от MrBarry на соответствие нормам Форума.

MrBarry

Цитата: Валерий Изранов от 06.10.23, 13:51:18Из Правил форума
3.5. Основной язык Форума - русский.

Warlock-72, MrBarry писал Здаров, надо значится мне из библы фрагментов файликом хапнуть фрагмент и впендюрить в мой чертёж. Чё как делать, классы там, методы, намекните по-братски, это совсем не по русски
Стесняюсь спросить, но что тогда это за язык? На татарский не похож, иврит другой, а китайский чуть сложнее. Не иначе как польский, выходит...

Это сообщение всё ещё на русском языке. Просто стиль просторечный, можно даже сказать что жаргон. Но русский, а значит правила не нарушены. А что вам не нравится стиль сообщения, это уже ваши проблемы. А вот пункт 5.10. Публичная переписка личного характера, особенно выяснение отношений. уже подходит, причём на данный момент уже под всех нас в этой теме.

MrBarry

Цитата: p3452 от 06.10.23, 13:22:32MrBarry, можно использовать примеры по SDK:
Step3a, Step5
Я знал про Step3a, смотрел его (там ничего полезного), но вот про Step5, что там как раз то, что меня интересует, я не знал. Спасибо за подсказку, очень поможет, пойду изучу

MrBarry

Что ж, после нескольких дней изучения всех подсказок, вывод неутешительный
ILibraryManager.FragmentsLibraries не заработали, плюс заставляли переписывать значительные куски программы под API7 (в целом API5 для 2D удобнее). Методы из примера Step5 не заработали даже при полном копировании, а после небольшой адаптации начали выдавать абсурдную картину - в окне выбора файла из Проводника типы файлов (где дают например такой выбор: txt, doc, docx или Все файлы) выбор был из "набор иероглифов", "набор других иероглифов" или -1. Разумеется, при открытии любого файла ничего не происходило...
Когда я попробовал избежать этого диалогового окна  и напрямую открывать файл, вписав путь к нему, я снова получил ту же ошибку, как на скрине на своём втором сообщении в этой теме.

Всё намекает на то, что проблема с локализацией/типом строковой переменной, а -1 в обоих случаях это просто заглушка на месте переменной неправильного типа. Но я использую ровно то же самое, что и в примерах Компаса, даже функции TO_OLE для преобразования типа строк скопировал и использовал (с ними и без них результат один)

Если кто-то сталкивался с похожим на С++, скорее всего ваше решение будет простым, но не самым очевидным.
p.s. если интересуют скрины, могу заново переписать программу и сделать скриншот творящегося непотребства

Михаил88

#26
Цитата: MrBarry от 19.10.23, 10:59:26Что ж, после нескольких дней изучения всех подсказок, вывод неутешительный

Screenshot_1.png
Screenshot_2.png
Screenshot_3.png
+ Благодарностей: 1

p3452

Цитата: MrBarry от 19.10.23, 10:59:26Что ж, после нескольких дней изучения всех подсказок, вывод неутешительный ILibraryManager.FragmentsLibraries не заработали...
Ну, не знаю, как уж Вы там "мучили" step5 на C++, но на C# - "9 Вставка фрагмента из библиотеки фрагментов - ShowInsertFragment(doc)" - работает без особых нареканий:
Библиотека фрагментов.png

MrBarry

Цитата: p3452 от 19.10.23, 15:59:28Ну, не знаю, как уж Вы там "мучили" step5 на C++
Я говорю, проблема скорее всего связана с самим языком. То ли опять тип данных не тот, то ли кодировка полетела, то ли ещё что. Я уже и сам не рад, что сел писать на плюсах, но это единственный язык из доступных для Kompas API, который я уже знал. Проще было бы потратить неделю на плотное изучение Delphi и писать на нём, благо для этого и книга Норсеева целая есть, и на форуме люди. Но мне потом это всё в систему интегрировать, которая написана на другом ЯП, и кто его знает, получится ли прогу на Delphi "подружить" с ним. Насчёт С++ таких проблем нет, уже знаю

Nipal

С Delphi тоже проблем быть не должно, а вообще желательно показывать проблемный код, по картинкам его не понять.
Да и примеров для С++ несколько.
Cpp.png

MrBarry

Цитата: Nipal от 20.10.23, 08:20:30С Delphi тоже проблем быть не должно, а вообще желательно показывать проблемный код, по картинкам его не понять.
Да и примеров для С++ несколько.
На картинке просто адаптации одного кода под разные среды программирования (например, есть файл .cbproj для проектов C++ Builder). Фактической разницы у них нет
Проблемный код постоянно меняется. Например, я попробовал по вашему совету ILibraryManager.FragmentsLibraries, несколько часов писал и исправлял код, понял что не работает, всё снёс и пошёл пробовать другие примеры, например Step5. Он не сработал, я снова удалил и начал писать сам, просто поглядывая методы из Step5. Ну и так далее
Вот, например, код на основе Step5:
    // Тестовый фрагмент
wchar_t * nameFr = L"c:\\KompasFiles\\frag1.frw";
ksFragmentPtr fr( (ksFragment*)doc->GetFragment(), false);

// Параметры местоположения фрагмента
ksPlacementParamPtr par = kompas->GetParamStruct(ko_PlacementParam);
par->xBase = 30; par->yBase = 40;
par->set_scale_(1);
par->angle = 0;

ksPhantomPtr rub( (ksPhantom*)kompas->GetParamStruct( ko_Phantom ), false);
rub->Init();
rub->set_phantom(1);
// Интересный факт - в Step5 объявляются и Phantom и Type1 одновременно
// Однако пока ты не вызовешь Init() для Phantom, Type1 не получится
// объявить, будет вылетать ошибка. Баг в их коде?
ksType1Ptr type1( (ksType1*)rub->GetPhantomParam(), false);
type1->Init();
type1->scale_ = 1;

type1->gr = fr->ksReadFragmentToGroupEx(TO_OLE(nameFr), 1, par, false);
doc->ksStoreTmpGroup(type1->gr);
reference ref1, ref2;
ref1 = fr->ksFragmentDefinition(TO_OLE(nameFr), TO_OLE(L"Вставка фрагмента"), 1);
ref2 = fr->ksFragmentDefinition(TO_OLE(nameFr), TO_OLE(L"Vstavka"), 0);

fr->ksReadFragment(nameFr, 1, par);

reference  p = fr->ksInsertFragment(ref1, 0, par);
doc->ksEndGroup();

int j;
    type1->angle = 0;
double x, y, ang = 0;
if ( (j = doc->ksPlacement( NULL, &x, &y, &ang, rub ))!=0 ) {
doc->ksCopyObj( p,                 // указатель на графический объект
0,0,               // базовая точка объекта
x, y,              // точка куда копировать
1, type1->angle ); // масштаб и угол поворота а градусах
}
doc->ksDeleteObj(type1->gr);

А вот адаптация кода на Питоне от Михаила, который я только что дописал:
IInsertionsManagerPtr insMan(doc);
ViewsAndLayersManagerPtr viewMan = doc->ViewsAndLayersManager;
IViewsPtr views = viewMan->get_Views();
IViewPtr view = views->get_ActiveView();
IDrawingContainerPtr cont(view);
InsertionObjectsPtr insObjs = cont->InsertionObjects;

IInsertionDefinitionPtr insDef = insMan->AddDefinition(ksTBodyFragment, L"ThatFragment", path);
IInsertionObjectPtr insObj = insObjs->Add(insDef);
insObj->SetPlacement(10, 10, 0, false);
insDef->set_Name(path);
IInsertionFragmentPtr fr(insObj);
insObj->_Update();

Первый работает корректно, кроме того что файл не открывается, а вставка через ksPlacement и ksCopyObj вставляет в документ ничто (зато на нужные координаты :D)
Второй выдаёт ту же ошибку открытия файла и ничего больше не делает

p3452

1. Нецелесообразно заниматься "отсебятиной" если не удается заставить работать, даже, имеющийся готовый код
(разбирайтесь с подключаемыми файлами и настройками среды программирования).
2. Если уж "самовольничаете", то хорошо бы в коде добавить проверки на существование вновь создаваемых объектов.
3. Если Вас удивляет вот это:
// Интересный факт - в Step5 объявляются и Phantom и Type1 одновременно
// Однако пока ты не вызовешь Init() для Phantom, Type1 не получится
// объявить, будет вылетать ошибка. Баг в их коде?
хорошо бы еще Справку по API поизучать...
(Phantom - "структура" для описания фантома, одним из элементов этой структуры является тип фантома - "перечисление" из возможных типов. Каждый из "типов" этого перечисления, в свою очередь, тоже является структурой - например Type1)
4. Учитывая предыдущие пункты Вы смело можете переходить на любой другой язык программирования...

MrBarry

1) Мысль неплохая, но я уже успел значительную часть времени потратить на изучение и настройку среды и подключаемых файлов (даже тему создавал про ksAPI7)
2) Во-первых, для этого существует отладчик (он и позволил отловить баг с Phantom и Type1), а во-вторых я их использую там, где отладчик не помогает, но есть методы, которые могут помочь отследить (всякие count() для коллекций, isValid() и подобные). В данном случае проблема в другой плоскости лежит, ибо все объекты создаются, но работают неправильно
3) Возможно, я не до конца понимаю как оно работает, работа в Компасе (что через UI, что через API) не моя специализация, но как оно должно работать, в коде от ASKON написано и это я отлично понимаю (тем более что тут как раз-таки я скопировал всё, просто передвинул местами инициализацию, чтоб оно работало)
4) Я уже зашёл слишком далеко. По сути, если решить эту проблему, и закончить с задачей, то модуль будет почти готов. Переход на другой язык это откат на недели назад по прогрессу, меня начальство съест за такое. Будь это самостоятельная программа, которую я пишу для души, я бы перешёл на другой ЯП, но не могу

MrBarry

Цитата: Валерий Изранов от 20.10.23, 10:03:32Буквально вчера MrBarry в одной из тем написал
"Добавлю от себя, что шпион из недружественных стран Nepal (позывной - "Несерьёзный автор") и я (позывной - "Жаргонист") работаем сообща для того чтобы саботировать работу добросовестных инженеров и программистов..."

Однако...
Я уже понял, что у вас отсутствует чувство юмора и вы это восприняли всерьёз. Но здесь идёт реальное обсуждение, так что можете в той теме в разделе "За рюмкой чая" поднять этот вопрос, а здесь не по теме прекращайте хныкать.

Nipal

#34
Я думаю проблема из за строк, поэтому их функция не видит.
Вот статья может чем-то поможет
Скомпилировал пример Step 5, нормально все работает.
Step5.rar

p3452

Цитата: Nipal от 20.10.23, 10:43:19Я думаю проблема из за строк, поэтому их функция не видит.
- Поддерживаю!

MrBarry

Цитата: Nipal от 20.10.23, 10:43:19Скомпилировал пример Step 5, нормально все работает.
Значит проблема в C++ Builder-е
Вот от чего я, конечно, с удовольствием избавлюсь в пользу буквально любой другой среды
В чём Вы разрабатываете? И какие шаги нужны для настройки среды под разработку для Kompas API?

Nipal

Не думаю, что проблема в C++ Builder.
Я на Delphi, примеры уже настроенные идут, единственное это пути правлю, т.к. переношу проекты на другой диск, ели нужно 32 и 64- разряда разделяю куда будут компилироваться, а проект один.

MrBarry

Цитата: Nipal от 20.10.23, 12:38:24Не думаю, что проблема в C++ Builder.
Я сейчас копался в настройках проекта, изменил буквально пару настроек и:
1) Я не смог объявить в классе константу, потому что "Нельзя инициировать переменную тут". То, что константе нужно присвоить значение при объявлении это уже мелочи, видимо
2) Не прошла компиляция файла utilcls.h, а он относится к библиотекам самого C++ Builder. Он свою же собственную библиотеку не смог скомпилировать!

И так постоянно, и нужно каждый раз понимать разницу между настройками, которые нужны проекту и теми, которые всё сломают. Ни на одном языке ни в какой среде у меня такого никогда не было.
Ну и сложность самого C++ тоже лепту вносит, но вина очень врятли тут его