From 46c0313ec670a07655d455b90fd75de2ebf7fd54 Mon Sep 17 00:00:00 2001 From: xemuth Date: Sun, 30 Aug 2020 00:20:16 +0000 Subject: [PATCH] SurfaceCtrl_Demo: Added Object Tree git-svn-id: svn://ultimatepp.org/upp/trunk@14935 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.h | 5 +- bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.lay | 44 ++++--- bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.upp | 3 +- bazaar/SurfaceCtrl_Demo/main.cpp | 114 ++++++++++++++++++- 4 files changed, 150 insertions(+), 16 deletions(-) diff --git a/bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.h b/bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.h index 7dd7daee2..452f94522 100644 --- a/bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.h +++ b/bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.h @@ -11,11 +11,14 @@ namespace Upp{ class SurfaceCtrl_Demo : public WithSurfaceCtrl_DemoLayout { private: + int TreeIDSelected = 0; + void RetrieveCameraInformation(); void UpdatePosition(); void UpdateRotation(); void UpdateFocus(); - + void RetrieveObjectInformation(); + void UpdateObjectInformation(); public: typedef SurfaceCtrl_Demo CLASSNAME; SurfaceCtrl_Demo(); diff --git a/bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.lay b/bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.lay index ec3f910d8..1671434ba 100644 --- a/bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.lay +++ b/bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.lay @@ -1,42 +1,60 @@ LAYOUT(SurfaceCtrl_DemoLayout, 1266, 475) - ITEM(SurfaceCtrl, canvas, SetFrame(ThinInsetFrame()).HSizePosZ(2, 159).VSizePosZ(56, 1)) + ITEM(SurfaceCtrl, canvas, SetFrame(ThinInsetFrame()).HSizePosZ(2, 253).VSizePosZ(56, 1)) ITEM(Label, dv___1, SetLabel(t_("File :")).LeftPosZ(7, 28).TopPosZ(7, 18)) ITEM(EditString, filename, LeftPosZ(33, 220).TopPosZ(7, 19)) ITEM(Button, butOpen, SetLabel(t_("Open")).LeftPosZ(255, 44).TopPosZ(7, 19)) ITEM(Button, Ultimate, SetLabel(t_("Ultimate++ !")).LeftPosZ(369, 68).TopPosZ(7, 19)) ITEM(Button, OpenEarth, SetLabel(t_("Open Earth")).LeftPosZ(301, 64).TopPosZ(7, 19)) ITEM(Switch, cameraView, SetLabel(t_("Perspective view\nParallel view")).LeftPosZ(54, 184).TopPosZ(35, 16)) + ITEM(Option, ObjShowNormal, SetLabel(t_("Show normals")).SetFont(StdFontZ(8)).RightPosZ(64, 71).BottomPosZ(81, 16)) + ITEM(Option, ObjShowLight, SetLabel(t_("Show Light")).SetFont(StdFontZ(8)).RightPosZ(4, 59).BottomPosZ(81, 16)) ITEM(Option, ShowFocus, SetLabel(t_("Show Focus")).LeftPosZ(843, 77).TopPosZ(35, 16)) ITEM(Option, axis, SetLabel(t_("Show axis")).LeftPosZ(364, 68).TopPosZ(35, 16)) ITEM(Label, fov, SetLabel(t_("FOV:")).SetFont(StdFontZ(11)).LeftPosZ(246, 27).TopPosZ(33, 19)) ITEM(EditIntSpin, fovSelector, LeftPosZ(274, 74).TopPosZ(33, 19)) ITEM(Label, camera, SetLabel(t_("Camera:")).SetFont(StdFontZ(11)).LeftPosZ(7, 44).TopPosZ(33, 19)) - ITEM(LabelBox, dv___12, SetLabel(t_("Camera values")).SetFont(StdFont().Bold()).LeftPosZ(444, 568).TopPosZ(0, 55)) + ITEM(LabelBox, dv___14, SetLabel(t_("Object values")).SetFont(StdFont().Bold()).RightPosZ(3, 249).BottomPosZ(1, 112)) + ITEM(LabelBox, dv___15, SetLabel(t_("Camera values")).SetFont(StdFont().Bold()).LeftPosZ(444, 568).TopPosZ(0, 55)) ITEM(Label, frontvec, SetLabel(t_("(12, 439, 10)")).LeftPosZ(765, 74).TopPosZ(38, 13)) - ITEM(Label, dv___14, SetLabel(t_("Angle (quaternion):")).LeftPosZ(450, 97).TopPosZ(35, 13)) + ITEM(Label, dv___17, SetLabel(t_("Angle (quaternion):")).RightPosZ(146, 97).BottomPosZ(37, 13)) ITEM(EditInt64, quatZ, LeftPosZ(658, 34).TopPosZ(32, 19)) + ITEM(EditInt64, ObjScalZ, RightPosZ(52, 40).BottomPosZ(9, 19)) ITEM(EditInt64, camPosZ, LeftPosZ(652, 40).TopPosZ(11, 19)) ITEM(EditInt64, quatX, LeftPosZ(586, 34).TopPosZ(32, 19)) ITEM(EditInt64, quatY, LeftPosZ(622, 34).TopPosZ(32, 19)) + ITEM(EditInt64, ObjScalY, RightPosZ(95, 40).BottomPosZ(9, 19)) ITEM(EditInt64, camPosY, LeftPosZ(610, 40).TopPosZ(11, 19)) ITEM(EditInt64, focusZ, LeftPosZ(974, 31).TopPosZ(11, 19)) ITEM(EditInt64, focusY, LeftPosZ(941, 31).TopPosZ(11, 19)) ITEM(EditInt64, focusX, LeftPosZ(908, 31).TopPosZ(11, 19)) - ITEM(Label, dv___23, SetLabel(t_("Front vector :")).SetFont(StdFontZ(10)).LeftPosZ(697, 67).TopPosZ(38, 13)) + ITEM(Label, dv___28, SetLabel(t_("Front vector :")).SetFont(StdFontZ(10)).LeftPosZ(697, 67).TopPosZ(38, 13)) ITEM(Label, onObjectBool, SetLabel(t_("true")).SetFont(StdFontZ(10)).LeftPosZ(980, 24).TopPosZ(36, 13)) - ITEM(Label, dv___25, SetLabel(t_("Right vector :")).SetFont(StdFontZ(10)).LeftPosZ(698, 64).TopPosZ(23, 13)) - ITEM(Label, dv___26, SetLabel(t_("Focus point :")).LeftPosZ(843, 63).TopPosZ(13, 13)) + ITEM(Label, dv___30, SetLabel(t_("Right vector :")).SetFont(StdFontZ(10)).LeftPosZ(698, 64).TopPosZ(23, 13)) + ITEM(Label, dv___31, SetLabel(t_("Focus point :")).LeftPosZ(843, 63).TopPosZ(13, 13)) ITEM(Label, rightvec, SetLabel(t_("(12, 439, 10)")).LeftPosZ(765, 74).TopPosZ(23, 13)) ITEM(Label, upvec, SetLabel(t_("(12, 439, 10)")).LeftPosZ(765, 74).TopPosZ(8, 13)) ITEM(Button, resetPos, SetLabel(t_("Reset")).LeftPosZ(447, 45).TopPosZ(14, 15)) ITEM(EditInt64, quatW, LeftPosZ(550, 34).TopPosZ(32, 19)) - ITEM(TreeCtrl, dv___31, RightPosZ(3, 153).VSizePosZ(55, 1)) - ITEM(Label, dv___32, SetLabel(t_("Position (xyz):")).LeftPosZ(495, 71).TopPosZ(15, 13)) + ITEM(TreeCtrl, AllObjects, RightPosZ(3, 249).VSizePosZ(55, 117)) + ITEM(Label, dv___37, SetLabel(t_("Scale (xyz):")).RightPosZ(181, 62).BottomPosZ(11, 13)) + ITEM(Label, dv___38, SetLabel(t_("Position (xyz):")).LeftPosZ(495, 71).TopPosZ(15, 13)) + ITEM(EditInt64, ObjQuatW, RightPosZ(115, 29).BottomPosZ(34, 19)) + ITEM(EditInt64, ObjQuatX, RightPosZ(85, 29).BottomPosZ(34, 19)) + ITEM(EditInt64, ObjQuatZ, RightPosZ(25, 29).BottomPosZ(34, 19)) + ITEM(EditInt64, ObjQuatY, RightPosZ(55, 29).BottomPosZ(34, 19)) + ITEM(EditInt64, ObjScalX, RightPosZ(138, 40).BottomPosZ(9, 19)) + ITEM(EditInt64, ObjPosZ, RightPosZ(41, 40).BottomPosZ(58, 19)) + ITEM(EditInt64, ObjPosY, RightPosZ(84, 40).BottomPosZ(58, 19)) + ITEM(Label, dv___46, SetLabel(t_("Position (xyz):")).RightPosZ(172, 71).BottomPosZ(62, 13)) + ITEM(EditInt64, ObjPosX, RightPosZ(127, 40).BottomPosZ(58, 19)) ITEM(EditInt64, camPosX, LeftPosZ(568, 40).TopPosZ(11, 19)) - ITEM(Label, dv___34, SetLabel(t_("Up vector :")).SetFont(StdFontZ(10)).LeftPosZ(699, 58).TopPosZ(8, 13)) - ITEM(Label, dv___35, SetLabel(t_("On Object :")).SetFont(StdFontZ(10)).LeftPosZ(922, 55).TopPosZ(36, 13)) - ITEM(Label, dv___36, SetLabel(t_("To Rotate around an object, \nWheel Click the object.")).SetFont(StdFontZ(10).Italic()).LeftPosZ(1125, 126).TopPosZ(29, 24)) - ITEM(Label, dv___37, SetLabel(t_("Translation: Shift + Wheel Click ")).SetFont(StdFontZ(10).Italic()).LeftPosZ(1015, 148).TopPosZ(8, 19)) - ITEM(Label, dv___38, SetLabel(t_("Rotation: Wheel Click ")).SetFont(StdFontZ(10).Italic()).LeftPosZ(1015, 105).TopPosZ(26, 19)) + ITEM(Label, dv___49, SetLabel(t_("Up vector :")).SetFont(StdFontZ(10)).LeftPosZ(699, 58).TopPosZ(8, 13)) + ITEM(Label, dv___50, SetLabel(t_("On Object :")).SetFont(StdFontZ(10)).LeftPosZ(922, 55).TopPosZ(36, 13)) + ITEM(Label, dv___51, SetLabel(t_("To Rotate around an object, \nWheel Click the object.")).SetFont(StdFontZ(10).Italic()).LeftPosZ(1125, 126).TopPosZ(29, 24)) + ITEM(Label, dv___52, SetLabel(t_("Translation: Shift + Wheel Click ")).SetFont(StdFontZ(10).Italic()).LeftPosZ(1015, 148).TopPosZ(8, 19)) + ITEM(Label, dv___53, SetLabel(t_("Rotation: Wheel Click ")).SetFont(StdFontZ(10).Italic()).LeftPosZ(1015, 105).TopPosZ(26, 19)) + ITEM(Label, dv___54, SetLabel(t_("Angle (quaternion):")).LeftPosZ(450, 97).TopPosZ(35, 13)) + ITEM(Option, ObjShowLine, SetLabel(t_("Show line")).SetFont(StdFontZ(8)).RightPosZ(137, 53).BottomPosZ(81, 16)) + ITEM(Option, ObjShowSkin, SetLabel(t_("Show Skin")).SetFont(StdFontZ(9)).RightPosZ(192, 58).BottomPosZ(81, 16)) END_LAYOUT diff --git a/bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.upp b/bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.upp index dd67a1e7b..dd61a4121 100644 --- a/bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.upp +++ b/bazaar/SurfaceCtrl_Demo/SurfaceCtrl_Demo.upp @@ -12,5 +12,6 @@ mainconfig "" = "GUI", "" = "", "" = "USEMALLOC", - "" = "USEMALLOC GUI"; + "" = "USEMALLOC GUI", + "" = "GUI GLCTRL USEMALLOC"; diff --git a/bazaar/SurfaceCtrl_Demo/main.cpp b/bazaar/SurfaceCtrl_Demo/main.cpp index 2c021fa1d..77228e4cc 100644 --- a/bazaar/SurfaceCtrl_Demo/main.cpp +++ b/bazaar/SurfaceCtrl_Demo/main.cpp @@ -89,6 +89,57 @@ namespace Upp{ focusY <<= THISBACK(UpdateFocus); focusZ <<= THISBACK(UpdateFocus); + ObjPosX <<= THISBACK(UpdateObjectInformation); + ObjPosY <<= THISBACK(UpdateObjectInformation); + ObjPosZ <<= THISBACK(UpdateObjectInformation); + ObjQuatW <<= THISBACK(UpdateObjectInformation); + ObjQuatX <<= THISBACK(UpdateObjectInformation); + ObjQuatY <<= THISBACK(UpdateObjectInformation); + ObjQuatZ <<= THISBACK(UpdateObjectInformation); + ObjScalX <<= THISBACK(UpdateObjectInformation); + ObjScalY <<= THISBACK(UpdateObjectInformation); + ObjScalZ <<= THISBACK(UpdateObjectInformation); + + ObjShowSkin.WhenAction = [&]{ + if(TreeIDSelected > 0){ + int iterator = canvas.FindObject(TreeIDSelected); + if( iterator != -1){ + Object3D& obj = canvas.GetObject(TreeIDSelected); + obj.ShowMesh(ObjShowSkin.Get()); + canvas.Refresh(); + } + } + }; + ObjShowLine.WhenAction = [&]{ + if(TreeIDSelected > 0){ + int iterator = canvas.FindObject(TreeIDSelected); + if( iterator != -1){ + Object3D& obj = canvas.GetObject(TreeIDSelected); + obj.ShowMeshLine(ObjShowLine.Get()); + canvas.Refresh(); + } + } + }; + ObjShowNormal.WhenAction = [&]{ + if(TreeIDSelected > 0){ + int iterator = canvas.FindObject(TreeIDSelected); + if( iterator != -1){ + Object3D& obj = canvas.GetObject(TreeIDSelected); + obj.ShowMeshNormal(ObjShowNormal.Get()); + canvas.Refresh(); + } + } + }; + ObjShowLight.WhenAction = [&]{ + if(TreeIDSelected > 0){ + int iterator = canvas.FindObject(TreeIDSelected); + if( iterator != -1){ + Object3D& obj = canvas.GetObject(TreeIDSelected); + obj.ShowLight(ObjShowLight.Get()); + canvas.Refresh(); + } + } + }; resetPos.WhenAction = [&]{ canvas.GetCamera().GetTransform().SetPosition(0,0,20); @@ -99,7 +150,17 @@ namespace Upp{ canvas.WhenPaint = [&] { canvas.DrawAllObjects(); RetrieveCameraInformation(); + RetrieveObjectInformation(); }; + + AllObjects.WhenLeftClick = [&]{ + if(AllObjects.GetSel().GetCount() > 0){ + int sel = atoi(AllObjects.Get(AllObjects.GetSel()[0]).ToString()); + TreeIDSelected = sel; + RetrieveObjectInformation(); + } + }; + Sizeable().Zoomable(); } @@ -125,7 +186,22 @@ namespace Upp{ focusY = canvas.GetCamera().GetFocus().y; focusZ = canvas.GetCamera().GetFocus().z; onObjectBool.SetLabel( AsString(canvas.GetCamera().IsOnObject())); - + + AllObjects.Clear(); + AllObjects.SetRoot(Image(), "Application"); + int i = AllObjects.Add(0,Image(),"All Objects"); + for(const Object3D& obj : canvas.GetAllObjects()){ + int e = AllObjects.Add(i,Image(), AsString(obj.GetID())); + AllObjects.Add(e, Image(), "Position: " + AsString(obj.GetTransform().GetPosition().x,2) +", " + AsString(obj.GetTransform().GetPosition().y,2) +", " + AsString(obj.GetTransform().GetPosition().z,2)); + AllObjects.Add(e, Image(), "Rotation: " + AsString(obj.GetTransform().GetRotation().w,2) +", " + AsString(obj.GetTransform().GetRotation().x,2) +", " + AsString(obj.GetTransform().GetRotation().y,2)+", " + AsString(obj.GetTransform().GetRotation().z,2)); + AllObjects.Add(e, Image(), "Scale: " + AsString(obj.GetTransform().GetScale().x,2) +", " + AsString(obj.GetTransform().GetScale().y,2) +", " + AsString(obj.GetTransform().GetScale().z,2)); + AllObjects.Add(e, Image(), "Meshes count: " + AsString(obj.GetMeshes().GetCount())); + } + i = AllObjects.Add(0,Image(),"Selected Objects"); + for(const int& in : canvas.GetSelectedObject()){ + AllObjects.Add(i,Image(), AsString(in)); + } + AllObjects.OpenDeep(0,true); } void SurfaceCtrl_Demo::UpdatePosition(){ canvas.GetCamera().GetTransform().SetPosition(camPosX,camPosY,camPosZ); @@ -136,6 +212,42 @@ namespace Upp{ void SurfaceCtrl_Demo::UpdateFocus(){ canvas.GetCamera().SetFocus(focusX,focusY,focusZ); } + void SurfaceCtrl_Demo::RetrieveObjectInformation(){ + if(TreeIDSelected > 0){ + int iterator = canvas.FindObject(TreeIDSelected); + if( iterator != -1){ + Object3D& obj = canvas.GetObject(TreeIDSelected); + ObjShowSkin = obj.GetShowMesh(); + ObjShowNormal = obj.GetShowMeshNormal(); + ObjShowLine = obj.GetShowMeshLine(); + ObjShowLight = obj.GetShowLight(); + + ObjPosX = obj.GetTransform().GetPosition().x; + ObjPosY = obj.GetTransform().GetPosition().y; + ObjPosZ = obj.GetTransform().GetPosition().z; + + ObjQuatW = obj.GetTransform().GetRotation().w; + ObjQuatX = obj.GetTransform().GetRotation().x; + ObjQuatY = obj.GetTransform().GetRotation().y; + ObjQuatZ = obj.GetTransform().GetRotation().z; + + ObjScalX = obj.GetTransform().GetScale().x; + ObjScalY = obj.GetTransform().GetScale().y; + ObjScalZ = obj.GetTransform().GetScale().z; + } + } + } + void SurfaceCtrl_Demo::UpdateObjectInformation(){ + if(TreeIDSelected > 0){ + int iterator = canvas.FindObject(TreeIDSelected); + if( iterator != -1){ + Object3D& obj = canvas.GetObject(TreeIDSelected); + obj.GetTransform().SetPosition(ObjPosX,ObjPosY,ObjPosZ); + obj.GetTransform().SetRotation(glm::quat(ObjQuatW,ObjQuatX,ObjQuatY,ObjQuatZ)); + obj.GetTransform().SetScale(glm::vec3((float)ObjScalX,(float)ObjScalY,(float)ObjScalZ)); + } + } + } } GUI_APP_MAIN