aboutsummaryrefslogtreecommitdiff
path: root/mayaPlug/shaveAPIimpl.h
blob: 60f31649aa4aa76932a2b68f73bda37a202a8ee6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#ifndef shaveAPIimpl_h
#define shaveAPIimpl_h
// Shave and a Haircut
// (c) 2019 Epic Games
// US Patent 6720962

#include <maya/MStatus.h>
#include <vector>

#include "libShave.h"
#include "shaveAPI.h"
#include "shaveGlobals.h"
#include "shaveSDK.h"

#if MAYA_API_VERSION < 20180000
class MObjectArray;
#endif

class shaveHairShape;


class LIBSHAVE_API shaveAPIimpl
{
public:
	static MStatus		clearHairStack();

	static MStatus		createHairStack(
							MObjectArray& shaveHairShapes,
							const shaveGlobals::Globals& globals
						);

	static MStatus		exportAllHair(
							shaveAPI::HairInfo* hairInfo, bool renderableOnly
						);

	static MStatus		exportDRAFile(MString filename);

	static MStatus		exportHair(
							MObjectArray& shaveHairShapes,
							shaveAPI::HairInfo* hairInfo
						);

	static MStatus		exportOcclusions(
							shaveAPI::SceneGeom* hairOcclusions,
							shaveAPI::SceneGeom* shadowOcclusions
						);

	static void			freeHairInfo(shaveAPI::HairInfo* hairInfo);
	static void			initHairInfo(shaveAPI::HairInfo* hairInfo);

	//******************************************
	//
	//		SceneGeom Interfaces
	//
	//******************************************
	static void			freeSceneGeom(shaveAPI::SceneGeom* sceneGeom);
	static void			initSceneGeom(shaveAPI::SceneGeom* sceneGeom);

	//******************************************
	//
	//		Utility Methods
	//
	//******************************************
	static void			copyWFTYPEToSceneGeom(
							shaveAPI::SceneGeom* sceneGeom, WFTYPE& wf
						);

	static shaveHairShape*	getNodeFromStack(unsigned int nodeIndex);

protected:
	static std::vector<shaveHairShape*>	mShaveNodes;

	static MStatus	doExport(
						MObjectArray& shaveHairShapes,
						shaveAPI::HairInfo* hairInfo,
						const shaveGlobals::Globals& globals
					);

	static MStatus	doInitHairIterator(MObjectArray& shaveHairShapes);
};

#endif