From f34895da488aa32947d7f1de128ceb4c9c900c7f Mon Sep 17 00:00:00 2001 From: Hailong <hailong.zhu@tu-dresden.de> Date: Wed, 15 Dec 2021 09:44:53 +0100 Subject: [PATCH] - added SRSConversion --- .idea/gradle.xml | 1 + .idea/vcs.xml | 1 + build.gradle | 2 + models | 2 +- .../SRSConversion/SRSConversion.java | 53 +++++++++++++------ .../SRSConversion/TestSRSConverter.java | 4 +- 6 files changed, 45 insertions(+), 18 deletions(-) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 69921a0..6b114cd 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> + <component name="GradleMigrationSettings" migrationVersion="1" /> <component name="GradleSettings"> <option name="linkedExternalProjectsSettings"> <GradleProjectSettings> diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1dd..f1d775c 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,6 @@ <project version="4"> <component name="VcsDirectoryMappings"> <mapping directory="" vcs="Git" /> + <mapping directory="$PROJECT_DIR$/models" vcs="Git" /> </component> </project> \ No newline at end of file diff --git a/build.gradle b/build.gradle index e8895f4..ee7827f 100644 --- a/build.gradle +++ b/build.gradle @@ -43,6 +43,8 @@ bootRun{ } dependencies { + implementation 'com.github.weeb-kun:list-utils:1.0.0' + implementation 'org.webjars.npm:list-item:1.1.1' developmentOnly 'org.springframework.boot:spring-boot-devtools' implementation 'org.eclipse.emf:org.eclipse.emf.ecore:2.+' implementation 'org.eclipse.emf:org.eclipse.emf.common:2.+' diff --git a/models b/models index dd1da1b..51af7a8 160000 --- a/models +++ b/models @@ -1 +1 @@ -Subproject commit dd1da1b391da2cd0e9a801d6bb2fb0b1985d4db9 +Subproject commit 51af7a83e036eac7bf619ebe59e7fbbe105318fd diff --git a/src/main/java/ipos/project/Functionality/SRSConversion/SRSConversion.java b/src/main/java/ipos/project/Functionality/SRSConversion/SRSConversion.java index 7962b92..f5c3dc6 100644 --- a/src/main/java/ipos/project/Functionality/SRSConversion/SRSConversion.java +++ b/src/main/java/ipos/project/Functionality/SRSConversion/SRSConversion.java @@ -16,38 +16,59 @@ public class SRSConversion { quat_1 is the rotation of the original coordinate system (against ROOT) quat_2 is the rotation of the desired coordinate system (against ROOT) */ - public static void positionInOtherSystem(Position pos, ReferenceSystem ref){ + public static void switchSRS(Placing pla, ReferenceSystem ref){ IPos_DatamodelFactory datamodelFactory = IPos_DatamodelFactory.eINSTANCE; - + Position pos = pla.getPosition(); Point3D P = (Point3D) pos.getPoint(); - Point3D R1 = (Point3D) pos.getReferenceSystem().getOrigin().getPosition().getPoint(); - Point3D R2 = (Point3D) ref.getOrigin().getPosition().getPoint(); - Quaternion Q1 = (Quaternion) pos.getReferenceSystem().getOrigin().getOrientation(); + + Point3D R = (Point3D) ref.getOrigin().getPosition().getPoint(); + Quaternion Q1 = (Quaternion) pla.getOrientation(); Quaternion Q2 = (Quaternion) ref.getOrigin().getOrientation(); + String ref_id = ref.getId(); + String pla_ref_id = pla.getPosition().getReferenceSystem().getId(); Vector_math p1 = new Vector_math(P.getX(), P.getY(), P.getZ()); - Vector_math ref_1 = new Vector_math(R1.getX(), R1.getY(), R1.getZ()); - Vector_math ref_2 = new Vector_math(R2.getX(), R2.getY(), R2.getZ()); + Vector_math ref_org = new Vector_math(R.getX(), R.getY(), R.getZ()); Quaternion_math quat_1 = new Quaternion_math(Q1.getX(), Q1.getY(), Q1.getZ(), Q1.getW()); Quaternion_math quat_2 = new Quaternion_math(Q2.getX(), Q2.getY(), Q2.getZ(), Q2.getW()); //System.out.println("Quaterion_1: " + quat_1.getX() + ", "+ quat_1.getY() + ", "+ quat_1.getZ() + ", " + quat_1.getW()); //System.out.println("Quaterion_2: " + quat_2.getX() + ", "+ quat_2.getY() + ", "+ quat_2.getZ() + ", " + quat_2.getW()); - //System.out.println("inversed Quaterion_1: " + quat_1.inverse().getX() + ", "+ quat_1.inverse().getY() + ", "+ quat_1.inverse().getZ() + ", " + quat_1.inverse().getW()); - p1.transform(quat_1.inverse()); - //System.out.println("phase 1 transfrom: " + p1.getX() + ", "+ p1.getY() + ", "+ p1.getZ()); - p1.transform(quat_2); - p1.add(ref_1); - p1.substract(ref_2); + if (ref_id == pla_ref_id) { + //System.out.println("inversed Quaterion_1: " + quat_1.inverse().getX() + ", "+ quat_1.inverse().getY() + ", "+ quat_1.inverse().getZ() + ", " + quat_1.inverse().getW()); + quat_1.mulLeft(quat_2); + //System.out.println("phase 1 transfrom: " + p1.getX() + ", "+ p1.getY() + ", "+ p1.getZ()); + p1.transform(quat_2); + p1.add(ref_org); + pos.setReferenceSystem(ref.getOrigin().getPosition().getReferenceSystem()); + + } + else if(ref_id == ref.getOrigin().getPosition().getReferenceSystem().getId()) { + //System.out.println("inversed Quaterion_1: " + quat_1.inverse().getX() + ", "+ quat_1.inverse().getY() + ", "+ quat_1.inverse().getZ() + ", " + quat_1.inverse().getW()); + quat_1.mulLeft(quat_2.inverse()); + + //System.out.println("phase 1 transfrom: " + p1.getX() + ", "+ p1.getY() + ", "+ p1.getZ()); + p1.transform(quat_2.inverse()); + p1.substract(ref_org); + pos.setReferenceSystem(ref); + } + else { + //error message + } + Q1.setX(quat_1.getX()); + Q1.setY(quat_1.getY()); + Q1.setZ(quat_1.getZ()); + Q1.setW(quat_1.getW()); P.setX(p1.getX()); P.setY(p1.getY()); P.setZ(p1.getZ()); + pla.setOrientation(Q1); pos.setPoint(P); - pos.setReferenceSystem(ref); + pla.setPosition(pos); } - public static void zoneInOtherSystem(Zone zone, ReferenceSystem ref){ + /*public static void switchSRSZone(Zone zone, ReferenceSystem ref){ IPos_DatamodelFactory datamodelFactory = IPos_DatamodelFactory.eINSTANCE; EList spaceList = zone.getSpace(); for (int i = 0; i < spaceList.size(); i++) { @@ -85,5 +106,5 @@ public class SRSConversion { new_cod[1] = cod_vec.getY(); new_cod[2] = cod_vec.getZ(); return new_cod; - } + }*/ } diff --git a/src/main/java/ipos/project/Functionality/SRSConversion/TestSRSConverter.java b/src/main/java/ipos/project/Functionality/SRSConversion/TestSRSConverter.java index 0407054..81debca 100644 --- a/src/main/java/ipos/project/Functionality/SRSConversion/TestSRSConverter.java +++ b/src/main/java/ipos/project/Functionality/SRSConversion/TestSRSConverter.java @@ -13,6 +13,7 @@ public class TestSRSConverter { Vector_math axis = new Vector_math(1, 0,0); Point3D testPoint3D = datamodelFactory.createPoint3D(); Position testPosition = datamodelFactory.createPosition(); + Placing testPlacing = datamodelFactory.createPlacing(); testPoint3D.setX((float) 0); testPoint3D.setY((float) 1); @@ -38,6 +39,7 @@ public class TestSRSConverter { testRef_1.setOrigin(refPlacing_1); testPosition.setPoint(testPoint3D); testPosition.setReferenceSystem(testRef_1); + testPlacing.setPosition(testPosition); ReferenceSystem testRef_2 = datamodelFactory.createReferenceSystem(); @@ -63,7 +65,7 @@ public class TestSRSConverter { System.out.println("Position: refID " + ": " + testPosition.getReferenceSystem().getId()); System.out.println("Position: coord " + ": " + testPosition.getPoint()); - SRSConversion.positionInOtherSystem(testPosition, testRef_2); + SRSConversion.switchSRS(testPlacing, testRef_2); System.out.println("Position: refID " + ": " + testPosition.getReferenceSystem().getId()); System.out.println("Position: coord " + ": " + testPosition.getPoint()); -- GitLab