-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSceneObject.h
141 lines (130 loc) · 6.89 KB
/
SceneObject.h
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#pragma once
namespace Bladestick
{
namespace Drawing
{
ref class Vector3D;
public ref class ObjectMarks
{
public:
static initonly System::String ^ OBJECT = "o ";
static initonly System::String ^ VERTEX = "v ";
static initonly System::String ^ FACET = "f ";
static initonly System::String ^ OFFSET = "ooff ";
static initonly System::String ^ ROTATION = "orot ";
static initonly System::String ^ SCALING = "oscl ";
};
public ref class SceneObject
{
private:/// <summary>
/// Ñòðîèò òð¸õìåðíóþ ìîäåëü ðóêîÿòè ñ ó÷¸òîì çàäàííûõ ïàðàìåòðîâ
/// </summary>
/// <param name="radius">Ðàäèóñ</param>
/// <param name="height">Âûñîòà</param>
/// <param name="nEdges">Êîëè÷åñòâî ð¸áåð äëÿ ïîñòðîåíèÿ öèëèíäðà</param>
/// <param name="palette">Ïàëèòðà (1 öâåò: öâåò ðóêîÿòè)</param>
static Drawing::SceneObject ^ buildHandle(double radius, double height, int nEdges,
array<System::Drawing::Color> ^ palette);
/// <summary>
/// Ñòðîèò òð¸õìåðíóþ ìîäåëü êîëüöåâîãî ëåçâèÿ ñ ó÷¸òîì çàäàííûõ ïàðàìåòðîâ
/// </summary>
/// <param name="inRadius">Âíóòðåííèé ðàäèóñ</param>
/// <param name="bevelRadius">Ðàäèóñ íà÷àëà ñêîñà</param>
/// <param name="exRadius">Âíåøíèé ðàäèóñ</param>
/// <param name="thickness">Òîëùèíà</param>
/// <param name="nEdges">Êîëè÷åñòâî ð¸áåð äëÿ ïîñòðîåíèÿ îêðóæíîñòåé</param>
/// <param name="palette">Ïàëèòðà (2 öâåòà: 1 - öâåò ìåòàëëà ñáîêó, 2 - öâåò íàòî÷åííîãî ìåòàëëà)</param>
static Drawing::SceneObject ^ buildBladeRing(double inRadius, double bevelRadius,
double exRadius, double thickness, int nEdges, array<System::Drawing::Color> ^ palette);
/// <summary>
/// Ñòðîèò òð¸õìåðíóþ ìîäåëü êðåñòà ñ ó÷¸òîì çàäàííûõ ïàðàìåòðîâ
/// </summary>
/// <param name="pLength">Äëèíà îäíîé ëîïàñòè</param>
/// <param name="pWidth">Øèðèíà îäíîé ëîïàñòè</param>
/// <param name="pThickness">Òîëùèíà</param>
/// <param name="palette">Ïàëèòðà (1 öâåò: öâåò êðåñòà)</param>
static Drawing::SceneObject ^ buildCross(double pLength, double pWidth, double pThickness,
array<System::Drawing::Color> ^ palette);
/// <summary>
/// Ñòðîèò òð¸õìåðíóþ ìîäåëü øèïà ñ ó÷¸òîì çàäàííûõ ïàðàìåòðîâ
/// </summary>
/// <param name="inDistance">Ðàññòîÿíèå îò Í.Ê. äî öåíòðà îñíîâàíèÿ âíóòðåííåãî øèïà</param>
/// <param name="exDistance">Ðàññòîÿíèå îò Í.Ê. äî öåíòðà îñíîâàíèÿ âíåøíåãî øèðà</param>
/// <param name="alphaDeg">Ïîëÿðíûé óãîë</param>
/// <param name="betaDeg">Óãîë ìåæäó ð¸áðàìè øèïà</param>
/// <param name="thickness">Òîëùèíà</param>
/// <param name="inLength">Äëèíà âíóòðåííåãî øèïà</param>
/// <param name="bevelStartPoint">2D-ðàññòîÿíèå îò îñíîâàíèÿ âíåøíåãî øèïà äî íà÷àëà ñêîñà</param>
/// <param name="exLength">Äëèíà âíåøíåãî øèïà</param>
/// <param name="palette">Ïàëèòðà (2 öâåò: 1 - öâåò ìåòàëëà ñáîêó, 2 - öâåò íàòî÷åííîãî ìåòàëëà)</param>
static Drawing::SceneObject ^ buildSpike(double inDistance, double exDistance, double alphaDeg,
double betaDeg, double thickness, double inLength, double bevelStartPoint, double exLength,
array<System::Drawing::Color> ^ palette);
internal:
Vector3D ^ offset; //Ñìåùåíèå â ÌÑÊ
Vector3D ^ scaling; //Êîýôôèöèåíòû ìàñøòàáèðîâàíèÿ
Vector3D ^ rotation; //Óãëû ïîâîðîòîâ â ãðàäóñàõ
array<Vector3D ^> ^ vertices; //Âåðøèíû
array<int> ^ indices; //Èíäåêñû âåðøèí, îáðàçóþùèõ òðåóãîëüíèêè
array<Vector3D ^> ^ normals; //Íîðìàëè
array<System::Drawing::Color> ^ colors; //Öâåòà òðåóãîëüíèêîâ
System::String ^ name;
public:
/// <summary>
/// Ñòðîèò òð¸õìåðíóþ ìîäåëü Bladestick ñ ó÷¸òîì çàäàííûõ ïàðàìåòðîâ
/// </summary>
/// <param name="handleLength">Äëèíà ðóêîÿòè</param>
/// <param name="handleRingsCount">Êîëè÷åñòâî êîëåö íà êîíöå ðóêîÿòè</param>
/// <param name="handleEdgesCount">Êîëè÷åñòâî ð¸áåð äëÿ ïîñòðîåíèÿ öèëèíäðà ðóêîÿòè</param>
/// <param name="inBladeRadius">Âíóòðåííèé ðàäèóñ ëåçâèÿ</param>
/// <param name="exBladeRadius">Âíåøíèé ðàäèóñ ëåçâèÿ</param>
/// <param name="bladeEdgesCount">Êîëè÷åñòâî ð¸áåð äëÿ ïîñòðîåíèÿ îêðóæíîñòåé ëåçâèÿ</param>
/// <param name="bladeThickness">Òîëùèíà ëåçâèÿ</param>
/// <param name="primarySpikeLength">Äëèíà ïåðâè÷íûõ øèïîâ</param>
/// <param name="secondarySpikeLength">Äëèíà âòîðè÷íûõ øèïîâ</param>
/// <param name="primarySpikeAngle">Óãîë ïåðâè÷íûõ øèïîâ</param>
/// <param name="secondarySpikeAngle">Óãîë âòîðè÷íûõ øèïîâ</param>
/// <param name="secondarySpikesCount">Êîëè÷åñòâî âòîðè÷íûõ øèïîâ</param>
/// <param name="palette">Ïàëèòðà (3 öâåòà: 1 - öâåò ðóêîÿòè, 2 - öâåò ìåòàëëà ñáîêó, 3 - öâåò íàòî÷åííîãî ìåòàëëà)</param>
static Drawing::SceneObject ^ buildBladestick(double handleLength, int handleRingsCount,
int handleEdgesCount, double inBladeRadius, double exBladeRadius,
int bladeEdgesCount, double bladeThickness,
double primarySpikeLength, double primarySpikeAngle,
double secondarySpikeLength, double secondarySpikeAngle,
int secondarySpikesCount, array<System::Drawing::Color> ^ palette);
static Drawing::SceneObject ^ unite(array<Drawing::SceneObject ^> ^ components);
static double DEFAULT_HANDLE_LENGTH = 400;
static int DEFAULT_HANDLE_RINGS_COUNT = 4;
static double DEFAULT_HANDLE_EDGES_COUNT = 8;
static double DEFAULT_IN_BLADE_RADIUS = 100;
static double DEFAULT_EX_BLADE_RADIUS = 150;
static double DEFAULT_BLADE_EDGES_COUNT = 32;
static double DEFAULT_BLADE_THICKNESS = 30;
static double DEFAULT_PRIMARY_SPIKE_LENGTH = 60;
static double DEFAULT_PRIMARY_SPIKE_ANGLE = 50;
static double DEFAULT_SECONDARY_SPIKE_LENGTH = 40;
static double DEFAULT_SECONDARY_SPIKE_ANGLE = 50;
static int DEFAULT_SECONDARY_SPIKES_COUNT = 4;
static System::Drawing::Color DEFAULT_COLOR_1 = System::Drawing::Color::SaddleBrown;
static System::Drawing::Color DEFAULT_COLOR_2 = System::Drawing::Color::DarkGray;
static System::Drawing::Color DEFAULT_COLOR_3 = System::Drawing::Color::LightGray;
SceneObject();
SceneObject(array<Vector3D ^> ^ vertices, array<int> ^ indices, array<Vector3D ^> ^ normals,
array<System::Drawing::Color> ^ colors, System::String ^ name);
SceneObject(array<Vector3D ^> ^ vertices, array<int> ^ indices, array<Vector3D ^> ^ normals,
array<System::Drawing::Color> ^ colors);
void transform();
void setOffset(double x, double y, double z);
void setOffset(Vector3D ^ offset);
void setScaling(double a, double b, double c);
void setScaling(Vector3D ^ factors);
void setRotation(double alphaDeg, double betaDeg, double gammaDeg);
void setRotation(Vector3D ^ angles);
void moveOriginal(double x, double y, double z);
void moveOriginal(Vector3D ^ offset);
void saveToStream(System::IO::StreamWriter ^ stream);
void loadFromStream(System::IO::Stream ^ stream);
System::String ^ ToString() override;
};
}
}