Не создается WipeOut

Автор Тема: Не создается WipeOut  (Прочитано 17197 раз)

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

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Не создается WipeOut
« : 04-08-2016, 13:50:05 »
Добрый день.
Пытаюсь создать AcDbWipeout в методе subExplode.
entitySet.append(pWipe) возвращает 0, маска не создается и
соответственно, при выходе из метода subExplode возникает FatalError.
Вот код
Код - C++ [Выбрать]
  1. AcDbWipeout::createImageDefinition();
  2. AcDbObjectPointer<AcDbWipeout> pWipe;
  3. pWipe.create();
  4. pWipe->setDatabaseDefaults();
  5. AcGePoint3d originPnt(-1, 0, 0);
  6. AcGeVector3d Udirection(1, 0, 0);
  7. AcGeVector3d Vdirection(0, -1, 0);
  8. pWipe->setOrientation(originPnt, Udirection, Vdirection);
  9. AcGePoint2dArray ptArray;
  10. ptArray.removeAll();
  11. ptArray.append(AcGePoint2d(-1, 0));
  12. ptArray.append(AcGePoint2d(1, 0));
  13. ptArray.append(AcGePoint2d(1, -10));
  14. ptArray.append(AcGePoint2d(-1, -10));
  15. ptArray.append(AcGePoint2d(-1, 0));
  16. pWipe->setClipBoundary(AcDbRasterImage::kPoly, ptArray);
  17. pWipe->transformBy(mat);
  18. entitySet.append(pWipe);

Использую AutoCAD 2017 SP1 и VS2015
В других версиях не проверял.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не создается WipeOut
« Ответ #1 : 04-08-2016, 14:00:17 »
AcWipeoutObjXX.dbx загружен в AutoCAD? Он должен быть загружен до того, как ты будешь использовать любые методы AcDbWipeout. Лучше всего его грузить в методе On_kInitAppMsg
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: Не создается WipeOut
« Ответ #2 : 04-08-2016, 15:34:51 »
AcWipeoutObjXX.dbx загружен в AutoCAD?
А где его искать, может в AutoCAD 2017 он по другому называется, в AutoCAD 2010 он лежит в c:\Program Files\AutoCAD 2010\,
а в 2017-м кроме AcWipeoutRes.dll ничего нет.

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: Не создается WipeOut
« Ответ #3 : 04-08-2016, 15:49:37 »
Всё, разобрался. В AutoCAD 2017 это acismobj21.dbx.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не создается WipeOut
« Ответ #4 : 04-08-2016, 15:54:05 »
Код - C++ [Выбрать]
  1. acrxLoadModule(L"acismobj21.dbx",false,false);
  2. acrxLoadModule(L"acismui.arx",false,false);
В 2015 и 2016 - acismobj20.dbx, в 2013 и 2014 - acismobj19.dbx, а до того в AcWipeoutObjXX.dbx
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: Не создается WipeOut
« Ответ #5 : 04-08-2016, 16:34:12 »
entitySet.append(pWipe) по прежнему возвращает 0, хотя WipeOut создается.
Но если в методе subExplode писать
Код - C++ [Выбрать]
  1. AcDbObjectPointer<AcDbWipeout> pWipe;
  2. pWipe.create();
то, похоже, pWipe удаляется раньше, чем попадает в базу, и далее FatalError.
когда пишу так
Код - C++ [Выбрать]
  1. AcDbWipeout *pWipe = new AcDbWipeout();
работает.
Кстати, работает и без загрузки "acismui.arx"

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не создается WipeOut
« Ответ #6 : 04-08-2016, 16:39:23 »
entitySet.append(pWipe) по прежнему возвращает 0, хотя WipeOut создается.
Но если в методе subExplode писать
Код - C++ [Выбрать]

    AcDbObjectPointer<AcDbWipeout> pWipe;
    pWipe.create();

то, похоже, pWipe удаляется раньше, чем попадает в базу, и далее FatalError.
когда пишу так
Код - C++ [Выбрать]

    AcDbWipeout *pWipe = new AcDbWipeout();

работает.
Черт!!! Ну конечно же! Ты же создавал интеллектуальный указатель. Как только он уходит из области видимости, так вызывается его деструктор. Т.е. при выходе из метода зовётся его деструктор и pWipe уничтожается.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: Не создается WipeOut
« Ответ #7 : 29-05-2018, 11:41:00 »
В 2015 и 2016 - acismobj20.dbx, в 2013 и 2014 - acismobj19.dbx, а до того в AcWipeoutObjXX.dbx
acismui.arx в AutoCAD 2010 присутствует?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не создается WipeOut
« Ответ #8 : 29-05-2018, 11:44:40 »
acismui.arx в AutoCAD 2010 присутствует?
Зачем он тебе? Присутствует.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: Не создается WipeOut
« Ответ #9 : 29-05-2018, 11:48:04 »
Зачем он тебе?
Для работы с Wipeout разумеется. Чтобы сделать как написано выше:
Код - C++ [Выбрать]
  1. acrxLoadModule(L"AcWipeoutObj18.dbx",false,false);
  2. acrxLoadModule(L"acismui.arx",false,false);


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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не создается WipeOut
« Ответ #10 : 29-05-2018, 11:49:51 »
Есть этот файл в AutoCAD 2010. Найти эту версию было не просто.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: Не создается WipeOut
« Ответ #11 : 29-05-2018, 11:52:49 »
... Найти эту версию было не просто.
Эта версия ещё актуальна среди юзеров (как показывает жизнь).

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не создается WipeOut
« Ответ #12 : 29-05-2018, 11:54:42 »
... Найти эту версию было не просто.
Эта версия ещё актуальна среди юзеров (как показывает жизнь).
Ну тогда я тебе сразу скажу, что и в AutoCAD 2008 этот файл есть. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: Не создается WipeOut
« Ответ #13 : 29-05-2018, 12:39:09 »
... в AutoCAD 2008 этот файл есть.
Спасибо за инфу, но я в своих наработках стремлюсь (всё-таки) ограничиваться 10-ой версией.

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: Не создается WipeOut
« Ответ #14 : 02-06-2018, 20:14:31 »
Тема получила некоторое продолжение. Написал простейший код для AutoCAD 2012 который содержит лишь это:
Код - C++ [Выбрать]
  1. extern "C" AcRx::AppRetCode
  2. acrxEntryPoint(AcRx::AppMsgCode msg, void* appId)
  3. {
  4.     switch(msg)
  5.     {
  6.     case AcRx::kInitAppMsg:
  7.         acrxDynamicLinker->unlockApplication(appId);
  8.         acrxDynamicLinker->registerAppMDIAware(appId);
  9.         acrxLoadModule(L"AcWipeoutObj18.dbx", false, false);
  10.         break;
  11.     case AcRx::kUnloadAppMsg:
  12.         break;
  13.     default:
  14.         break;
  15.     }
  16.     return AcRx::kRetOK;
  17. }

Если закрыть AutoCAD после загрузки такого приложения, то на выходе имеем ошибку:


Как это обойти?