From 4b11ebd8400e77d2b988c19f555109a9ac3b893b Mon Sep 17 00:00:00 2001 From: Tazpn <tazpn@users.sourceforge.net> Date: Sat, 16 Dec 2006 18:32:51 +0000 Subject: [PATCH] Compile with Max9 Exporter - Fix naming bug when spliting multi-material meshes --- MaxNifPlugins_Readme.txt | 9 +- NifCommon/NifVersion.h | 4 +- NifCommon/niutils.cpp | 24 +++ NifCommon/niutils.h | 2 + NifExport/Mesh.cpp | 2 +- NifExport/Util.cpp | 6 +- NifImport/BaseImporter.h | 5 + NifImport/ImportMeshAndSkin.cpp | 205 ++++++++++++++++++++++-- NifImport/ImportMtlAndTex.cpp | 51 ++++-- NifImport/MaxNifImport.cpp | 7 + NifImport/NIFImporter.h | 9 +- NifPlugins/DllEntry.cpp | 4 + NifPlugins_VC80.sln | 40 +++++ NifPlugins_VC80.vcproj | 270 ++++++++++++++++++++++++++++++-- NifProps/bhkCapsuleObj.cpp | 6 +- NifProps/bhkSphereObj.cpp | 6 +- 16 files changed, 591 insertions(+), 59 deletions(-) diff --git a/MaxNifPlugins_Readme.txt b/MaxNifPlugins_Readme.txt index 9f102b5..d5a1389 100644 --- a/MaxNifPlugins_Readme.txt +++ b/MaxNifPlugins_Readme.txt @@ -1,4 +1,4 @@ - MaxPlugins 0.2.9 + MaxPlugins 0.2.10 ================ @@ -32,6 +32,13 @@ Change log ---------- + 0.2.10 + ----- + o All + - Compile with Max9 + o Exporter + - Fix naming bug when spliting multi-material meshes + 0.2.9 ----- o Exporter diff --git a/NifCommon/NifVersion.h b/NifCommon/NifVersion.h index 2248b4e..4f05d36 100644 --- a/NifCommon/NifVersion.h +++ b/NifCommon/NifVersion.h @@ -18,10 +18,10 @@ HISTORY: */ #define VERSION_MAJOR_INT 0 #define VERSION_MINOR_INT 2 -#define VERSION_BUILD_INT 8 +#define VERSION_BUILD_INT 10 #define VERSION_PATCH_INT 0 -#define VERSION_STRING "0, 2, 8, 0" +#define VERSION_STRING "0, 2, 10, 0" //#define DEF_VERSION_STRING(a,b,c,d) #a ", " #b ", " #c ", " #d //#define VERSION_STRING DEF_VERSION_STRING(a,b,c,d) diff --git a/NifCommon/niutils.cpp b/NifCommon/niutils.cpp index 650cfae..d50499b 100644 --- a/NifCommon/niutils.cpp +++ b/NifCommon/niutils.cpp @@ -20,6 +20,8 @@ HISTORY: #include <modstack.h> #include <iparamb2.h> #include <iskin.h> +#include "../NifProps/bhkRigidBodyInterface.h" + #ifdef USE_BIPED # include <cs/BipedApi.h> # include <cs/OurExp.h> @@ -1071,3 +1073,25 @@ void CallMaxscript(const TCHAR *s) pop_alloc_frame(); } +Modifier *GetbhkCollisionModifier(INode *node) +{ + const Class_ID BHKRIGIDBODYMODIFIER_CLASS_ID(0x398fd801, 0x303e44e5); + Object* pObj = node->GetObjectRef(); + if (!pObj) return NULL; + while (pObj->SuperClassID() == GEN_DERIVOB_CLASS_ID) + { + IDerivedObject* pDerObj = (IDerivedObject *)(pObj); + int Idx = 0; + while (Idx < pDerObj->NumModifiers()) + { + // Get the modifier. + Modifier* mod = pDerObj->GetModifier(Idx); + if (mod->ClassID() == BHKRIGIDBODYMODIFIER_CLASS_ID) { + return mod; + } + Idx++; + } + pObj = pDerObj->GetObjRef(); + } + return NULL; +} diff --git a/NifCommon/niutils.h b/NifCommon/niutils.h index 032a822..81c2153 100644 --- a/NifCommon/niutils.h +++ b/NifCommon/niutils.h @@ -400,4 +400,6 @@ void CollapseGeomTransform(Niflib::NiTriBasedGeomRef shape); void CollapseGeomTransforms(std::vector<Niflib::NiTriBasedGeomRef>& shapes); void FixNormals(std::vector<Niflib::Triangle>& tris, std::vector<Niflib::Vector3>& verts, std::vector<Niflib::Vector3>& norms); +Modifier *GetbhkCollisionModifier(INode *node); + #endif // _NIUTILS_H_ \ No newline at end of file diff --git a/NifExport/Mesh.cpp b/NifExport/Mesh.cpp index 2539ea6..9fcc315 100755 --- a/NifExport/Mesh.cpp +++ b/NifExport/Mesh.cpp @@ -132,7 +132,7 @@ Exporter::Result Exporter::exportMesh(NiNodeRef &ninode, INode *node, TimeValue FaceGroups::iterator grp; for (grp=grps.begin(); grp!=grps.end(); ++grp, ++i) { - string name = FormatString(basename, basename.data(), i); + string name = FormatString(format, basename.data(), i); NiTriBasedGeomRef shape = makeMesh(ninode, getMaterial(node, grp->first), grp->second, exportStrips); if (shape == NULL) { diff --git a/NifExport/Util.cpp b/NifExport/Util.cpp index 1baf03a..d45b427 100755 --- a/NifExport/Util.cpp +++ b/NifExport/Util.cpp @@ -345,7 +345,7 @@ void Exporter::CalcBoundingBox(INode *node, Box3& box, int all) Matrix3 tm = node->GetObjTMAfterWSM(0); if (node->IsBoneShowing()) { - box.IncludePoints(&tm.GetTrans(), 1, NULL); + box.IncludePoints(const_cast<Point3*>(&tm.GetTrans()), 1, NULL); } else { if (Object *o = node->GetObjectRef()) { if (o->SuperClassID()==GEOMOBJECT_CLASS_ID) { @@ -354,7 +354,7 @@ void Exporter::CalcBoundingBox(INode *node, Box3& box, int all) || o->ClassID() == Class_ID(0x00009125,0) /* Biped Twist Helpers */ ) { - box.IncludePoints(&tm.GetTrans(), 1, NULL); + box.IncludePoints(const_cast<Point3*>(&tm.GetTrans()), 1, NULL); } else { @@ -366,7 +366,7 @@ void Exporter::CalcBoundingBox(INode *node, Box3& box, int all) } else if (mExportCameras && o->SuperClassID()==CAMERA_CLASS_ID) { - box.IncludePoints(&tm.GetTrans(), 1, NULL); + box.IncludePoints(const_cast<Point3*>(&tm.GetTrans()), 1, NULL); } } } diff --git a/NifImport/BaseImporter.h b/NifImport/BaseImporter.h index 7b8180a..e4c7ded 100644 --- a/NifImport/BaseImporter.h +++ b/NifImport/BaseImporter.h @@ -46,6 +46,11 @@ public: char buffer[MAX_PATH] = {0}, *p = NULL; GetFullPathName(Name, _countof(buffer), buffer, &p); + + if (-1 == _access(buffer, 0)) { + throw RuntimeError(FormatText("File does not exist: %s", buffer)); + } + if (p) *p = 0; path = buffer; iniFileValid = false; diff --git a/NifImport/ImportMeshAndSkin.cpp b/NifImport/ImportMeshAndSkin.cpp index 66b7c60..5a90945 100644 --- a/NifImport/ImportMeshAndSkin.cpp +++ b/NifImport/ImportMeshAndSkin.cpp @@ -31,6 +31,7 @@ bool NifImporter::ImportMeshes(NiNodeRef node) bool ok = true; try { +#if 1 vector<NiTriShapeRef> trinodes = DynamicCast<NiTriShape>(node->GetChildren()); for (vector<NiTriShapeRef>::iterator itr = trinodes.begin(), end = trinodes.end(); itr != end; ++itr){ ok |= ImportMesh(*itr); @@ -39,6 +40,11 @@ bool NifImporter::ImportMeshes(NiNodeRef node) for (vector<NiTriStripsRef>::iterator itr = tristrips.begin(), end = tristrips.end(); itr != end; ++itr){ ok |= ImportMesh(*itr); } +#else + // Only do multiples on object that have same name and use XXX:# notation + vector<NiTriBasedGeomRef> trigeom = DynamicCast<NiTriBasedGeom>(node->GetChildren()); + ok |= ImportMultipleGeometry(node, trigeom); +#endif vector<NiNodeRef> nodes = DynamicCast<NiNode>(node->GetChildren()); for (vector<NiNodeRef>::iterator itr = nodes.begin(), end = nodes.end(); itr != end; ++itr){ ok |= ImportMeshes(*itr); @@ -59,6 +65,7 @@ bool NifImporter::ImportMeshes(NiNodeRef node) bool NifImporter::ImportMesh(ImpNode *node, TriObject *o, NiTriBasedGeomRef triGeom, NiTriBasedGeomDataRef triGeomData, vector<Triangle>& tris) { Mesh& mesh = o->GetMesh(); + INode *tnode = node->GetINode(); Matrix44 baseTM = (importBones) ? triGeom->GetLocalTransform() : triGeom->GetWorldTransform(); node->SetTransform(0,TOMATRIX3(baseTM)); @@ -137,9 +144,15 @@ bool NifImporter::ImportMesh(ImpNode *node, TriObject *o, NiTriBasedGeomRef triG } } - ImportVertexColor(node, o, triGeom, triGeomData, tris); - ImportMaterialAndTextures(node, triGeom); + vector<Color4> cv = triGeomData->GetColors(); + ImportVertexColor(tnode, o, tris, cv, 0); + + if (Mtl* m = ImportMaterialAndTextures(node, triGeom)) + { + gi->GetMaterialLibrary().Add(m); + node->GetINode()->SetMtl(m); + } if (removeDegenerateFaces) mesh.RemoveDegenerateFaces(); @@ -232,21 +245,193 @@ bool NifImporter::ImportMesh(NiTriStripsRef triStrips) return ok; } +bool NifImporter::ImportMultipleGeometry(NiNodeRef parent, vector<NiTriBasedGeomRef>& glist) +{ + bool ok = true; + if (glist.empty()) return false; + + ImpNode *node = i->CreateNode(); + if(!node) return false; + + INode *inode = node->GetINode(); + TriObject *triObject = CreateNewTriObject(); + node->Reference(triObject); + + string name = parent->GetName(); + node->SetName(name.c_str()); + + // Texture + Mesh& mesh = triObject->GetMesh(); + + vector< pair<int, int> > vert_range, tri_range; + vector<Triangle> tris; + vector<Vector3> verts; + int submats = glist.size(); + + // Build list of vertices and triangles. Optional components like normals will be handled later. + for (vector<NiTriBasedGeomRef>::iterator itr = glist.begin(), end = glist.end(); itr != end; ++itr) { + NiTriBasedGeomDataRef triGeomData = StaticCast<NiTriBasedGeomData>((*itr)->GetData()); + + // Get verts and collapse local transform into them + int nVertices = triGeomData->GetVertexCount(); + vector<Vector3> subverts = triGeomData->GetVertices(); + Matrix44 transform = (*itr)->GetLocalTransform(); + //Apply the transformations + if (transform != Matrix44::IDENTITY) { + for ( uint i = 0; i < subverts.size(); ++i ) + subverts[i] = transform * subverts[i]; + } + vert_range.push_back( pair<int,int>( verts.size(), verts.size() + subverts.size()) ); + verts.insert(verts.end(), subverts.begin(), subverts.end()); + + vector<Triangle> subtris = triGeomData->GetTriangles(); + for (vector<Triangle>::iterator itr = subtris.begin(), end = subtris.end(); itr != end; ++itr) { + (*itr).v1 += nVertices, (*itr).v2 += nVertices, (*itr).v3 += nVertices; + } + tri_range.push_back( pair<int,int>( tris.size(), tris.size() + subtris.size()) ); + tris.insert(tris.end(), subtris.begin(), subtris.end()); + } + + // Transform up-to-parent + Matrix44 baseTM = (importBones) ? Matrix44::IDENTITY : parent->GetWorldTransform(); + node->SetTransform(0,TOMATRIX3(baseTM)); + + // Set vertices and triangles + mesh.setNumVerts(verts.size()); + mesh.setNumTVerts(verts.size(), TRUE); + for (int i=0, n=verts.size(); i < n; ++i){ + Vector3 &v = verts[i]; + mesh.verts[i].Set(v.x, v.y, v.z); + } + mesh.setNumFaces(tris.size()); + mesh.setNumTVFaces(tris.size()); + for (int submat=0; submat<submats; ++submat) { + int t_start = tri_range[submat].first, t_end = tri_range[submat].second; + for (int i=t_start; i<t_end; ++i) { + Triangle& t = tris[i]; + Face& f = mesh.faces[i]; + f.setVerts(t.v1, t.v2, t.v3); + f.Show(); + f.setEdgeVisFlags(EDGE_VIS, EDGE_VIS, EDGE_VIS); + f.setMatID(-1); + TVFace& tf = mesh.tvFace[i]; + tf.setTVerts(t.v1, t.v2, t.v3); + } + } + mesh.buildNormals(); + bool bSpecNorms = false; + + MultiMtl *mtl = NULL; + int igeom = 0; + for (vector<NiTriBasedGeomRef>::iterator itr = glist.begin(), end = glist.end(); itr != end; ++itr, ++igeom) + { + NiTriBasedGeomDataRef triGeomData = StaticCast<NiTriBasedGeomData>((*itr)->GetData()); + + int v_start = vert_range[igeom].first, v_end = vert_range[igeom].second; + int t_start = tri_range[igeom].first, t_end = tri_range[igeom].second; + + // Normals + vector<Vector3> subnorms = triGeomData->GetNormals(); + Matrix44 rotation = (*itr)->GetLocalTransform().GetRotation(); + if (rotation != Matrix44::IDENTITY) { + for ( uint i = 0; i < subnorms.size(); ++i ) + subnorms[i] = rotation * subnorms[i]; + } + if (!subnorms.empty()) + { +#if VERSION_3DSMAX > ((5000<<16)+(15<<8)+0) // Version 5 + // Initialize normals if necessary + if (!bSpecNorms) { + bSpecNorms = true; + mesh.SpecifyNormals(); + MeshNormalSpec *specNorms = mesh.GetSpecifiedNormals(); + if (NULL != specNorms) { + specNorms->BuildNormals(); + //specNorms->ClearAndFree(); + //specNorms->SetNumFaces(tris.size()); + //specNorms->SetNumNormals(n.size()); + } + } + MeshNormalSpec *specNorms = mesh.GetSpecifiedNormals(); + if (NULL != specNorms) + { + Point3* norms = specNorms->GetNormalArray(); + for (int i=0, n=subnorms.size(); i<n; i++){ + Vector3& v = subnorms[i]; + norms[i+v_start] = Point3(v.x, v.y, v.z); + } + //MeshNormalFace* pFaces = specNorms->GetFaceArray(); + //for (int i=0; i<tris.size(); i++){ + // Triangle& tri = tris[i]; + // MeshNormalFace& face = pFaces[i+t_start]; + // face.SpecifyNormalID(0, tri.v1); + // face.SpecifyNormalID(1, tri.v2); + // face.SpecifyNormalID(2, tri.v3); + //} + specNorms->SetAllExplicit(true); + specNorms->CheckNormals(); + } +#endif + } + // uv texture info + if (triGeomData->GetUVSetCount() > 0) { + vector<TexCoord> texCoords = triGeomData->GetUVSet(0); + for (int i=0, n = texCoords.size(); i<n; ++i) { + TexCoord& texCoord = texCoords[i]; + mesh.tVerts[i+v_start].Set(texCoord.u, (flipUVTextures) ? 1.0f-texCoord.v : texCoord.v, 0); + } + } + vector<Color4> cv = triGeomData->GetColors(); + ImportVertexColor(inode, triObject, tris, cv, v_start); + + if ( StdMat2* submtl = ImportMaterialAndTextures(node, (*itr)) ) + { + if (mtl == NULL) { + mtl = NewDefaultMultiMtl(); + gi->GetMaterialLibrary().Add(mtl); + inode->SetMtl(mtl); + } + // SubMatIDs do not have to be contiguous so we just use the offset + mtl->SetSubMtlAndName(igeom, submtl, submtl->GetName()); + for (int i=t_start; i<t_end; ++i) + mesh.faces[i].setMatID(igeom); + } + if (enableSkinSupport) + ImportSkin(node, (*itr)); + } + + this->i->AddNodeToScene(node); + + inode = node->GetINode(); + inode->EvalWorldState(0); + + for (vector<NiTriBasedGeomRef>::iterator itr = glist.begin(), end = glist.end(); itr != end; ++itr) + { + // attach child + if (INode *parent = GetNode((*itr)->GetParent())) + parent->AttachChild(inode, 1); + inode->Hide((*itr)->GetHidden() ? TRUE : FALSE); + } + if (removeDegenerateFaces) + mesh.RemoveDegenerateFaces(); + if (removeIllegalFaces) + mesh.RemoveIllegalFaces(); + if (enableAutoSmooth) + mesh.AutoSmooth(TORAD(autoSmoothAngle), FALSE, FALSE); + return ok; +} + // vertex coloring -bool NifImporter::ImportVertexColor(ImpNode *node, TriObject *o, Niflib::NiTriBasedGeomRef triGeom, Niflib::NiTriBasedGeomDataRef triGeomData, vector<Triangle>& tris) +bool NifImporter::ImportVertexColor(INode *tnode, TriObject *o, vector<Triangle>& tris, vector<Color4> cv, int cv_offset/*=0*/) { bool hasAlpha = false; bool hasColor = false; Mesh& mesh = o->GetMesh(); - if (vertexColorMode == 1) // Bake into mesh (no Modifier) { - vector<Color4> cv = triGeomData->GetColors(); int n = cv.size(); if (n > 0) { - INode *tnode = node->GetINode(); - vector<TVFace> vcFace; int nt = tris.size(); vcFace.resize(nt); @@ -301,13 +486,9 @@ bool NifImporter::ImportVertexColor(ImpNode *node, TriObject *o, Niflib::NiTriBa else if (vertexColorMode == 2) { #if VERSION_3DSMAX > ((5000<<16)+(15<<8)+0) // Version 5 - vector<Color4> cv = triGeomData->GetColors(); int n = cv.size(); if (n > 0) { - - INode *tnode = node->GetINode(); - vector<Color> colorMap, alphaMap; IVertexPaint::VertColorTab vertColors, vertAlpha; vertColors.SetCount(n, TRUE); @@ -392,7 +573,7 @@ struct VertexHolder Tab<float> weights; }; -bool NifImporter::ImportSkin(ImpNode *node, NiTriBasedGeomRef triGeom) +bool NifImporter::ImportSkin(ImpNode *node, NiTriBasedGeomRef triGeom, int v_start/*=0*/) { bool ok = true; NiSkinInstanceRef nifSkin = triGeom->GetSkinInstance(); diff --git a/NifImport/ImportMtlAndTex.cpp b/NifImport/ImportMtlAndTex.cpp index d99faf6..2a7e698 100644 --- a/NifImport/ImportMtlAndTex.cpp +++ b/NifImport/ImportMtlAndTex.cpp @@ -80,19 +80,17 @@ Texmap* NifImporter::CreateTexture(TexDesc& desc) return NULL; } -bool NifImporter::ImportMaterialAndTextures(ImpNode *node, NiAVObjectRef avObject) +StdMat2 *NifImporter::ImportMaterialAndTextures(ImpNode *node, NiAVObjectRef avObject) { // Texture - vector<NiPropertyRef> props = avObject->GetProperties(); - NiTexturingPropertyRef texRef = SelectFirstObjectOfType<NiTexturingProperty>(props); - NiMaterialPropertyRef matRef = SelectFirstObjectOfType<NiMaterialProperty>(props); - NiWireframePropertyRef wireRef = SelectFirstObjectOfType<NiWireframeProperty>(props); - NiAlphaPropertyRef alphaRef = SelectFirstObjectOfType<NiAlphaProperty>(props); - NiStencilPropertyRef stencilRef = SelectFirstObjectOfType<NiStencilProperty>(props); - NiShadePropertyRef shadeRef = SelectFirstObjectOfType<NiShadeProperty>(props); - - bool hasTexture = (texRef && matRef); + NiMaterialPropertyRef matRef = avObject->GetPropertyByType(NiMaterialProperty::TypeConst()); if (matRef != NULL){ + NiTexturingPropertyRef texRef = avObject->GetPropertyByType(NiTexturingProperty::TypeConst()); + NiWireframePropertyRef wireRef = avObject->GetPropertyByType(NiWireframeProperty::TypeConst()); + NiAlphaPropertyRef alphaRef = avObject->GetPropertyByType(NiAlphaProperty::TypeConst()); + NiStencilPropertyRef stencilRef = avObject->GetPropertyByType(NiStencilProperty::TypeConst()); + NiShadePropertyRef shadeRef = avObject->GetPropertyByType(NiShadeProperty::TypeConst()); + StdMat2 *m = NewDefaultStdMat(); m->SetName(matRef->GetName().c_str()); if (showTextures) @@ -100,9 +98,7 @@ bool NifImporter::ImportMaterialAndTextures(ImpNode *node, NiAVObjectRef avObjec // try the civ4 shader first then default back to normal shaders if (ImportCiv4Shader(node, avObject, m)) { - gi->GetMaterialLibrary().Add(m); - node->GetINode()->SetMtl(m); - return true; + return m; } m->SetAmbient(TOCOLOR(matRef->GetAmbientColor()),0); m->SetDiffuse(TOCOLOR(matRef->GetDiffuseColor()),0); @@ -166,10 +162,33 @@ bool NifImporter::ImportMaterialAndTextures(ImpNode *node, NiAVObjectRef avObjec m->SetSubTexmap(ID_SI, tex); } } - gi->GetMaterialLibrary().Add(m); - node->GetINode()->SetMtl(m); + return m; + } + return NULL; +} + + +bool NifImporter::ImportMaterialAndTextures(ImpNode *node, vector<NiTriBasedGeomRef>& glist) +{ + MultiMtl *mtl = NULL; + int isubmtl = 0; + for (vector<NiTriBasedGeomRef>::iterator itr = glist.begin(), end = glist.end(); itr != end; ++itr, ++isubmtl) { + NiTriBasedGeomDataRef triGeomData = StaticCast<NiTriBasedGeomData>((*itr)->GetData()); + if ( StdMat2* submtl = ImportMaterialAndTextures(node, (*itr)) ) + { + if (mtl == NULL) + mtl = NewDefaultMultiMtl(); + // SubMatIDs do not have to be contigious so we just use the offset + mtl->SetSubMtlAndName(isubmtl, submtl, submtl->GetName()); + } + } + if (mtl != NULL) + { + gi->GetMaterialLibrary().Add(mtl); + node->GetINode()->SetMtl(mtl); + return true; } - return hasTexture; + return false; } bool NifImporter::ImportCiv4Shader(ImpNode *node, NiAVObjectRef avObject, StdMat2 *mtl) diff --git a/NifImport/MaxNifImport.cpp b/NifImport/MaxNifImport.cpp index 0b77b18..b1903c7 100644 --- a/NifImport/MaxNifImport.cpp +++ b/NifImport/MaxNifImport.cpp @@ -213,6 +213,13 @@ int MaxNifImport::DoImport(const TCHAR *filename,ImpInterface *i, Interface *gi, MessageBox(NULL, e.what(), "Import Error", MB_OK); return TRUE; } + catch (RuntimeError &e) + { +#if VERSION_3DSMAX > ((5000<<16)+(15<<8)+0) // Version 6+ + MessageBox(NULL, e.desc1, "Import Error", MB_OK); +#endif + return TRUE; + } catch (...) { MessageBox(NULL, "Unknown error.", "Import Error", MB_OK); diff --git a/NifImport/NIFImporter.h b/NifImport/NIFImporter.h index 9771810..5fcd6a1 100644 --- a/NifImport/NIFImporter.h +++ b/NifImport/NIFImporter.h @@ -112,13 +112,14 @@ public: void SetTrangles(Mesh& mesh, vector<Niflib::Triangle>& v); bool ImportMesh(Niflib::NiTriShapeRef triShape); bool ImportMesh(Niflib::NiTriStripsRef triStrips); - bool ImportMaterialAndTextures(ImpNode *node, Niflib::NiAVObjectRef avObject); + bool ImportMultipleGeometry(Niflib::NiNodeRef parent, vector<Niflib::NiTriBasedGeomRef>& glist); + StdMat2 *ImportMaterialAndTextures(ImpNode *node, Niflib::NiAVObjectRef avObject); + bool ImportMaterialAndTextures(ImpNode *node, vector<Niflib::NiTriBasedGeomRef>& glist); bool ImportCiv4Shader(ImpNode *node, Niflib::NiAVObjectRef avObject, StdMat2 *m); bool ImportTransform(ImpNode *node, Niflib::NiAVObjectRef avObject); bool ImportMesh(ImpNode *node, TriObject *o, Niflib::NiTriBasedGeomRef triGeom, Niflib::NiTriBasedGeomDataRef triGeomData, vector<Niflib::Triangle>& tris); - bool ImportVertexColor(ImpNode *node, TriObject *o, Niflib::NiTriBasedGeomRef triGeom, Niflib::NiTriBasedGeomDataRef triGeomData, vector<Niflib::Triangle>& tris); - - bool ImportSkin(ImpNode *node, Niflib::NiTriBasedGeomRef triGeom); + bool ImportVertexColor(INode *tnode, TriObject *o, vector<Niflib::Triangle>& tris, vector<Niflib::Color4> cv, int cv_offset=0); + bool ImportSkin(ImpNode *node, Niflib::NiTriBasedGeomRef triGeom, int v_start=0); Texmap* CreateTexture(Niflib::TexDesc& desc); INode *CreateBone(const string& name, Point3 startPos, Point3 endPos, Point3 zAxis); INode *CreateHelper(const string& name, Point3 startPos); diff --git a/NifPlugins/DllEntry.cpp b/NifPlugins/DllEntry.cpp index 4df1a75..5cabc3a 100644 --- a/NifPlugins/DllEntry.cpp +++ b/NifPlugins/DllEntry.cpp @@ -18,6 +18,8 @@ extern ClassDesc2* GetNifFurnitureDesc(); extern ClassDesc2* GetKfExportDesc(); extern ClassDesc2* GetbhkSphereDesc(); extern ClassDesc2* GetbhkCapsuleDesc(); +//extern ClassDesc2* GetbhkRigidBodyModifierDesc(); +//extern ClassDesc2* GetbhkBoxDesc(); enum ClassDescType { @@ -94,8 +96,10 @@ void InitializeLibSettings() classDescEnabled[CD_Props] = true; classDescriptions[nClasses++] = GetNifPropsDesc(); #ifdef USE_UNSUPPORTED_CODE + classDescriptions[nClasses++] = GetbhkRigidBodyModifierDesc(); classDescriptions[nClasses++] = GetbhkSphereDesc(); classDescriptions[nClasses++] = GetbhkCapsuleDesc(); + classDescriptions[nClasses++] = GetbhkBoxDesc(); #endif } if ( GetIniValue<bool>("NifFurniture", "Enable", true, iniName) ) { diff --git a/NifPlugins_VC80.sln b/NifPlugins_VC80.sln index c33e8bd..edd1334 100644 --- a/NifPlugins_VC80.sln +++ b/NifPlugins_VC80.sln @@ -18,47 +18,87 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug - Max 5|Win32 = Debug - Max 5|Win32 + Debug - Max 5|x64 = Debug - Max 5|x64 Debug - Max 6|Win32 = Debug - Max 6|Win32 + Debug - Max 6|x64 = Debug - Max 6|x64 Debug - Max 7|Win32 = Debug - Max 7|Win32 + Debug - Max 7|x64 = Debug - Max 7|x64 Debug - Max 8|Win32 = Debug - Max 8|Win32 + Debug - Max 8|x64 = Debug - Max 8|x64 + Debug - Max 9|Win32 = Debug - Max 9|Win32 + Debug - Max 9|x64 = Debug - Max 9|x64 Release - Max 5|Win32 = Release - Max 5|Win32 + Release - Max 5|x64 = Release - Max 5|x64 Release - Max 6|Win32 = Release - Max 6|Win32 + Release - Max 6|x64 = Release - Max 6|x64 Release - Max 7|Win32 = Release - Max 7|Win32 + Release - Max 7|x64 = Release - Max 7|x64 Release - Max 8|Win32 = Release - Max 8|Win32 + Release - Max 8|x64 = Release - Max 8|x64 + Release - Max 9|Win32 = Release - Max 9|Win32 + Release - Max 9|x64 = Release - Max 9|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 5|Win32.ActiveCfg = Debug - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 5|Win32.Build.0 = Debug - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 5|x64.ActiveCfg = Debug - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 6|Win32.ActiveCfg = Debug - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 6|Win32.Build.0 = Debug - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 6|x64.ActiveCfg = Debug - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 7|Win32.ActiveCfg = Debug - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 7|Win32.Build.0 = Debug - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 7|x64.ActiveCfg = Debug - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 8|Win32.ActiveCfg = Debug - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 8|Win32.Build.0 = Debug - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 8|x64.ActiveCfg = Debug - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 9|Win32.ActiveCfg = Debug - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 9|Win32.Build.0 = Debug - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Debug - Max 9|x64.ActiveCfg = Debug - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 5|Win32.ActiveCfg = Release - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 5|Win32.Build.0 = Release - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 5|x64.ActiveCfg = Release - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 6|Win32.ActiveCfg = Release - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 6|Win32.Build.0 = Release - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 6|x64.ActiveCfg = Release - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 7|Win32.ActiveCfg = Release - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 7|Win32.Build.0 = Release - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 7|x64.ActiveCfg = Release - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 8|Win32.ActiveCfg = Release - PCH|Win32 {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 8|Win32.Build.0 = Release - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 8|x64.ActiveCfg = Release - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 9|Win32.ActiveCfg = Release - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 9|Win32.Build.0 = Release - PCH|Win32 + {19FD8EE6-79CC-4BAC-9744-D9573BE47C7E}.Release - Max 9|x64.ActiveCfg = Release - PCH|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 5|Win32.ActiveCfg = Debug - Max 5|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 5|Win32.Build.0 = Debug - Max 5|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 5|x64.ActiveCfg = Debug - Max 5|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 6|Win32.ActiveCfg = Debug - Max 6|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 6|Win32.Build.0 = Debug - Max 6|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 6|x64.ActiveCfg = Debug - Max 6|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 7|Win32.ActiveCfg = Debug - Max 7|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 7|Win32.Build.0 = Debug - Max 7|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 7|x64.ActiveCfg = Debug - Max 7|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 8|Win32.ActiveCfg = Debug - Max 8|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 8|Win32.Build.0 = Debug - Max 8|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 8|x64.ActiveCfg = Debug - Max 8|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 9|Win32.ActiveCfg = Debug - Max 9|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 9|Win32.Build.0 = Debug - Max 9|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Debug - Max 9|x64.ActiveCfg = Debug - Max 9|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 5|Win32.ActiveCfg = Release - Max 5|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 5|Win32.Build.0 = Release - Max 5|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 5|x64.ActiveCfg = Release - Max 5|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 6|Win32.ActiveCfg = Release - Max 6|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 6|Win32.Build.0 = Release - Max 6|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 6|x64.ActiveCfg = Release - Max 6|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 7|Win32.ActiveCfg = Release - Max 7|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 7|Win32.Build.0 = Release - Max 7|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 7|x64.ActiveCfg = Release - Max 7|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 8|Win32.ActiveCfg = Release - Max 8|Win32 {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 8|Win32.Build.0 = Release - Max 8|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 8|x64.ActiveCfg = Release - Max 8|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 9|Win32.ActiveCfg = Release - Max 9|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 9|Win32.Build.0 = Release - Max 9|Win32 + {466F2D3E-2663-4583-A05C-128683677617}.Release - Max 9|x64.ActiveCfg = Release - Max 9|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/NifPlugins_VC80.vcproj b/NifPlugins_VC80.vcproj index 53784ff..90fa3b6 100644 --- a/NifPlugins_VC80.vcproj +++ b/NifPlugins_VC80.vcproj @@ -17,7 +17,7 @@ <Configuration Name="Release - Max 6|Win32" OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\" - IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)" + IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\" ConfigurationType="2" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" @@ -120,8 +120,8 @@ </Configuration> <Configuration Name="Debug - Max 6|Win32" - OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)" - IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)" + OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\" + IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\" ConfigurationType="2" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" @@ -223,7 +223,7 @@ <Configuration Name="Release - Max 7|Win32" OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\" - IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)" + IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\" ConfigurationType="2" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" @@ -326,8 +326,8 @@ </Configuration> <Configuration Name="Debug - Max 7|Win32" - OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)" - IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)" + OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\" + IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\" ConfigurationType="2" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" @@ -361,7 +361,9 @@ AdditionalIncludeDirectories="C:\3dsmax7\maxsdk\include;..\niflib\include;..\niflib;.\NifCommon" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;USE_NIFLIB_TEMPLATE_HELPERS;_USE_MATH_DEFINES;USE_UNSUPPORTED_CODE;USE_BIPED" GeneratePreprocessedFile="0" + MinimalRebuild="true" ExceptionHandling="2" + BasicRuntimeChecks="3" RuntimeLibrary="1" ForceConformanceInForLoopScope="false" UsePrecompiledHeader="2" @@ -386,7 +388,7 @@ <Tool Name="VCLinkerTool" AdditionalOptions="/MACHINE:I386" - AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib shlwapi.lib core.lib geom.lib gfx.lib mesh.lib maxutil.lib maxscrpt.lib paramblk2.lib bmm.lib niflibd.lib" + AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib shlwapi.lib core.lib geom.lib gfx.lib mesh.lib maxutil.lib maxscrpt.lib paramblk2.lib bmm.lib" OutputFile="C:\3dsmax7\plugins\NifPlugins.dlu" LinkIncremental="2" SuppressStartupBanner="true" @@ -427,7 +429,7 @@ <Configuration Name="Release - Max 8|Win32" OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\" - IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)" + IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\" ConfigurationType="2" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" @@ -530,8 +532,8 @@ </Configuration> <Configuration Name="Debug - Max 8|Win32" - OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)" - IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)" + OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\" + IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\" ConfigurationType="2" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" @@ -592,7 +594,7 @@ <Tool Name="VCLinkerTool" AdditionalOptions="/MACHINE:I386" - AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib shlwapi.lib core.lib geom.lib gfx.lib mesh.lib maxutil.lib maxscrpt.lib paramblk2.lib bmm.lib niflib_debug.lib" + AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib shlwapi.lib core.lib geom.lib gfx.lib mesh.lib maxutil.lib maxscrpt.lib paramblk2.lib bmm.lib" OutputFile="C:\3dsmax8\plugins\NifPlugins.dlu" LinkIncremental="2" SuppressStartupBanner="true" @@ -632,8 +634,8 @@ </Configuration> <Configuration Name="Debug - Max 5|Win32" - OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)" - IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)" + OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\" + IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\" ConfigurationType="2" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" @@ -736,7 +738,7 @@ <Configuration Name="Release - Max 5|Win32" OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\" - IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)" + IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\" ConfigurationType="2" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" @@ -837,6 +839,212 @@ CommandLine="set MaxRootDir=$(TargetDir)\..
if exist "%MaxRootDir%\plugcfg" (
if not exist "%MaxRootDir%\plugcfg\MaxNifTools.ini" (
copy "$(ProjectDir)MaxNifTools.ini" "%MaxRootDir%\plugcfg\MaxNifTools.ini"
)
)
xcopy /D /Y /I "$(ProjectDir)MaxNifPlugins_Readme.txt" "$(OutDir)"
xcopy /D /Y /I "$(ProjectDir)MaxNifTools.ini" "$(OutDir)"
xcopy /D /Y /I "$(TargetPath)" "$(OutDir)"
" /> </Configuration> + <Configuration + Name="Debug - Max 9|Win32" + OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\" + IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="false" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + PreprocessorDefinitions="_DEBUG" + MkTypLibCompatible="true" + SuppressStartupBanner="true" + TargetEnvironment="1" + TypeLibraryName="$(OutDir)NifPlugins.tlb" + /> + <Tool + Name="VCCLCompilerTool" + AdditionalOptions="/LD /Zm200 /FI"$(ProjectDir)NifPlugins\pch.h"" + Optimization="0" + InlineFunctionExpansion="2" + AdditionalIncludeDirectories="C:\3dsmax9\maxsdk\include;..\niflib\include;..\niflib;.\NifCommon" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;USE_NIFLIB_TEMPLATE_HELPERS;_USE_MATH_DEFINES;USE_UNSUPPORTED_CODE;USE_BIPED" + GeneratePreprocessedFile="0" + MinimalRebuild="true" + ExceptionHandling="2" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + ForceConformanceInForLoopScope="false" + UsePrecompiledHeader="2" + PrecompiledHeaderThrough="$(ProjectDir)NifPlugins\pch.h" + WarningLevel="3" + SuppressStartupBanner="true" + DebugInformationFormat="3" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG;NIFPLUGINS" + Culture="1033" + AdditionalIncludeDirectories=".\NifCommon" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalOptions="/MACHINE:I386" + AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib shlwapi.lib core.lib geom.lib gfx.lib mesh.lib maxutil.lib maxscrpt.lib paramblk2.lib bmm.lib niflib_debug.lib" + OutputFile="C:\3dsmax9\plugins\NifPlugins.dlu" + LinkIncremental="2" + SuppressStartupBanner="true" + AdditionalLibraryDirectories="C:\3dsmax9\maxsdk\lib;..\niflib\lib" + IgnoreDefaultLibraryNames="msvcrtd.lib" + ModuleDefinitionFile=".\NifPlugins\NifPlugins.def" + GenerateDebugInformation="true" + ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb" + SubSystem="2" + BaseAddress="0x16860000" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + CommandLine="" + /> + </Configuration> + <Configuration + Name="Release - Max 9|Win32" + OutputDirectory="$(SolutionDir)Staging\$(ConfigurationName)\" + IntermediateDirectory="$(SolutionDir)Temp\$(ProjectName)\$(ConfigurationName)\" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="false" + WholeProgramOptimization="0" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + CommandLine="" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + PreprocessorDefinitions="NDEBUG" + MkTypLibCompatible="true" + SuppressStartupBanner="true" + TargetEnvironment="1" + TypeLibraryName="$(OutDir)NifPlugins.tlb" + /> + <Tool + Name="VCCLCompilerTool" + AdditionalOptions="/LD /Zm200 /FI"$(ProjectDir)NifPlugins\pch.h"" + InlineFunctionExpansion="2" + AdditionalIncludeDirectories="C:\3dsmax9\maxsdk\include;..\niflib\include;..\niflib;.\NifCommon" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;USE_NIFLIB_TEMPLATE_HELPERS;_USE_MATH_DEFINES;USE_BIPED" + StringPooling="true" + ExceptionHandling="2" + RuntimeLibrary="0" + EnableFunctionLevelLinking="true" + ForceConformanceInForLoopScope="false" + UsePrecompiledHeader="2" + PrecompiledHeaderThrough="$(ProjectDir)NifPlugins\pch.h" + WarningLevel="3" + SuppressStartupBanner="true" + DebugInformationFormat="3" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG;NIFPLUGINS" + Culture="1033" + AdditionalIncludeDirectories=".\NifCommon" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalOptions="/MACHINE:I386" + AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib shlwapi.lib core.lib geom.lib gfx.lib mesh.lib maxutil.lib maxscrpt.lib paramblk2.lib bmm.lib niflib.lib" + OutputFile="C:\3dsmax9\plugins\NifPlugins.dlu" + LinkIncremental="1" + SuppressStartupBanner="true" + AdditionalLibraryDirectories="C:\3dsmax9\maxsdk\lib;..\niflib\lib" + ModuleDefinitionFile=".\NifPlugins\NifPlugins.def" + GenerateDebugInformation="true" + ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + SetChecksum="true" + BaseAddress="0x16860000" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + CommandLine="set MaxRootDir=$(TargetDir)\..
if exist "%MaxRootDir%\plugcfg" (
if not exist "%MaxRootDir%\plugcfg\MaxNifTools.ini" (
copy "$(ProjectDir)MaxNifTools.ini" "%MaxRootDir%\plugcfg\MaxNifTools.ini"
)
)
xcopy /D /Y /I "$(ProjectDir)MaxNifPlugins_Readme.txt" "$(OutDir)"
xcopy /D /Y /I "$(ProjectDir)MaxNifTools.ini" "$(OutDir)"
xcopy /D /Y /I "$(TargetPath)" "$(OutDir)"
" + /> + </Configuration> </Configurations> <References> </References> @@ -1171,6 +1379,24 @@ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc" /> </FileConfiguration> + <FileConfiguration + Name="Debug - Max 9|Win32" + > + <Tool + Name="VCCLCompilerTool" + ObjectFile="$(IntDir)\$(InputName)1.obj" + XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc" + /> + </FileConfiguration> + <FileConfiguration + Name="Release - Max 9|Win32" + > + <Tool + Name="VCCLCompilerTool" + ObjectFile="$(IntDir)\$(InputName)1.obj" + XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc" + /> + </FileConfiguration> </File> <File RelativePath=".\NifPlugins\NifPlugins.rc" @@ -1243,6 +1469,22 @@ UsePrecompiledHeader="1" /> </FileConfiguration> + <FileConfiguration + Name="Debug - Max 9|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + <FileConfiguration + Name="Release - Max 9|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> </File> <File RelativePath=".\NifPlugins\pch.h" diff --git a/NifProps/bhkCapsuleObj.cpp b/NifProps/bhkCapsuleObj.cpp index e237f2f..9474be2 100644 --- a/NifProps/bhkCapsuleObj.cpp +++ b/NifProps/bhkCapsuleObj.cpp @@ -54,7 +54,7 @@ public: CreateMouseCallBack* GetCreateMouseCallBack(); void BeginEditParams( IObjParam *ip, ULONG flags,Animatable *prev); void EndEditParams( IObjParam *ip, ULONG flags,Animatable *next); - RefTargetHandle Clone(RemapDir& remap = NoRemap()); + RefTargetHandle Clone(RemapDir& remap); TCHAR *GetObjectName() { return GetString(IDS_RB_Capsule); } // Animatable methods @@ -285,9 +285,9 @@ BOOL CapsuleParamDlgProc::DlgProc(TimeValue t,IParamMap *map,HWND hWnd,UINT msg, bhkCapsuleObject::bhkCapsuleObject(BOOL loading) { SetAFlag(A_PLUGIN1); - MakeRefByID(FOREVER, 0, CreateParameterBlock(curDescVer, PBLOCK_LENGTH, CURRENT_VERSION)); + ReplaceReference(0, CreateParameterBlock(curDescVer, PBLOCK_LENGTH, CURRENT_VERSION)); assert(pblock); - MakeRefByID(FOREVER, 1, GetRBBlock()); + ReplaceReference(1, GetRBBlock()); pblock->SetValue(PB_RADIUS1,0,crtRadius1); pblock->SetValue(PB_RADIUS2,0,crtRadius2); diff --git a/NifProps/bhkSphereObj.cpp b/NifProps/bhkSphereObj.cpp index 8b8984c..9971cb5 100644 --- a/NifProps/bhkSphereObj.cpp +++ b/NifProps/bhkSphereObj.cpp @@ -49,7 +49,7 @@ public: CreateMouseCallBack* GetCreateMouseCallBack(); void BeginEditParams( IObjParam *ip, ULONG flags,Animatable *prev); void EndEditParams( IObjParam *ip, ULONG flags,Animatable *next); - RefTargetHandle Clone(RemapDir& remap = NoRemap()); + RefTargetHandle Clone(RemapDir& remap); TCHAR *GetObjectName() { return GetString(IDS_RB_SPHERE); } // From GeomObject @@ -254,9 +254,9 @@ BOOL SphereParamDlgProc::DlgProc(TimeValue t,IParamMap *map,HWND hWnd,UINT msg,W bhkSphereObject::bhkSphereObject(BOOL loading) { SetAFlag(A_PLUGIN1); - MakeRefByID(FOREVER, 0, CreateParameterBlock(curDescVer, PBLOCK_LENGTH, CURRENT_VERSION)); + ReplaceReference(0, CreateParameterBlock(curDescVer, PBLOCK_LENGTH, CURRENT_VERSION)); assert(pblock); - MakeRefByID(FOREVER, 1, GetRBBlock()); + ReplaceReference(1, GetRBBlock()); pblock->SetValue(PB_RADIUS,0,crtRadius); pblock->SetValue(PB_SMOOTH,0,dlgSmooth); -- GitLab