11package com .neuronrobotics .bowlerstudio .scripting .cadoodle ;
22
33import java .util .ArrayList ;
4+ import java .util .HashMap ;
45import java .util .List ;
56
67import com .google .gson .annotations .Expose ;
910
1011import eu .mihosoft .vrl .v3d .Bounds ;
1112import eu .mihosoft .vrl .v3d .CSG ;
13+ import eu .mihosoft .vrl .v3d .Transform ;
1214
1315public class Allign implements ICaDoodleOpperation {
1416 @ Expose (serialize = true , deserialize = true )
@@ -40,77 +42,62 @@ public String toString(){
4042
4143 @ Override
4244 public List <CSG > process (List <CSG > incoming ) {
43- ArrayList <CSG > toMove = new ArrayList <CSG >();
4445 ArrayList <CSG > back = new ArrayList <CSG >();
4546 back .addAll (incoming );
46- CSG reference =null ;
47- CSG refProps =null ;
48- for (CSG c : incoming ) {
49- if (c .isLock ())
50- continue ;
51- String name = names .get (0 );
52- if (name .contentEquals (c .getName ())) {
53- back .remove (c );
54- refProps =c ;
55- reference =c .transformed (TransformFactory .nrToCSG (getWorkplane ()).inverse ());
56- }
57- }
58- for (String name :names )
59- collectToMove (toMove , back , name );
47+
6048 Bounds bounds2 ;//
6149 if (bounds !=null ) {
6250 bounds2 =bounds .getBounds ();
63- toMove .add (refProps );
6451 }else {
65- CSG transformed = reference .transformed (TransformFactory .nrToCSG (getWorkplane ()));
66- back .add (sync (refProps ,transformed ));
67- bounds2 = reference .getBounds ();
52+ throw new RuntimeException ("Allign can not be initialized without bounds!" );
6853 }
69- for (CSG tmp :toMove ) {
70- CSG c = tmp .transformed (TransformFactory .nrToCSG (getWorkplane ()).inverse ());
71- c = performTransform (bounds2 , c );
72- back .add (sync (tmp ,c .transformed (TransformFactory .nrToCSG (getWorkplane ()))));
54+ HashMap <String ,TransformNR > moves = new HashMap <>();
55+ for (String name :names ) {
56+ for (CSG tmp :back ) {
57+ if (!tmp .getName ().contentEquals (name ))
58+ continue ;
59+ CSG c = tmp .transformed (TransformFactory .nrToCSG (getWorkplane ()).inverse ());
60+ TransformNR tf = performTransform (bounds2 , c );
61+ moves .put (c .getName (),tf );
62+ }
63+ }
64+ for (String name :moves .keySet ()) {
65+ Transform tf = TransformFactory .nrToCSG (moves .get (name ));
66+ CaDoodleFile .applyToAllConstituantElements (false , name , back , (incoming1 , depth ) ->{
67+ ArrayList <CSG > b = new ArrayList <>();
68+ CSG c = incoming1 .transformed (TransformFactory .nrToCSG (getWorkplane ()).inverse ());
69+ c =c .transformed (tf );
70+ b .add (sync (incoming1 ,c .transformed (TransformFactory .nrToCSG (getWorkplane ()))));
71+ return b ;
72+ }, 1 );
7373 }
7474 return back ;
7575 }
7676
77- private void collectToMove (ArrayList <CSG > toMove , ArrayList <CSG > back , String name ) {
78- ArrayList <CSG > toSearch = new ArrayList <CSG >();
79- toSearch .addAll (back );
80- for (int i = 0 ; i < toSearch .size (); i ++) {
81- CSG c = toSearch .get (i );
82- if (name .contentEquals (c .getName ())) {
83- back .remove (c );
84- toMove .add (c );
85- if (c .isGroupResult ()) {
86- for (int j =0 ;j <back .size ();j ++) {
87- CSG mem = back .get (j );
88- if (mem .isInGroup () && mem .checkGroupMembership (name )) {
89- String newObjName = mem .getName ();
90- collectToMove (toMove , back , newObjName );
91- }
92- }
93- }
94- }
95- }
96- }
77+ // private void collectToMove(ArrayList<CSG> toMove, ArrayList<CSG> back, String name) {
78+ // ArrayList<CSG> toSearch = new ArrayList<CSG>();
79+ // toSearch.addAll(back);
80+ // for (int i = 0; i < toSearch.size(); i++) {
81+ // CSG c = toSearch.get(i);
82+ // if(name.contentEquals(c.getName())) {
83+ // toMove.add(c);
84+ // }
85+ // }
86+ // }
9787
98- private CSG performTransform (Bounds reference , CSG incoming ) {
99- CSG c = incoming ;
88+ private TransformNR performTransform (Bounds reference , CSG incoming ) {
89+ //CSG c = incoming;
90+ double tx =0 ,ty =0 ,tz =0 ;
10091 if (z !=null ) {
10192 switch (z ) {
10293 case negative :
103- c =( c .toZMin ()
104- .movez (reference .getMinZ ())
105- );
94+ tz =-incoming .getMinZ ()+reference .getMinZ ();
10695 break ;
10796 case middle :
108- c =( c .moveToCenterZ ()
109- .movez (reference .getCenterZ ()));
97+ tz =-incoming .getCenterZ ()+reference .getCenterZ ();
11098 break ;
11199 case positive :
112- c =( c .toZMax ()
113- .movez (reference .getMaxZ ()));
100+ tz =-incoming .getMaxZ ()+reference .getMaxZ ();
114101 break ;
115102 default :
116103 break ;
@@ -119,16 +106,13 @@ private CSG performTransform(Bounds reference, CSG incoming) {
119106 if (x !=null ) {
120107 switch (x ) {
121108 case negative :
122- c =( c .toXMin ()
123- .movex (reference .getMinX ()));
109+ tx =-incoming .getMinX ()+reference .getMinX ();
124110 break ;
125111 case middle :
126- c =( c .moveToCenterX ()
127- .movex (reference .getCenterX ()));
112+ tx =-incoming .getCenterX ()+reference .getCenterX ();
128113 break ;
129114 case positive :
130- c =( c .toXMax ()
131- .movex (reference .getMaxX ()));
115+ tx =-incoming .getMaxX ()+reference .getMaxX ();
132116 break ;
133117 default :
134118 break ;
@@ -137,24 +121,21 @@ private CSG performTransform(Bounds reference, CSG incoming) {
137121 }
138122 if (y !=null ) {
139123 switch (y ) {
124+ case negative :
125+ ty =-incoming .getMinY ()+reference .getMinY ();
126+ break ;
140127 case middle :
141- c =( c .moveToCenterY ()
142- .movey (reference .getCenterY ()));
128+ ty =-incoming .getCenterY ()+reference .getCenterY ();
143129 break ;
144130 case positive :
145- c =( c .toYMax ()
146- .movey (reference .getMaxY ()));
147- break ;
148- case negative :
149- c = c .toYMin ()
150- .movey (reference .getMinY ());
131+ ty =-incoming .getMaxY ()+reference .getMaxY ();
151132 break ;
152133 default :
153134 break ;
154135
155136 }
156137 }
157- return sync ( incoming , c );
138+ return new TransformNR ( tx , ty , tz );
158139 }
159140
160141 private CSG sync (CSG incoming , CSG c ) {
0 commit comments