PDF3D/IDTF.Net/ResourceDataDescriptions.cs
2023-04-25 15:48:55 +08:00

519 lines
20 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Drawing;
namespace IDTF.Net
{
/* This file contains data descriptions for the resource_lists. */
internal interface IResourceData
{
void Export(StreamWriter toStream);
}
/* Resource data for the "MODEL RESOURCE_LIST" */
public class ShadingDescription
{
public ShadingDescription(int id = 0)
{
ShaderID = id;
}
public int ShaderID { get; set; }
private List<int> _textureCoordDimList;
public List<int> TextureCoordDimensionList
{
get
{
if (_textureCoordDimList == null) { _textureCoordDimList = new List<int>(); }
return _textureCoordDimList;
}
set
{
_textureCoordDimList = value;
}
}
internal void Export(StreamWriter toStream)
{
toStream.WriteLine(string.Format("\t\t\t\t\tTEXTURE_LAYER_COUNT {0}", TextureCoordDimensionList.Count()));
if (_textureCoordDimList != null)
{
ListExtensions.ExportTextureCoordListToStream(_textureCoordDimList, toStream);
}
toStream.WriteLine(string.Format("\t\t\t\t\tSHADER_ID {0}", ShaderID));
}
}
public class FaceTextureCoord
{
private List<Int3> _textureCoordDimList;
public List<Int3> TextureCoordDimensionList
{
get
{
if (_textureCoordDimList == null) { _textureCoordDimList = new List<Int3>(); }
return _textureCoordDimList;
}
set
{
_textureCoordDimList = value;
}
}
internal void Export(StreamWriter toStream)
{
if (_textureCoordDimList != null)
{
ListExtensions.ExportTextureCoordListToStream(_textureCoordDimList, toStream);
}
}
}
public class LineTextureCoord
{
private List<Int2> _textureCoordDimList;
public List<Int2> TextureCoordDimensionList
{
get
{
if (_textureCoordDimList == null) { _textureCoordDimList = new List<Int2>(); }
return _textureCoordDimList;
}
set
{
_textureCoordDimList = value;
}
}
internal void Export(StreamWriter toStream)
{
if (_textureCoordDimList != null)
{
ListExtensions.ExportTextureCoordListToStream(_textureCoordDimList, toStream);
}
}
}
public class MeshData
{
private List<ShadingDescription> _shadingDescriptionList;
private List<Int3> _meshFacePositionList;
private List<Int3> _meshFaceNormalList;
private List<int> _meshFaceShadingList;
private List<FaceTextureCoord> _meshFaceTextureCoordinateList;
private List<Int3> _meshFaceDiffuseColorList;
private List<Int3> _meshFaceSpecularColorList;
private List<Point3> _modelPositionList;
private List<Point3> _modelNormalList;
private List<Color> _modelDiffuseColorList;
private List<Color> _modelSpecularColorList;
private List<Vector4> _modelTextureCoordList;
private List<int> _meshBasePositionList;
public List<ShadingDescription> ShadingDescriptionList
{
get
{
if (_shadingDescriptionList == null) _shadingDescriptionList = new List<ShadingDescription>();
return _shadingDescriptionList;
}
set { _shadingDescriptionList = value; }
}
public List<Int3> MeshFacePositionList
{
get
{
if (_meshFacePositionList == null) _meshFacePositionList = new List<Int3>();
return _meshFacePositionList;
}
set { _meshFacePositionList = value; }
}
public List<Int3> MeshFaceNormalList
{
get
{
if (_meshFaceNormalList == null) _meshFaceNormalList = new List<Int3>();
return _meshFaceNormalList;
}
set { _meshFaceNormalList = value; }
}
public List<int> MeshFaceShadingList
{
get
{
if (_meshFaceShadingList == null) _meshFaceShadingList = new List<int>();
return _meshFaceShadingList;
}
set { _meshFaceShadingList = value; }
}
public List<FaceTextureCoord> MeshFaceTextureCoordinateList
{
get
{
if (_meshFaceTextureCoordinateList == null) _meshFaceTextureCoordinateList = new List<FaceTextureCoord>();
return _meshFaceTextureCoordinateList;
}
set { _meshFaceTextureCoordinateList = value; }
}
public List<Int3> MeshFaceDiffuseColorList
{
get
{
if (_meshFaceDiffuseColorList == null) _meshFaceDiffuseColorList = new List<Int3>();
return _meshFaceDiffuseColorList;
}
set { _meshFaceDiffuseColorList = value; }
}
public List<Int3> MeshFaceSpecularColorList
{
get
{
if (_meshFaceSpecularColorList == null) _meshFaceSpecularColorList = new List<Int3>();
return _meshFaceSpecularColorList;
}
set { _meshFaceSpecularColorList = value; }
}
public List<Point3> ModelPositionList
{
get
{
if (_modelPositionList == null) _modelPositionList = new List<Point3>();
return _modelPositionList;
}
set { _modelPositionList = value; }
}
public List<Point3> ModelNormalList
{
get
{
if (_modelNormalList == null) _modelNormalList = new List<Point3>();
return _modelNormalList;
}
set { _modelNormalList = value; }
}
public List<Color> ModelDiffuseColorList
{
get
{
if (_modelDiffuseColorList == null) _modelDiffuseColorList = new List<Color>();
return _modelDiffuseColorList;
}
set { _modelDiffuseColorList = value; }
}
public List<Color> ModelSpecularColorList
{
get
{
if (_modelSpecularColorList == null) _modelSpecularColorList = new List<Color>();
return _modelSpecularColorList;
}
set { _modelSpecularColorList = value; }
}
public List<Vector4> ModelTextureCoordList
{
get
{
if (_modelTextureCoordList == null) _modelTextureCoordList = new List<Vector4>();
return _modelTextureCoordList;
}
set { _modelTextureCoordList = value; }
}
public List<int> MeshBasePositionList
{
get
{
if (_meshBasePositionList == null) _meshBasePositionList = new List<int>();
return _meshBasePositionList;
}
set { _meshBasePositionList = value; }
}
public void Export(StreamWriter toStream)
{
toStream.WriteLine(string.Format("\t\tMESH {{"));
toStream.WriteLine(string.Format("\t\t\tFACE_COUNT {0}", MeshFacePositionList.Count().ToString()));
toStream.WriteLine(string.Format("\t\t\tMODEL_POSITION_COUNT {0}", ModelPositionList.Count().ToString()));
// toStream.WriteLine(String.Format("\t\t\tMODEL_BASE_POSITION_COUNT {0} {{", this.MeshBasePositionList.Count().ToString()));
toStream.WriteLine(string.Format("\t\t\tMODEL_NORMAL_COUNT {0}", ModelNormalList.Count().ToString()));
toStream.WriteLine(string.Format("\t\t\tMODEL_DIFFUSE_COLOR_COUNT {0}", ModelDiffuseColorList.Count().ToString()));
toStream.WriteLine(string.Format("\t\t\tMODEL_SPECULAR_COLOR_COUNT {0}", ModelSpecularColorList.Count().ToString()));
toStream.WriteLine(string.Format("\t\t\tMODEL_TEXTURE_COORD_COUNT {0}", ModelTextureCoordList.Count().ToString()));
toStream.WriteLine(string.Format("\t\t\tMODEL_BONE_COUNT {0}", 0)); //What does this count???
toStream.WriteLine(string.Format("\t\t\tMODEL_SHADING_COUNT {0}", ShadingDescriptionList.Count().ToString()));
ListExtensions.ExportShadingListToStream(ShadingDescriptionList, toStream);
ListExtensions.ExportInt3ListToStream(MeshFacePositionList, toStream, "MESH_FACE_POSITION_LIST");
ListExtensions.ExportInt3ListToStream(MeshFaceNormalList, toStream, "MESH_FACE_NORMAL_LIST");
ListExtensions.ExportIntListToStream(MeshFaceShadingList, toStream, "MESH_FACE_SHADING_LIST");
ListExtensions.ExportMeshFaceTextureCoordListToStream(MeshFaceTextureCoordinateList, toStream);
ListExtensions.ExportInt3ListToStream(MeshFaceDiffuseColorList, toStream, "MESH_FACE_DIFFUSE_COLOR_LIST");
ListExtensions.ExportInt3ListToStream(MeshFaceSpecularColorList, toStream, "MESH_FACE_SPECULAR_COLOR_LIST");
ListExtensions.ExportPoint3ListToStream(ModelPositionList, toStream, "MODEL_POSITION_LIST");
ListExtensions.ExportPoint3ListToStream(ModelNormalList, toStream, "MODEL_NORMAL_LIST");
ListExtensions.ExportColor4ListToStream(ModelDiffuseColorList, toStream, "MODEL_DIFFUSE_COLOR_LIST");
ListExtensions.ExportColor4ListToStream(ModelSpecularColorList, toStream, "MODEL_NORMAL_LIST");
ListExtensions.ExportVector4ListToStream(ModelTextureCoordList, toStream, "MODEL_TEXTURE_COORD_LIST");
ListExtensions.ExportIntListToStream(MeshBasePositionList, toStream, "MESH_BASE_POSITION_LIST");
toStream.WriteLine(string.Format("\t\t}}"));
}
}
public class LineSetData
{
private List<ShadingDescription> _shadingDescriptionList;
private List<Int2> _linePositionList;
private List<Int2> _lineNormalList;
private List<int> _lineShadingList;
private List<LineTextureCoord> _lineTextureCoordinateList;
private List<Int2> _lineDiffuseColorList;
private List<Int2> _lineSpecularColorList;
private List<Point3> _modelPositionList;
private List<Point3> _modelNormalList;
private List<Color> _modelDiffuseColorList;
private List<Color> _modelSpecularColorList;
private List<Vector4> _modelTextureCoordList;
public List<ShadingDescription> ShadingDescriptionList
{
get
{
if (_shadingDescriptionList == null) _shadingDescriptionList = new List<ShadingDescription>();
return _shadingDescriptionList;
}
set { _shadingDescriptionList = value; }
}
public List<Int2> LinePositionList
{
get
{
if (_linePositionList == null) _linePositionList = new List<Int2>();
return _linePositionList;
}
set { _linePositionList = value; }
}
public List<Int2> LineNormalList
{
get
{
if (_lineNormalList == null) _lineNormalList = new List<Int2>();
return _lineNormalList;
}
set { _lineNormalList = value; }
}
public List<int> LineShadingList
{
get
{
if (_lineShadingList == null) _lineShadingList = new List<int>();
return _lineShadingList;
}
set { _lineShadingList = value; }
}
public List<LineTextureCoord> LineTextureCoordinateList
{
get
{
if (_lineTextureCoordinateList == null) _lineTextureCoordinateList = new List<LineTextureCoord>();
return _lineTextureCoordinateList;
}
set { _lineTextureCoordinateList = value; }
}
public List<Int2> LineDiffuseColorList
{
get
{
if (_lineDiffuseColorList == null) _lineDiffuseColorList = new List<Int2>();
return _lineDiffuseColorList;
}
set { _lineDiffuseColorList = value; }
}
public List<Int2> LineSpecularColorList
{
get
{
if (_lineSpecularColorList == null) _lineSpecularColorList = new List<Int2>();
return _lineSpecularColorList;
}
set { _lineSpecularColorList = value; }
}
public List<Point3> ModelPositionList
{
get
{
if (_modelPositionList == null) _modelPositionList = new List<Point3>();
return _modelPositionList;
}
set { _modelPositionList = value; }
}
public List<Point3> ModelNormalList
{
get
{
if (_modelNormalList == null) _modelNormalList = new List<Point3>();
return _modelNormalList;
}
set { _modelNormalList = value; }
}
public List<Color> ModelDiffuseColorList
{
get
{
if (_modelDiffuseColorList == null) _modelDiffuseColorList = new List<Color>();
return _modelDiffuseColorList;
}
set { _modelDiffuseColorList = value; }
}
public List<Color> ModelSpecularColorList
{
get
{
if (_modelSpecularColorList == null) _modelSpecularColorList = new List<Color>();
return _modelSpecularColorList;
}
set { _modelSpecularColorList = value; }
}
public List<Vector4> ModelTextureCoordList
{
get
{
if (_modelTextureCoordList == null) _modelTextureCoordList = new List<Vector4>();
return _modelTextureCoordList;
}
set { _modelTextureCoordList = value; }
}
public void Export(StreamWriter toStream)
{
toStream.WriteLine(string.Format("\t\tLINE_SET {{"));
toStream.WriteLine(string.Format("\t\t\tLINE_COUNT {0}", LinePositionList.Count().ToString()));
toStream.WriteLine(string.Format("\t\t\tMODEL_POSITION_COUNT {0}", ModelPositionList.Count().ToString()));
toStream.WriteLine(string.Format("\t\t\tMODEL_NORMAL_COUNT {0}", ModelNormalList.Count().ToString()));
toStream.WriteLine(string.Format("\t\t\tMODEL_DIFFUSE_COLOR_COUNT {0}", ModelDiffuseColorList.Count().ToString()));
toStream.WriteLine(string.Format("\t\t\tMODEL_SPECULAR_COLOR_COUNT {0}", ModelSpecularColorList.Count().ToString()));
toStream.WriteLine(string.Format("\t\t\tMODEL_TEXTURE_COORD_COUNT {0}", ModelTextureCoordList.Count().ToString()));
toStream.WriteLine(string.Format("\t\t\tMODEL_SHADING_COUNT {0}", ShadingDescriptionList.Count().ToString()));
ListExtensions.ExportShadingListToStream(ShadingDescriptionList, toStream);
ListExtensions.ExportInt2ListToStream(LinePositionList, toStream, "LINE_POSITION_LIST");
ListExtensions.ExportInt2ListToStream(LineNormalList, toStream, "LINE_NORMAL_LIST");
ListExtensions.ExportIntListToStream(LineShadingList, toStream, "LINE_SHADING_LIST");
ListExtensions.ExportLineTextureCoordListToStream(LineTextureCoordinateList, toStream);
ListExtensions.ExportInt2ListToStream(LineDiffuseColorList, toStream, "LINE_DIFFUSE_COLOR_LIST");
ListExtensions.ExportInt2ListToStream(LineSpecularColorList, toStream, "LINE_SPECULAR_COLOR_LIST");
ListExtensions.ExportPoint3ListToStream(ModelPositionList, toStream, "MODEL_POSITION_LIST");
ListExtensions.ExportPoint3ListToStream(ModelNormalList, toStream, "MODEL_NORMAL_LIST");
ListExtensions.ExportColor4ListToStream(ModelDiffuseColorList, toStream, "MODEL_DIFFUSE_COLOR_LIST");
ListExtensions.ExportColor4ListToStream(ModelSpecularColorList, toStream, "MODEL_NORMAL_LIST");
ListExtensions.ExportVector4ListToStream(ModelTextureCoordList, toStream, "MODEL_TEXTURE_COORD_LIST");
toStream.WriteLine(string.Format("\t\t}}"));
}
}
public class PointSetData
{
public void Export(StreamWriter toStream) { }
}
/* Resource data for the "SHADER RESOURCE_LIST" */
public class TextureLayer : IResourceData
{
public string TextureName { get; set; }
public float? TextureLayerIntensity { get; set; } //optional
public TextureLayerBlendFunctionType? TextureLayerBlendFunction { get; set; } //optional
public TextureLayerBlendSourceType? TextureLayerBlendSource { get; set; } //optional
public float? TextureLayerBlendConstant { get; set; } //optional
public string TextureLayerMode { get; set; } //optional
public bool? TextureLayerAlphaEnabled { get; set; } //optional
public void Export(StreamWriter toStream)
{
if (TextureLayerIntensity != null)
toStream.WriteLine(string.Format("\t\t\t\tTEXTURE_LAYER_INTENSITY {0}", ((float)TextureLayerIntensity).ToString(Format.SixDecPlFormat)));
if (TextureLayerBlendFunction != null)
toStream.WriteLine(string.Format("\t\t\t\tTEXTURE_LAYER_BLEND_FUNCTION \"{0}\"", TextureLayerBlendFunction.ToString()));
if (TextureLayerBlendSource != null)
toStream.WriteLine(string.Format("\t\t\t\tTEXTURE_LAYER_BLEND_SOURCE \"{0}\"", TextureLayerBlendSource.ToString()));
if (TextureLayerBlendConstant != null)
toStream.WriteLine(string.Format("\t\t\t\tTEXTURE_LAYER_BLEND_CONSTANT {0}", ((float)TextureLayerBlendConstant).ToString(Format.SixDecPlFormat)));
if (TextureLayerMode != null)
toStream.WriteLine(string.Format("\t\t\t\tTEXTURE_LAYER_MODE {0}", TextureLayerMode));
if (TextureLayerAlphaEnabled != null)
toStream.WriteLine(string.Format("\t\t\t\tTEXTURE_LAYER_ALPHA_ENABLED \"{0}\"", TextureLayerAlphaEnabled.ToString().ToUpper()));
toStream.WriteLine(string.Format("\t\t\t\tTEXTURE_NAME \"{0}\"", TextureName));
}
}
/* Resource data for the "TEXTURE RESOURCE_LIST" */
public class TextureImageFormat : IResourceData
{
public CompressionType? Type { get; set; }
public bool? AlphaChannel { get; set; }
public bool? BlueChannel { get; set; }
public bool? GreenChannel { get; set; }
public bool? RedChannel { get; set; }
public bool? Luminance { get; set; }
public bool? ExternalReference { get; set; }
private List<Url> _urlList; //optional
public List<Url> UrltList
{
get
{
if (_urlList == null) _urlList = new List<Url>();
return _urlList;
}
set
{
_urlList = value;
}
} //optional
public void Export(StreamWriter toStream)
{
if (Type != null)
toStream.WriteLine(string.Format("\t\t\t\tCOMPRESSION_TYPE \"{0}\"", Type.ToString()));
if (AlphaChannel != null)
toStream.WriteLine(string.Format("\t\t\t\tALPHA_CHANNEL \"{0}\"", AlphaChannel.ToString().ToUpper()));
if (BlueChannel != null)
toStream.WriteLine(string.Format("\t\t\t\tBLUE_CHANNEL \"{0}\"", BlueChannel.ToString().ToUpper()));
if (GreenChannel != null)
toStream.WriteLine(string.Format("\t\t\t\tGREEN_CHANNEL \"{0}\"", GreenChannel.ToString().ToUpper()));
if (RedChannel != null)
toStream.WriteLine(string.Format("\t\t\t\tRED_CHANNEL \"{0}\"", RedChannel.ToString().ToUpper()));
if (Luminance != null)
toStream.WriteLine(string.Format("\t\t\t\tLUMINANCE \"{0}\"", Luminance.ToString().ToUpper()));
if (ExternalReference != null)
toStream.WriteLine(string.Format("\t\t\t\tEXERNAL_REFERENCE \"{0}\"", ExternalReference.ToString().ToUpper()));
ListExtensions.ExportUrlListToStream(UrltList, toStream);
}
}
public class Url : IResourceData
{
public string UrlPath { get; set; }
public void Export(StreamWriter toStream)
{
}
}
}