Skip to content

Commit bc43060

Browse files
committed
XYZ versions of translation matrix and translate shape nodes.
1 parent cd7091a commit bc43060

File tree

5 files changed

+171
-11
lines changed

5 files changed

+171
-11
lines changed

Sources/Basic3DNodes/TransformationNodes.cpp

Lines changed: 60 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
#include "GLMReadWrite.hpp"
66

77
NE::SerializationInfo TransformationMatrixNode::serializationInfo (NE::ObjectVersion (1));
8-
NE::DynamicSerializationInfo TranslationMatrixNode::serializationInfo (NE::ObjectId ("{7F1B6F2F-2DE7-48FC-A926-5137FB9CFFF5}"), NE::ObjectVersion (1), TranslationMatrixNode::CreateSerializableInstance);
8+
NE::DynamicSerializationInfo TranslationMatrixNode::serializationInfo (NE::ObjectId ("{DDB65DA8-1E2C-47EF-9658-96819C29259D}"), NE::ObjectVersion (1), TranslationMatrixNode::CreateSerializableInstance);
9+
NE::DynamicSerializationInfo TranslationMatrixXYZNode::serializationInfo (NE::ObjectId ("{7F1B6F2F-2DE7-48FC-A926-5137FB9CFFF5}"), NE::ObjectVersion (1), TranslationMatrixXYZNode::CreateSerializableInstance);
910
NE::DynamicSerializationInfo RotationMatrixNode::serializationInfo (NE::ObjectId ("{2F11941E-6B80-49A0-A553-BD230AC0336C}"), NE::ObjectVersion (1), RotationMatrixNode::CreateSerializableInstance);
1011
NE::DynamicSerializationInfo ScaleMatrixNode::serializationInfo (NE::ObjectId ("{9E070858-8AC9-42DE-95A6-0C2AB6807426}"), NE::ObjectVersion (1), ScaleMatrixNode::CreateSerializableInstance);
1112
NE::DynamicSerializationInfo MatrixCombinationNode::serializationInfo (NE::ObjectId ("{E6FC2758-00D6-47F6-B321-AE46ECEA66C5}"), NE::ObjectVersion (1), MatrixCombinationNode::CreateSerializableInstance);
@@ -54,6 +55,57 @@ TranslationMatrixNode::TranslationMatrixNode (const std::wstring& name, const NU
5455
}
5556

5657
void TranslationMatrixNode::Initialize ()
58+
{
59+
TransformationMatrixNode::Initialize ();
60+
RegisterUIInputSlot (NUIE::UIInputSlotPtr (new NUIE::UIInputSlot (NE::SlotId ("offset"), L"Offset", NE::ValuePtr (new PointValue (glm::vec3 (0.0f))), NE::OutputSlotConnectionMode::Single)));
61+
RegisterUIOutputSlot (NUIE::UIOutputSlotPtr (new NUIE::UIOutputSlot (NE::SlotId ("transformation"), L"Transformation")));
62+
}
63+
64+
NE::ValueConstPtr TranslationMatrixNode::Calculate (NE::EvaluationEnv& env) const
65+
{
66+
NE::ValueConstPtr offsetValue = EvaluateInputSlot (NE::SlotId ("offset"), env);
67+
if (!NE::IsComplexType<CoordinateValue> (offsetValue)) {
68+
return nullptr;
69+
}
70+
71+
NE::ListValuePtr result (new NE::ListValue ());
72+
BI::CombineValues (this, {offsetValue}, [&] (const NE::ValueCombination& combination) {
73+
glm::vec3 offset = CoordinateValue::Get (combination.GetValue (0));
74+
glm::mat4 transformation = glm::translate (glm::mat4 (1.0f), offset);
75+
result->Push (NE::ValuePtr (new TransformationValue (transformation)));
76+
return true;
77+
});
78+
79+
return result;
80+
}
81+
82+
NE::Stream::Status TranslationMatrixNode::Read (NE::InputStream& inputStream)
83+
{
84+
NE::ObjectHeader header (inputStream);
85+
TransformationMatrixNode::Read (inputStream);
86+
return inputStream.GetStatus ();
87+
}
88+
89+
NE::Stream::Status TranslationMatrixNode::Write (NE::OutputStream& outputStream) const
90+
{
91+
NE::ObjectHeader header (outputStream, serializationInfo);
92+
TransformationMatrixNode::Write (outputStream);
93+
return outputStream.GetStatus ();
94+
}
95+
96+
TranslationMatrixXYZNode::TranslationMatrixXYZNode () :
97+
TranslationMatrixXYZNode (L"", NUIE::Point ())
98+
{
99+
100+
}
101+
102+
TranslationMatrixXYZNode::TranslationMatrixXYZNode (const std::wstring& name, const NUIE::Point& position) :
103+
TransformationMatrixNode (name, position)
104+
{
105+
106+
}
107+
108+
void TranslationMatrixXYZNode::Initialize ()
57109
{
58110
TransformationMatrixNode::Initialize ();
59111
RegisterUIInputSlot (NUIE::UIInputSlotPtr (new NUIE::UIInputSlot (NE::SlotId ("offsetx"), L"Offset X", NE::ValuePtr (new NE::FloatValue (0.0)), NE::OutputSlotConnectionMode::Single)));
@@ -62,12 +114,11 @@ void TranslationMatrixNode::Initialize ()
62114
RegisterUIOutputSlot (NUIE::UIOutputSlotPtr (new NUIE::UIOutputSlot (NE::SlotId ("transformation"), L"Transformation")));
63115
}
64116

65-
NE::ValueConstPtr TranslationMatrixNode::Calculate (NE::EvaluationEnv& env) const
117+
NE::ValueConstPtr TranslationMatrixXYZNode::Calculate (NE::EvaluationEnv& env) const
66118
{
67119
NE::ValueConstPtr offsetXValue = EvaluateInputSlot (NE::SlotId ("offsetx"), env);
68120
NE::ValueConstPtr offsetYValue = EvaluateInputSlot (NE::SlotId ("offsety"), env);
69121
NE::ValueConstPtr offsetZValue = EvaluateInputSlot (NE::SlotId ("offsetz"), env);
70-
71122
if (!NE::IsComplexType<NE::NumberValue> (offsetXValue) || !NE::IsComplexType<NE::NumberValue> (offsetYValue) || !NE::IsComplexType<NE::NumberValue> (offsetZValue)) {
72123
return nullptr;
73124
}
@@ -87,22 +138,22 @@ NE::ValueConstPtr TranslationMatrixNode::Calculate (NE::EvaluationEnv& env) cons
87138
return result;
88139
}
89140

90-
void TranslationMatrixNode::RegisterParameters (NUIE::NodeParameterList& parameterList) const
141+
void TranslationMatrixXYZNode::RegisterParameters (NUIE::NodeParameterList& parameterList) const
91142
{
92143
TransformationMatrixNode::RegisterParameters (parameterList);
93-
NUIE::RegisterSlotDefaultValueNodeParameter<TranslationMatrixNode, NE::FloatValue> (parameterList, L"Offset X", NUIE::ParameterType::Float, NE::SlotId ("offsetx"));
94-
NUIE::RegisterSlotDefaultValueNodeParameter<TranslationMatrixNode, NE::FloatValue> (parameterList, L"Offset Y", NUIE::ParameterType::Float, NE::SlotId ("offsety"));
95-
NUIE::RegisterSlotDefaultValueNodeParameter<TranslationMatrixNode, NE::FloatValue> (parameterList, L"Offset Z", NUIE::ParameterType::Float, NE::SlotId ("offsetz"));
144+
NUIE::RegisterSlotDefaultValueNodeParameter<TranslationMatrixXYZNode, NE::FloatValue> (parameterList, L"Offset X", NUIE::ParameterType::Float, NE::SlotId ("offsetx"));
145+
NUIE::RegisterSlotDefaultValueNodeParameter<TranslationMatrixXYZNode, NE::FloatValue> (parameterList, L"Offset Y", NUIE::ParameterType::Float, NE::SlotId ("offsety"));
146+
NUIE::RegisterSlotDefaultValueNodeParameter<TranslationMatrixXYZNode, NE::FloatValue> (parameterList, L"Offset Z", NUIE::ParameterType::Float, NE::SlotId ("offsetz"));
96147
}
97148

98-
NE::Stream::Status TranslationMatrixNode::Read (NE::InputStream& inputStream)
149+
NE::Stream::Status TranslationMatrixXYZNode::Read (NE::InputStream& inputStream)
99150
{
100151
NE::ObjectHeader header (inputStream);
101152
TransformationMatrixNode::Read (inputStream);
102153
return inputStream.GetStatus ();
103154
}
104155

105-
NE::Stream::Status TranslationMatrixNode::Write (NE::OutputStream& outputStream) const
156+
NE::Stream::Status TranslationMatrixXYZNode::Write (NE::OutputStream& outputStream) const
106157
{
107158
NE::ObjectHeader header (outputStream, serializationInfo);
108159
TransformationMatrixNode::Write (outputStream);

Sources/Basic3DNodes/TransformationNodes.hpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,21 @@ class TranslationMatrixNode : public TransformationMatrixNode
2828
TranslationMatrixNode ();
2929
TranslationMatrixNode (const std::wstring& name, const NUIE::Point& position);
3030

31+
virtual void Initialize () override;
32+
virtual NE::ValueConstPtr Calculate (NE::EvaluationEnv& env) const override;
33+
34+
virtual NE::Stream::Status Read (NE::InputStream& inputStream) override;
35+
virtual NE::Stream::Status Write (NE::OutputStream& outputStream) const override;
36+
};
37+
38+
class TranslationMatrixXYZNode : public TransformationMatrixNode
39+
{
40+
DYNAMIC_SERIALIZABLE (TranslationMatrixXYZNode);
41+
42+
public:
43+
TranslationMatrixXYZNode ();
44+
TranslationMatrixXYZNode (const std::wstring& name, const NUIE::Point& position);
45+
3146
virtual void Initialize () override;
3247
virtual NE::ValueConstPtr Calculate (NE::EvaluationEnv& env) const override;
3348
virtual void RegisterParameters (NUIE::NodeParameterList& parameterList) const;

Sources/VisualScriptCAD/Editor/NodeRegistry.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ NodeRegistry::NodeRegistry () :
112112
RegisterNode (L"Matrix Nodes", L"Translation Matrix",
113113
[] (const NUIE::Point& position) { return NUIE::UINodePtr (new TranslationMatrixNode (L"Translation Matrix", position)); }
114114
);
115+
RegisterNode (L"Matrix Nodes", L"Translation Matrix XYZ",
116+
[] (const NUIE::Point& position) { return NUIE::UINodePtr (new TranslationMatrixXYZNode (L"Translation Matrix XYZ", position)); }
117+
);
115118
RegisterNode (L"Matrix Nodes", L"Rotation Matrix",
116119
[] (const NUIE::Point& position) { return NUIE::UINodePtr (new RotationMatrixNode (L"Rotation Matrix", position)); }
117120
);
@@ -127,6 +130,9 @@ NodeRegistry::NodeRegistry () :
127130
RegisterNode (L"Transformation Nodes", L"Translate Shape",
128131
[] (const NUIE::Point& position) { return NUIE::UINodePtr (new TranslateShapeNode (L"Translate Shape", position)); }
129132
);
133+
RegisterNode (L"Transformation Nodes", L"Translate Shape XYZ",
134+
[] (const NUIE::Point& position) { return NUIE::UINodePtr (new TranslateShapeXYZNode (L"Translate Shape XYZ", position)); }
135+
);
130136
RegisterNode (L"Transformation Nodes", L"Rotate Shape",
131137
[] (const NUIE::Point& position) { return NUIE::UINodePtr (new RotateShapeNode (L"Rotate Shape", position)); }
132138
);

Sources/VisualScriptCAD/Nodes/TransformShapeNodes.cpp

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "Geometry.hpp"
77

88
NE::DynamicSerializationInfo TranslateShapeNode::serializationInfo (NE::ObjectId ("{AC4C90C2-5B10-45DB-9C62-A118BA993B2F}"), NE::ObjectVersion (1), TranslateShapeNode::CreateSerializableInstance);
9+
NE::DynamicSerializationInfo TranslateShapeXYZNode::serializationInfo (NE::ObjectId ("{F97B5692-DBE2-4345-8F44-2A32A57675E6}"), NE::ObjectVersion (1), TranslateShapeXYZNode::CreateSerializableInstance);
910
NE::DynamicSerializationInfo RotateShapeNode::serializationInfo (NE::ObjectId ("{92A0FAB9-A100-4920-A2AC-9D8289F4C4B8}"), NE::ObjectVersion (1), RotateShapeNode::CreateSerializableInstance);
1011
NE::DynamicSerializationInfo TransformShapeNode::serializationInfo (NE::ObjectId ("{3BA3AD96-09FD-49D2-8299-2143A0A8ECFA}"), NE::ObjectVersion (1), TransformShapeNode::CreateSerializableInstance);
1112

@@ -40,8 +41,8 @@ NE::ValueConstPtr TranslateShapeNode::Calculate (NE::EvaluationEnv& env) const
4041
NE::ListValuePtr result (new NE::ListValue ());
4142
BI::CombineValues (this, {shapeValue, offsetValue}, [&] (const NE::ValueCombination& combination) {
4243
Modeler::ShapePtr shape (ShapeValue::Get (combination.GetValue (0)));
43-
glm::vec3 direction = CoordinateValue::Get (combination.GetValue (1));
44-
glm::mat4 transformation = glm::translate (glm::mat4 (1.0f), direction);
44+
glm::vec3 offset = CoordinateValue::Get (combination.GetValue (1));
45+
glm::mat4 transformation = glm::translate (glm::mat4 (1.0f), offset);
4546
Modeler::ShapePtr transformed = shape->Transform (transformation);
4647
result->Push (NE::ValuePtr (new ShapeValue (transformed)));
4748
return true;
@@ -64,6 +65,77 @@ NE::Stream::Status TranslateShapeNode::Write (NE::OutputStream& outputStream) co
6465
return outputStream.GetStatus ();
6566
}
6667

68+
TranslateShapeXYZNode::TranslateShapeXYZNode () :
69+
TranslateShapeXYZNode (L"", NUIE::Point ())
70+
{
71+
72+
}
73+
74+
TranslateShapeXYZNode::TranslateShapeXYZNode (const std::wstring& name, const NUIE::Point& position) :
75+
ShapeNode (name, position)
76+
{
77+
78+
}
79+
80+
void TranslateShapeXYZNode::Initialize ()
81+
{
82+
ShapeNode::Initialize ();
83+
RegisterUIInputSlot (NUIE::UIInputSlotPtr (new NUIE::UIInputSlot (NE::SlotId ("shape"), L"Shape", nullptr, NE::OutputSlotConnectionMode::Single)));
84+
RegisterUIInputSlot (NUIE::UIInputSlotPtr (new NUIE::UIInputSlot (NE::SlotId ("offsetx"), L"Offset X", NE::ValuePtr (new NE::FloatValue (0.0)), NE::OutputSlotConnectionMode::Single)));
85+
RegisterUIInputSlot (NUIE::UIInputSlotPtr (new NUIE::UIInputSlot (NE::SlotId ("offsety"), L"Offset Y", NE::ValuePtr (new NE::FloatValue (0.0)), NE::OutputSlotConnectionMode::Single)));
86+
RegisterUIInputSlot (NUIE::UIInputSlotPtr (new NUIE::UIInputSlot (NE::SlotId ("offsetz"), L"Offset Z", NE::ValuePtr (new NE::FloatValue (0.0)), NE::OutputSlotConnectionMode::Single)));
87+
RegisterUIOutputSlot (NUIE::UIOutputSlotPtr (new NUIE::UIOutputSlot (NE::SlotId ("shape"), L"Shape")));
88+
}
89+
90+
void TranslateShapeXYZNode::RegisterParameters (NUIE::NodeParameterList& parameterList) const
91+
{
92+
ShapeNode::RegisterParameters (parameterList);
93+
NUIE::RegisterSlotDefaultValueNodeParameter<TranslateShapeXYZNode, NE::FloatValue> (parameterList, L"Offset X", NUIE::ParameterType::Float, NE::SlotId ("offsetx"));
94+
NUIE::RegisterSlotDefaultValueNodeParameter<TranslateShapeXYZNode, NE::FloatValue> (parameterList, L"Offset Y", NUIE::ParameterType::Float, NE::SlotId ("offsety"));
95+
NUIE::RegisterSlotDefaultValueNodeParameter<TranslateShapeXYZNode, NE::FloatValue> (parameterList, L"Offset Z", NUIE::ParameterType::Float, NE::SlotId ("offsetz"));
96+
}
97+
98+
NE::ValueConstPtr TranslateShapeXYZNode::Calculate (NE::EvaluationEnv& env) const
99+
{
100+
NE::ValueConstPtr shapeValue = EvaluateInputSlot (NE::SlotId ("shape"), env);
101+
NE::ValueConstPtr offsetXValue = EvaluateInputSlot (NE::SlotId ("offsetx"), env);
102+
NE::ValueConstPtr offsetYValue = EvaluateInputSlot (NE::SlotId ("offsety"), env);
103+
NE::ValueConstPtr offsetZValue = EvaluateInputSlot (NE::SlotId ("offsetz"), env);
104+
if (!NE::IsComplexType<ShapeValue> (shapeValue) || !NE::IsComplexType<NE::NumberValue> (offsetXValue) || !NE::IsComplexType<NE::NumberValue> (offsetYValue) || !NE::IsComplexType<NE::NumberValue> (offsetZValue)) {
105+
return nullptr;
106+
}
107+
108+
NE::ListValuePtr result (new NE::ListValue ());
109+
BI::CombineValues (this, {shapeValue, offsetXValue, offsetYValue, offsetZValue}, [&] (const NE::ValueCombination& combination) {
110+
Modeler::ShapePtr shape (ShapeValue::Get (combination.GetValue (0)));
111+
glm::vec3 offset (
112+
NE::NumberValue::ToFloat (combination.GetValue (1)),
113+
NE::NumberValue::ToFloat (combination.GetValue (2)),
114+
NE::NumberValue::ToFloat (combination.GetValue (3))
115+
);
116+
glm::mat4 transformation = glm::translate (glm::mat4 (1.0f), offset);
117+
Modeler::ShapePtr transformed = shape->Transform (transformation);
118+
result->Push (NE::ValuePtr (new ShapeValue (transformed)));
119+
return true;
120+
});
121+
122+
return result;
123+
}
124+
125+
NE::Stream::Status TranslateShapeXYZNode::Read (NE::InputStream& inputStream)
126+
{
127+
NE::ObjectHeader header (inputStream);
128+
ShapeNode::Read (inputStream);
129+
return inputStream.GetStatus ();
130+
}
131+
132+
NE::Stream::Status TranslateShapeXYZNode::Write (NE::OutputStream& outputStream) const
133+
{
134+
NE::ObjectHeader header (outputStream, serializationInfo);
135+
ShapeNode::Write (outputStream);
136+
return outputStream.GetStatus ();
137+
}
138+
67139
RotateShapeNode::RotateShapeNode () :
68140
RotateShapeNode (L"", NUIE::Point ())
69141
{

Sources/VisualScriptCAD/Nodes/TransformShapeNodes.hpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,22 @@ class TranslateShapeNode : public ShapeNode
1818
virtual NE::Stream::Status Write (NE::OutputStream& outputStream) const override;
1919
};
2020

21+
class TranslateShapeXYZNode : public ShapeNode
22+
{
23+
DYNAMIC_SERIALIZABLE (TranslateShapeXYZNode);
24+
25+
public:
26+
TranslateShapeXYZNode ();
27+
TranslateShapeXYZNode (const std::wstring& name, const NUIE::Point& position);
28+
29+
virtual void Initialize () override;
30+
virtual void RegisterParameters (NUIE::NodeParameterList& parameterList) const;
31+
virtual NE::ValueConstPtr Calculate (NE::EvaluationEnv& env) const override;
32+
33+
virtual NE::Stream::Status Read (NE::InputStream& inputStream) override;
34+
virtual NE::Stream::Status Write (NE::OutputStream& outputStream) const override;
35+
};
36+
2137
class RotateShapeNode : public ShapeNode
2238
{
2339
DYNAMIC_SERIALIZABLE (RotateShapeNode);

0 commit comments

Comments
 (0)