| .. | .. |
|---|
| 464 | 464 | if (!selectmode) // display.drawMode != display.SELECTION) // && display.drawMode != display.SHADOW) // (attributes & FILL) != 0) |
|---|
| 465 | 465 | { |
|---|
| 466 | 466 | //gl.glBegin(gl.GL_TRIANGLES); |
|---|
| 467 | | - boolean hasnorm = pv.norm != null && (pv.norm.x != 0 || pv.norm.y != 0 || pv.norm.z != 0); |
|---|
| 467 | + boolean hasnorm = pv.norm != null && (pv.norm.x != 0 || pv.norm.y != 0 || pv.norm.z != 0) |
|---|
| 468 | + // TEST LIVE NORMALS && !obj.dontselect |
|---|
| 469 | + ; |
|---|
| 468 | 470 | if (!hasnorm) |
|---|
| 469 | 471 | { |
|---|
| 470 | | - // System.out.println("FUCK!!"); |
|---|
| 472 | + // System.out.println("Mesh normal"); |
|---|
| 471 | 473 | LA.vecSub(pv/*.pos*/, qv/*.pos*/, obj.v0); |
|---|
| 472 | 474 | LA.vecSub(pv/*.pos*/, rv/*.pos*/, obj.v1); |
|---|
| 473 | 475 | LA.vecCross(obj.v0, obj.v1, obj.v2); |
|---|
| .. | .. |
|---|
| 1192 | 1194 | gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1); |
|---|
| 1193 | 1195 | } |
|---|
| 1194 | 1196 | } |
|---|
| 1197 | + |
|---|
| 1195 | 1198 | if (flipV) |
|---|
| 1196 | 1199 | gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); |
|---|
| 1197 | 1200 | else |
|---|
| 1198 | 1201 | gl.glTexCoord2f(uv[count2], uv[count2 + 1]); |
|---|
| 1202 | + |
|---|
| 1199 | 1203 | //System.out.println("vertex1 = " + v[count3] + ", " + v[count3+1] + ", " + v[count3+2]); |
|---|
| 1200 | 1204 | gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); |
|---|
| 1201 | 1205 | |
|---|
| .. | .. |
|---|
| 1215 | 1219 | gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1); |
|---|
| 1216 | 1220 | } |
|---|
| 1217 | 1221 | } |
|---|
| 1222 | + |
|---|
| 1218 | 1223 | if (flipV) |
|---|
| 1219 | 1224 | gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); |
|---|
| 1220 | 1225 | else |
|---|
| 1221 | 1226 | gl.glTexCoord2f(uv[count2], uv[count2 + 1]); |
|---|
| 1227 | + |
|---|
| 1222 | 1228 | //System.out.println("vertex2 = " + v[count3] + ", " + v[count3+1] + ", " + v[count3+2]); |
|---|
| 1223 | 1229 | gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); |
|---|
| 1224 | 1230 | |
|---|
| .. | .. |
|---|
| 1246 | 1252 | gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); |
|---|
| 1247 | 1253 | else |
|---|
| 1248 | 1254 | gl.glTexCoord2f(uv[count2], uv[count2 + 1]); |
|---|
| 1255 | + |
|---|
| 1249 | 1256 | //System.out.println("coord3 = " + uv[count2] + ", " + uv[count2+1]); |
|---|
| 1250 | 1257 | gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); |
|---|
| 1258 | + |
|---|
| 1251 | 1259 | count2 += 2; |
|---|
| 1252 | 1260 | count3 += 3; |
|---|
| 1253 | 1261 | } |
|---|
| .. | .. |
|---|
| 470 | 470 | markleavesItem.addActionListener(this); |
|---|
| 471 | 471 | unmarkleavesItem = menu.add(new MenuItem("Unmark Leaves")); |
|---|
| 472 | 472 | unmarkleavesItem.addActionListener(this); |
|---|
| 473 | + rewindleavesItem = menu.add(new MenuItem("Rewind Leaves")); |
|---|
| 474 | + rewindleavesItem.addActionListener(this); |
|---|
| 475 | + unrewindleavesItem = menu.add(new MenuItem("Unrewind Leaves")); |
|---|
| 476 | + unrewindleavesItem.addActionListener(this); |
|---|
| 477 | + randomleavesItem = menu.add(new MenuItem("Random Leaves")); |
|---|
| 478 | + randomleavesItem.addActionListener(this); |
|---|
| 479 | + unrandomleavesItem = menu.add(new MenuItem("Unrandom Leaves")); |
|---|
| 480 | + unrandomleavesItem.addActionListener(this); |
|---|
| 473 | 481 | menu.add("-"); |
|---|
| 474 | 482 | flipVItem = menu.add(new MenuItem("Flip V")); |
|---|
| 475 | 483 | flipVItem.addActionListener(this); |
|---|
| .. | .. |
|---|
| 2609 | 2617 | { |
|---|
| 2610 | 2618 | MarkLeaves(false); |
|---|
| 2611 | 2619 | } else |
|---|
| 2620 | + if (source == rewindleavesItem) |
|---|
| 2621 | + { |
|---|
| 2622 | + RewindLeaves(true); |
|---|
| 2623 | + } else |
|---|
| 2624 | + if (source == unrewindleavesItem) |
|---|
| 2625 | + { |
|---|
| 2626 | + RewindLeaves(false); |
|---|
| 2627 | + } else |
|---|
| 2628 | + if (source == randomleavesItem) |
|---|
| 2629 | + { |
|---|
| 2630 | + RandomLeaves(true); |
|---|
| 2631 | + } else |
|---|
| 2632 | + if (source == unrandomleavesItem) |
|---|
| 2633 | + { |
|---|
| 2634 | + RandomLeaves(false); |
|---|
| 2635 | + } else |
|---|
| 2612 | 2636 | if (source == flipVItem) |
|---|
| 2613 | 2637 | { |
|---|
| 2614 | 2638 | FlipV(true); |
|---|
| .. | .. |
|---|
| 4146 | 4170 | refreshContents(); |
|---|
| 4147 | 4171 | } |
|---|
| 4148 | 4172 | |
|---|
| 4173 | + void RewindLeaves(boolean hide) |
|---|
| 4174 | + { |
|---|
| 4175 | + group.selection.RewindLeaves(hide); |
|---|
| 4176 | + refreshContents(); |
|---|
| 4177 | + } |
|---|
| 4178 | + |
|---|
| 4179 | + void RandomLeaves(boolean hide) |
|---|
| 4180 | + { |
|---|
| 4181 | + group.selection.RandomLeaves(hide); |
|---|
| 4182 | + refreshContents(); |
|---|
| 4183 | + } |
|---|
| 4184 | + |
|---|
| 4149 | 4185 | void SetTexRes(int tr) |
|---|
| 4150 | 4186 | { |
|---|
| 4151 | 4187 | group.selection.SetTexRes(tr); |
|---|
| .. | .. |
|---|
| 5283 | 5319 | private MenuItem showleavesItem; |
|---|
| 5284 | 5320 | private MenuItem markleavesItem; |
|---|
| 5285 | 5321 | private MenuItem unmarkleavesItem; |
|---|
| 5322 | + private MenuItem rewindleavesItem; |
|---|
| 5323 | + private MenuItem unrewindleavesItem; |
|---|
| 5324 | + private MenuItem randomleavesItem; |
|---|
| 5325 | + private MenuItem unrandomleavesItem; |
|---|
| 5286 | 5326 | |
|---|
| 5287 | 5327 | private MenuItem flipVItem; |
|---|
| 5288 | 5328 | private MenuItem unflipVItem; |
|---|
| .. | .. |
|---|
| 168 | 168 | // objEditor.ctrlPanel.remove(remarkButton); |
|---|
| 169 | 169 | |
|---|
| 170 | 170 | objEditor.ctrlPanel.remove(setupPanel); |
|---|
| 171 | + objEditor.ctrlPanel.remove(setupPanel2); |
|---|
| 171 | 172 | objEditor.ctrlPanel.remove(commandsPanel); |
|---|
| 172 | 173 | objEditor.ctrlPanel.remove(pushPanel); |
|---|
| 173 | 174 | //objEditor.ctrlPanel.remove(fillPanel); |
|---|
| .. | .. |
|---|
| 747 | 748 | |
|---|
| 748 | 749 | cGridBag namePanel; |
|---|
| 749 | 750 | cGridBag setupPanel; |
|---|
| 751 | + cGridBag setupPanel2; |
|---|
| 750 | 752 | cGridBag commandsPanel; |
|---|
| 751 | 753 | cGridBag pushPanel; |
|---|
| 752 | 754 | cGridBag fillPanel; |
|---|
| .. | .. |
|---|
| 939 | 941 | markCB = AddCheckBox(setupPanel, "Mark", copy.marked); |
|---|
| 940 | 942 | markCB.setToolTipText("Set the animation target transform"); |
|---|
| 941 | 943 | |
|---|
| 942 | | - rewindCB = AddCheckBox(setupPanel, "Rewind", copy.rewind); |
|---|
| 944 | + setupPanel2 = new cGridBag().setVertical(false); |
|---|
| 945 | + |
|---|
| 946 | + rewindCB = AddCheckBox(setupPanel2, "Rewind", copy.rewind); |
|---|
| 943 | 947 | rewindCB.setToolTipText("Rewind animation"); |
|---|
| 944 | 948 | |
|---|
| 945 | | - randomCB = AddCheckBox(setupPanel, "Random", copy.random); |
|---|
| 946 | | - randomCB.setToolTipText("Option for switch node"); |
|---|
| 949 | + randomCB = AddCheckBox(setupPanel2, "Rand", copy.random); |
|---|
| 950 | + randomCB.setToolTipText("Rewind or Go back and forth randomly"); |
|---|
| 947 | 951 | |
|---|
| 948 | 952 | if (Globals.ADVANCED) |
|---|
| 949 | 953 | { |
|---|
| 950 | | - link2masterCB = AddCheckBox(setupPanel, "Support", copy.link2master); |
|---|
| 954 | + link2masterCB = AddCheckBox(setupPanel2, "Supp", copy.link2master); |
|---|
| 951 | 955 | link2masterCB.setToolTipText("Attach to support"); |
|---|
| 952 | | - speedupCB = AddCheckBox(setupPanel, "Speed", copy.speedup); |
|---|
| 956 | + speedupCB = AddCheckBox(setupPanel2, "Speed", copy.speedup); |
|---|
| 953 | 957 | speedupCB.setToolTipText("Option motion capture"); |
|---|
| 954 | 958 | } |
|---|
| 955 | 959 | |
|---|
| 956 | 960 | oe.ctrlPanel.add(setupPanel); |
|---|
| 957 | 961 | oe.ctrlPanel.Return(); |
|---|
| 962 | + oe.ctrlPanel.add(setupPanel2); |
|---|
| 963 | + oe.ctrlPanel.Return(); |
|---|
| 958 | 964 | |
|---|
| 959 | 965 | commandsPanel = new cGridBag().setVertical(false); |
|---|
| 960 | 966 | |
|---|
| .. | .. |
|---|
| 893 | 893 | |
|---|
| 894 | 894 | boolean changedir = random && Math.random() < 0.01; // && !link2master; |
|---|
| 895 | 895 | |
|---|
| 896 | | - if (transformcount*factor > maxcount || (step == 1 && changedir)) |
|---|
| 896 | + if (transformcount*factor >= maxcount && (rewind || random) || |
|---|
| 897 | + (step == 1 && changedir)) |
|---|
| 897 | 898 | { |
|---|
| 898 | 899 | countdown = 1; |
|---|
| 899 | 900 | delay = speedup?8:1; |
|---|
| .. | .. |
|---|
| 3503 | 3504 | if (blockloop) |
|---|
| 3504 | 3505 | return; |
|---|
| 3505 | 3506 | |
|---|
| 3506 | | - if (marked || (bRep != null && material != null)) // borderline... |
|---|
| 3507 | + if (//marked || // does not make sense |
|---|
| 3508 | + (bRep != null || material != null)) // borderline... |
|---|
| 3507 | 3509 | live = h; |
|---|
| 3508 | 3510 | |
|---|
| 3509 | 3511 | for (int i = 0; i < Size(); i++) |
|---|
| .. | .. |
|---|
| 3524 | 3526 | return; |
|---|
| 3525 | 3527 | |
|---|
| 3526 | 3528 | //if (bRep != null) |
|---|
| 3527 | | - if (marked || (bRep != null && material != null)) // borderline... |
|---|
| 3529 | + if (//marked || // does not make sense |
|---|
| 3530 | + (bRep != null || material != null)) // borderline... |
|---|
| 3528 | 3531 | link2master = h; |
|---|
| 3529 | 3532 | |
|---|
| 3530 | 3533 | for (int i = 0; i < Size(); i++) |
|---|
| .. | .. |
|---|
| 3544 | 3547 | if (blockloop) |
|---|
| 3545 | 3548 | return; |
|---|
| 3546 | 3549 | |
|---|
| 3547 | | - if (marked || (bRep != null && material != null)) // borderline... |
|---|
| 3550 | + if (//marked || // does not make sense |
|---|
| 3551 | + (bRep != null || material != null)) // borderline... |
|---|
| 3548 | 3552 | hide = h; |
|---|
| 3549 | 3553 | |
|---|
| 3550 | 3554 | for (int i = 0; i < Size(); i++) |
|---|
| .. | .. |
|---|
| 3564 | 3568 | if (blockloop) |
|---|
| 3565 | 3569 | return; |
|---|
| 3566 | 3570 | |
|---|
| 3567 | | - if (bRep != null && material != null) // borderline... |
|---|
| 3571 | + if (bRep != null || material != null) // borderline... |
|---|
| 3568 | 3572 | marked = h; |
|---|
| 3569 | 3573 | |
|---|
| 3570 | 3574 | for (int i = 0; i < Size(); i++) |
|---|
| .. | .. |
|---|
| 3579 | 3583 | } |
|---|
| 3580 | 3584 | } |
|---|
| 3581 | 3585 | |
|---|
| 3586 | + void RewindLeaves(boolean h) |
|---|
| 3587 | + { |
|---|
| 3588 | + if (blockloop) |
|---|
| 3589 | + return; |
|---|
| 3590 | + |
|---|
| 3591 | + if (bRep != null || material != null) // borderline... |
|---|
| 3592 | + rewind = h; |
|---|
| 3593 | + |
|---|
| 3594 | + for (int i = 0; i < Size(); i++) |
|---|
| 3595 | + { |
|---|
| 3596 | + Object3D child = (Object3D) get(i); // reserve(i); |
|---|
| 3597 | + if (child == null) |
|---|
| 3598 | + continue; |
|---|
| 3599 | + blockloop = true; |
|---|
| 3600 | + child.RewindLeaves(h); |
|---|
| 3601 | + blockloop = false; |
|---|
| 3602 | + // release(i); |
|---|
| 3603 | + } |
|---|
| 3604 | + } |
|---|
| 3605 | + |
|---|
| 3606 | + void RandomLeaves(boolean h) |
|---|
| 3607 | + { |
|---|
| 3608 | + if (blockloop) |
|---|
| 3609 | + return; |
|---|
| 3610 | + |
|---|
| 3611 | + if (bRep != null || material != null) // borderline... |
|---|
| 3612 | + random = h; |
|---|
| 3613 | + |
|---|
| 3614 | + for (int i = 0; i < Size(); i++) |
|---|
| 3615 | + { |
|---|
| 3616 | + Object3D child = (Object3D) get(i); // reserve(i); |
|---|
| 3617 | + if (child == null) |
|---|
| 3618 | + continue; |
|---|
| 3619 | + blockloop = true; |
|---|
| 3620 | + child.RandomLeaves(h); |
|---|
| 3621 | + blockloop = false; |
|---|
| 3622 | + // release(i); |
|---|
| 3623 | + } |
|---|
| 3624 | + } |
|---|
| 3625 | + |
|---|
| 3582 | 3626 | void SetTexRes(int tr) |
|---|
| 3583 | 3627 | { |
|---|
| 3584 | 3628 | texres = tr; |
|---|
| .. | .. |
|---|
| 678 | 678 | { |
|---|
| 679 | 679 | for (int j = 0; j < nr; j++) |
|---|
| 680 | 680 | { |
|---|
| 681 | | - boolean zero = Math.abs(A[i][j]) < 1E-8; |
|---|
| 681 | + boolean zero = Math.abs(A[i][j]) < 1E-12; |
|---|
| 682 | 682 | |
|---|
| 683 | 683 | if (!zero) |
|---|
| 684 | 684 | { |
|---|
| 685 | 685 | if (i != j) |
|---|
| 686 | 686 | return false; |
|---|
| 687 | 687 | |
|---|
| 688 | | - boolean un = Math.abs(A[i][j] - 1) < 1E-8; |
|---|
| 688 | + boolean un = Math.abs(A[i][j] - 1) < 1E-12; |
|---|
| 689 | 689 | |
|---|
| 690 | 690 | if (!un) |
|---|
| 691 | 691 | return false; |
|---|