Files
sbox-public/engine/Definitions/modeldoc/ModelDocApp.def
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

136 lines
4.7 KiB
Modula-2

#include "modeldoc_editor_app.h"
#include "modeldoc_editor_session.h"
#include "modeldoc_lib/modeldoc_rendermeshfile.h"
#include "modeldoc_lib/modeldoc_physicshullfromrender.h"
#include "modeldoc_lib/modeldoc_physicsmeshfromrender.h"
#include "modeldoc_lib/modeldoc_materialgroup.h"
#include "modeldoc_lib/modeldoc_renderprimitive_mesh.h"
#include "modeldoc_utils/imodeldocutils.h"
native class CModelDocEditorApp as NativeModelDoc.CModelDocEditorApp
{
void RefreshGameData();
inline string GetSessionModel()
{
CModelDocEditorSession *pSession = self->GetActiveModelDocEditorSession();
IAsset *pAsset = pSession ? pSession->GetModelAsset() : nullptr;
return pAsset ? pAsset->GetAssetRelativePath_Transient() : nullptr;
}
}
managed static class Editor.ModelEditor.ModelDoc
{
void Init( CModelDocEditorApp app );
void OnToolsMenu( QMenu menu );
}
native static class NativeEngine.ModelDoc
{
inline bool CreateModelFromMeshFile( string pVmdlFileFullPath, string meshRelativePath, string material )
{
CModelDoc modelFile;
CModelDocRenderMeshFile *pRenderMeshFile = modelFile.CreateNode< CModelDocRenderMeshFile >( "", nullptr, MODELDOC_CREATE_NODE_DEFAULT );
pRenderMeshFile->SetFilename( meshRelativePath );
modelFile.CreateNode< CModelDocPhysicsHullFromRender >( "", nullptr, MODELDOC_CREATE_NODE_DEFAULT );
CModelDocDefaultMaterialGroup *pDefaultMaterialGroup = modelFile.CreateNode< CModelDocDefaultMaterialGroup >( "", nullptr, MODELDOC_CREATE_NODE_DEFAULT );
pDefaultMaterialGroup->SetHasGlobalDefault( true );
pDefaultMaterialGroup->SetGlobalDefaultMaterial( material );
return modelFile.SaveToFile( pVmdlFileFullPath, nullptr );
}
inline bool CreateModelFromMesh( string pVmdlFileFullPath, CModelMesh pMesh )
{
CModelDoc modelFile;
CModelDocRenderPrimitiveMesh *pRenderPrimitiveMesh = modelFile.CreateNode< CModelDocRenderPrimitiveMesh >( "", nullptr, MODELDOC_CREATE_NODE_DEFAULT );
pRenderPrimitiveMesh->CopyFrom( pMesh );
modelFile.CreateNode< CModelDocPhysicsMeshFromRender >( "", nullptr, MODELDOC_CREATE_NODE_DEFAULT );
return modelFile.SaveToFile( pVmdlFileFullPath, nullptr );
}
inline bool CreateModelFromMeshes( string pVmdlFileFullPath, CastTo[CModelMesh**] void* pMeshes, int nMeshCount )
{
CModelDoc modelFile;
for ( int i = 0; i < nMeshCount; ++i )
{
CModelDocRenderPrimitiveMesh *pRenderPrimitiveMesh = modelFile.CreateNode< CModelDocRenderPrimitiveMesh >( "", nullptr, MODELDOC_CREATE_NODE_DEFAULT );
pRenderPrimitiveMesh->CopyFrom( pMeshes[i] );
}
modelFile.CreateNode< CModelDocPhysicsMeshFromRender >( "", nullptr, MODELDOC_CREATE_NODE_DEFAULT );
return modelFile.SaveToFile( pVmdlFileFullPath, nullptr );
}
}
native class CModelMesh
{
void DeleteThis(); [delete]
static CModelMesh Create(); [new]
void AddVertices( int nNumVertices );
inline void AddFaceGroup( string pMaterialName )
{
int nFaceGroup = self->AddFaceGroup();
self->SetFaceGroupMaterial( nFaceGroup, pMaterialName );
}
inline void SetPositions( CastTo[Vector*] void* pPositions, int nNumPositions )
{
CModelMesh::VertexStreamIndex_t nPositionStream = self->VertexStreamSet().AddStream( "position", MODELSTREAM_TYPE_POSITION_3D );
CModelStreamAccessor positionStream = self->VertexStreamSet().GetStream( nPositionStream );
for ( int i = 0; i < nNumPositions; ++i )
{
positionStream.SetValue( i, pPositions[i] );
}
}
inline void SetTexCoords( CastTo[Vector2D*] void* pTexCoords, int nNumTexCoords )
{
CModelMesh::FaceVertexStreamIndex_t nUVStream = self->FaceVertexStreamSet().AddStream( "texcoord", MODELSTREAM_TYPE_TEXCOORD_2D );
CModelStreamAccessor uvStream = self->FaceVertexStreamSet().GetStream( nUVStream );
for ( int i = 0; i < nNumTexCoords; ++i )
{
uvStream.SetValue( i, pTexCoords[i] );
}
}
inline void SetNormals( CastTo[Vector*] void* pNormals, int nNumNormals )
{
CModelMesh::FaceVertexStreamIndex_t nStream = self->FaceVertexStreamSet().AddStream( "normal", MODELSTREAM_TYPE_NORMAL_3D );
CModelStreamAccessor stream = self->FaceVertexStreamSet().GetStream( nStream );
for ( int i = 0; i < nNumNormals; ++i )
{
stream.SetValue( i, pNormals[i] );
}
}
inline void AddFace( int nGroupIndex, CastTo[int*] void* pVertices, int nNumVertices )
{
CUtlVector< CModelMesh::VertexHandle_t > vertices;
for ( int i = 0; i < nNumVertices; ++i )
vertices.AddToTail( self->GetVertexHandleForIndex( pVertices[i] ) );
self->AddFace( vertices.Base(), vertices.Count(), nGroupIndex );
}
}
native class CModelDoc
{
void DeleteThis(); [delete]
static CModelDoc Create(); [new]
inline bool SaveToFile( string pFullPath )
{
return self->SaveToFile( pFullPath, nullptr );
}
}
native static accessor g_pModelDocUtils
{
bool InitFromMesh( CModelDoc pModelDoc, string pFilename );
}