Dang
still nothing… weird…
I followe this help Topic:
http://docs.autodesk.com/3DSMAX/16/ENU/3ds-Max-SDK-Programmer-Guide/index.html?url=files/GUID-94AFDEF6-5BE2-47BC-818D-3BE03DEE0040.htm,topicNumber=d30e36394
I got this code, but nothing displays. I noticed that using my own Mesh variable dont even show geometry in standard way, but using defined by SimpleObject2 mesh variable works.
class AAA_1 : public SimpleObject2
{
[…]
Mesh meshHelper;
virtual BaseInterface* GetInterface(Interface_ID);
virtual unsigned long GetObjectDisplayRequirement() const;
virtual bool PrepareDisplay(const MaxSDK::Graphics::UpdateDisplayContext&);
virtual bool UpdatePerNodeItems(const MaxSDK::Graphics::UpdateDisplayContext&, MaxSDK::Graphics::UpdateNodeContext&, MaxSDK::Graphics::IRenderItemContainer&);
[.....]
};
int AAA_1CreateCallBack::proc(ViewExp *vpt,int msg, int point, int /flags/, IPoint2 m, Matrix3& mat )
{
TimeValue t(0);
if (msg == MOUSE_POINT || msg == MOUSE_MOVE)
{
switch(point)
{
case 0: // only happens with MOUSE_POINT msg
ob->BuildMesh(t);
break;
case 1:
case 2:
return CREATE_STOP;
break;
}
ob->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE);
} else if (msg == MOUSE_ABORT) return CREATE_ABORT;
return TRUE;
}
BaseInterface* AAA_1::GetInterface(Interface_ID iid)
{
if (iid == IOBJECT_DISPLAY2_INTERFACE_ID)
{
return (MaxSDK::Graphics::IObjectDisplay2*)this;
}
return __super::GetInterface(iid);
}
unsigned long AAA_1::GetObjectDisplayRequirement() const
{
return 0;
}
bool AAA_1::PrepareDisplay(const MaxSDK::Graphics::UpdateDisplayContext& displayContext)
{
MaxSDK::Graphics::GenerateMeshRenderItemsContext renderItemContext;
renderItemContext.GenerateDefaultContext(displayContext);
MaxSDK::Graphics::IMeshDisplay2* pMeshDisplay = NULL;
pMeshDisplay = static_cast<MaxSDK::Graphics::IMeshDisplay2*>(meshHelper.GetInterface(IMesh_DISPLAY2_INTERFACE_ID));
if (pMeshDisplay != NULL)
pMeshDisplay->PrepareDisplay(renderItemContext);
return true;
}
bool AAA_1::UpdatePerNodeItems(
const MaxSDK::Graphics::UpdateDisplayContext& displayContext,
MaxSDK::Graphics::UpdateNodeContext& nodeContext,
MaxSDK::Graphics::IRenderItemContainer& targetRenderItemContainer)
{
MaxSDK::Graphics::GenerateMeshRenderItemsContext renderItemContext;
renderItemContext.GenerateDefaultContext(displayContext);
renderItemContext.RemoveInvisibleMeshElementDescriptions(nodeContext.GetRenderNode());
MaxSDK::Graphics::IMeshDisplay2* pMeshDisplay = NULL;
MaxSDK::Graphics::RenderItemHandleArray renderItems;
pMeshDisplay = static_cast<MaxSDK::Graphics::IMeshDisplay2*>(meshHelper.GetInterface(IMesh_DISPLAY2_INTERFACE_ID));
if (pMeshDisplay != NULL)
{
pMeshDisplay->GetRenderItems(renderItemContext, nodeContext, renderItems);
}
targetRenderItemContainer.ClearAllRenderItems();
targetRenderItemContainer.AddRenderItems(renderItems);
return true;
}
void AAA_1::BuildMesh(TimeValue /t/)
{
ivalid = FOREVER;
meshHelper.setNumVerts(4);
meshHelper.setNumFaces(3);
meshHelper.setVert(0, Point3(0.0, 0.0, 0.0));
meshHelper.setVert(1, Point3(10.0, 0.0, 0.0));
meshHelper.setVert(2, Point3(0.0, 10.0, 0.0));
meshHelper.setVert(3, Point3(0.0, 0.0, 10.0));
meshHelper.faces[0].setVerts(0, 1, 2);
meshHelper.faces[0].setEdgeVisFlags(1, 1, 1);
meshHelper.faces[0].setSmGroup(2);
meshHelper.faces[1].setVerts(3, 1, 0);
meshHelper.faces[1].setEdgeVisFlags(1, 1, 1);
meshHelper.faces[1].setSmGroup(2);
meshHelper.faces[2].setVerts(0, 2, 3);
meshHelper.faces[2].setEdgeVisFlags(1, 1, 1);
meshHelper.faces[2].setSmGroup(4);
meshHelper.InvalidateGeomCache();
}