diff --git a/Application/Rulr.sln b/Application/Rulr.sln
index 864b00c2c2..afb27ebcbd 100644
--- a/Application/Rulr.sln
+++ b/Application/Rulr.sln
@@ -14,23 +14,23 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Rulr", "Rulr.vcxproj", "{7F
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openframeworksLib", "..\..\..\libs\openFrameworksCompiled\project\vs\openframeworksLib.vcxproj", "{5837595D-ACA9-485C-8E76-729040CE4B0B}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxMachineVisionLib", "..\..\ofxMachineVision\ofxMachineVisionLib\ofxMachineVisionLib.vcxproj", "{CD4455E0-0454-4C3C-BB42-9D15D16A34DD}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxMachineVisionLib", "..\..\..\addons\ofxMachineVision\ofxMachineVisionLib\ofxMachineVisionLib.vcxproj", "{CD4455E0-0454-4C3C-BB42-9D15D16A34DD}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxCvMinLib", "..\..\ofxCvMin\ofxCvMinLib\ofxCvMinLib.vcxproj", "{FAA73572-FD12-41FA-8FBE-CB47482D2D87}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxCvMinLib", "..\..\..\addons\ofxCvMin\ofxCvMinLib\ofxCvMinLib.vcxproj", "{FAA73572-FD12-41FA-8FBE-CB47482D2D87}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxRayLib", "..\..\ofxRay\ofxRayLib\ofxRayLib.vcxproj", "{048E1EC4-64FE-4AAC-B524-1BD56A1FC726}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxRayLib", "..\..\..\addons\ofxRay\ofxRayLib\ofxRayLib.vcxproj", "{048E1EC4-64FE-4AAC-B524-1BD56A1FC726}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxGraycodeLib", "..\..\ofxGraycode\ofxGraycodeLib\ofxGraycodeLib.vcxproj", "{BA65A9DD-2BE2-4FF8-A9C6-6AC6624CDDC3}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxGraycodeLib", "..\..\..\addons\ofxGraycode\ofxGraycodeLib\ofxGraycodeLib.vcxproj", "{BA65A9DD-2BE2-4FF8-A9C6-6AC6624CDDC3}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxEdsdkLib", "..\..\ofxEdsdk\ofxEdsdkLib\ofxEdsdkLib.vcxproj", "{630936F8-C65F-4AB9-92AD-80569EAA7782}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxEdsdkLib", "..\..\..\addons\ofxEdsdk\ofxEdsdkLib\ofxEdsdkLib.vcxproj", "{630936F8-C65F-4AB9-92AD-80569EAA7782}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxKinectForWindows2Lib", "..\..\ofxKinectForWindows2\ofxKinectForWindows2Lib\ofxKinectForWindows2Lib.vcxproj", "{F6008D6A-6D39-4B68-840E-E7AC8ED855DA}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxKinectForWindows2Lib", "..\..\..\addons\ofxKinectForWindows2\ofxKinectForWindows2Lib\ofxKinectForWindows2Lib.vcxproj", "{F6008D6A-6D39-4B68-840E-E7AC8ED855DA}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxCvGuiLib", "..\..\ofxCvGui\ofxCvGuiLib\ofxCvGuiLib.vcxproj", "{6F0DDB4F-4014-4433-919B-9D956C034BAD}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxCvGuiLib", "..\..\..\addons\ofxCvGui\ofxCvGuiLib\ofxCvGuiLib.vcxproj", "{6F0DDB4F-4014-4433-919B-9D956C034BAD}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxUeyeLib", "..\..\ofxUeye\ofxUeyeLib\ofxUeyeLib.vcxproj", "{8D6B518C-D891-4907-8BC1-3232914BAB97}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxUeyeLib", "..\..\..\addons\ofxUeye\ofxUeyeLib\ofxUeyeLib.vcxproj", "{8D6B518C-D891-4907-8BC1-3232914BAB97}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxBlackmagicLib", "..\..\ofxBlackmagic2\ofxBlackmagicLib\ofxBlackmagicLib.vcxproj", "{E57BE93F-5BA0-4165-8861-DF6653F11A37}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxBlackmagicLib", "..\..\..\addons\ofxBlackmagic2\ofxBlackmagicLib\ofxBlackmagicLib.vcxproj", "{E57BE93F-5BA0-4165-8861-DF6653F11A37}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "..\Core\Core.vcxproj", "{9201D4E8-8B5A-44D4-BAA6-23229A1871A7}"
EndProject
@@ -43,13 +43,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Nodes", "..\Nodes\Nodes.vcx
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Addons", "Addons", "{16F575BF-69CD-4DE7-886A-F1E871E4D5B1}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxPluginLib", "..\..\ofxPlugin\ofxPluginLib\ofxPluginLib.vcxproj", "{68B9239B-5AE6-45C0-B1CB-6FC6B58BB6EE}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxPluginLib", "..\..\..\addons\ofxPlugin\ofxPluginLib\ofxPluginLib.vcxproj", "{68B9239B-5AE6-45C0-B1CB-6FC6B58BB6EE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Application", "Application", "{B60F2E08-1FFC-406D-99B2-D446B968362D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "KinectForWindows2", "KinectForWindows2", "{E02D4FA5-079D-4D3F-805D-AB62A37E77FA}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxSingleton", "..\..\ofxSingleton\ofxSingletonLib\ofxSingleton.vcxproj", "{4D3BCFDD-E65D-4247-B303-E0839CAEC6A6}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxSingleton", "..\..\..\addons\ofxSingleton\ofxSingletonLib\ofxSingleton.vcxproj", "{4D3BCFDD-E65D-4247-B303-E0839CAEC6A6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EnttecUsbPro", "EnttecUsbPro", "{8A40CBDF-2E1C-40FA-8CF6-B5E4C8904278}"
EndProject
@@ -58,7 +58,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_EnttecUsbPro", "..\P
{C400D413-78E4-4F60-B5E2-7965FCAC0EEC} = {C400D413-78E4-4F60-B5E2-7965FCAC0EEC}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxNonLinearFit", "..\..\ofxNonLinearFit\ofxNonLinearFitLib\ofxNonLinearFit.vcxproj", "{C087079E-2A0E-4B85-A479-C28E2D01A048}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxNonLinearFit", "..\..\..\addons\ofxNonLinearFit\ofxNonLinearFitLib\ofxNonLinearFit.vcxproj", "{C087079E-2A0E-4B85-A479-C28E2D01A048}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BlackMagic", "BlackMagic", "{5ED22A72-EE8F-4D92-BA9D-0C8FD342A5D9}"
EndProject
diff --git a/Core/Core.vcxproj b/Core/Core.vcxproj
index 6396ce0e9f..4dd0a28c59 100644
--- a/Core/Core.vcxproj
+++ b/Core/Core.vcxproj
@@ -99,16 +99,16 @@
-
+
{6f0ddb4f-4014-4433-919b-9d956c034bad}
-
+
{faa73572-fd12-41fa-8fbe-cb47482d2d87}
-
+
{68b9239b-5ae6-45c0-b1cb-6fc6b58bb6ee}
-
+
{4d3bcfdd-e65d-4247-b303-e0839caec6a6}
@@ -138,13 +138,13 @@
-
+
-
+
diff --git a/Core/src/ofxRulr/Graph/Editor/NodeHost.cpp b/Core/src/ofxRulr/Graph/Editor/NodeHost.cpp
index d0bb53155a..2591932167 100644
--- a/Core/src/ofxRulr/Graph/Editor/NodeHost.cpp
+++ b/Core/src/ofxRulr/Graph/Editor/NodeHost.cpp
@@ -101,7 +101,7 @@ namespace ofxRulr {
this->outputPinPosition = ofVec2f(this->getWidth(), this->getHeight() / 2.0f);
const auto iconSize = 48;
- outputPinView->setBounds(ofRectangle(this->getOutputPinPosition() - ofVec2f(iconSize + 16, iconSize / 2), iconSize, iconSize));
+ outputPinView->setBounds(ofRectangle(this->getOutputPinPosition() - ofVec2f(iconSize + 20, iconSize / 2), iconSize, iconSize));
auto & resizeImage = image("ofxRulr::resizeHandle");
resizeHandle->setBounds(ofRectangle(args.localBounds.width - resizeImage.getWidth(), args.localBounds.height - resizeImage.getHeight(), resizeImage.getWidth(), resizeImage.getHeight()));
diff --git a/Core/src/ofxRulr/Nodes/Base.h b/Core/src/ofxRulr/Nodes/Base.h
index 8af00a8215..cb15594036 100644
--- a/Core/src/ofxRulr/Nodes/Base.h
+++ b/Core/src/ofxRulr/Nodes/Base.h
@@ -4,6 +4,7 @@
#include "../Utils/Constants.h"
#include "../Utils/Serializable.h"
#include "../Exception.h"
+#include "../Version.h"
#include "../../../addons/ofxCvGui/src/ofxCvGui/InspectController.h"
@@ -174,5 +175,11 @@ namespace ofxRulr {
uint64_t lastFrameUpdate;
bool updateAllInputsFirst;
};
+
+ template
+ class Gives : public Base {
+ public:
+ virtual void get(What &) const { };
+ };
}
}
\ No newline at end of file
diff --git a/Example_KinectProjector/exampleLoadKinectProjector.sln b/Example_KinectProjector/exampleLoadKinectProjector.sln
index b72b4d4723..61500693e9 100644
--- a/Example_KinectProjector/exampleLoadKinectProjector.sln
+++ b/Example_KinectProjector/exampleLoadKinectProjector.sln
@@ -6,9 +6,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "exampleLoadKinectProjector"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openframeworksLib", "..\..\..\libs\openFrameworksCompiled\project\vs\openframeworksLib.vcxproj", "{5837595D-ACA9-485C-8E76-729040CE4B0B}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxKinectForWindows2Lib", "..\..\ofxKinectForWindows2\ofxKinectForWindows2Lib\ofxKinectForWindows2Lib.vcxproj", "{F6008D6A-6D39-4B68-840E-E7AC8ED855DA}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxKinectForWindows2Lib", "..\..\..\addons\ofxKinectForWindows2\ofxKinectForWindows2Lib\ofxKinectForWindows2Lib.vcxproj", "{F6008D6A-6D39-4B68-840E-E7AC8ED855DA}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxRayLib", "..\..\ofxRay\ofxRayLib\ofxRayLib.vcxproj", "{048E1EC4-64FE-4AAC-B524-1BD56A1FC726}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxRayLib", "..\..\..\addons\ofxRay\ofxRayLib\ofxRayLib.vcxproj", "{048E1EC4-64FE-4AAC-B524-1BD56A1FC726}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/Example_KinectProjector/exampleLoadKinectProjector.vcxproj b/Example_KinectProjector/exampleLoadKinectProjector.vcxproj
index da1e638597..b8cd0ba4cc 100644
--- a/Example_KinectProjector/exampleLoadKinectProjector.vcxproj
+++ b/Example_KinectProjector/exampleLoadKinectProjector.vcxproj
@@ -178,10 +178,10 @@
{5837595d-aca9-485c-8e76-729040ce4b0b}
-
+
{f6008d6a-6d39-4b68-840e-e7ac8ed855da}
-
+
{048e1ec4-64fe-4aac-b524-1bd56a1fc726}
diff --git a/Nodes/Nodes.vcxproj b/Nodes/Nodes.vcxproj
index 750bbda270..9fd2f17b4b 100644
--- a/Nodes/Nodes.vcxproj
+++ b/Nodes/Nodes.vcxproj
@@ -37,14 +37,14 @@
-
+
-
+
@@ -222,6 +222,12 @@
+
+
+
+
+
+
@@ -237,6 +243,7 @@
+
@@ -249,6 +256,7 @@
+
@@ -269,6 +277,18 @@
NotUsing
NotUsing
+
+ NotUsing
+ NotUsing
+
+
+ NotUsing
+ NotUsing
+
+
+ NotUsing
+ NotUsing
+
NotUsing
NotUsing
@@ -287,6 +307,7 @@
+
@@ -297,6 +318,7 @@
+
@@ -415,16 +437,16 @@
-
+
{ba65a9dd-2be2-4ff8-a9c6-6ac6624cddc3}
-
+
{cd4455e0-0454-4c3c-bb42-9d15d16a34dd}
-
+
{c087079e-2a0e-4b85-a479-c28e2d01a048}
-
+
{048e1ec4-64fe-4aac-b524-1bd56a1fc726}
diff --git a/Nodes/Nodes.vcxproj.filters b/Nodes/Nodes.vcxproj.filters
index 650bfedf99..3212378133 100644
--- a/Nodes/Nodes.vcxproj.filters
+++ b/Nodes/Nodes.vcxproj.filters
@@ -106,6 +106,27 @@
{8f8ef269-fbcf-420a-9cb9-1ce43874f795}
+
+ {369c51fb-316f-4036-99cc-3af25830ccee}
+
+
+ {7a315213-f9a9-4305-8cb8-0e4ae538dac5}
+
+
+ {572dca21-efbb-413b-8518-6b4ddf0a74ee}
+
+
+ {4b9b3a92-f225-4f51-9bd7-6402f7b8f820}
+
+
+ {e43da1d4-c1e0-4510-80e9-682df1106e54}
+
+
+ {983f696e-bb63-42b2-9bb5-109a870fab75}
+
+
+ {9468ac5a-1db1-4d7f-9a59-ed867c37a682}
+
@@ -591,6 +612,28 @@
src\ofxRulr\Nodes\Data\Channels\Generator
+
+
+ addons\ofxTriangle\src
+
+
+ addons\ofxTriangle\libs\Triangle\include
+
+
+ addons\ofxTriangle\libs\Triangle\include
+
+
+ addons\ofxTriangle\libs\Triangle\include
+
+
+ addons\ofxTriangle\libs\Triangle\include
+
+
+ addons\ofxTriangle\libs\Triangle\include
+
+
+ src\ofxRulr\Nodes\Export
+
@@ -704,6 +747,19 @@
src\ofxRulr\Nodes\Data\Channels\Generator
+
+ src\ofxRulr\Nodes\Procedure\Calibrate
+
+
+ addons\ofxTriangle\src
+
+
+ addons\ofxTriangle\libs\Triangle\src
+
+
+ addons\ofxTriangle\libs\Triangle\src
+
+
diff --git a/Nodes/ofxRulr_Nodes.props b/Nodes/ofxRulr_Nodes.props
index 2935c9cd96..ecbe12e10f 100644
--- a/Nodes/ofxRulr_Nodes.props
+++ b/Nodes/ofxRulr_Nodes.props
@@ -10,7 +10,7 @@
- ..\..\..\addons\ofxTriangulate\src;..\..\..\addons\ofxSpinCursor\src;..\..\..\addons\ofxGLM\src;..\..\..\addons\ofxRulr\Nodes\src;..\..\..\addons\ofxAssimpModelLoader\libs\assimp\include;..\..\..\addons\ofxAssimpModelLoader\src;%(AdditionalIncludeDirectories)
+ ..\..\..\addons\ofxTriangle\libs\triangle\include;..\..\..\addons\ofxTriangle\src;..\..\..\addons\ofxTriangulate\src;..\..\..\addons\ofxSpinCursor\src;..\..\..\addons\ofxGLM\src;..\..\..\addons\ofxRulr\Nodes\src;..\..\..\addons\ofxAssimpModelLoader\libs\assimp\include;..\..\..\addons\ofxAssimpModelLoader\src;%(AdditionalIncludeDirectories)
diff --git a/Nodes/src/ofxRulr/Nodes/DeclareNodes.cpp b/Nodes/src/ofxRulr/Nodes/DeclareNodes.cpp
index b77d668a5a..43b1c100b3 100644
--- a/Nodes/src/ofxRulr/Nodes/DeclareNodes.cpp
+++ b/Nodes/src/ofxRulr/Nodes/DeclareNodes.cpp
@@ -10,6 +10,8 @@
#include "ofxRulr/Nodes/DMX/Sharpy.h"
#include "ofxRulr/Nodes/DMX/AimMovingHeadAt.h"
+#include "ofxRulr/Nodes/Export/Mesh.h"
+
#include "ofxRulr/Nodes/Item/Board.h"
#include "ofxRulr/Nodes/Item/Camera.h"
//#include "Nodes/Item/Model.h"
@@ -19,6 +21,7 @@
#include "ofxRulr/Nodes/Procedure/Calibrate/CameraIntrinsics.h"
#include "ofxRulr/Nodes/Procedure/Calibrate/HomographyFromGraycode.h"
+#include "ofxRulr/Nodes/Procedure/Calibrate/Mesh2DFromGraycode.h"
#include "ofxRulr/Nodes/Procedure/Calibrate/ViewToVertices.h"
#include "ofxRulr/Nodes/Procedure/Calibrate/MovingHeadToWorld.h"
#include "ofxRulr/Nodes/Procedure/Calibrate/ProjectorFromDepthCamera.h"
@@ -47,6 +50,8 @@ namespace ofxRulr {
RULR_DECLARE_NODE(DMX::Sharpy);
RULR_DECLARE_NODE(DMX::AimMovingHeadAt);
+ RULR_DECLARE_NODE(Export::Mesh);
+
RULR_DECLARE_NODE(Item::Board);
RULR_DECLARE_NODE(Item::Camera);
//RULR_DECLARE_NODE(Item::Model);
@@ -56,6 +61,7 @@ namespace ofxRulr {
RULR_DECLARE_NODE(Procedure::Calibrate::CameraIntrinsics);
RULR_DECLARE_NODE(Procedure::Calibrate::HomographyFromGraycode);
+ RULR_DECLARE_NODE(Procedure::Calibrate::Mesh2DFromGraycode);
RULR_DECLARE_NODE(Procedure::Calibrate::ViewToVertices);
RULR_DECLARE_NODE(Procedure::Calibrate::MovingHeadToWorld);
RULR_DECLARE_NODE(Procedure::Calibrate::ProjectorFromDepthCamera);
diff --git a/Nodes/src/ofxRulr/Nodes/Export/Mesh.cpp b/Nodes/src/ofxRulr/Nodes/Export/Mesh.cpp
new file mode 100644
index 0000000000..84b018736b
--- /dev/null
+++ b/Nodes/src/ofxRulr/Nodes/Export/Mesh.cpp
@@ -0,0 +1,117 @@
+#include "pch_RulrNodes.h"
+#include "Mesh.h"
+
+namespace ofxRulr {
+ namespace Nodes {
+ namespace Export {
+ //----------
+ Mesh::Mesh() {
+ RULR_NODE_INIT_LISTENER;
+ }
+
+ //----------
+ string Mesh::getTypeName() const {
+ return "Export::Mesh";
+ }
+
+ //----------
+ void Mesh::init() {
+ RULR_NODE_INSPECTOR_LISTENER;
+
+ this->addInput>();
+ }
+
+ //----------
+ void Mesh::populateInspector(ofxCvGui::InspectArguments & args) {
+ auto inspector = args.inspector;
+
+ inspector->addButton("Export OBJ...", [this]() {
+ try {
+ this->exportOBJ();
+ }
+ RULR_CATCH_ALL_TO_ALERT;
+ });
+
+ inspector->addButton("Export PLY...", [this]() {
+ try {
+ this->exportPLY();
+ }
+ RULR_CATCH_ALL_TO_ALERT;
+ });
+ }
+
+ //----------
+ void Mesh::exportOBJ() {
+ this->throwIfMissingAnyConnection();
+
+ auto result = ofSystemSaveDialog("mesh.obj", "Mesh file name");
+ if (result.bSuccess) {
+ auto node = this->getInput>();
+ ofMesh mesh;
+ node->get(mesh);
+
+ auto file = ofstream(result.filePath, ios::out);
+
+ file << "# Mesh exported from Rulr v" << RULR_VERSION_STRING << endl;
+ file << "# Source node \"" << node->getName() << "\" of type [" << node->getTypeName() << "]" << endl;
+
+ file << endl;
+
+ //vertices
+ if (mesh.hasVertices()) {
+ file << "# " << mesh.getNumVertices() << " vertices" << endl;
+ for (const auto & vertex : mesh.getVertices()) {
+ file << "v " << vertex.x << " " << vertex.y << " " << vertex.z << endl;
+ }
+ file << endl;
+ }
+
+ //texture coordinates
+ if (mesh.hasTexCoords()) {
+ file << "# " << mesh.getNumTexCoords() << " texture coordinates" << endl;
+ for (const auto & textureCoordinate : mesh.getTexCoords()) {
+ file << "vt " << textureCoordinate.x << " " << textureCoordinate.y << " 0" << endl;
+ }
+ file << endl;
+ }
+
+ //faces
+ if (mesh.hasIndices() && mesh.getMode() == ofPrimitiveMode::OF_PRIMITIVE_TRIANGLES) {
+ file << "# " << mesh.getNumIndices() / 3 << " faces" << endl;
+ auto indexPtr = mesh.getIndexPointer();
+
+ bool hasTextureCoordinates = mesh.hasTexCoords();
+ for (int i = 0; i < mesh.getNumIndices(); i += 3) {
+
+ file << "f";
+ for (int j = 0; j < 3; j++) {
+ file << " v" << indexPtr[j];
+ if (hasTextureCoordinates) {
+ file << "/vt" << indexPtr[j];
+ }
+ }
+ file << endl;
+
+ indexPtr += 3;
+ }
+ }
+
+ file.close();
+ }
+ }
+
+ //----------
+ void Mesh::exportPLY() {
+ this->throwIfMissingAnyConnection();
+
+ auto result = ofSystemSaveDialog("mesh.ply", "Mesh file name");
+ if (result.bSuccess) {
+ auto node = this->getInput>();
+ ofMesh mesh;
+ node->get(mesh);
+ mesh.save(result.filePath);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Nodes/src/ofxRulr/Nodes/Export/Mesh.h b/Nodes/src/ofxRulr/Nodes/Export/Mesh.h
new file mode 100644
index 0000000000..d4d5e8ae56
--- /dev/null
+++ b/Nodes/src/ofxRulr/Nodes/Export/Mesh.h
@@ -0,0 +1,22 @@
+#pragma once
+
+#include "ofxRulr/Nodes/Base.h"
+
+namespace ofxRulr {
+ namespace Nodes {
+ namespace Export {
+ class Mesh : public Nodes::Base {
+ public:
+ Mesh();
+ string getTypeName() const override;
+
+ void init();
+
+ void populateInspector(ofxCvGui::InspectArguments &);
+
+ void exportOBJ();
+ void exportPLY();
+ };
+ }
+ }
+}
\ No newline at end of file
diff --git a/Nodes/src/ofxRulr/Nodes/Procedure/Calibrate/Mesh2DFromGraycode.cpp b/Nodes/src/ofxRulr/Nodes/Procedure/Calibrate/Mesh2DFromGraycode.cpp
new file mode 100644
index 0000000000..2637fcad5b
--- /dev/null
+++ b/Nodes/src/ofxRulr/Nodes/Procedure/Calibrate/Mesh2DFromGraycode.cpp
@@ -0,0 +1,170 @@
+#include "pch_RulrNodes.h"
+#include "Mesh2DFromGraycode.h"
+
+#include "ofxRulr/Nodes/Procedure/Scan/Graycode.h"
+
+#include "ofxTriangle.h"
+
+namespace ofxRulr {
+ namespace Nodes {
+ namespace Procedure {
+ namespace Calibrate {
+ //----------
+ Mesh2DFromGraycode::Mesh2DFromGraycode() {
+ RULR_NODE_INIT_LISTENER;
+ }
+
+ //----------
+ string Mesh2DFromGraycode::getTypeName() const {
+ return "Nodes::Procedure::Calibrate::MeshFrom2DGraycode";
+ }
+
+ //----------
+ void Mesh2DFromGraycode::init() {
+ RULR_NODE_INSPECTOR_LISTENER;
+ RULR_NODE_SERIALIZATION_LISTENERS;
+
+ auto graycodeInput = this->addInput();
+
+ auto view = make_shared();
+ view->onDrawCropped += [this](ofxCvGui::Panels::BaseImage::DrawCroppedArguments & args) {
+ this->mesh.drawWireframe();
+ };
+ graycodeInput->onNewConnection += [this, view](shared_ptr graycodeNode) {
+ view->setDrawObject(graycodeNode->getDecoder().getCameraInProjector());
+ };
+ graycodeInput->onDeleteConnection += [this, view](shared_ptr graycodeNode) {
+ view->clearDrawObject();
+ };
+ this->view = view;
+ }
+
+ //----------
+ ofxCvGui::PanelPtr Mesh2DFromGraycode::getView() {
+ return this->view;
+ }
+
+ //----------
+ void Mesh2DFromGraycode::get(ofMesh & mesh) const {
+ mesh = this->mesh;
+ }
+
+ //----------
+ void Mesh2DFromGraycode::populateInspector(ofxCvGui::InspectArguments & args) {
+ auto inspector = args.inspector;
+
+ inspector->addButton("Triangulate", [this]() {
+ try {
+ this->triangulate();
+ }
+ RULR_CATCH_ALL_TO_ALERT;
+ });
+ }
+
+ //----------
+ void Mesh2DFromGraycode::serialize(Json::Value & json) {
+ }
+
+ //----------
+ void Mesh2DFromGraycode::deserialize(const Json::Value & json) {
+ }
+
+ //----------
+ //from http://flassari.is/2008/11/line-line-intersection-in-cplusplus/
+ ofVec2f * line_line_intersection(ofVec2f p1, ofVec2f p2, ofVec2f p3, ofVec2f p4) {
+
+ // Store the values for fast access and easy
+ // equations-to-code conversion
+ float x1 = p1.x, x2 = p2.x, x3 = p3.x, x4 = p4.x;
+ float y1 = p1.y, y2 = p2.y, y3 = p3.y, y4 = p4.y;
+
+ float d = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
+ // If d is zero, there is no intersection
+ if (d == 0) return NULL;
+
+ // Get the x and y
+ float pre = (x1*y2 - y1*x2), post = (x3*y4 - y3*x4);
+ float x = (pre * (x3 - x4) - (x1 - x2) * post) / d;
+ float y = (pre * (y3 - y4) - (y1 - y2) * post) / d;
+
+ // Check if the x and y coordinates are within both lines
+ if (x < min(x1, x2) || x > max(x1, x2) ||
+ x < min(x3, x4) || x > max(x3, x4)) return NULL;
+ if (y < min(y1, y2) || y > max(y1, y2) ||
+ y < min(y3, y4) || y > max(y3, y4)) return NULL;
+
+ // Return the point of intersection
+ ofVec2f * ret = new ofVec2f();
+ ret->x = x;
+ ret->y = y;
+ return ret;
+ }
+
+ //----------
+ void Mesh2DFromGraycode::triangulate() {
+ this->throwIfMissingAnyConnection();
+
+ auto dataSet = this->getInput()->getDataSet();
+ if (!dataSet.getHasData()) {
+ throw(Exception("No scan data available"));
+ }
+
+ //get camera coords in projector space map
+ const auto & cameraInProjector = dataSet.getDataInverse();
+ const auto & active = dataSet.getActive();
+
+ const auto projectorWidth = cameraInProjector.getWidth();
+ const auto projectorHeight = cameraInProjector.getHeight();
+
+ const auto cameraWidth = active.getWidth();
+
+ auto getCameraPixelPosition = [&cameraInProjector, projectorWidth, cameraWidth](int i, int j) {
+ const auto cameraPixelIndex = cameraInProjector.getData()[i + j * projectorWidth];
+ return ofVec2f(cameraPixelIndex % cameraWidth, cameraPixelIndex / cameraWidth);
+ };
+ auto isActive = [& cameraInProjector, &active, projectorWidth](int i, int j) {
+ const auto cameraPixelIndex = cameraInProjector.getData()[i + j * projectorWidth];
+ const auto isActive = active.getData()[cameraPixelIndex];
+ return isActive;
+ };
+
+ vector projectorSpaceActivePoints;
+
+ //find all active pixels
+ for (int j = 0; j < projectorHeight; j++) {
+ for (int i = 0; i < projectorWidth; i++) {
+ if (isActive(i, j)) {
+ projectorSpaceActivePoints.emplace_back(ofVec2f(i, j));
+ }
+ }
+ }
+
+ //triangulate
+ ofMesh mesh;
+ {
+ //make vertices and tex coords
+ Delaunay::Point tempP;
+ vector delauneyPoints;
+ for (const auto & projectorSpaceActivePoint : projectorSpaceActivePoints) {
+ delauneyPoints.emplace_back(projectorSpaceActivePoint.x, projectorSpaceActivePoint.y);
+ mesh.addVertex(projectorSpaceActivePoint);
+ mesh.addTexCoord(getCameraPixelPosition(projectorSpaceActivePoint.x, projectorSpaceActivePoint.y));
+ }
+
+ //triangulate
+ auto delauney = make_shared(delauneyPoints);
+ delauney->Triangulate();
+
+ //apply indices
+ for (auto it = delauney->fbegin(); it != delauney->fend(); ++it) {
+ mesh.addIndex(delauney->Org(it));
+ mesh.addIndex(delauney->Dest(it));
+ mesh.addIndex(delauney->Apex(it));
+ }
+ }
+ swap(this->mesh, mesh);
+ }
+ }
+ }
+ }
+}
diff --git a/Nodes/src/ofxRulr/Nodes/Procedure/Calibrate/Mesh2DFromGraycode.h b/Nodes/src/ofxRulr/Nodes/Procedure/Calibrate/Mesh2DFromGraycode.h
new file mode 100644
index 0000000000..28fb3087a9
--- /dev/null
+++ b/Nodes/src/ofxRulr/Nodes/Procedure/Calibrate/Mesh2DFromGraycode.h
@@ -0,0 +1,31 @@
+#pragma once
+
+#include "ofxRulr/Nodes/Base.h"
+
+namespace ofxRulr {
+ namespace Nodes {
+ namespace Procedure {
+ namespace Calibrate {
+ class Mesh2DFromGraycode : public Nodes::Gives {
+ public:
+ Mesh2DFromGraycode();
+ string getTypeName() const override;
+
+ void init();
+ ofxCvGui::PanelPtr getView() override;
+
+ void get(ofMesh &) const override;
+
+ void populateInspector(ofxCvGui::InspectArguments &);
+ void serialize(Json::Value &);
+ void deserialize(const Json::Value &);
+
+ void triangulate();
+ protected:
+ ofMesh mesh;
+ ofxCvGui::PanelPtr view;
+ };
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Plugin_AppTester/src/ofxRulr/Nodes/AppTester/ListProjects.cpp b/Plugin_AppTester/src/ofxRulr/Nodes/AppTester/ListProjects.cpp
index d3026473b3..613b30ca5b 100644
--- a/Plugin_AppTester/src/ofxRulr/Nodes/AppTester/ListProjects.cpp
+++ b/Plugin_AppTester/src/ofxRulr/Nodes/AppTester/ListProjects.cpp
@@ -134,7 +134,7 @@ namespace ofxRulr {
}
else {
auto extension = ofToLower(path.extension().string());
- if (extension == ".vcxproj") {
+ if (extension == ".sln") {
this->projects.insert(make_pair(path, make_shared(path, locationType, relativePath)));
ofxCvGui::Utils::drawProcessingNotice("Found " + ofToString(this->projects.size()) + " projects...");
}
diff --git a/Plugin_AppTester/src/ofxRulr/Nodes/AppTester/Project.cpp b/Plugin_AppTester/src/ofxRulr/Nodes/AppTester/Project.cpp
index d086eb5399..ce2c9d6548 100644
--- a/Plugin_AppTester/src/ofxRulr/Nodes/AppTester/Project.cpp
+++ b/Plugin_AppTester/src/ofxRulr/Nodes/AppTester/Project.cpp
@@ -6,6 +6,15 @@ using namespace ofxCvGui;
namespace ofxRulr {
namespace Nodes {
namespace AppTester{
+ //----------
+ Project::BuildConfiguration::BuildConfiguration(Platform platform, Configuration configuration) {
+ this->platform = platform;
+ this->configuration = configuration;
+
+ this->errors.push_back("Test error");
+ this->warnings.push_back("Test error");
+ }
+
//----------
Project::Project() {
this->onDraw += [this](DrawArguments & args) {
@@ -25,22 +34,13 @@ namespace ofxRulr {
ofPopStyle();
//title
- ofxCvGui::Utils::drawText(this->relativePath.string(), 90, 5, false);
+ ofxCvGui::Utils::drawText(this->relativePath.string(), 5, 5, false);
};
this->elements = make_shared();
this->elements->addListenersToParent(this, true);
- auto buildButton = ofxCvGui::Widgets::makeButton("Build", [this]() {
- this->build();
- });
- this->elements->add(buildButton);
-
- this->onBoundsChange += [this, buildButton](BoundsChangeArguments & args) {
- buildButton->setBounds(ofRectangle(0, 0, 80, args.localBounds.height));
- };
-
- this->setHeight(50.0f);
+ this->rebuildGui();
}
//----------
@@ -50,10 +50,12 @@ namespace ofxRulr {
this->locationType = locationType;
this->relativePath = relativePath;
- this->configurations.insert(make_pair(Platform::Win32, Configuration::Debug));
- this->configurations.insert(make_pair(Platform::Win32, Configuration::Release));
- this->configurations.insert(make_pair(Platform::x64, Configuration::Debug));
- this->configurations.insert(make_pair(Platform::x64, Configuration::Release));
+ this->buildConfigurations.push_back(make_shared(Platform::Win32, Configuration::Debug));
+ this->buildConfigurations.push_back(make_shared(Platform::Win32, Configuration::Release));
+ this->buildConfigurations.push_back(make_shared(Platform::x64, Configuration::Debug));
+ this->buildConfigurations.push_back(make_shared(Platform::x64, Configuration::Release));
+
+ this->rebuildGui();
}
//----------
@@ -65,20 +67,21 @@ namespace ofxRulr {
void Project::build() {
auto buildExe = Project::getMSBuildLocation().get();
- for (auto configuration : this->configurations) {
+ for (auto buildConfiguration : this->buildConfigurations) {
stringstream execString;
- execString << "cmd /S /c \"" << buildExe << "\" \"" << this->path.string() << "\"";
-
- switch (configuration.first) {
+ execString << "cmd /c";
+ execString << " \"" << buildExe << "\"";
+
+ switch (buildConfiguration->platform) {
case Win32:
- execString << " /pPlatform=Win32";
+ execString << " /p:Platform=Win32";
break;
case x64:
- execString << " /pPlatform=x64";
+ execString << " /p:Platform=x64";
break;
}
- switch (configuration.second) {
+ switch (buildConfiguration->configuration) {
case Debug:
execString << " /p:Configuration=Debug";
break;
@@ -86,14 +89,36 @@ namespace ofxRulr {
execString << " /p:Configuration=Release";
break;
}
-
+
+ execString << " /verbosity:Quiet";
+
+ execString << " " << this->path.string();
+
cout << execString << endl;
- ofSystem(execString.str().c_str());
- }
-
+ ofxCvGui::Utils::drawProcessingNotice("Building [" + this->relativePath.string() + "] " + toString(buildConfiguration->platform) + "|" + toString(buildConfiguration->configuration));
+ {
+#ifdef TARGET_WIN32
+ auto handle = _popen(execString.str().c_str(), "r");
+#else
+ auto handle = popen(execString.str().c_str(), "r");
+#endif
+ if (!handle) {
+ throw(Exception("Failed to execute command [" + execString.str() + "]"));
+ }
- system(buildExe.c_str());
+ auto charachter = fgetc(handle);
+ while (charachter != EOF) {
+ cout << (char) charachter;
+ charachter = fgetc(handle);
+ }
+#ifdef TARGET_WIN32
+ _pclose(handle);
+#else
+ pclose(handle);
+#endif
+ }
+ }
}
//----------
@@ -105,29 +130,125 @@ namespace ofxRulr {
//----------
void Project::serialize(Json::Value & json) {
json["LocationType"] = this->locationType;
+ json["path"] = this->path.string();
json["relativePath"] = this->relativePath.string();
- auto & jsonConfigurations = json["configurations"];
+ auto & jsonConfigurations = json["buildConfigurations"];
int i = 0;
- for (const auto & configuration : this->configurations) {
+ for (const auto & buildConfiguration : this->buildConfigurations) {
auto & jsonConfiguration = jsonConfigurations[i++];
- jsonConfiguration["Platform"] = configuration.first;
- jsonConfiguration["Configuration"] = configuration.second;
+ jsonConfiguration["platform"] = buildConfiguration->platform;
+ jsonConfiguration["configuration"] = buildConfiguration->configuration;
+
+ auto warningIndex = 0;
+ for (auto warning : buildConfiguration->warnings) {
+ jsonConfiguration["warnings"][warningIndex] = warning;
+ }
+
+ auto errorIndex = 0;
+ for (auto error : buildConfiguration->errors) {
+ jsonConfiguration["errors"][errorIndex] = error;
+ }
+
+ jsonConfiguration["enabled"] = buildConfiguration->enabled;
}
}
//----------
void Project::deserialize(const Json::Value & json) {
this->locationType = (LocationType) json["LocationType"].asInt();
+ this->path = filesystem::path(json["path"].asString());
this->relativePath = filesystem::path(json["relativePath"].asString());
- this->configurations.clear();
- const auto & jsonConfigurations= json["configurations"];
+ this->buildConfigurations.clear();
+ const auto & jsonConfigurations= json["buildConfigurations"];
for (auto & jsonConfiguration : jsonConfigurations) {
- auto platform = (Platform) jsonConfiguration["Platform"].asInt();
- auto configuration = (Configuration) jsonConfiguration["Configuration"].asInt();
- this->configurations.insert(make_pair(platform, configuration));
+ auto platform = (Platform) jsonConfiguration["platform"].asInt();
+ auto configuration = (Configuration) jsonConfiguration["configuration"].asInt();
+ auto buildConfiguration = make_shared(platform, configuration);
+ buildConfiguration->enabled = jsonConfiguration["enabled"].asBool();
+
+ for (const auto & jsonWarning : jsonConfiguration["warnings"]) {
+ buildConfiguration->warnings.push_back(jsonWarning.asString());
+ }
+ for (const auto & jsonError : jsonConfiguration["errors"]) {
+ buildConfiguration->errors.push_back(jsonError.asString());
+ }
}
+
+ this->rebuildGui();
+ }
+
+ //----------
+ string Project::toString(Platform platform) {
+ switch (platform) {
+ case Win32:
+ return "Win32";
+ case x64:
+ return "x64";
+ default:
+ return "Unsupported";
+ }
+ }
+
+ //----------
+ string Project::toString(Configuration configuration) {
+ switch (configuration) {
+ case Release:
+ return "Release";
+ case Debug:
+ return "Debug";
+ default:
+ return "Unsupported";
+ }
+ }
+
+ //----------
+ void Project::rebuildGui() {
+ this->elements->clear();
+
+ auto height = 20.0f;
+
+ auto buildButton = ofxCvGui::Widgets::makeButton("Build", [this]() {
+ this->build();
+ });
+ this->elements->add(buildButton);
+
+ for (auto buildConfiguration : this->buildConfigurations) {
+ auto element = ofxCvGui::makeElement();
+
+ element->onDraw += [buildConfiguration](ofxCvGui::DrawArguments & args) {
+ ofxCvGui::Utils::drawText(toString(buildConfiguration->platform), 0, 0, false);
+ ofxCvGui::Utils::drawText(toString(buildConfiguration->configuration), 50, 0, false);
+
+ if (!buildConfiguration->warnings.empty()) {
+ ofxAssets::image("ofxRulr::AppTester::warning").draw(100, 20, 20);
+ ofxCvGui::Utils::drawText(toString(buildConfiguration->platform), 120, 0, false);
+ }
+
+ if (!buildConfiguration->errors.empty()) {
+ ofxAssets::image("ofxRulr::AppTester::error").draw(160, 20, 20);
+ ofxCvGui::Utils::drawText(toString(buildConfiguration->platform), 180, 0, false);
+ }
+ };
+ element->setHeight(20.0f);
+ height += 20.0f;
+ }
+
+ this->onBoundsChange += [this, buildButton](BoundsChangeArguments & args) {
+ buildButton->setBounds(ofRectangle(0, 20, 80, args.localBounds.height - 20));
+ auto y = 20.0f;
+ for (auto buildConfigurationElement : this->buildConfigurationElements) {
+ auto bounds = buildConfigurationElement->getBounds();
+ bounds.x = buildButton->getWidth();
+ bounds.width = args.localBounds.width - bounds.x;
+ bounds.y = y;
+ buildConfigurationElement->setBounds(bounds);
+ y += bounds.height;
+ }
+ };
+
+ this->setHeight(height);
}
}
}
diff --git a/Plugin_AppTester/src/ofxRulr/Nodes/AppTester/Project.h b/Plugin_AppTester/src/ofxRulr/Nodes/AppTester/Project.h
index 95e991fcc0..3d985d24a5 100644
--- a/Plugin_AppTester/src/ofxRulr/Nodes/AppTester/Project.h
+++ b/Plugin_AppTester/src/ofxRulr/Nodes/AppTester/Project.h
@@ -19,6 +19,15 @@ namespace ofxRulr {
Debug
};
+ struct BuildConfiguration {
+ BuildConfiguration(Platform, Configuration);
+ Platform platform;
+ Configuration configuration;
+ vector warnings;
+ vector errors;
+ bool enabled = true;
+ };
+
enum LocationType {
Addons = 0,
Apps
@@ -35,16 +44,21 @@ namespace ofxRulr {
void serialize(Json::Value &);
void deserialize(const Json::Value &);
+
+ static string toString(Platform);
+ static string toString(Configuration);
protected:
+ void rebuildGui();
+
filesystem::path path;
LocationType locationType;
filesystem::path relativePath;
-
bool ignore = false;
- set> configurations;
+ vector> buildConfigurations;
ofxCvGui::ElementGroupPtr elements;
+ ofxCvGui::ElementSet buildConfigurationElements;
};
}
}
diff --git a/Plugin_BlackMagic/Plugin_BlackMagic.vcxproj b/Plugin_BlackMagic/Plugin_BlackMagic.vcxproj
index 252323bf06..54e4cafe07 100644
--- a/Plugin_BlackMagic/Plugin_BlackMagic.vcxproj
+++ b/Plugin_BlackMagic/Plugin_BlackMagic.vcxproj
@@ -56,25 +56,25 @@
-
+
-
+
-
+
-
+
@@ -141,7 +141,7 @@
-
+
{e57be93f-5ba0-4165-8861-df6653f11a37}
diff --git a/Plugin_EnttecUsbPro/Plugin_EnttecUsbPro.sln b/Plugin_EnttecUsbPro/Plugin_EnttecUsbPro.sln
index ed02156260..af30c0f389 100644
--- a/Plugin_EnttecUsbPro/Plugin_EnttecUsbPro.sln
+++ b/Plugin_EnttecUsbPro/Plugin_EnttecUsbPro.sln
@@ -5,15 +5,15 @@ VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_KinectForWindows2", "Plugin_KinectForWindows2.vcxproj", "{CBFC3D47-1E57-4291-90B6-C344B836B8DA}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxKinectForWindows2Lib", "..\..\ofxKinectForWindows2\ofxKinectForWindows2Lib\ofxKinectForWindows2Lib.vcxproj", "{F6008D6A-6D39-4B68-840E-E7AC8ED855DA}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxKinectForWindows2Lib", "..\..\..\addons\ofxKinectForWindows2\ofxKinectForWindows2Lib\ofxKinectForWindows2Lib.vcxproj", "{F6008D6A-6D39-4B68-840E-E7AC8ED855DA}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openframeworksLib", "..\..\..\libs\openFrameworksCompiled\project\vs\openframeworksLib.vcxproj", "{5837595D-ACA9-485C-8E76-729040CE4B0B}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxCvGuiLib", "..\..\ofxCvGui\ofxCvGuiLib\ofxCvGuiLib.vcxproj", "{6F0DDB4F-4014-4433-919B-9D956C034BAD}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxCvGuiLib", "..\..\..\addons\ofxCvGui\ofxCvGuiLib\ofxCvGuiLib.vcxproj", "{6F0DDB4F-4014-4433-919B-9D956C034BAD}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxPluginLib", "..\..\ofxPlugin\ofxPluginLib\ofxPluginLib.vcxproj", "{68B9239B-5AE6-45C0-B1CB-6FC6B58BB6EE}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxPluginLib", "..\..\..\addons\ofxPlugin\ofxPluginLib\ofxPluginLib.vcxproj", "{68B9239B-5AE6-45C0-B1CB-6FC6B58BB6EE}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxMachineVisionLib", "..\..\ofxMachineVision\ofxMachineVisionLib\ofxMachineVisionLib.vcxproj", "{CD4455E0-0454-4C3C-BB42-9D15D16A34DD}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxMachineVisionLib", "..\..\..\addons\ofxMachineVision\ofxMachineVisionLib\ofxMachineVisionLib.vcxproj", "{CD4455E0-0454-4C3C-BB42-9D15D16A34DD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "addons", "addons", "{C7676CC7-DB5A-42C0-962F-ADB6A0FD6179}"
EndProject
@@ -23,9 +23,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "..\Core\Core.vcxpro
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Nodes", "..\Nodes\Nodes.vcxproj", "{33D577F9-86E9-4F15-81F1-256A00BBE3EA}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxCvMinLib", "..\..\ofxCvMin\ofxCvMinLib\ofxCvMinLib.vcxproj", "{FAA73572-FD12-41FA-8FBE-CB47482D2D87}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxCvMinLib", "..\..\..\addons\ofxCvMin\ofxCvMinLib\ofxCvMinLib.vcxproj", "{FAA73572-FD12-41FA-8FBE-CB47482D2D87}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxRayLib", "..\..\ofxRay\ofxRayLib\ofxRayLib.vcxproj", "{048E1EC4-64FE-4AAC-B524-1BD56A1FC726}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxRayLib", "..\..\..\addons\ofxRay\ofxRayLib\ofxRayLib.vcxproj", "{048E1EC4-64FE-4AAC-B524-1BD56A1FC726}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/Plugin_KinectForWindows2/Plugin_KinectForWindows2.sln b/Plugin_KinectForWindows2/Plugin_KinectForWindows2.sln
index 1aebb988cc..03578cc9b0 100644
--- a/Plugin_KinectForWindows2/Plugin_KinectForWindows2.sln
+++ b/Plugin_KinectForWindows2/Plugin_KinectForWindows2.sln
@@ -5,15 +5,15 @@ VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_KinectForWindows2", "Plugin_KinectForWindows2.vcxproj", "{CBFC3D47-1E57-4291-90B6-C344B836B8DA}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxKinectForWindows2Lib", "..\..\ofxKinectForWindows2\ofxKinectForWindows2Lib\ofxKinectForWindows2Lib.vcxproj", "{F6008D6A-6D39-4B68-840E-E7AC8ED855DA}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxKinectForWindows2Lib", "..\..\..\addons\ofxKinectForWindows2\ofxKinectForWindows2Lib\ofxKinectForWindows2Lib.vcxproj", "{F6008D6A-6D39-4B68-840E-E7AC8ED855DA}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openframeworksLib", "..\..\..\libs\openFrameworksCompiled\project\vs\openframeworksLib.vcxproj", "{5837595D-ACA9-485C-8E76-729040CE4B0B}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxCvGuiLib", "..\..\ofxCvGui\ofxCvGuiLib\ofxCvGuiLib.vcxproj", "{6F0DDB4F-4014-4433-919B-9D956C034BAD}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxCvGuiLib", "..\..\..\addons\ofxCvGui\ofxCvGuiLib\ofxCvGuiLib.vcxproj", "{6F0DDB4F-4014-4433-919B-9D956C034BAD}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxPluginLib", "..\..\ofxPlugin\ofxPluginLib\ofxPluginLib.vcxproj", "{68B9239B-5AE6-45C0-B1CB-6FC6B58BB6EE}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxPluginLib", "..\..\..\addons\ofxPlugin\ofxPluginLib\ofxPluginLib.vcxproj", "{68B9239B-5AE6-45C0-B1CB-6FC6B58BB6EE}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxMachineVisionLib", "..\..\ofxMachineVision\ofxMachineVisionLib\ofxMachineVisionLib.vcxproj", "{CD4455E0-0454-4C3C-BB42-9D15D16A34DD}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxMachineVisionLib", "..\..\..\addons\ofxMachineVision\ofxMachineVisionLib\ofxMachineVisionLib.vcxproj", "{CD4455E0-0454-4C3C-BB42-9D15D16A34DD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "addons", "addons", "{C7676CC7-DB5A-42C0-962F-ADB6A0FD6179}"
EndProject
@@ -23,9 +23,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "..\Core\Core.vcxpro
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Nodes", "..\Nodes\Nodes.vcxproj", "{33D577F9-86E9-4F15-81F1-256A00BBE3EA}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxCvMinLib", "..\..\ofxCvMin\ofxCvMinLib\ofxCvMinLib.vcxproj", "{FAA73572-FD12-41FA-8FBE-CB47482D2D87}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxCvMinLib", "..\..\..\addons\ofxCvMin\ofxCvMinLib\ofxCvMinLib.vcxproj", "{FAA73572-FD12-41FA-8FBE-CB47482D2D87}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxRayLib", "..\..\ofxRay\ofxRayLib\ofxRayLib.vcxproj", "{048E1EC4-64FE-4AAC-B524-1BD56A1FC726}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ofxRayLib", "..\..\..\addons\ofxRay\ofxRayLib\ofxRayLib.vcxproj", "{048E1EC4-64FE-4AAC-B524-1BD56A1FC726}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/Plugin_KinectForWindows2/Plugin_KinectForWindows2.vcxproj b/Plugin_KinectForWindows2/Plugin_KinectForWindows2.vcxproj
index 99ae48c141..471f92d669 100644
--- a/Plugin_KinectForWindows2/Plugin_KinectForWindows2.vcxproj
+++ b/Plugin_KinectForWindows2/Plugin_KinectForWindows2.vcxproj
@@ -56,20 +56,20 @@
-
+
-
+
-
+
@@ -77,7 +77,7 @@
-
+
@@ -167,7 +167,7 @@
-
+
{f6008d6a-6d39-4b68-840e-e7ac8ed855da}
diff --git a/Plugin_MultiTrack/Plugin_MultiTrack.vcxproj b/Plugin_MultiTrack/Plugin_MultiTrack.vcxproj
index cc4723d3d0..d9de49e329 100644
--- a/Plugin_MultiTrack/Plugin_MultiTrack.vcxproj
+++ b/Plugin_MultiTrack/Plugin_MultiTrack.vcxproj
@@ -57,25 +57,25 @@
-
+
-
+
-
+
-
+
@@ -164,7 +164,7 @@
-
+
{f6008d6a-6d39-4b68-840e-e7ac8ed855da}
diff --git a/RulrLibrary/RulrLibrary.vcxproj b/RulrLibrary/RulrLibrary.vcxproj
index 721707d63e..6f3c5e28e3 100644
--- a/RulrLibrary/RulrLibrary.vcxproj
+++ b/RulrLibrary/RulrLibrary.vcxproj
@@ -105,7 +105,7 @@
{5837595d-aca9-485c-8e76-729040ce4b0b}
-
+
{630936f8-c65f-4ab9-92ad-80569eaa7782}
@@ -115,5 +115,9 @@
{33d577f9-86e9-4f15-81f1-256a00bbe3ea}
+
+
+
+
\ No newline at end of file