# Create an options dialog void createDefaultDialog(Dialog ui) { Widget w; # Set title and vertical automatic filling of main dialog layout ui.title = "Bucky Tubulator"; # Basic controls ui.verticalFill = TRUE; ui.addIntegerSpin("nBenzeneSpin", "Number of benzenes around circumference", 4, 1000, 1, 10); ui.addIntegerSpin("nStacksSpin", "Number of stacks along tube length", 1, 1000, 1, 10); ui.addDoubleSpin("bondLengthSpin", "Benzene C-C bond length", 0.1, 100.0, 0.01, 1.39); ui.addCheck("createModelCheck", "Create new model", 1); } # Show (execute) the dialog to allow user interaction. # The function returns 0 for 'canceled' or '1' for 'ok' if (!showDefaultDialog()) error("Dialog canceled.\n"); # Get widget values Dialog ui = defaultDialog(); int nbenz = ui.asInteger("nBenzeneSpin"); int nstacks = ui.asInteger("nStacksSpin"); double rcc = ui.asDouble("bondLengthSpin"); int loop, benz; Atom hAtom; // Calculate rotation increment around circumference double dz = 360.0/(nbenz*2.0); # Create / get target model Model targetModel; if (ui.asInteger("createModelCheck")) targetModel = newModel("BuckyTube"); else targetModel = aten.frame; if (!targetModel) error("No valid target model.\n"); # Clear the current selection, ready for the main loop targetModel.selectNone(); # Outer loop - loop over stacks for (loop=0; loop <= nstacks; ++loop) { # Inner loop - loop over benzene molecules for (benz=0; benz