~ubuntu-branches/ubuntu/gutsy/blender/gutsy-security

« back to all changes in this revision

Viewing changes to source/blender/src/buttons_object.c

  • Committer: Bazaar Package Importer
  • Author(s): Florian Ernst
  • Date: 2007-05-17 11:47:59 UTC
  • mfrom: (1.2.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20070517114759-yp4ybrnhp2u7pk66
Tags: 2.44-1
* New upstream release.
* Drop debian/patches/01_64bits_stupidity, not needed anymore: as of this
  version blender is 64 bits safe again. Adjust README.Debian accordingly.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/**
2
 
 * $Id: buttons_object.c,v 1.212 2007/02/14 20:53:35 ton Exp $
 
2
 * $Id: buttons_object.c,v 1.227 2007/04/28 16:15:00 ton Exp $
3
3
 *
4
4
 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5
5
 *
254
254
 
255
255
        /* adds ipo & channels & curve if needed */
256
256
        icu= verify_ipocurve((ID *)ob, ID_CO, actname, con->name, CO_ENFORCE);
257
 
 
 
257
        
 
258
        if (!icu) {
 
259
                error("Cannot get a curve from this IPO, may be dealing with linked data");
 
260
                return;
 
261
        }
 
262
        
258
263
        if(ob->action)
259
264
                insert_vert_ipo(icu, get_action_frame(ob, (float)CFRA), con->enforce);
260
265
        else
371
376
        case CONSTRAINT_TYPE_RIGIDBODYJOINT:
372
377
                strcpy (str, "Rigid Body");
373
378
                return;
 
379
        case CONSTRAINT_TYPE_CLAMPTO:
 
380
                strcpy (str, "Clamp To");
 
381
                return;
374
382
        default:
375
383
                strcpy (str, "Unknown");
376
384
                return;
581
589
                        BIF_ThemeColor(TH_REDALERT);
582
590
                        uiBlockSetCol(block, TH_REDALERT);
583
591
                }
584
 
                else
 
592
                else {
585
593
                        BIF_ThemeColor(curCol);
 
594
                }
586
595
 
587
596
                /*if (type==TARGET_BONE)
588
597
                        but = uiDefButC(block, MENU, B_CONSTRAINT_TEST, "Bone Constraint%t|Track To%x2|IK Solver%x3|Copy Rotation%x8|Copy Location%x9|Action%x12|Null%x0", *xco+20, *yco, 100, 20, &con->type, 0.0, 0.0, 0.0, 0.0, "Constraint type"); 
596
605
                but = uiDefBut(block, TEX, B_CONSTRAINT_TEST, "", *xco+120, *yco, 85, 18, con->name, 0.0, 29.0, 0.0, 0.0, "Constraint name"); 
597
606
                uiButSetFunc(but, verify_constraint_name_func, con, NULL);
598
607
        }       
599
 
        else{
 
608
        else {
600
609
                uiBlockSetEmboss(block, UI_EMBOSSN);
601
610
 
602
611
                if (con->flag & CONSTRAINT_DISABLE) {
603
612
                        uiBlockSetCol(block, TH_REDALERT);
604
613
                        BIF_ThemeColor(TH_REDALERT);
605
614
                }
606
 
                else
 
615
                else {
607
616
                        BIF_ThemeColor(curCol);
 
617
                }
608
618
                
609
619
                uiDefBut(block, LABEL, B_CONSTRAINT_TEST, typestr, *xco+10, *yco, 100, 18, NULL, 0.0, 0.0, 0.0, 0.0, ""); 
610
620
                
644
654
                                        but= uiDefBut(block, TEX, B_CONSTRAINT_CHANGETARGET, "BO:", *xco+120, *yco-42,135,18, &data->subtarget, 0, 24, 0, 0, "Subtarget Bone");
645
655
                                        uiButSetCompleteFunc(but, autocomplete_bone, (void *)data->tar);
646
656
                                }
647
 
                                else
 
657
                                else {
648
658
                                        strcpy (data->subtarget, "");
 
659
                                }
 
660
                                
649
661
                                uiBlockEndAlign(block);
650
662
 
651
663
                                /* Draw action button */
668
680
                        {
669
681
                                bLocateLikeConstraint *data = con->data;
670
682
                                
671
 
                                height = 66;
 
683
                                height = 91;
672
684
                                uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-10, *yco-height, width+40,height-1, NULL, 5.0, 0.0, 12, rb_col, ""); 
673
685
 
674
686
                                uiDefBut(block, LABEL, B_CONSTRAINT_TEST, "Target:", *xco+65, *yco-24, 50, 18, NULL, 0.0, 0.0, 0.0, 0.0, ""); 
681
693
                                        but= uiDefBut(block, TEX, B_CONSTRAINT_CHANGETARGET, "BO:", *xco+120, *yco-42,135,18, &data->subtarget, 0, 24, 0, 0, "Subtarget Bone");
682
694
                                        uiButSetCompleteFunc(but, autocomplete_bone, (void *)data->tar);
683
695
                                }
684
 
                                else
 
696
                                else {
685
697
                                        strcpy (data->subtarget, "");
 
698
                                }
 
699
                                
686
700
                                uiBlockEndAlign(block);
687
701
                                
688
702
                                /* Draw XYZ toggles */
689
703
                                uiBlockBeginAlign(block);
690
 
                                if (is_armature_target)
691
 
                                        uiDefButBitS(block, TOG, CONSTRAINT_LOCAL, B_CONSTRAINT_TEST, "Local", *xco+((width/2)-98), *yco-64, 50, 18, &con->flag, 0, 24, 0, 0, "Work on a Pose's local transform");
692
704
                                but=uiDefButBitI(block, TOG, LOCLIKE_X, B_CONSTRAINT_TEST, "X", *xco+((width/2)-48), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy X component");
693
 
                                but=uiDefButBitI(block, TOG, LOCLIKE_Y, B_CONSTRAINT_TEST, "Y", *xco+((width/2)-16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Y component");
694
 
                                but=uiDefButBitI(block, TOG, LOCLIKE_Z, B_CONSTRAINT_TEST, "Z", *xco+((width/2)+16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Z component");
 
705
                                but=uiDefButBitI(block, TOG, LOCLIKE_X_INVERT, B_CONSTRAINT_TEST, "-", *xco+((width/2)-16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Invert X component");
 
706
                                but=uiDefButBitI(block, TOG, LOCLIKE_Y, B_CONSTRAINT_TEST, "Y", *xco+((width/2)+16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Y component");
 
707
                                but=uiDefButBitI(block, TOG, LOCLIKE_Y_INVERT, B_CONSTRAINT_TEST, "-", *xco+((width/2)+48), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Invert Y component");
 
708
                                but=uiDefButBitI(block, TOG, LOCLIKE_Z, B_CONSTRAINT_TEST, "Z", *xco+((width/2)+96), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Z component");
 
709
                                but=uiDefButBitI(block, TOG, LOCLIKE_Z_INVERT, B_CONSTRAINT_TEST, "-", *xco+((width/2)+128), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Invert Z component");
695
710
                                uiBlockEndAlign(block);
 
711
                                
 
712
                                /* Draw options */
 
713
                                uiDefButBitI(block, TOG, LOCLIKE_OFFSET, B_CONSTRAINT_TEST, "Offset", *xco+(width/3), *yco-89, (width/3), 18, &data->flag, 0, 24, 0, 0, "Add original location onto copied location");
 
714
                                if (is_armature_target) {
 
715
                                        uiDefButBitS(block, TOG, CONSTRAINT_LOCAL, B_CONSTRAINT_TEST, "Local", *xco, *yco-89, (width/3), 18, &con->flag, 0, 24, 0, 0, "Work on a Pose's local transform");
 
716
                                        uiDefButBitI(block, TOG, LOCLIKE_TIP, B_CONSTRAINT_TEST, "Target Bone Tip", *xco+(width/3*2), *yco-89, (width/3), 18, &data->flag, 0, 24, 0, 0, "Copy Location of Target Bone's Tip");
 
717
                                }
696
718
                        }
697
719
                        break;
698
720
                case CONSTRAINT_TYPE_ROTLIKE:
699
721
                        {
700
722
                                bRotateLikeConstraint *data = con->data;
701
723
                                
702
 
                                height = 66;
 
724
                                height = 91;
703
725
                                uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-10, *yco-height, width+40,height-1, NULL, 5.0, 0.0, 12, rb_col, ""); 
704
726
                                
705
727
                                uiDefBut(block, LABEL, B_CONSTRAINT_TEST, "Target:", *xco+65, *yco-24, 50, 18, NULL, 0.0, 0.0, 0.0, 0.0, ""); 
712
734
                                        but= uiDefBut(block, TEX, B_CONSTRAINT_CHANGETARGET, "BO:", *xco+120, *yco-42,135,18, &data->subtarget, 0, 24, 0, 0, "Subtarget Bone");
713
735
                                        uiButSetCompleteFunc(but, autocomplete_bone, (void *)data->tar);
714
736
                                }
715
 
                                else
 
737
                                else {
716
738
                                        strcpy (data->subtarget, "");
 
739
                                }
 
740
                                
717
741
                                uiBlockEndAlign(block);
718
742
                                
719
743
                                /* Draw XYZ toggles */
720
744
                                uiBlockBeginAlign(block);
721
 
                                if (is_armature_target)
722
 
                                        uiDefButBitS(block, TOG, CONSTRAINT_LOCAL, B_CONSTRAINT_TEST, "Local", *xco+((width/2)-98), *yco-64, 50, 18, &con->flag, 0, 24, 0, 0, "Work on a Pose's local transform");
 
745
                                if (is_armature_target)          
 
746
                    uiDefButBitS(block, TOG, CONSTRAINT_LOCAL, B_CONSTRAINT_TEST, "Local", *xco+((width/2)-98), *yco-64, 50, 18, &con->flag, 0, 24, 0, 0, "Work on a Pose's local transform");
723
747
                                but=uiDefButBitI(block, TOG, ROTLIKE_X, B_CONSTRAINT_TEST, "X", *xco+((width/2)-48), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy X component");
724
 
                                but=uiDefButBitI(block, TOG, ROTLIKE_Y, B_CONSTRAINT_TEST, "Y", *xco+((width/2)-16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Y component");
725
 
                                but=uiDefButBitI(block, TOG, ROTLIKE_Z, B_CONSTRAINT_TEST, "Z", *xco+((width/2)+16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Z component");
 
748
                                but=uiDefButBitI(block, TOG, ROTLIKE_X_INVERT, B_CONSTRAINT_TEST, "-", *xco+((width/2)-16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Invert X component");
 
749
                                but=uiDefButBitI(block, TOG, ROTLIKE_Y, B_CONSTRAINT_TEST, "Y", *xco+((width/2)+16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Y component");
 
750
                                but=uiDefButBitI(block, TOG, ROTLIKE_Y_INVERT, B_CONSTRAINT_TEST, "-", *xco+((width/2)+48), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Invert Y component");
 
751
                                but=uiDefButBitI(block, TOG, ROTLIKE_Z, B_CONSTRAINT_TEST, "Z", *xco+((width/2)+96), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Z component");
 
752
                                but=uiDefButBitI(block, TOG, ROTLIKE_Z_INVERT, B_CONSTRAINT_TEST, "-", *xco+((width/2)+128), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Invert Z component");
726
753
                                uiBlockEndAlign(block);
727
754
                        }
728
755
                        break;
729
756
                case CONSTRAINT_TYPE_SIZELIKE:
730
757
                        {
731
758
                                bSizeLikeConstraint *data = con->data;
732
 
                                height = 66;
 
759
                                height = 91;
733
760
                        
734
761
                                uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-10, *yco-height, width+40,height-1, NULL, 5.0, 0.0, 12, rb_col, ""); 
735
762
 
743
770
                                        but= uiDefBut(block, TEX, B_CONSTRAINT_CHANGETARGET, "BO:", *xco+120, *yco-42,135,18, &data->subtarget, 0, 24, 0, 0, "Subtarget Bone");
744
771
                                        uiButSetCompleteFunc(but, autocomplete_bone, (void *)data->tar);
745
772
                                }
746
 
                                else
 
773
                                else {
747
774
                                        strcpy (data->subtarget, "");
 
775
                                }
 
776
                                
748
777
                                uiBlockEndAlign(block);
749
778
 
750
779
                                /* Draw XYZ toggles */
751
780
                                uiBlockBeginAlign(block);
752
781
                                if (is_armature_target)
753
782
                                        uiDefButBitS(block, TOG, CONSTRAINT_LOCAL, B_CONSTRAINT_TEST, "Local", *xco+((width/2)-98), *yco-64, 50, 18, &con->flag, 0, 24, 0, 0, "Work on a Pose's local transform");
754
 
                                but=uiDefButI(block, TOG|BIT|0, B_CONSTRAINT_TEST, "X", *xco+((width/2)-48), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy X component");
755
 
                                but=uiDefButI(block, TOG|BIT|1, B_CONSTRAINT_TEST, "Y", *xco+((width/2)-16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Y component");
756
 
                                but=uiDefButI(block, TOG|BIT|2, B_CONSTRAINT_TEST, "Z", *xco+((width/2)+16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Z component");
 
783
                                but=uiDefButBitI(block, TOG, SIZELIKE_X, B_CONSTRAINT_TEST, "X", *xco+((width/2)-48), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy X component");
 
784
                                but=uiDefButBitI(block, TOG, SIZELIKE_Y, B_CONSTRAINT_TEST, "Y", *xco+((width/2)-16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Y component");
 
785
                                but=uiDefButBitI(block, TOG, SIZELIKE_Z, B_CONSTRAINT_TEST, "Z", *xco+((width/2)+16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Z component");
757
786
                                uiBlockEndAlign(block);
758
787
                        }
759
788
                        break;
776
805
                                        but=uiDefBut(block, TEX, B_CONSTRAINT_CHANGETARGET, "BO:", *xco+120, *yco-42,135,19, &data->subtarget, 0, 24, 0, 0, "Subtarget Bone");
777
806
                                        uiButSetCompleteFunc(but, autocomplete_bone, (void *)data->tar);
778
807
                                }
779
 
                                else
 
808
                                else {
780
809
                                        strcpy (data->subtarget, "");
 
810
                                }
781
811
        
782
812
                                uiBlockBeginAlign(block);
783
813
                                uiDefButBitS(block, TOG, CONSTRAINT_IK_TIP, B_CONSTRAINT_TEST, "Use Tip", *xco, *yco-64, 137, 19, &data->flag, 0, 0, 0, 0, "Include Bone's tip als last element in Chain");
811
841
                                        but=uiDefBut(block, TEX, B_CONSTRAINT_CHANGETARGET, "BO:", *xco+120, *yco-42,135,18, &data->subtarget, 0, 24, 0, 0, "Subtarget Bone");
812
842
                                        uiButSetCompleteFunc(but, autocomplete_bone, (void *)data->tar);
813
843
                                }
814
 
                                else
 
844
                                else {
815
845
                                        strcpy (data->subtarget, "");
 
846
                                }
 
847
                                
816
848
                                uiBlockEndAlign(block);
817
849
 
818
850
                                uiBlockBeginAlign(block);
824
856
                                uiBlockBeginAlign(block);
825
857
                                uiDefBut(block, LABEL, B_CONSTRAINT_TEST, "To:", *xco+12, *yco-64, 25, 18, NULL, 0.0, 0.0, 0.0, 0.0, ""); 
826
858
                                
827
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"X",     *xco+39, *yco-64,17,18, &data->reserved1, 12.0, 0.0, 0, 0, "The axis that points to the target object");
828
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Y",     *xco+56, *yco-64,17,18, &data->reserved1, 12.0, 1.0, 0, 0, "The axis that points to the target object");
829
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Z",     *xco+73, *yco-64,17,18, &data->reserved1, 12.0, 2.0, 0, 0, "The axis that points to the target object");
830
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"-X",    *xco+90, *yco-64,24,18, &data->reserved1, 12.0, 3.0, 0, 0, "The axis that points to the target object");
831
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"-Y",    *xco+114, *yco-64,24,18, &data->reserved1, 12.0, 4.0, 0, 0, "The axis that points to the target object");
832
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"-Z",    *xco+138, *yco-64,24,18, &data->reserved1, 12.0, 5.0, 0, 0, "The axis that points to the target object");
 
859
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"X",     *xco+39, *yco-64,17,18, &data->reserved1, 12.0, 0.0, 0, 0, "X axis points to the target object");
 
860
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Y",     *xco+56, *yco-64,17,18, &data->reserved1, 12.0, 1.0, 0, 0, "Y axis points to the target object");
 
861
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Z",     *xco+73, *yco-64,17,18, &data->reserved1, 12.0, 2.0, 0, 0, "Z axis points to the target object");
 
862
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"-X",    *xco+90, *yco-64,24,18, &data->reserved1, 12.0, 3.0, 0, 0, "-X axis points to the target object");
 
863
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"-Y",    *xco+114, *yco-64,24,18, &data->reserved1, 12.0, 4.0, 0, 0, "-Y axis points to the target object");
 
864
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"-Z",    *xco+138, *yco-64,24,18, &data->reserved1, 12.0, 5.0, 0, 0, "-Z axis points to the target object");
833
865
                                uiBlockEndAlign(block);
834
866
                                
835
867
                                uiBlockBeginAlign(block);
836
868
                                uiDefBut(block, LABEL, B_CONSTRAINT_TEST, "Up:", *xco+174, *yco-64, 30, 18, NULL, 0.0, 0.0, 0.0, 0.0, "");
837
869
                                
838
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"X",     *xco+204, *yco-64,17,18, &data->reserved2, 13.0, 0.0, 0, 0, "The axis that points upward");
839
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Y",     *xco+221, *yco-64,17,18, &data->reserved2, 13.0, 1.0, 0, 0, "The axis that points upward");
840
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Z",     *xco+238, *yco-64,17,18, &data->reserved2, 13.0, 2.0, 0, 0, "The axis that points upward");
 
870
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"X",     *xco+204, *yco-64,17,18, &data->reserved2, 13.0, 0.0, 0, 0, "X axis points upward");
 
871
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Y",     *xco+221, *yco-64,17,18, &data->reserved2, 13.0, 1.0, 0, 0, "Y axis points upward");
 
872
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Z",     *xco+238, *yco-64,17,18, &data->reserved2, 13.0, 2.0, 0, 0, "Z axis points upward");
841
873
                                uiBlockEndAlign(block);
842
874
                        }
843
875
                        break;
860
892
                                        but=uiDefBut(block, TEX, B_CONSTRAINT_CHANGETARGET, "BO:", *xco+120, *yco-42,135,18, &data->subtarget, 0, 24, 0, 0, "Subtarget Bone");
861
893
                                        uiButSetCompleteFunc(but, autocomplete_bone, (void *)data->tar);
862
894
                                }
863
 
                                else
 
895
                                else {
864
896
                                        strcpy (data->subtarget, "");
 
897
                                }
 
898
                                
865
899
                                uiBlockEndAlign(block);
866
900
 
867
901
                                but=uiDefButI(block, TOG|BIT|0, B_CONSTRAINT_TEST, "Sticky", *xco, *yco-24, 44, 18, &data->flag, 0, 24, 0, 0, "Immobilize object while constrained");
895
929
                                        but=uiDefBut(block, TEX, B_CONSTRAINT_CHANGETARGET, "BO:", *xco+120, *yco-42,135,18, &data->subtarget, 0, 24, 0, 0, "Subtarget Bone");
896
930
                                        uiButSetCompleteFunc(but, autocomplete_bone, (void *)data->tar);
897
931
                                }
898
 
                                else
 
932
                                else {
899
933
                                        strcpy (data->subtarget, "");
 
934
                                }
 
935
                                
900
936
                                uiBlockEndAlign(block);
901
937
                                
902
938
                                uiBlockBeginAlign(block);
903
939
                                uiDefBut(block, LABEL, B_CONSTRAINT_TEST, "To:", *xco+12, *yco-64, 25, 18, NULL, 0.0, 0.0, 0.0, 0.0, ""); 
904
940
                                
905
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"X",     *xco+39, *yco-64,17,18, &data->trackflag, 12.0, 0.0, 0, 0, "The axis that points to the target object");
906
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Y",     *xco+56, *yco-64,17,18, &data->trackflag, 12.0, 1.0, 0, 0, "The axis that points to the target object");
907
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Z",     *xco+73, *yco-64,17,18, &data->trackflag, 12.0, 2.0, 0, 0, "The axis that points to the target object");
908
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"-X",    *xco+90, *yco-64,24,18, &data->trackflag, 12.0, 3.0, 0, 0, "The axis that points to the target object");
909
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"-Y",    *xco+114, *yco-64,24,18, &data->trackflag, 12.0, 4.0, 0, 0, "The axis that points to the target object");
910
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"-Z",    *xco+138, *yco-64,24,18, &data->trackflag, 12.0, 5.0, 0, 0, "The axis that points to the target object");
 
941
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"X",     *xco+39, *yco-64,17,18, &data->trackflag, 12.0, 0.0, 0, 0, "X axis points to the target object");
 
942
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Y",     *xco+56, *yco-64,17,18, &data->trackflag, 12.0, 1.0, 0, 0, "Y axis points to the target object");
 
943
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Z",     *xco+73, *yco-64,17,18, &data->trackflag, 12.0, 2.0, 0, 0, "Z axis points to the target object");
 
944
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"-X",    *xco+90, *yco-64,24,18, &data->trackflag, 12.0, 3.0, 0, 0, "-X axis points to the target object");
 
945
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"-Y",    *xco+114, *yco-64,24,18, &data->trackflag, 12.0, 4.0, 0, 0, "-Y axis points to the target object");
 
946
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"-Z",    *xco+138, *yco-64,24,18, &data->trackflag, 12.0, 5.0, 0, 0, "-Z axis points to the target object");
911
947
                                uiBlockEndAlign(block);
912
948
                                
913
949
                                uiBlockBeginAlign(block);
914
950
                                uiDefBut(block, LABEL, B_CONSTRAINT_TEST, "Lock:", *xco+166, *yco-64, 38, 18, NULL, 0.0, 0.0, 0.0, 0.0, "");
915
951
                                
916
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"X",     *xco+204, *yco-64,17,18, &data->lockflag, 13.0, 0.0, 0, 0, "The axis that is locked");
917
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Y",     *xco+221, *yco-64,17,18, &data->lockflag, 13.0, 1.0, 0, 0, "The axis that is locked");
918
 
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Z",     *xco+238, *yco-64,17,18, &data->lockflag, 13.0, 2.0, 0, 0, "The axis that is locked");
 
952
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"X",     *xco+204, *yco-64,17,18, &data->lockflag, 13.0, 0.0, 0, 0, "X axis is locked");
 
953
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Y",     *xco+221, *yco-64,17,18, &data->lockflag, 13.0, 1.0, 0, 0, "Y axis is locked");
 
954
                                uiDefButI(block, ROW,B_CONSTRAINT_TEST,"Z",     *xco+238, *yco-64,17,18, &data->lockflag, 13.0, 2.0, 0, 0, "Z axis is locked");
919
955
                                uiBlockEndAlign(block);
920
956
                        }
921
957
                        break;
974
1010
                                        but=uiDefBut(block, TEX, B_CONSTRAINT_CHANGETARGET, "BO:", *xco+120, *yco-42,135,18, &data->subtarget, 0, 24, 0, 0, "Subtarget Bone");
975
1011
                                        uiButSetCompleteFunc(but, autocomplete_bone, (void *)data->tar);
976
1012
                                }
977
 
                                else
 
1013
                                else {
978
1014
                                        strcpy (data->subtarget, "");
 
1015
                                }
 
1016
                                
979
1017
                                uiBlockEndAlign(block);
980
1018
 
981
1019
                                
1106
1144
                                        height = 106; 
1107
1145
                                else
1108
1146
                                        height = 78;
 
1147
                                        
1109
1148
                                uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-10, *yco-height, width+40,height-1, NULL, 5.0, 0.0, 12, rb_col, ""); 
1110
1149
                                
1111
1150
                                /* Draw Pairs of LimitToggle+LimitValue */
1237
1276
                                }
1238
1277
                        }
1239
1278
                        break;
 
1279
                case CONSTRAINT_TYPE_CLAMPTO:
 
1280
                        {
 
1281
                                bClampToConstraint *data = con->data;
 
1282
                                
 
1283
                                height = 66;
 
1284
                                uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-10, *yco-height, width+40,height-1, NULL, 5.0, 0.0, 12, rb_col, ""); 
 
1285
                                
 
1286
                                uiDefBut(block, LABEL, B_CONSTRAINT_TEST, "Target:", *xco+65, *yco-24, 50, 18, NULL, 0.0, 0.0, 0.0, 0.0, ""); 
 
1287
 
 
1288
                                /* Draw target parameters */
 
1289
                                uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_CONSTRAINT_CHANGETARGET, "OB:", *xco+120, *yco-24, 135, 18, &data->tar, "Target Object"); 
 
1290
                                
 
1291
                                /* Draw XYZ toggles */
 
1292
                                uiBlockBeginAlign(block);
 
1293
                                uiDefBut(block, LABEL, B_CONSTRAINT_TEST, "Main Axis:", *xco, *yco-64, 90, 18, NULL, 0.0, 0.0, 0.0, 0.0, ""); 
 
1294
                                uiDefButI(block, ROW, B_CONSTRAINT_TEST, "Auto", *xco+100, *yco-64, 50, 18, &data->flag, 12.0, CLAMPTO_AUTO, 0, 0, "Automatically determine main-axis of movement");
 
1295
                                uiDefButI(block, ROW, B_CONSTRAINT_TEST, "X", *xco+150, *yco-64, 32, 18, &data->flag, 12.0, CLAMPTO_X, 0, 0, "Main axis of movement is x-axis");
 
1296
                                uiDefButI(block, ROW, B_CONSTRAINT_TEST, "Y", *xco+182, *yco-64, 32, 18, &data->flag, 12.0, CLAMPTO_Y, 0, 0, "Main axis of movement is y-axis");
 
1297
                                uiDefButI(block, ROW, B_CONSTRAINT_TEST, "Z", *xco+214, *yco-64, 32, 18, &data->flag, 12.0, CLAMPTO_Z, 0, 0, "Main axis of movement is z-axis");
 
1298
                                uiBlockEndAlign(block);
 
1299
                        }
 
1300
                        break;
1240
1301
                case CONSTRAINT_TYPE_NULL:
1241
1302
                        {
1242
1303
                                height = 17;
1296
1357
        uiDefBut(block, BUTM, B_CONSTRAINT_ADD_MINMAX,"Floor",          0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 0, "");
1297
1358
        uiDefBut(block, BUTM, B_CONSTRAINT_ADD_LOCKTRACK,"Locked Track",                0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 0, "");
1298
1359
        uiDefBut(block, BUTM, B_CONSTRAINT_ADD_FOLLOWPATH,"Follow Path",                0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 0, "");
 
1360
        uiDefBut(block, BUTM, B_CONSTRAINT_ADD_CLAMPTO,"Clamp To",              0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 0, "");
1299
1361
        
1300
1362
        uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, 120, 6, NULL, 0.0, 0.0, 0, 0, "");
1301
1363
        
1484
1546
                        BIF_undo_push("Add constraint");
1485
1547
                }
1486
1548
                break;
 
1549
        case B_CONSTRAINT_ADD_CLAMPTO:
 
1550
                {
 
1551
                        bConstraint *con;
 
1552
                        con = add_new_constraint(CONSTRAINT_TYPE_CLAMPTO);
 
1553
                        add_constraint_to_active(ob, con);
 
1554
 
 
1555
                        BIF_undo_push("Add constraint");
 
1556
                }
 
1557
                break;
1487
1558
 
1488
1559
        default:
1489
1560
                break;
1522
1593
        }
1523
1594
        else {
1524
1595
                for(base=G.scene->base.first; base; base= base->next) {
1525
 
                        if(TESTBASE(base)) {
 
1596
                        if(TESTBASELIB(base)) {
1526
1597
                                if(base->object->soft) {
1527
1598
                                        sb= base->object->soft;
1528
1599
                                        sfra= MIN2(sfra, sb->sfra);
1562
1633
                        sbObjectToSoftbody(ob); // free bake
1563
1634
                else {
1564
1635
                        for(base=G.scene->base.first; base; base= base->next) {
1565
 
                                if(TESTBASE(base)) {
 
1636
                                if(TESTBASELIB(base)) {
1566
1637
                                        if(base->object->soft) {
1567
1638
                                                sbObjectToSoftbody(base->object);       // free bake
1568
1639
                                        }
1580
1651
                ob->softflag &= ~OB_SB_BAKEDO;
1581
1652
        else {
1582
1653
                for(base=G.scene->base.first; base; base= base->next)
1583
 
                        if(TESTBASE(base))
 
1654
                        if(TESTBASELIB(base))
1584
1655
                                if(base->object->soft)
1585
1656
                                        base->object->softflag &= ~OB_SB_BAKEDO;
1586
1657
        }
1671
1742
                break;
1672
1743
        case B_DUPLI_VERTS:
1673
1744
                ob->transflag &= ~(OB_DUPLIFRAMES|OB_DUPLIFACES|OB_DUPLIGROUP);
 
1745
                DAG_scene_sort(G.scene);
 
1746
                DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
1674
1747
                allqueue(REDRAWVIEW3D, 0);
1675
1748
                allqueue(REDRAWBUTSOBJECT, 0);
1676
1749
                break;
1696
1769
                        do_ob_ipo(ob);
1697
1770
                        where_is_object(ob);
1698
1771
                        VecSubf(vec, vec, ob->obmat[3]);
1699
 
                        prspeed= Normalise(vec);
 
1772
                        prspeed= Normalize(vec);
1700
1773
                        scrarea_queue_winredraw(curarea);
1701
1774
                }
1702
1775
                break;
1812
1885
        if(ob) {
1813
1886
                
1814
1887
                if(event== -1) {
1815
 
                        Group *group= add_group();
 
1888
                        Group *group= add_group( "Group" );
1816
1889
                        add_to_group(group, ob);
1817
1890
                }
1818
1891
                else
1885
1958
        block= uiNewBlock(&curarea->uiblocks, "object_panel_object", UI_EMBOSS, UI_HELV, curarea->win);
1886
1959
        if(uiNewPanel(curarea, block, "Object and Links", "Object", 0, 0, 318, 204)==0) return;
1887
1960
        
1888
 
        if(ob->id.lib) uiSetButLock(1, "Can't edit library data");
 
1961
        uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
1889
1962
        
1890
1963
        /* object name */
1891
1964
        uiBlockSetCol(block, TH_BUT_SETTING2);
1895
1968
        /* parent */
1896
1969
        uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_OBJECTPANELPARENT, "Par:", xco+5, 180, 305-xco, 20, &ob->parent, "Parent Object"); 
1897
1970
        
 
1971
        /* TODO, check for ob->id.lib */
1898
1972
        but = uiDefButS(block, NUM, B_NOP, "PassIndex:",                xco+5, 150, 305-xco, 20, &ob->index, 0.0, 1000.0, 0, 0, "Index # for the IndexOB render pass.");
1899
1973
 
1900
1974
        uiDefBlockBut(block, add_groupmenu, NULL, "Add to Group", 10,150,150,20, "Add Object to a new Group");
1905
1979
                        xco= 160;
1906
1980
                        
1907
1981
                        uiBlockBeginAlign(block);
1908
 
                        but = uiDefBut(block, TEX, B_IDNAME, "GR:",     10, 120-yco, 150, 20, group->id.name+2, 0.0, 19.0, 0, 0, "Displays Group name. Click to change.");
 
1982
                        but = uiDefBut(block, TEX, B_IDNAME, "GR:",     10, 120-yco, 150, 20, group->id.name+2, 0.0, 21.0, 0, 0, "Displays Group name. Click to change.");
1909
1983
                        uiButSetFunc(but, test_idbutton_cb, group->id.name, NULL);
1910
1984
                        
1911
1985
                        if(group->id.lib) {
1922
1996
                        /* layers */
1923
1997
                        uiBlockBeginAlign(block);
1924
1998
                        for(a=0; a<5; a++)
1925
 
                                uiDefButBitI(block, TOG, 1<<a, REDRAWVIEW3D, "",        (short)(xco+a*(dx/2)), 120-yco, (short)(dx/2), (short)(dy/2), &(group->layer), 0, 0, 0, 0, "");
 
1999
                                uiDefButBitI(block, TOG, 1<<a, REDRAWVIEW3D, "",        (short)(xco+a*(dx/2)), 120-yco, (short)(dx/2), (short)(dy/2), (int *)&(group->layer), 0, 0, 0, 0, "");
1926
2000
                        for(a=0; a<5; a++)
1927
 
                                uiDefButBitI(block, TOG, 1<<(a+10), REDRAWVIEW3D, "",   (short)(xco+a*(dx/2)), 105-yco, (short)(dx/2), (short)(dy/2), &(group->layer), 0, 0, 0, 0, "");
 
2001
                                uiDefButBitI(block, TOG, 1<<(a+10), REDRAWVIEW3D, "",   (short)(xco+a*(dx/2)), 105-yco, (short)(dx/2), (short)(dy/2), (int *)&(group->layer), 0, 0, 0, 0, "");
1928
2002
                        
1929
2003
                        xco+= 7;
1930
2004
                        uiBlockBeginAlign(block);
1931
2005
                        for(a=5; a<10; a++)
1932
 
                                uiDefButBitI(block, TOG, 1<<a, REDRAWVIEW3D, "",        (short)(xco+a*(dx/2)), 120-yco, (short)(dx/2), (short)(dy/2), &(group->layer), 0, 0, 0, 0, "");
 
2006
                                uiDefButBitI(block, TOG, 1<<a, REDRAWVIEW3D, "",        (short)(xco+a*(dx/2)), 120-yco, (short)(dx/2), (short)(dy/2), (int *)&(group->layer), 0, 0, 0, 0, "");
1933
2007
                        for(a=5; a<10; a++)
1934
 
                                uiDefButBitI(block, TOG, 1<<(a+10), REDRAWVIEW3D, "",   (short)(xco+a*(dx/2)), 105-yco, (short)(dx/2), (short)(dy/2), &(group->layer), 0, 0, 0, 0, "");
 
2008
                                uiDefButBitI(block, TOG, 1<<(a+10), REDRAWVIEW3D, "",   (short)(xco+a*(dx/2)), 105-yco, (short)(dx/2), (short)(dy/2), (int *)&(group->layer), 0, 0, 0, 0, "");
1935
2009
                        
1936
2010
                        uiBlockEndAlign(block);
1937
2011
                        
1951
2025
        block= uiNewBlock(&curarea->uiblocks, "object_panel_anim", UI_EMBOSS, UI_HELV, curarea->win);
1952
2026
        if(uiNewPanel(curarea, block, "Anim settings", "Object", 320, 0, 318, 204)==0) return;
1953
2027
        
1954
 
        if(ob->id.lib) uiSetButLock(1, "Can't edit library data");
 
2028
        uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
1955
2029
        
1956
2030
        uiBlockBeginAlign(block);
1957
2031
        uiDefButS(block, ROW,B_TRACKBUTS,"TrackX",      24,180,59,19, &ob->trackflag, 12.0, 0.0, 0, 0, "Specify the axis that points to another object");
2016
2090
        block= uiNewBlock(&curarea->uiblocks, "object_panel_draw", UI_EMBOSS, UI_HELV, curarea->win);
2017
2091
        if(uiNewPanel(curarea, block, "Draw", "Object", 640, 0, 318, 204)==0) return;
2018
2092
        
2019
 
        if(ob->id.lib) uiSetButLock(1, "Can't edit library data");
 
2093
        uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
2020
2094
        
2021
2095
        /* LAYERS */
2022
2096
        xco= 120;
2027
2101
        
2028
2102
        uiBlockBeginAlign(block);
2029
2103
        for(a=0; a<5; a++)
2030
 
                uiDefButBitI(block, TOG, 1<<a, B_OBLAY+a, "",   (short)(xco+a*(dx/2)), 180, (short)(dx/2), (short)(dy/2), &(BASACT->lay), 0, 0, 0, 0, "");
 
2104
                uiDefButBitI(block, TOG, 1<<a, B_OBLAY+a, "",   (short)(xco+a*(dx/2)), 180, (short)(dx/2), (short)(dy/2), (int *)&(BASACT->lay), 0, 0, 0, 0, "");
2031
2105
        for(a=0; a<5; a++)
2032
 
                uiDefButBitI(block, TOG, 1<<(a+10), B_OBLAY+a+10, "",   (short)(xco+a*(dx/2)), 165, (short)(dx/2), (short)(dy/2), &(BASACT->lay), 0, 0, 0, 0, "");
 
2106
                uiDefButBitI(block, TOG, 1<<(a+10), B_OBLAY+a+10, "",   (short)(xco+a*(dx/2)), 165, (short)(dx/2), (short)(dy/2), (int *)&(BASACT->lay), 0, 0, 0, 0, "");
2033
2107
        
2034
2108
        xco+= 7;
2035
2109
        uiBlockBeginAlign(block);
2036
2110
        for(a=5; a<10; a++)
2037
 
                uiDefButBitI(block, TOG, 1<<a, B_OBLAY+a, "",   (short)(xco+a*(dx/2)), 180, (short)(dx/2), (short)(dy/2), &(BASACT->lay), 0, 0, 0, 0, "");
 
2111
                uiDefButBitI(block, TOG, 1<<a, B_OBLAY+a, "",   (short)(xco+a*(dx/2)), 180, (short)(dx/2), (short)(dy/2), (int *)&(BASACT->lay), 0, 0, 0, 0, "");
2038
2112
        for(a=5; a<10; a++)
2039
 
                uiDefButBitI(block, TOG, 1<<(a+10), B_OBLAY+a+10, "",   (short)(xco+a*(dx/2)), 165, (short)(dx/2), (short)(dy/2), &(BASACT->lay), 0, 0, 0, 0, "");
 
2113
                uiDefButBitI(block, TOG, 1<<(a+10), B_OBLAY+a+10, "",   (short)(xco+a*(dx/2)), 165, (short)(dx/2), (short)(dy/2), (int *)&(BASACT->lay), 0, 0, 0, 0, "");
2040
2114
        
2041
2115
        uiBlockEndAlign(block);
2042
2116
        
2057
2131
        
2058
2132
        uiDefButS(block, MENU, REDRAWVIEW3D, "Boundary Display%t|Box%x0|Sphere%x1|Cylinder%x2|Cone%x3|Polyheder%x4",
2059
2133
                          120, 80, 90, 20, &ob->boundtype, 0, 0, 0, 0, "Selects the boundary display type");
2060
 
        uiDefButBitC(block, TOG, OB_AXIS, REDRAWVIEW3D, "Axis",                 210, 80, 90, 20, &ob->dtx, 0, 0, 0, 0, "Displays the active object's centre and axis");
 
2134
        uiDefButBitC(block, TOG, OB_AXIS, REDRAWVIEW3D, "Axis",                 210, 80, 90, 20, &ob->dtx, 0, 0, 0, 0, "Displays the active object's center and axis");
2061
2135
        
2062
2136
        uiDefButBitC(block, TOG, OB_TEXSPACE, REDRAWVIEW3D, "TexSpace", 120, 60, 90, 20, &ob->dtx, 0, 0, 0, 0, "Displays the active object's texture space");
2063
2137
        uiDefButBitC(block, TOG, OB_DRAWWIRE, REDRAWVIEW3D, "Wire",             210, 60, 90, 20, &ob->dtx, 0, 0, 0, 0, "Adds the active object's wireframe over solid drawing");
2079
2153
        block= uiNewBlock(&curarea->uiblocks, "object_panel_constraint", UI_EMBOSS, UI_HELV, curarea->win);
2080
2154
        if(uiNewPanel(curarea, block, "Constraints", context, 960, 0, 318, 204)==0) return;
2081
2155
        
2082
 
        if(ob->id.lib) uiSetButLock(1, "Can't edit library data");
 
2156
        uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
2083
2157
        
2084
2158
        /* this is a variable height panel, newpanel doesnt force new size on existing panels */
2085
2159
        /* so first we make it default height */
2322
2396
        block= uiNewBlock(&curarea->uiblocks, "object_panel_fields", UI_EMBOSS, UI_HELV, curarea->win);
2323
2397
        if(uiNewPanel(curarea, block, "Fields and Deflection", "Physics", 0, 0, 318, 204)==0) return;
2324
2398
 
2325
 
        if(ob->id.lib) uiSetButLock(1, "Can't edit library data");
 
2399
        uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
2326
2400
        
2327
2401
        /* should become button, option? */
2328
2402
        if(ob->pd==NULL) {
2435
2509
        uiNewPanelTabbed("Soft Body", "Physics");
2436
2510
        if(uiNewPanel(curarea, block, "Soft Body Collision", "Physics", 651, 0, 318, 204)==0) return;
2437
2511
 
2438
 
        if(ob->id.lib) uiSetButLock(1, "Can't edit library data");
 
2512
        uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
2439
2513
 
2440
2514
        val = modifiers_isSoftbodyEnabled(ob);
2441
2515
        if(!val) {
2512
2586
        block= uiNewBlock(&curarea->uiblocks, "object_softbodies", UI_EMBOSS, UI_HELV, curarea->win);
2513
2587
        if(uiNewPanel(curarea, block, "Soft Body", "Physics", 640, 0, 318, 204)==0) return;
2514
2588
 
2515
 
        if(ob->id.lib) uiSetButLock(1, "Can't edit library data");
 
2589
        uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
2516
2590
 
2517
2591
        val = modifiers_isSoftbodyEnabled(ob);
2518
2592
        but = uiDefButI(block, TOG, REDRAWBUTSOBJECT, "Soft Body",      10,200,130,20, &val, 0, 0, 0, 0, "Sets object to become soft body");
2642
2716
        uiNewPanelTabbed("Particles ", "Physics");
2643
2717
        if(uiNewPanel(curarea, block, "Particle Motion", "Physics", 320, 0, 318, 204)==0) return;
2644
2718
        
2645
 
        if(ob->id.lib) uiSetButLock(1, "Can't edit library data");
 
2719
        uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
2646
2720
        
2647
2721
        /* top row */
2648
2722
        uiBlockBeginAlign(block);
2706
2780
        block= uiNewBlock(&curarea->uiblocks, "object_panel_particles", UI_EMBOSS, UI_HELV, curarea->win);
2707
2781
        if(uiNewPanel(curarea, block, "Particles ", "Physics", 320, 0, 318, 204)==0) return;
2708
2782
 
2709
 
        if(ob->id.lib) uiSetButLock(1, "Can't edit library data");
 
2783
        uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
2710
2784
        
2711
2785
        if (ob->type == OB_MESH) {
2712
2786
                uiBlockBeginAlign(block);
2793
2867
        const int lineHeight = 20;
2794
2868
        const int separateHeight = 3;
2795
2869
        const int objHeight = 20;
 
2870
        char *msg = NULL;
2796
2871
        
2797
2872
        block= uiNewBlock(&curarea->uiblocks, "object_fluidsim", UI_EMBOSS, UI_HELV, curarea->win);
2798
2873
        if(uiNewPanel(curarea, block, "Fluid Simulation", "Physics", 1060, 0, 318, 204)==0) return;
2799
2874
 
2800
 
        if(ob->id.lib) uiSetButLock(1, "Can't edit library data");
 
2875
        uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
2801
2876
        
2802
2877
        if(ob->type==OB_MESH) {
 
2878
                if(((Mesh *)ob->data)->totvert == 0) {
 
2879
                        msg = "Mesh has no vertices.";
 
2880
                        goto errMessage;
 
2881
                }
2803
2882
                uiDefButBitS(block, TOG, OB_FLUIDSIM_ENABLE, REDRAWBUTSOBJECT, "Enable",         0,yline, 75,objHeight, 
2804
2883
                                &ob->fluidsimFlag, 0, 0, 0, 0, "Sets object to participate in fluid simulation");
2805
2884
 
2806
2885
                if(ob->fluidsimFlag & OB_FLUIDSIM_ENABLE) {
2807
2886
                        FluidsimSettings *fss= ob->fluidsimSettings;
2808
 
                        
 
2887
        
2809
2888
                        if(fss==NULL) {
2810
2889
                                fss = ob->fluidsimSettings = fluidsimSettingsNew(ob);
2811
2890
                        }
2849
2928
                                        yline -= lineHeight;
2850
2929
 
2851
2930
                                        uiBlockBeginAlign(block);
2852
 
                                        uiDefButS(block, NUM, REDRAWBUTSOBJECT, "Resolution:", 0, yline,150,objHeight, &fss->resolutionxyz, 1, maxRes, 10, 0, "Domain resolution in X,Y and Z direction");
2853
 
                                        uiDefButS(block, NUM, B_DIFF,           "Preview-Res.:", 150, yline,150,objHeight, &fss->previewresxyz, 1, 100, 10, 0, "Resolution of the preview meshes to generate, also in X,Y and Z direction");
 
2931
                                        uiDefButS(block, NUM, REDRAWBUTSOBJECT, "Resolution:", 0, yline,150,objHeight, &fss->resolutionxyz, 1, maxRes, 10, 0, "Domain resolution in X, Y and Z direction");
 
2932
                                        uiDefButS(block, NUM, B_DIFF,           "Preview-Res.:", 150, yline,150,objHeight, &fss->previewresxyz, 1, 100, 10, 0, "Resolution of the preview meshes to generate, also in X, Y and Z direction");
2854
2933
                                        uiBlockEndAlign(block);
2855
2934
                                        yline -= lineHeight;
2856
2935
                                        yline -= 1*separateHeight;
2866
2945
                                        uiDefBut(block, LABEL,   0, "Disp.-Qual.:",              0,yline, 90,objHeight, NULL, 0.0, 0, 0, 0, "");
2867
2946
                                        uiBlockBeginAlign(block);
2868
2947
                                        uiDefButS(block, MENU, B_FLUIDSIM_FORCEREDRAW, "GuiDisplayMode%t|Geometry %x1|Preview %x2|Final %x3",   
2869
 
                                                         90,yline,105,objHeight, &fss->guiDisplayMode, 0, 0, 0, 0, "How to display the fluid mesh in the blender gui.");
 
2948
                                                         90,yline,105,objHeight, &fss->guiDisplayMode, 0, 0, 0, 0, "How to display the fluid mesh in the Blender GUI.");
2870
2949
                                        uiDefButS(block, MENU, B_DIFF, "RenderDisplayMode%t|Geometry %x1|Preview %x2|Final %x3",        
2871
2950
                                                        195,yline,105,objHeight, &fss->renderDisplayMode, 0, 0, 0, 0, "How to display the fluid mesh for rendering.");
2872
2951
                                        uiBlockEndAlign(block);
2895
2974
                                        uiDefButS(block, MENU, REDRAWVIEW3D, "Viscosity%t|Manual %x1|Water %x2|Oil %x3|Honey %x4",      
2896
2975
                                                        0,yline, 90,objHeight, &fss->viscosityMode, 0, 0, 0, 0, "Set viscosity of the fluid to a preset value, or use manual input.");
2897
2976
                                        if(fss->viscosityMode==1) {
2898
 
                                                uiDefButF(block, NUM, B_DIFF, "Value:",     90, yline, 105,objHeight, &fss->viscosityValue,       0.0, 10.0, 10, 0, "Viscosity setting, value that is multiplied by 10 to the power of (exponent*-1).");
 
2977
                                                uiDefButF(block, NUM, B_DIFF, "Value:",     90, yline, 105,objHeight, &fss->viscosityValue,       0.0, 10.0, 10, 0, "Viscosity setting: value that is multiplied by 10 to the power of (exponent*-1).");
2899
2978
                                                uiDefButS(block, NUM, B_DIFF, "Neg-Exp.:", 195, yline, 105,objHeight, &fss->viscosityExponent, 0,   10,  10, 0, "Negative exponent for the viscosity value (to simplify entering small values e.g. 5*10^-6.");
2900
2979
                                                uiBlockEndAlign(block);
2901
2980
                                        } else {
2966
3045
                                        ) {
2967
3046
                                uiBlockBeginAlign(block); // fluid
2968
3047
                                uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Volume",    0, yline,100,objHeight, &fss->volumeInitType, 15.0, 1, 20.0, 1.0, "Type of volume init: use only inner region of mesh.");
2969
 
                                uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Shell",   100, yline,100,objHeight, &fss->volumeInitType, 15.0, 2, 20.0, 2.0, "Type of volume init: use only the hollow shell defines by the faces of the mesh.");
 
3048
                                uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Shell",   100, yline,100,objHeight, &fss->volumeInitType, 15.0, 2, 20.0, 2.0, "Type of volume init: use only the hollow shell defined by the faces of the mesh.");
2970
3049
                                uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Both",    200, yline,100,objHeight, &fss->volumeInitType, 15.0, 3, 20.0, 3.0, "Type of volume init: use both the inner volume and the outer shell.");
2971
3050
                                uiBlockEndAlign(block);
2972
3051
                                yline -= lineHeight;
3000
3079
 
3001
3080
                                uiBlockBeginAlign(block); // outflow
3002
3081
                                uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Volume",    0, yline,100,objHeight, &fss->volumeInitType, 15.0, 1, 20.0, 1.0, "Type of volume init: use only inner region of mesh.");
3003
 
                                uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Shell",   100, yline,100,objHeight, &fss->volumeInitType, 15.0, 2, 20.0, 2.0, "Type of volume init: use only the hollow shell defines by the faces of the mesh.");
 
3082
                                uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Shell",   100, yline,100,objHeight, &fss->volumeInitType, 15.0, 2, 20.0, 2.0, "Type of volume init: use only the hollow shell defined by the faces of the mesh.");
3004
3083
                                uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Both",    200, yline,100,objHeight, &fss->volumeInitType, 15.0, 3, 20.0, 3.0, "Type of volume init: use both the inner volume and the outer shell.");
3005
3084
                                uiBlockEndAlign(block);
3006
3085
                                yline -= lineHeight;
3017
3096
 
3018
3097
                                uiBlockBeginAlign(block); // obstacle
3019
3098
                                uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Volume",    0, yline,100,objHeight, &fss->volumeInitType, 15.0, 1, 20.0, 1.0, "Type of volume init: use only inner region of mesh.");
3020
 
                                uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Shell",   100, yline,100,objHeight, &fss->volumeInitType, 15.0, 2, 20.0, 2.0, "Type of volume init: use only the hollow shell defines by the faces of the mesh.");
 
3099
                                uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Shell",   100, yline,100,objHeight, &fss->volumeInitType, 15.0, 2, 20.0, 2.0, "Type of volume init: use only the hollow shell defined by the faces of the mesh.");
3021
3100
                                uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Both",    200, yline,100,objHeight, &fss->volumeInitType, 15.0, 3, 20.0, 3.0, "Type of volume init: use both the inner volume and the outer shell.");
3022
3101
                                uiBlockEndAlign(block);
3023
3102
                                yline -= lineHeight;
3031
3110
 
3032
3111
                                // domainNovecgen "misused" here
3033
3112
                                uiDefBut(block, LABEL, 0, "Animated Mesh:",             0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
3034
 
                          uiDefButBitC(block, TOG, 1, REDRAWBUTSOBJECT, "Export",     200, yline,100,objHeight, &fss->domainNovecgen, 0, 0, 0, 0, "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it.");
 
3113
                          uiDefButBitC(block, TOG, 1, REDRAWBUTSOBJECT, "Export",     200, yline,100,objHeight, &fss->domainNovecgen, 0, 0, 0, 0, "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated loc/rot/scale IPOs do not require it.");
3035
3114
                                yline -= lineHeight;
3036
3115
 
3037
3116
                                uiDefBut(block, LABEL, 0, "PartSlip Amount:",           0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
3042
3121
 
3043
3122
                                // generateParticles "misused" here
3044
3123
                                uiDefBut(block, LABEL, 0, "Impact Factor:",             0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
3045
 
                                uiDefButF(block, NUM, B_DIFF, "", 200, yline,100,objHeight, &fss->surfaceSmoothing, -2.0, 10.0, 10,0, "This is an unphsyical value for moving objects - it control the impact an obstacle has on the fluid, =0 behaves a bit like outflow (deleting fluid), =1 is default, while >1 results in high forces. Can be used to tweak total mass.");
 
3124
                                uiDefButF(block, NUM, B_DIFF, "", 200, yline,100,objHeight, &fss->surfaceSmoothing, -2.0, 10.0, 10,0, "This is an unphysical value for moving objects - it controls the impact an obstacle has on the fluid, =0 behaves a bit like outflow (deleting fluid), =1 is default, while >1 results in high forces. Can be used to tweak total mass.");
3046
3125
                                yline -= lineHeight;
3047
3126
 
3048
3127
                                yline -= lineHeight; // obstacle
3084
3163
                                uiDefBut(block, LABEL, 0, "Select object type for simulation",          0,yline,300,objHeight, NULL, 0.0, 0, 0, 0, "");
3085
3164
                                yline -= lineHeight;
3086
3165
                        }
 
3166
                        return;
3087
3167
 
3088
3168
                } else {
3089
 
                        yline -= lineHeight + 5;
3090
 
                        uiDefBut(block, LABEL, 0, "Object not enabled for fluid simulation...", 0,yline,300,objHeight, NULL, 0.0, 0, 0, 0, "");
3091
 
                        yline -= lineHeight;
 
3169
                        msg = "Object not enabled for fluid simulation...";
3092
3170
                }
3093
3171
        } else {
3094
 
                yline -= lineHeight + 5;
3095
 
                uiDefBut(block, LABEL, 0, "Only Mesh Objects can participate", 0,yline,300,objHeight, NULL, 0.0, 0, 0, 0, "");
3096
 
                yline -= lineHeight;
 
3172
                msg = "Only Mesh Objects can participate.";
3097
3173
        }
 
3174
errMessage:
 
3175
        yline -= lineHeight + 5;
 
3176
        uiDefBut(block, LABEL, 0, msg, 0,yline,300,objHeight, NULL, 0.0, 0, 0, 0, "");
 
3177
        yline -= lineHeight;
 
3178
 
3098
3179
#endif // DISABLE_ELBEEM
3099
3180
}
3100
3181