1 /*******************************************************************************
2 Copyright (c) 2012, Jonathan Hiller
3 
4 This file is part of the AMF Tools suite. http://amf.wikispaces.com/
5 AMF Tools is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
6 AMF Tools is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
7 See <http://www.opensource.org/licenses/lgpl-3.0.html> for license details.
8 *******************************************************************************/
9 
10 // Amf_WinDll.cpp : Defines the exported functions for the DLL application.
11 //
12 
13 #include "Amf.h"
14 #include "AMF_File.h"
15 
16 //Need to translate. Can't use the same enums because must be defined in interface header as well as within library.
TranslateEnum(Amf::aUnitSystem UnitsIn)17 static UnitSystem TranslateEnum(Amf::aUnitSystem UnitsIn){switch (UnitsIn){case Amf::aUNIT_MM: return UNIT_MM;	case Amf::aUNIT_M: return UNIT_M; case Amf::aUNIT_IN: return UNIT_IN; case Amf::aUNIT_FT: return UNIT_FT; case Amf::aUNIT_UM: return UNIT_UM; default: return UNIT_MM;}}
TranslateEnum(UnitSystem UnitsIn)18 static Amf::aUnitSystem TranslateEnum(UnitSystem UnitsIn){switch (UnitsIn){case UNIT_MM: return Amf::aUNIT_MM;	case UNIT_M: return Amf::aUNIT_M; case UNIT_IN: return Amf::aUNIT_IN; case UNIT_FT: return Amf::aUNIT_FT; case UNIT_UM: return Amf::aUNIT_UM; default: return Amf::aUNIT_MM;}}
TranslateEnum(Amf::aInstanceParamD ParamIn)19 static InstanceParamD TranslateEnum(Amf::aInstanceParamD ParamIn){switch (ParamIn){case Amf::aINST_DX: return INST_DX;	case Amf::aINST_DY: return INST_DY; case Amf::aINST_DZ: return INST_DZ; case Amf::aINST_RX: return INST_RX; case Amf::aINST_RY: return INST_RY; case Amf::aINST_RZ: return INST_RZ; default: return INST_DX;}}
TranslateEnum(InstanceParamD ParamIn)20 static Amf::aInstanceParamD TranslateEnum(InstanceParamD ParamIn){switch (ParamIn){case INST_DX: return Amf::aINST_DX;	case INST_DY: return Amf::aINST_DY; case INST_DZ: return Amf::aINST_DZ; case INST_RX: return Amf::aINST_RX; case INST_RY: return Amf::aINST_RY; case INST_RZ: return Amf::aINST_RZ; default: return Amf::aINST_DX;}}
TranslateEnum(Amf::aEnvelopeData DataIn)21 static EnvelopeData TranslateEnum(Amf::aEnvelopeData DataIn){switch (DataIn){case Amf::aENVL_XMIN: return ENVL_XMIN; case Amf::aENVL_YMIN: return ENVL_YMIN; case Amf::aENVL_ZMIN: return ENVL_ZMIN; case Amf::aENVL_XMAX: return ENVL_XMAX; case Amf::aENVL_YMAX: return ENVL_YMAX; case Amf::aENVL_ZMAX: return ENVL_ZMAX; case Amf::aENVL_XSIZE: return ENVL_XSIZE; case Amf::aENVL_YSIZE: return ENVL_YSIZE; case Amf::aENVL_ZSIZE: return ENVL_ZSIZE; default: return ENVL_XMIN;}}
22 
23 
Amf()24 Amf::Amf() {pData = new AmfFile();}
~Amf()25 Amf::~Amf() {delete pData;}
Amf(const Amf & In)26 Amf::Amf(const Amf& In) {*this = In;}
operator =(const Amf & In)27 Amf& Amf::operator=(const Amf& In){*pData = *In.pData; return *this;}
28 
29 //Amf I/O
Save(std::string AmfFilePath,bool Compressed)30 bool Amf::Save(std::string AmfFilePath, bool Compressed){return pData->Save(AmfFilePath, Compressed);}
Load(std::string AmfFilePath,bool StrictLoad)31 bool Amf::Load(std::string AmfFilePath, bool StrictLoad){return pData->Load(AmfFilePath, StrictLoad);}
ImportAmf(std::string AmfFilePath,bool StrictLoad)32 bool Amf::ImportAmf(std::string AmfFilePath, bool StrictLoad) {return pData->ImportAmf(AmfFilePath, StrictLoad);}
ClearAll()33 void Amf::ClearAll() {pData->ClearAll();}
34 
35 //importing meshes
ImportMesh(std::string MeshFilePath,int AmfObjectIndex,int AmfMeshIndex)36 bool Amf::ImportMesh(std::string MeshFilePath, int AmfObjectIndex, int AmfMeshIndex) {return pData->ImportMesh(MeshFilePath, AmfObjectIndex, AmfMeshIndex);} //imports a mesh into a mesh node specified (stl or x3d only)
LoadStl(std::string StlFilePath)37 bool Amf::LoadStl(std::string StlFilePath){return pData->LoadStl(StlFilePath);} //imports an stl into a mesh node specified
GetStlMeshSize(double * XSize,double * YSize,double * ZSize)38 bool Amf::GetStlMeshSize(double* XSize, double* YSize, double* ZSize){return pData->GetStlMeshSize(XSize, YSize, ZSize);}
ImportStl(int AmfObjectIndex,int AmfMeshIndex)39 bool Amf::ImportStl(int AmfObjectIndex, int AmfMeshIndex) {return pData->ImportStl(AmfObjectIndex, AmfMeshIndex);} //imports an stl into a mesh node specified
LoadX3d(std::string X3dFilePath,std::string ImagePath,std::string * ImgPathErrorReturn)40 bool Amf::LoadX3d(std::string X3dFilePath, std::string ImagePath, std::string* ImgPathErrorReturn){return pData->LoadX3d(X3dFilePath, ImagePath, ImgPathErrorReturn);} //imports an x3d into a mesh node specified
GetX3dMeshSize(double * XSize,double * YSize,double * ZSize)41 bool Amf::GetX3dMeshSize(double* XSize, double* YSize, double* ZSize){return pData->GetX3dMeshSize(XSize, YSize, ZSize);}
ImportX3d(int AmfObjectIndex,int AmfMeshIndex)42 bool Amf::ImportX3d(int AmfObjectIndex, int AmfMeshIndex){return pData->ImportX3d(AmfObjectIndex, AmfMeshIndex);} //imports an x3d into a mesh node specified
43 
44 //exporting meshes
ExportSTL(std::string StlFilePath)45 bool Amf::ExportSTL(std::string StlFilePath){return pData->ExportSTL(StlFilePath);}
46 
47 //Units
SetImportUnits(aUnitSystem Units)48 void Amf::SetImportUnits(aUnitSystem Units) {pData->SetImportUnits(TranslateEnum(Units));}
GetUnits(void)49 Amf::aUnitSystem Amf::GetUnits(void){return TranslateEnum(pData->GetUnits());}
GetUnitsString(void)50 std::string Amf::GetUnitsString(void){return pData->GetUnitsString();}
GetUnitsString(aUnitSystem Units)51 std::string Amf::GetUnitsString(aUnitSystem Units){return pData->GetUnitsString(TranslateEnum(Units));}
SetUnits(aUnitSystem Units)52 void Amf::SetUnits(aUnitSystem Units){pData->SetUnits(TranslateEnum(Units));}
ConvertUnits(double Value,aUnitSystem OriginalUnits,aUnitSystem DesiredUnits)53 double Amf::ConvertUnits(double Value, aUnitSystem OriginalUnits, aUnitSystem DesiredUnits){return pData->ConvertUnits(Value, TranslateEnum(OriginalUnits), TranslateEnum(DesiredUnits));}
ToCurrentUnits(double Value,aUnitSystem OriginalUnits)54 double Amf::ToCurrentUnits(double Value, aUnitSystem OriginalUnits){return pData->ToCurrentUnits(Value, TranslateEnum(OriginalUnits));}
FromCurrentUnits(double Value,aUnitSystem DesiredUnits)55 double Amf::FromCurrentUnits(double Value, aUnitSystem DesiredUnits){return pData->FromCurrentUnits(Value, TranslateEnum(DesiredUnits));}
56 
57 //Size of Amf
GetEnvelopeData(aEnvelopeData Data)58 double Amf::GetEnvelopeData(aEnvelopeData Data) {return pData->GetEnvelopeData(TranslateEnum(Data));}
GetEnvlMin(double * pXMinOut,double * pYMinOut,double * pZMinOut,int RenderIndex)59 bool Amf::GetEnvlMin(double* pXMinOut, double* pYMinOut, double* pZMinOut, int RenderIndex) {return pData->GetEnvlMin(pXMinOut, pYMinOut, pZMinOut, RenderIndex);}
GetEnvlMax(double * pXMaxOut,double * pYMaxOut,double * pZMaxOut,int RenderIndex)60 bool Amf::GetEnvlMax(double* pXMaxOut, double* pYMaxOut, double* pZMaxOut, int RenderIndex) {return pData->GetEnvlMax(pXMaxOut, pYMaxOut, pZMaxOut, RenderIndex);}
GetEnvlSize(double * pXSizeOut,double * pYSizeOut,double * pZSizeOut,int RenderIndex)61 bool Amf::GetEnvlSize(double* pXSizeOut, double* pYSizeOut, double* pZSizeOut, int RenderIndex) {return pData->GetEnvlSize(pXSizeOut, pYSizeOut, pZSizeOut, RenderIndex);}
GetEnvlRotQuat(double * pWRotOut,double * pXRotOut,double * pYRotOut,double * pZRotOut,int RenderIndex)62 bool Amf::GetEnvlRotQuat(double* pWRotOut, double* pXRotOut, double* pYRotOut, double* pZRotOut, int RenderIndex) {return pData->GetEnvlRotQuat(pWRotOut, pXRotOut, pYRotOut, pZRotOut,  RenderIndex);}
GetEnvlRotAngleAxis(double * pAngleRadOut,double * pNXOut,double * pNYOut,double * pNZOut,int RenderIndex)63 bool Amf::GetEnvlRotAngleAxis(double* pAngleRadOut, double* pNXOut, double* pNYOut, double* pNZOut, int RenderIndex) {return pData->GetEnvlRotAngleAxis(pAngleRadOut, pNXOut, pNYOut, pNZOut, RenderIndex);}
GetEnvlOrigin(double * pXOriginOut,double * pYOriginOut,double * pZOriginOut,int RenderIndex)64 bool Amf::GetEnvlOrigin(double* pXOriginOut, double* pYOriginOut, double* pZOriginOut, int RenderIndex) {return pData->GetEnvlOrigin(pXOriginOut, pYOriginOut, pZOriginOut, RenderIndex);}
GetEnvlDims(double * pIDimOut,double * pJDimOut,double * pKDimOut,int RenderIndex)65 bool Amf::GetEnvlDims(double* pIDimOut, double* pJDimOut, double* pKDimOut, int RenderIndex) {return pData->GetEnvlDims(pIDimOut, pJDimOut, pKDimOut, RenderIndex);}
66 
Scale(double ScaleFactor,bool ScaleConstellations,bool ScaleEquations)67 bool Amf::Scale(double ScaleFactor, bool ScaleConstellations, bool ScaleEquations){return pData->Scale(ScaleFactor, ScaleConstellations, ScaleEquations);}
Scale(double XScaleFactor,double YScaleFactor,double ZScaleFactor,bool ScaleConstellations,bool ScaleEquations)68 bool Amf::Scale(double XScaleFactor, double YScaleFactor, double ZScaleFactor, bool ScaleConstellations, bool ScaleEquations){return pData->Scale(XScaleFactor, YScaleFactor, ZScaleFactor, ScaleConstellations, ScaleEquations);}
69 
70 //Amf Objects:
GetObjectCount(void)71 int Amf::GetObjectCount(void) {return pData->GetObjectCount();}
GetObjectName(int ObjectIndex)72 std::string Amf::GetObjectName(int ObjectIndex) {return pData->GetObjectName(ObjectIndex);}
RenameObject(int ObjectIndex,std::string NewName)73 void Amf::RenameObject(int ObjectIndex, std::string NewName){pData->RenameObject(ObjectIndex, NewName);}
AddObject(std::string ObjectName)74 int Amf::AddObject(std::string ObjectName){return pData->AddObject(ObjectName);}
RemoveObject(int ObjectIndex)75 void Amf::RemoveObject(int ObjectIndex) {pData->RemoveObject(ObjectIndex);}
TranslateObject(int ObjectIndex,double dx,double dy,double dz)76 void Amf::TranslateObject(int ObjectIndex, double dx, double dy, double dz) {pData->TranslateObject(ObjectIndex, dx, dy, dz);}
RotateObject(int ObjectIndex,double rx,double ry,double rz)77 void Amf::RotateObject(int ObjectIndex, double rx, double ry, double rz) {pData->RotateObject(ObjectIndex, rx, ry, rz);}
78 
79 //Amf Meshes
GetMeshCount(int ObjectIndex)80 int Amf::GetMeshCount(int ObjectIndex){return pData->GetMeshCount(ObjectIndex);}
81 
82 //Amf Volumes
GetVolumeCount(int ObjectIndex,int MeshIndex)83 int Amf::GetVolumeCount(int ObjectIndex, int MeshIndex) {return pData->GetVolumeCount(ObjectIndex, MeshIndex);}
GetVolumeName(int ObjectIndex,int MeshIndex,int VolumeIndex)84 std::string Amf::GetVolumeName(int ObjectIndex, int MeshIndex, int VolumeIndex){return pData->GetVolumeName(ObjectIndex, MeshIndex, VolumeIndex);}
RenameVolume(int ObjectIndex,int MeshIndex,int VolumeIndex,std::string NewName)85 void Amf::RenameVolume(int ObjectIndex, int MeshIndex, int VolumeIndex, std::string NewName){return pData->RenameVolume(ObjectIndex, MeshIndex, VolumeIndex, NewName);}
GetVolumeMaterialIndex(int ObjectIndex,int MeshIndex,int VolumeIndex)86 int Amf::GetVolumeMaterialIndex(int ObjectIndex, int MeshIndex, int VolumeIndex){return pData->GetVolumeMaterialIndex(ObjectIndex, MeshIndex, VolumeIndex);}
SetVolumeMaterialIndex(int ObjectIndex,int MeshIndex,int VolumeIndex,int MaterialIndex)87 bool Amf::SetVolumeMaterialIndex(int ObjectIndex, int MeshIndex, int VolumeIndex, int MaterialIndex){return pData->SetVolumeMaterialIndex(ObjectIndex, MeshIndex, VolumeIndex, MaterialIndex);}
88 
89 //Amf Constellations:
GetConstellationCount(void)90 int Amf::GetConstellationCount(void) {return pData->GetConstellationCount();}
GetConstellationName(int ConstellationIndex)91 std::string Amf::GetConstellationName(int ConstellationIndex) {return pData->GetConstellationName(ConstellationIndex);}
RenameConstellation(int ConstellationIndex,std::string NewName)92 void Amf::RenameConstellation(int ConstellationIndex, std::string NewName){pData->RenameConstellation(ConstellationIndex, NewName);}
AddConstellation(std::string ConstellationName)93 int Amf::AddConstellation(std::string ConstellationName){return pData->AddConstellation(ConstellationName);}
RemoveConstellation(int ConstellationIndex)94 void Amf::RemoveConstellation(int ConstellationIndex) {pData->RemoveConstellation(ConstellationIndex);}
IsConstellationReferencedBy(int ConstellationIndex,int ConstellationIndexToCheck)95 bool Amf::IsConstellationReferencedBy(int ConstellationIndex, int ConstellationIndexToCheck){return pData->IsConstellationReferencedBy(ConstellationIndex, ConstellationIndexToCheck);}
96 
97 //Amf Instances
GetInstanceCount(int ConstellationIndex)98 int Amf::GetInstanceCount(int ConstellationIndex){return pData->GetInstanceCount(ConstellationIndex);}
AddInstance(int ConstellationIndex)99 int Amf::AddInstance(int ConstellationIndex) {return pData->AddInstance(ConstellationIndex);}
RemoveInstance(int ConstellationIndex,int InstanceIndex)100 void Amf::RemoveInstance(int ConstellationIndex, int InstanceIndex) {pData->RemoveInstance(ConstellationIndex, InstanceIndex);}
SetInstanceObjectIndex(int ConstellationIndex,int InstanceIndex,int InstanceObjectIndex)101 bool Amf::SetInstanceObjectIndex(int ConstellationIndex, int InstanceIndex, int InstanceObjectIndex) {return pData->SetInstanceObjectIndex(ConstellationIndex, InstanceIndex, InstanceObjectIndex);}
SetInstanceConstellationIndex(int ConstellationIndex,int InstanceIndex,int InstanceConstellationIndex)102 bool Amf::SetInstanceConstellationIndex(int ConstellationIndex, int InstanceIndex, int InstanceConstellationIndex) {return pData->SetInstanceConstellationIndex(ConstellationIndex, InstanceIndex, InstanceConstellationIndex);}
GetInstanceObjectIndex(int ConstellationIndex,int InstanceIndex)103 int Amf::GetInstanceObjectIndex(int ConstellationIndex, int InstanceIndex) {return pData->GetInstanceObjectIndex(ConstellationIndex, InstanceIndex);}
GetInstanceConstellationIndex(int ConstellationIndex,int InstanceIndex)104 int Amf::GetInstanceConstellationIndex(int ConstellationIndex, int InstanceIndex) {return pData->GetInstanceConstellationIndex(ConstellationIndex, InstanceIndex);}
SetInstanceParam(int ConstellationIndex,int InstanceIndex,aInstanceParamD ParamD,double Value)105 bool Amf::SetInstanceParam(int ConstellationIndex, int InstanceIndex, aInstanceParamD ParamD, double Value) {return pData->SetInstanceParam(ConstellationIndex, InstanceIndex, TranslateEnum(ParamD), Value);}
GetInstanceParam(int ConstellationIndex,int InstanceIndex,aInstanceParamD ParamD)106 double Amf::GetInstanceParam(int ConstellationIndex, int InstanceIndex, aInstanceParamD ParamD)	{return pData->GetInstanceParam(ConstellationIndex, InstanceIndex, TranslateEnum(ParamD));}
107 
108 //Amf Materials:
GetMaterialCount(void)109 int Amf::GetMaterialCount(void) {return pData->GetMaterialCount();}
GetMaterialName(int MaterialIndex)110 std::string Amf::GetMaterialName(int MaterialIndex) {return pData->GetMaterialName(MaterialIndex);}
RenameMaterial(int MaterialIndex,std::string NewName)111 void Amf::RenameMaterial(int MaterialIndex, std::string NewName){pData->RenameMaterial(MaterialIndex, NewName);}
AddMaterial(std::string MaterialName)112 int Amf::AddMaterial(std::string MaterialName){return pData->AddMaterial(MaterialName);}
AddMaterial(std::string MaterialName,int Red,int Green,int Blue)113 int Amf::AddMaterial(std::string MaterialName, int Red, int Green, int Blue) {return pData->AddMaterial(MaterialName, Red, Green, Blue);}
AddMaterial(std::string MaterialName,double Red,double Green,double Blue)114 int Amf::AddMaterial(std::string MaterialName, double Red, double Green, double Blue) {return pData->AddMaterial(MaterialName, Red, Green, Blue);}
RemoveMaterial(int MaterialIndex)115 void Amf::RemoveMaterial(int MaterialIndex) {pData->RemoveMaterial(MaterialIndex);}
IsMaterialReferencedBy(int MaterialIndex,int MaterialIndexToCheck)116 bool Amf::IsMaterialReferencedBy(int MaterialIndex, int MaterialIndexToCheck) {return pData->IsMaterialReferencedBy(MaterialIndex, MaterialIndexToCheck);}
SetMaterialColorD(int MaterialIndex,double Red,double Green,double Blue)117 bool Amf::SetMaterialColorD(int MaterialIndex, double Red, double Green, double Blue){return pData->SetMaterialColorD(MaterialIndex, Red, Green, Blue);}
SetMaterialColorI(int MaterialIndex,int Red,int Green,int Blue)118 bool Amf::SetMaterialColorI(int MaterialIndex, int Red, int Green, int Blue){return pData->SetMaterialColorI(MaterialIndex, Red, Green, Blue);}
GetMaterialColorD(int MaterialIndex,double * Red,double * Green,double * Blue)119 bool Amf::GetMaterialColorD(int MaterialIndex, double *Red, double *Green, double *Blue){return pData->GetMaterialColorD(MaterialIndex, Red, Green, Blue);}
GetMaterialColorI(int MaterialIndex,int * Red,int * Green,int * Blue)120 bool Amf::GetMaterialColorI(int MaterialIndex, int *Red, int *Green, int *Blue){return pData->GetMaterialColorI(MaterialIndex, Red, Green, Blue);}
121 
122 //Amf Composites
GetCompositeCount(int MaterialIndex)123 int Amf::GetCompositeCount(int MaterialIndex){return pData->GetCompositeCount(MaterialIndex);}
ClearComposites(int MaterialIndex)124 void Amf::ClearComposites(int MaterialIndex){pData->ClearComposites(MaterialIndex);}
AddComposite(int MaterialIndex,int MaterialIndexToComposite)125 int Amf::AddComposite(int MaterialIndex, int MaterialIndexToComposite){return pData->AddComposite(MaterialIndex, MaterialIndexToComposite);}
RemoveComposite(int MaterialIndex,int CompositeIndex)126 void Amf::RemoveComposite(int MaterialIndex, int CompositeIndex){pData->RemoveComposite(MaterialIndex, CompositeIndex);}
SetCompositeMaterialIndex(int MaterialIndex,int CompositeIndex,int CompositeMaterialIndex)127 bool Amf::SetCompositeMaterialIndex(int MaterialIndex, int CompositeIndex, int CompositeMaterialIndex){return pData->SetCompositeMaterialIndex(MaterialIndex, CompositeIndex, CompositeMaterialIndex);} //1-based (because 0 always VOID material
GetCompositeMaterialIndex(int MaterialIndex,int CompositeIndex)128 int Amf::GetCompositeMaterialIndex(int MaterialIndex, int CompositeIndex){return pData->GetCompositeMaterialIndex(MaterialIndex, CompositeIndex);} //1-based (because 0 always VOID material
GetCompositeEquation(int MaterialIndex,int CompositeIndex)129 std::string Amf::GetCompositeEquation(int MaterialIndex, int CompositeIndex){return pData->GetCompositeEquation(MaterialIndex, CompositeIndex);} //use! ToAmfString()
SetCompositeEquation(int MaterialIndex,int CompositeIndex,std::string Equation)130 bool Amf::SetCompositeEquation(int MaterialIndex, int CompositeIndex, std::string Equation) {return pData->SetCompositeEquation(MaterialIndex, CompositeIndex, Equation);}
131 
132 //Amf Textures:
GetTextureCount(void)133 int Amf::GetTextureCount(void) {return pData->GetTextureCount();}
134 
135 //Output utilities
SetSubdivisionLevel(int Level)136 bool Amf::SetSubdivisionLevel(int Level){return pData->SetSubdivisionLevel(Level);}
DrawGL()137 void Amf::DrawGL(){pData->DrawGL();}
GetSliceBitmapRGBA(double PixelSizeX,double PixelSizeY,double SliceHeightZ,int * XSizeOut,int * YSizeOut,double SurfaceDepth)138 unsigned char* Amf::GetSliceBitmapRGBA(double PixelSizeX, double PixelSizeY, double SliceHeightZ, int* XSizeOut, int* YSizeOut, double SurfaceDepth){return pData->GetSliceBitmapRGBA(PixelSizeX, PixelSizeY, SliceHeightZ, XSizeOut, YSizeOut, SurfaceDepth);}
GetSliceSegmentsXY(double ZHeight,int * NumSegmentsOut)139 int* Amf::GetSliceSegmentsXY(double ZHeight, int* NumSegmentsOut){return pData->GetSliceSegmentsXY(ZHeight, NumSegmentsOut);}
140 
141 //Errors and information
GetInfoString(bool MeshInfo)142 std::string Amf::GetInfoString(bool MeshInfo) {return pData->GetInfoString(MeshInfo);}
pLastErrorMsg()143 std::string* Amf::pLastErrorMsg(){return pData->pLastErrorMsg();}
GetLastErrorMsg()144 std::string Amf::GetLastErrorMsg(){return pData->GetLastErrorMsg();}
145 
146 //Real time status info on long i/o operations
pCancelIO()147 bool* Amf::pCancelIO(){return pData->pCancelIO();}
pCurTick()148 int* Amf::pCurTick(){return pData->pCurTick();}
pMaxTick()149 int* Amf::pMaxTick(){return pData->pMaxTick();}
pStatusMsg()150 std::string* Amf::pStatusMsg(){return pData->pStatusMsg();}
151