/* */ /* Special thanks to Nik for the help with the widgets :) */ // Creating a list of selected objects // and checking if any objects were selected scene = window.getScene(); selection=scene.getSelection(); if (selection.length < 1) { new MessageDialog(window, "Select at least one object before launcing the script"); return; } //===================================================================================== // Defining the widgettd for the dialogbox //===================================================================================== if (selection.length == 1){ArrNameText = "Circular Array of "+ scene.getObject(selection[0]).name;} else{ArrNameText = "Circular Array of "+ selection.length + " objects";} ArrNameField = new BTextField(ArrNameText); NumOfSegField = new ValueField(16, ValueField.POSITIVE+ValueField.INTEGER); chkFullCircle = new BCheckBox(); chkFullCircle.setState(true); chkRotAlong = new BCheckBox(); chkRotAlong.setState(true); chkAdd_on_End = new BCheckBox(); chkAdd_on_End.setState(true); chkAdd_on_End.setEnabled(false); totalPropField = new ValueField(0.0, ValueField.NONE); totalPropField.setEnabled(false); RotAngleField = new ValueField(360, ValueField.NONE); RotAngleField.setEnabled(false); rotSlideZ = new ValueSlider(-8.0, 8.0, 2000, 1.0); rotSlideZ.setEnabled(false); rotSlideX = new ValueSlider(-8.0, 8.0, 2000, 0.0); rotSlideX.setEnabled(false); rotSlideY = new ValueSlider(-8.0, 8.0, 2000, 0.0); rotSlideY.setEnabled(false); AxisDef = new RadioButtonGroup(); UseX = new BRadioButton("X", false, AxisDef); UseX.setName("UseX"); UseY = new BRadioButton("Y", false, AxisDef); UseY.setName("UseY"); UseZ = new BRadioButton("Z", true, AxisDef); UseZ.setName("UseZ"); Use2P = new BRadioButton("Two points", false, AxisDef); Use2P.setName("Use2P"); AxisDefGrid = new RowContainer(); AxisDefGrid.add(UseX); AxisDefGrid.add(UseY); AxisDefGrid.add(UseZ);AxisDefGrid.add(Use2P); p1Label = new BLabel("Point1"); p1XF = new ValueField(0.0, ValueField.NONE); p1XF.setEnabled(false); p1YF = new ValueField(0.0, ValueField.NONE); p1YF.setEnabled(false); p1ZF = new ValueField(0.0, ValueField.NONE); p1ZF.setEnabled(false); P1DefGrid = new RowContainer(); P1DefGrid.add(p1Label);P1DefGrid.add(p1XF);P1DefGrid.add(p1YF);P1DefGrid.add(p1ZF); p2Label = new BLabel("Point2"); p2XF = new ValueField(1.0, ValueField.NONE); p2XF.setEnabled(false); p2YF = new ValueField(1.0, ValueField.NONE); p2YF.setEnabled(false); p2ZF = new ValueField(1.0, ValueField.NONE); p2ZF.setEnabled(false); P2DefGrid = new RowContainer(); P2DefGrid.add(p2Label);P2DefGrid.add(p2XF);P2DefGrid.add(p2YF);P2DefGrid.add(p2ZF); AngleDef = new RadioButtonGroup(); Angle_per_Total = new BRadioButton("Total angle", true, AngleDef); Angle_per_Total.setEnabled(false); Angle_per_Segment = new BRadioButton("Angle per segment", false, AngleDef); Angle_per_Segment.setEnabled(false); AngleDefGrid = new RowContainer(); AngleDefGrid.add(Angle_per_Total);AngleDefGrid.add(Angle_per_Segment); PropDef = new RadioButtonGroup(); Prop_per_Total = new BRadioButton("Total distance", true, PropDef); Prop_per_Total.setEnabled(false); Prop_per_Segment = new BRadioButton("Distance per segment", false, PropDef); Prop_per_Segment.setEnabled(false); PropDefGrid = new RowContainer(); PropDefGrid.add(Prop_per_Total);PropDefGrid.add(Prop_per_Segment); //===================================================================================== // Building the interactive features to the dialogbox widgetrs //===================================================================================== Use2P.addEventLink(ValueChangedEvent.class, new Object() { public void processEvent(WidgetEvent ev1) { p1XF.setEnabled(ev1.getWidget().getState()); p1YF.setEnabled(ev1.getWidget().getState()); p1ZF.setEnabled(ev1.getWidget().getState()); p2XF.setEnabled(ev1.getWidget().getState()); p2YF.setEnabled(ev1.getWidget().getState()); p2ZF.setEnabled(ev1.getWidget().getState()); }}); UseX.addEventLink(ValueChangedEvent.class, new Object() { public void processEvent(WidgetEvent ev1) { p1XF.setEnabled(!ev1.getWidget().getState()); p1YF.setEnabled(!ev1.getWidget().getState()); p1ZF.setEnabled(!ev1.getWidget().getState()); p2XF.setEnabled(!ev1.getWidget().getState()); p2YF.setEnabled(!ev1.getWidget().getState()); p2ZF.setEnabled(!ev1.getWidget().getState()); }}); UseY.addEventLink(ValueChangedEvent.class, new Object() { public void processEvent(WidgetEvent ev1) { p1XF.setEnabled(!ev1.getWidget().getState()); p1YF.setEnabled(!ev1.getWidget().getState()); p1ZF.setEnabled(!ev1.getWidget().getState()); p2XF.setEnabled(!ev1.getWidget().getState()); p2YF.setEnabled(!ev1.getWidget().getState()); p2ZF.setEnabled(!ev1.getWidget().getState()); }}); UseZ.addEventLink(ValueChangedEvent.class, new Object() { public void processEvent(WidgetEvent ev1) { p1XF.setEnabled(!ev1.getWidget().getState()); p1YF.setEnabled(!ev1.getWidget().getState()); p1ZF.setEnabled(!ev1.getWidget().getState()); p2XF.setEnabled(!ev1.getWidget().getState()); p2YF.setEnabled(!ev1.getWidget().getState()); p2ZF.setEnabled(!ev1.getWidget().getState()); }}); chkFullCircle.addEventLink(ValueChangedEvent.class, new Object() { public void processEvent(WidgetEvent ev3) { totalPropField.setEnabled(!ev3.getWidget().getState()); RotAngleField.setEnabled(!ev3.getWidget().getState()); Prop_per_Segment.setEnabled(!ev3.getWidget().getState()); Prop_per_Total.setEnabled(!ev3.getWidget().getState()); Angle_per_Segment.setEnabled(!ev3.getWidget().getState()); Angle_per_Total.setEnabled(!ev3.getWidget().getState()); chkAdd_on_End.setEnabled(!ev3.getWidget().getState()); } }); chkRotAlong.addEventLink(ValueChangedEvent.class, new Object() { public void processEvent(WidgetEvent ev) { rotSlideZ.setEnabled(!ev.getWidget().getState()); rotSlideX.setEnabled(!ev.getWidget().getState()); rotSlideY.setEnabled(!ev.getWidget().getState()); } }); Prop_per_Segment.addEventLink(ValueChangedEvent.class, new Object() { public void processEvent(WidgetEvent ev) { if (ev.getWidget().getState() == true){ totalPropField.setValue(totalPropField.getValue()/NumOfSegField.getValue()); } } }); Prop_per_Total.addEventLink(ValueChangedEvent.class, new Object() { public void processEvent(WidgetEvent ev) { if (ev.getWidget().getState()==true){ totalPropField.setValue(totalPropField.getValue()*NumOfSegField.getValue()); } } }); Angle_per_Segment.addEventLink(ValueChangedEvent.class, new Object() { public void processEvent(WidgetEvent ev) { if (ev.getWidget().getState() == true){ RotAngleField.setValue(RotAngleField.getValue()/NumOfSegField.getValue()); } } }); Angle_per_Total.addEventLink(ValueChangedEvent.class, new Object() { public void processEvent(WidgetEvent ev) { if (ev.getWidget().getState() == true){ RotAngleField.setValue(RotAngleField.getValue()*NumOfSegField.getValue()); } } }); //prg = new BProgressBar(0, 1); //Progressbar did not work //===================================================================================== // Drawng the dialogbox //===================================================================================== dialog = new ComponentsDialog( window, "Circular Array" , new Widget [] { new BLabel("Array identification"), ArrNameField, NumOfSegField, AxisDefGrid, P1DefGrid,P2DefGrid, new BSeparator(), new BLabel("Define angular and axial propagation"), chkFullCircle, RotAngleField, AngleDefGrid, totalPropField, PropDefGrid, chkAdd_on_End, new BSeparator(), new BLabel("Define Local Rotation Weights"), chkRotAlong, rotSlideZ, rotSlideX, rotSlideY, new BSeparator(), new BLabel(""), }, new String [] { "", "Name of the Array","Number of Segments","Select axis", "","", "","", "Make a full Circle", "Rotation Angle", "", "Propagation distance","", "Add one to the end", "", "", "Fix Rotations", "Axial", "Circumferencial", "Radial", "", ""}); if (!dialog.clickedOk()) return; // if clicked something else that OK exit the script //===================================================================================== // Getting some values from the dialog.... //===================================================================================== n = NumOfSegField.getValue(); rotWeightZ = rotSlideZ.getValue(); rotWeightX = rotSlideX.getValue(); rotWeightY = rotSlideY.getValue(); if (chkFullCircle.getState() == true){ totalProp = 0.0; dadeg = 360.0/n; } else{ if (Prop_per_Total.getState() == true) {totalProp = totalPropField.getValue();} else{totalProp = totalPropField.getValue()*n;} if (Angle_per_Total.getState() == true) {dadeg = RotAngleField.getValue()/n;} else{dadeg = RotAngleField.getValue();} } //===================================================================================== // Repeat the following to all the objects that were selected //===================================================================================== for (s=0;s