Render.ru

3dmax SDK проблемма

#1
Помогите найти ассоциации вертексов с объектом установленные modifier Linked X form
 
#3
Я пишу свой экспортер... Вроде как все зашибись, не хватает одного - нужно сохранить привязку вертексов к скилету... А для привязки в сцене я использую Linked X Form... Вот и проблема - не могу найти где эту привязку культурно получить
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#5
Сорри сглючил - совсем уматался
в SDKшке в принципе тоже больших проблем вроде нет
получаеш указатель на модификатор из него парам блок
Modifier *modLink = ...
IParamBlock2* iLinkParams = ((Animatable*)modLink)->GetParamBlock(0);
assert(iLinkParams);
ParamID pid_i = gs->IndextoID(0);
Interval valid = FOREVER;
INode *node = NULL; //Искомый Обьект
iLinkParams->GetValue( pid_i ,TimeValue(0),node,valid);

Мог чего и наврать давно не копался с этим делом
 
#6
Спасибо... Вобщем-то я уже и сам нашел, просто не хотелось в стек лезть,я думал это как-то культурней можно было сделатьDenis wrote:
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#7
Да культурней ни как
но это не самая большая заморочка в Максе
бывает доступ к некоторым параметрам
вобще не получить даже в SDK ;(
 
#9
Можно ли узнать что выделено в mesh-е ( Вертексы, полигоны или грани с перечислением их индексов) для конткретного modifier-а без опроса всего стека на наличие EditMesh и MeshSelect, расположенных перед ним?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#10
Вроде должно проробуй через
ModContext and LocalModData
пример для фэйсов:

INode* node =ip->GetSelNode(0);
if (!node)
return;

Object* pobj=node->GetObjectRef();
if (!pobj)
return;

IDerivedObject* pDerObj=static_cast(pobj);
if(!pDerObj)
return;


//Get mod local data (should be a MeshSelData*)
// в примере для модификаторя MeshSelData
// но в теории должно работать для любого
ModContext* mc = pDerObj->GetModContext(0);
if (!mc)
return;

LocalModData * mseldata = mc->localData;
if(!mseldata)
return;

IMeshSelectData *MeshModData= (IMeshSelectData *)mseldata->GetInterface(I_MESHSELECTDATA);
if (!MeshModData)
return;

BitArray ba = MeshModData->GetFaceSel();


остальные по аналогии
 
#11
Это я пробовал...В том-то и дело, что для того же Linkred XForm GetInterface мне для I_MESHSELECT и I_MESHSELECTDATA возвращает NULL... Сейчас еще попробую, но вроде я так и делал, где-то в хелпах это
 
#12
Ну да, ноль в указателе... Я так понял, что GetInterface возвращает указатель на один из базовых классов LocalData... В исходниках EditMesh и MeshSelect LocalData действительно наследуется от MeshSelectData и согласно тексту возвращает указатель на саму себя (return (IMeshSelectData*) this), но это не факт, что остальные modifiers делают так же, тот же Linked XForm наследуется просто от LocalModData и не перегружает GetInterface
Спасибо, я пока с этим разбирался, кажется нашел в исходника что-то полезное, сейчас проверю:)
 
Сверху