История болезни...
Пишу плагин разбивки обьектов на куски. Делаю так.
Создаю плоскость и с помощью булевой операции произвожу отсечение.
Плоскости создаю "шершавыми" и с долей случайности положения в сцене.
И иногда происходит исчезание объектов из-за того, что они не пересекаются фактически.
И при этом выдается предупреждение. Так как в описаниях библиотек я не нашел
сишных функций булевых операций, то пользуюсь mel-командой polyBoolOp... Так вот,
отследить это предупреждение нельзя, так как при выполнении этой операции
возвращается 1(true) - если верно, и 0(false) - если нет. А выполнение с предупреждением
считается 1(true). Раньше, когда я вызывал polyBoolOp... через MGlobal::executeCommand,
чтобы избежать исчезновений, я делал дубликаты объектов и выполнял следующие действия:
MGlobal::executeCommand( MString("polyBoolOp -operation 2 ") + "-name DesStat"...;
MStatus statOp2 = MGlobal::executeCommand( MString("getAttr ") + "DesStatShape.pnts[1];");
MGlobal::executeCommand( MString("setAttr ") + "polyBoolOp1.operation 3;");
MStatus statOp3 = MGlobal::executeCommand( MString("getAttr ") + "DesStatShape.pnts[1];");
// Условие проверки правильности булевой операции
if( (statOp2) && (statOp3) )
{...
и если условие выполняется я производил операцию с оригиналами, если нет, то на нет и суда нет.
Но сейчас мне понадобилось реализовывать откат, и код пришлось менять. Вместо MGlobal::executeCommand
приходится использовать dgMod.commandToExecute, и теперь команда сначала регистрируется, а только потом
выполняется. И я не могу отследить ошибку в выполнении операции.
А вопроса два:
1. Есть ли сишная функция булевой операции
2. Есть ли способ решения проблемы, которую я описал.
Если надо, могу описать подробней...
Пишу плагин разбивки обьектов на куски. Делаю так.
Создаю плоскость и с помощью булевой операции произвожу отсечение.
Плоскости создаю "шершавыми" и с долей случайности положения в сцене.
И иногда происходит исчезание объектов из-за того, что они не пересекаются фактически.
И при этом выдается предупреждение. Так как в описаниях библиотек я не нашел
сишных функций булевых операций, то пользуюсь mel-командой polyBoolOp... Так вот,
отследить это предупреждение нельзя, так как при выполнении этой операции
возвращается 1(true) - если верно, и 0(false) - если нет. А выполнение с предупреждением
считается 1(true). Раньше, когда я вызывал polyBoolOp... через MGlobal::executeCommand,
чтобы избежать исчезновений, я делал дубликаты объектов и выполнял следующие действия:
MGlobal::executeCommand( MString("polyBoolOp -operation 2 ") + "-name DesStat"...;
MStatus statOp2 = MGlobal::executeCommand( MString("getAttr ") + "DesStatShape.pnts[1];");
MGlobal::executeCommand( MString("setAttr ") + "polyBoolOp1.operation 3;");
MStatus statOp3 = MGlobal::executeCommand( MString("getAttr ") + "DesStatShape.pnts[1];");
// Условие проверки правильности булевой операции
if( (statOp2) && (statOp3) )
{...
и если условие выполняется я производил операцию с оригиналами, если нет, то на нет и суда нет.
Но сейчас мне понадобилось реализовывать откат, и код пришлось менять. Вместо MGlobal::executeCommand
приходится использовать dgMod.commandToExecute, и теперь команда сначала регистрируется, а только потом
выполняется. И я не могу отследить ошибку в выполнении операции.
А вопроса два:
1. Есть ли сишная функция булевой операции
2. Есть ли способ решения проблемы, которую я описал.
Если надо, могу описать подробней...