.. | .. |
---|
219 | 219 | resetsupportItem.addActionListener(this); |
---|
220 | 220 | linkverticesItem = menu.add(new MenuItem("Link to Support")); |
---|
221 | 221 | linkverticesItem.addActionListener(this); |
---|
| 222 | + relinkverticesItem = menu.add(new MenuItem("Re-link to Support")); |
---|
| 223 | + relinkverticesItem.addActionListener(this); |
---|
222 | 224 | setMasterItem = menu.add(new MenuItem("Set Master Mesh")); |
---|
223 | 225 | setMasterItem.addActionListener(this); |
---|
224 | 226 | |
---|
.. | .. |
---|
231 | 233 | frontItem.addActionListener(this); |
---|
232 | 234 | compositeItem = menu.add(new MenuItem("Composite")); |
---|
233 | 235 | compositeItem.addActionListener(this); |
---|
| 236 | + hideItem = menu.add(new MenuItem("Hide")); |
---|
| 237 | + hideItem.addActionListener(this); |
---|
| 238 | + ungroupItem = menu.add(new MenuItem("Ungroup")); |
---|
| 239 | + ungroupItem.addActionListener(this); |
---|
234 | 240 | menu.add("-"); |
---|
235 | 241 | randomItem = menu.add(new MenuItem("Random")); |
---|
236 | 242 | randomItem.addActionListener(this); |
---|
.. | .. |
---|
252 | 258 | oe.menuBar.add(menu = new Menu("Object")); |
---|
253 | 259 | textureItem = menu.add(new MenuItem("Texture")); |
---|
254 | 260 | textureItem.addActionListener(this); |
---|
| 261 | + billboardItem = menu.add(new MenuItem("Billboard")); |
---|
| 262 | + billboardItem.addActionListener(this); |
---|
255 | 263 | csgItem = menu.add(new MenuItem("CSG")); |
---|
256 | 264 | csgItem.addActionListener(this); |
---|
257 | 265 | shadowXItem = menu.add(new MenuItem("Shadow X")); |
---|
.. | .. |
---|
269 | 277 | pointflowItem = menu.add(new MenuItem("Point Flow")); |
---|
270 | 278 | pointflowItem.addActionListener(this); |
---|
271 | 279 | menu.add("-"); |
---|
272 | | - transformgeometryItem = menu.add(new MenuItem("Transform Geometry")); |
---|
273 | | - transformgeometryItem.addActionListener(this); |
---|
274 | 280 | resetTransformItem = menu.add(new MenuItem("Reset Transform")); |
---|
275 | 281 | resetTransformItem.addActionListener(this); |
---|
276 | 282 | resetCentroidItem = menu.add(new MenuItem("Reset Centroid")); |
---|
277 | 283 | resetCentroidItem.addActionListener(this); |
---|
278 | | - ungroupItem = menu.add(new MenuItem("Ungroup")); |
---|
279 | | - ungroupItem.addActionListener(this); |
---|
| 284 | + transformgeometryItem = menu.add(new MenuItem("Transform Geometry")); |
---|
| 285 | + transformgeometryItem.addActionListener(this); |
---|
280 | 286 | |
---|
281 | 287 | oe.menuBar.add(menu = new Menu("Geometry")); |
---|
282 | 288 | genUVItem = menu.add(new MenuItem("Generate UV")); |
---|
.. | .. |
---|
285 | 291 | genNormalsORGANItem.addActionListener(this); |
---|
286 | 292 | genNormalsCADItem = menu.add(new MenuItem("CAD Normals")); |
---|
287 | 293 | genNormalsCADItem.addActionListener(this); |
---|
| 294 | + genNormalsMESHItem = menu.add(new MenuItem("Mesh Normals")); |
---|
| 295 | + genNormalsMESHItem.addActionListener(this); |
---|
| 296 | + genNormalsMINEItem = menu.add(new MenuItem("My Normals")); |
---|
| 297 | + genNormalsMINEItem.addActionListener(this); |
---|
288 | 298 | stripifyItem = menu.add(new MenuItem("Stripify")); |
---|
289 | 299 | stripifyItem.addActionListener(this); |
---|
290 | 300 | unstripifyItem = menu.add(new MenuItem("Unstripify")); |
---|
.. | .. |
---|
1033 | 1043 | torusItem.addActionListener(this); |
---|
1034 | 1044 | superItem = menu.add(new MenuItem("Superellipsoid")); |
---|
1035 | 1045 | superItem.addActionListener(this); |
---|
| 1046 | + kleinItem = menu.add(new MenuItem("Klein Bottle")); |
---|
| 1047 | + kleinItem.addActionListener(this); |
---|
1036 | 1048 | particleItem = menu.add(new MenuItem("Particle system")); |
---|
1037 | 1049 | particleItem.addActionListener(this); |
---|
1038 | 1050 | ragdollItem = menu.add(new MenuItem("Rag Walk")); |
---|
.. | .. |
---|
1593 | 1605 | { |
---|
1594 | 1606 | makeSomething(new Superellipsoid()); |
---|
1595 | 1607 | } else |
---|
| 1608 | + if (event.getSource() == kleinItem) |
---|
| 1609 | + { |
---|
| 1610 | + makeSomething(new Klein()); |
---|
| 1611 | + } else |
---|
1596 | 1612 | if (event.getSource() == blobItem) |
---|
1597 | 1613 | { |
---|
1598 | 1614 | Blob blob = new Blob(); |
---|
.. | .. |
---|
2001 | 2017 | if (group.selection.size() == 1) |
---|
2002 | 2018 | one = true; |
---|
2003 | 2019 | |
---|
| 2020 | + Object3D merge = null; |
---|
| 2021 | + |
---|
2004 | 2022 | Object3D content = new cGroup(); |
---|
2005 | 2023 | |
---|
2006 | 2024 | for (int i=0; i<group.selection.size(); i++) |
---|
2007 | 2025 | { |
---|
2008 | | - Object3D sel = new Merge(group.selection.get(i)); |
---|
| 2026 | + merge = new Merge(group.selection.get(i)); |
---|
2009 | 2027 | |
---|
2010 | 2028 | if (one) |
---|
2011 | | - makeSomething(sel, false); |
---|
| 2029 | + makeSomething(merge, false); |
---|
2012 | 2030 | else |
---|
2013 | | - content.addChild(sel); |
---|
| 2031 | + content.addChild(merge); |
---|
2014 | 2032 | } |
---|
2015 | 2033 | |
---|
2016 | 2034 | if (!one) |
---|
2017 | | - makeSomething(content, false); |
---|
2018 | | - |
---|
2019 | | - ResetModel(); |
---|
2020 | | - refreshContents(); |
---|
| 2035 | + makeSomething(content, true); |
---|
| 2036 | + else |
---|
| 2037 | + { |
---|
| 2038 | + ResetModel(); |
---|
| 2039 | + Select(merge.GetTreePath(), true, false); // unselect... false); |
---|
| 2040 | + refreshContents(); |
---|
| 2041 | + } |
---|
2021 | 2042 | } else |
---|
2022 | 2043 | if (event.getSource() == mergeGeometriesItem) |
---|
2023 | 2044 | { |
---|
.. | .. |
---|
2094 | 2115 | |
---|
2095 | 2116 | refreshContents(); |
---|
2096 | 2117 | } else |
---|
| 2118 | + if (event.getSource() == relinkverticesItem) |
---|
| 2119 | + { |
---|
| 2120 | + boolean random = CameraPane.RANDOM; |
---|
| 2121 | + CameraPane.RANDOM = false; // parse all random nodes |
---|
| 2122 | + group.selection.RelinkToSupport(); |
---|
| 2123 | + CameraPane.RANDOM = random; |
---|
| 2124 | + |
---|
| 2125 | + refreshContents(); |
---|
| 2126 | + } else |
---|
2097 | 2127 | if (event.getSource() == resetreferencesItem) |
---|
2098 | 2128 | { |
---|
2099 | 2129 | for (int i=0; i<group.selection.size(); i++) |
---|
.. | .. |
---|
2162 | 2192 | if (event.getSource() == grabItem) |
---|
2163 | 2193 | { |
---|
2164 | 2194 | group(new cGroup(), true); |
---|
| 2195 | + } else |
---|
| 2196 | + if (event.getSource() == hideItem) |
---|
| 2197 | + { |
---|
| 2198 | + group(new HiddenObject()); |
---|
2165 | 2199 | } else |
---|
2166 | 2200 | if (event.getSource() == frontItem) |
---|
2167 | 2201 | { |
---|
.. | .. |
---|
2285 | 2319 | { |
---|
2286 | 2320 | group(new TextureNode()); |
---|
2287 | 2321 | } else |
---|
| 2322 | + if (event.getSource() == billboardItem) |
---|
| 2323 | + { |
---|
| 2324 | + group(new BillboardNode()); |
---|
| 2325 | + } else |
---|
2288 | 2326 | if (event.getSource() == shadowXItem) |
---|
2289 | 2327 | { |
---|
2290 | 2328 | CastShadow(0); |
---|
.. | .. |
---|
2299 | 2337 | } else |
---|
2300 | 2338 | if (event.getSource() == ungroupItem) |
---|
2301 | 2339 | { |
---|
2302 | | - ungroup(); |
---|
| 2340 | + //ungroup(); |
---|
| 2341 | + for (int i=0; i<group.selection.size(); i++) |
---|
| 2342 | + { |
---|
| 2343 | + Ungroup(group.selection.get(i)); |
---|
| 2344 | + } |
---|
| 2345 | + |
---|
| 2346 | + ClearSelection(false); |
---|
| 2347 | + |
---|
| 2348 | + refreshContents(); |
---|
2303 | 2349 | } else |
---|
2304 | 2350 | if (event.getSource() == genUVItem) |
---|
2305 | 2351 | { |
---|
.. | .. |
---|
2309 | 2355 | { |
---|
2310 | 2356 | GenNormals(true); |
---|
2311 | 2357 | } else |
---|
| 2358 | + if (event.getSource() == genNormalsMESHItem) |
---|
| 2359 | + { |
---|
| 2360 | + GenNormals(true); // TODO |
---|
| 2361 | + } else |
---|
2312 | 2362 | if (event.getSource() == genNormalsORGANItem) |
---|
2313 | 2363 | { |
---|
2314 | 2364 | GenNormals(false); |
---|
| 2365 | + } else |
---|
| 2366 | + if (event.getSource() == genNormalsMINEItem) |
---|
| 2367 | + { |
---|
| 2368 | + GenNormalsMINE(); |
---|
2315 | 2369 | } else |
---|
2316 | 2370 | if (event.getSource() == stripifyItem) |
---|
2317 | 2371 | { |
---|
.. | .. |
---|
3173 | 3227 | refreshContents(); |
---|
3174 | 3228 | } |
---|
3175 | 3229 | |
---|
| 3230 | + void GenNormalsMINE() |
---|
| 3231 | + { |
---|
| 3232 | + group.selection.GenNormalsMINE(); |
---|
| 3233 | + |
---|
| 3234 | + refreshContents(); |
---|
| 3235 | + } |
---|
| 3236 | + |
---|
3176 | 3237 | void Stripify() |
---|
3177 | 3238 | { |
---|
3178 | 3239 | group.StripifyS(); |
---|
.. | .. |
---|
3441 | 3502 | |
---|
3442 | 3503 | void Align() |
---|
3443 | 3504 | { |
---|
| 3505 | + if (group.selection.size() == 0) |
---|
| 3506 | + return; |
---|
| 3507 | + |
---|
| 3508 | + cVector bbmin = new cVector(); |
---|
| 3509 | + cVector bbmax = new cVector(); |
---|
| 3510 | + |
---|
| 3511 | + group.selection.get(0).getBounds(bbmin, bbmax, true); |
---|
| 3512 | + |
---|
| 3513 | + double dx = bbmax.x - bbmin.x; |
---|
| 3514 | + double dy = bbmax.y - bbmin.y; |
---|
| 3515 | + double dz = bbmax.z - bbmin.z; |
---|
| 3516 | + |
---|
| 3517 | + double scale = Math.sqrt(dx*dx + dy*dy + dz*dz); |
---|
| 3518 | + |
---|
3444 | 3519 | for (int i=0; i<group.selection.size(); i++) |
---|
3445 | 3520 | { |
---|
3446 | 3521 | Object3D obj = group.selection.get(i); |
---|
3447 | 3522 | |
---|
3448 | | - LA.matTranslate(obj.toParent, i/2f, 0, 0); |
---|
3449 | | - LA.matTranslateInv(obj.fromParent, -i/2f, 0, 0); |
---|
| 3523 | + LA.matTranslate(obj.toParent, i * scale, 0, 0); |
---|
| 3524 | + LA.matTranslateInv(obj.fromParent, -i * scale, 0, 0); |
---|
3450 | 3525 | } |
---|
3451 | 3526 | |
---|
3452 | 3527 | refreshContents(); |
---|
.. | .. |
---|
4468 | 4543 | makeSomething(csg); |
---|
4469 | 4544 | } |
---|
4470 | 4545 | |
---|
| 4546 | + void Ungroup(Object3D g) |
---|
| 4547 | + { |
---|
| 4548 | + if (g instanceof HiddenObject) |
---|
| 4549 | + { |
---|
| 4550 | + HiddenObject h = (HiddenObject) g; |
---|
| 4551 | + |
---|
| 4552 | + for (int i=0; i<h.ActualSize(); i++) |
---|
| 4553 | + { |
---|
| 4554 | + objEditor.makeSomething(h.get(i), false); |
---|
| 4555 | + } |
---|
| 4556 | + } |
---|
| 4557 | + else |
---|
| 4558 | + { |
---|
| 4559 | + for (int i=0; i<g.Size(); i++) |
---|
| 4560 | + { |
---|
| 4561 | + objEditor.makeSomething(g.get(i), false); |
---|
| 4562 | + } |
---|
| 4563 | + } |
---|
| 4564 | + } |
---|
| 4565 | + |
---|
4471 | 4566 | void ungroup() |
---|
4472 | 4567 | { |
---|
4473 | 4568 | /* |
---|
.. | .. |
---|
4827 | 4922 | private MenuItem resetsupportItem; |
---|
4828 | 4923 | private MenuItem resetreferencesItem; |
---|
4829 | 4924 | private MenuItem linkverticesItem; |
---|
| 4925 | + private MenuItem relinkverticesItem; |
---|
4830 | 4926 | private MenuItem setMasterItem; |
---|
4831 | 4927 | private MenuItem resetMeshItem; |
---|
4832 | 4928 | private MenuItem stepAllItem; |
---|
.. | .. |
---|
4845 | 4941 | private MenuItem clearItem; |
---|
4846 | 4942 | private MenuItem clearAllItem; |
---|
4847 | 4943 | private MenuItem genUVItem; |
---|
| 4944 | + private MenuItem genNormalsMESHItem; |
---|
4848 | 4945 | private MenuItem genNormalsCADItem; |
---|
4849 | 4946 | private MenuItem genNormalsORGANItem; |
---|
| 4947 | + private MenuItem genNormalsMINEItem; |
---|
4850 | 4948 | private MenuItem stripifyItem; |
---|
4851 | 4949 | private MenuItem unstripifyItem; |
---|
4852 | 4950 | private MenuItem trimItem; |
---|
.. | .. |
---|
4888 | 4986 | private MenuItem resetCentroidItem; |
---|
4889 | 4987 | private MenuItem transformgeometryItem; |
---|
4890 | 4988 | private MenuItem resetTransformItem; |
---|
| 4989 | + private MenuItem hideItem; |
---|
4891 | 4990 | private MenuItem grabItem; |
---|
4892 | 4991 | private MenuItem backItem; |
---|
4893 | 4992 | private MenuItem frontItem; |
---|
.. | .. |
---|
4928 | 5027 | private MenuItem coneItem; |
---|
4929 | 5028 | private MenuItem torusItem; |
---|
4930 | 5029 | private MenuItem superItem; |
---|
| 5030 | + private MenuItem kleinItem; |
---|
4931 | 5031 | private MenuItem blobItem; |
---|
4932 | 5032 | private MenuItem latheItem; |
---|
4933 | 5033 | private MenuItem bezierItem; |
---|
.. | .. |
---|
4940 | 5040 | private MenuItem csgItem; |
---|
4941 | 5041 | private MenuItem templateItem; |
---|
4942 | 5042 | private MenuItem textureItem; |
---|
| 5043 | + private MenuItem billboardItem; |
---|
4943 | 5044 | private MenuItem shadowXItem; |
---|
4944 | 5045 | private MenuItem shadowYItem; |
---|
4945 | 5046 | private MenuItem shadowZItem; |
---|