Skip to content

Commit f9a7073

Browse files
committed
recoursivly apply the allign move but only calculate the move by the
visable objectes
1 parent 817c286 commit f9a7073

File tree

4 files changed

+68
-84
lines changed

4 files changed

+68
-84
lines changed

src/main/java/com/neuronrobotics/bowlerstudio/scripting/CaDoodleLoader.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,7 @@ public static Object process(CaDoodleFile loaded) {
3636
ArrayList<CSG> back = new ArrayList<CSG>();
3737
back.addAll(incoming);
3838
for(CSG c: incoming) {
39-
if(c.isInGroup()) {
40-
back.remove(c);
41-
}
42-
if(c.isHide()) {
39+
if(c.isInGroup() || c.isHide()) {
4340
back.remove(c);
4441
}
4542
}

src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/Allign.java

Lines changed: 48 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.neuronrobotics.bowlerstudio.scripting.cadoodle;
22

33
import java.util.ArrayList;
4+
import java.util.HashMap;
45
import java.util.List;
56

67
import com.google.gson.annotations.Expose;
@@ -9,6 +10,7 @@
910

1011
import eu.mihosoft.vrl.v3d.Bounds;
1112
import eu.mihosoft.vrl.v3d.CSG;
13+
import eu.mihosoft.vrl.v3d.Transform;
1214

1315
public 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) {

src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleFile.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,10 +310,21 @@ public Thread addOpperation(ICaDoodleOpperation o) throws CadoodleConcurrencyExc
310310
opperationRunner.start();
311311
return opperationRunner;
312312
}
313+
public static CSG getByName(ArrayList<CSG> back, String name) {
314+
for (CSG c : back) {
315+
if (c.getName().contentEquals(name))
316+
return c;
317+
}
318+
throw new RuntimeException("Fail! there was no object named " + name);
319+
}
320+
313321
public static int applyToAllConstituantElements(boolean addRet, List<String> targetNames, ArrayList<CSG> back,
314322
ICadoodleRecursiveEvent p, int depth) {
315323
for (int i = 0; i < targetNames.size(); i++) {
316324
String s = targetNames.get(i);
325+
CSG c=getByName(back, s);
326+
if(c.isInGroup())
327+
continue;
317328
applyToAllConstituantElements(addRet, s, back, p,depth);
318329
}
319330
return back.size();

src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/Paste.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,14 @@ public ArrayList<CSG> process(CSG ic, int depth) {
5050
},1);
5151

5252
for (String from : cpMap.keySet()) {
53-
CSG source = getByName(back, from);
53+
CSG source = CaDoodleFile.getByName(back, from);
5454
if (source.isGroupResult()) {
5555
ArrayList<String> c = constituants(back, from);
5656
if(c.size()<2)
5757
throw new RuntimeException("A group result must have at least 2 constituants!");
58-
String newGroupName = getByName(back, cpMap.get(from)).getName();
58+
String newGroupName = CaDoodleFile.getByName(back, cpMap.get(from)).getName();
5959
for (String s : c) {
60-
CSG dest = getByName(back, s);
60+
CSG dest = CaDoodleFile.getByName(back, s);
6161
dest.removeGroupMembership(from);
6262
dest.addGroupMembership(newGroupName);
6363
}
@@ -69,9 +69,9 @@ public ArrayList<CSG> process(CSG ic, int depth) {
6969
private ArrayList<String> constituants(ArrayList<CSG> b, String name) {
7070
ArrayList<String> c = new ArrayList<String>();
7171
for (String ky:cpMap.keySet()) {
72-
CSG byName = getByName(b,ky);
72+
CSG byName = CaDoodleFile.getByName(b,ky);
7373
String name2 = cpMap.get(ky);
74-
CSG byName2 = getByName(b,name2);
74+
CSG byName2 = CaDoodleFile.getByName(b,name2);
7575
for(CSG csg:Arrays.asList(byName,byName2)){
7676
if (csg.checkGroupMembership(name)) {
7777
// only add objects that were created by this operation
@@ -83,13 +83,7 @@ private ArrayList<String> constituants(ArrayList<CSG> b, String name) {
8383
return c;
8484
}
8585

86-
private CSG getByName(ArrayList<CSG> back, String name) {
87-
for (CSG c : back) {
88-
if (c.getName().contentEquals(name))
89-
return c;
90-
}
91-
throw new RuntimeException("Fail! there was no object named " + name);
92-
}
86+
9387

9488
private ArrayList<CSG> copyPasteMoved(ArrayList<CSG> back, CSG c, int depth) {
9589
String prevName = c.getName();
@@ -106,7 +100,8 @@ private ArrayList<CSG> copyPasteMoved(ArrayList<CSG> back, CSG c, int depth) {
106100
newOne.setRegenerate(c.getRegenerate()).setName(name);
107101
index++;
108102
newOne.syncProperties(c).setName(name);
109-
getNamesAdded().add(name);
103+
if(!c.isInGroup())
104+
getNamesAdded().add(name);
110105
ArrayList<CSG> b = new ArrayList<>();
111106
b.add(c);
112107
b.add(newOne);

0 commit comments

Comments
 (0)