The XML file for the extension WizardDemos
references multiple
IronPython scripts:
<script src="main.py" /> <script src="ds.py" /> <script src="dm.py" /> <script src="sc.py" />
The script main.py defines the functions executed by the
callbacks for steps in the wizard ProjectWizard
.
geoSystem = None dsSystem = None fluentSystem = None def EmptyAction(step): pass def InitTabularData(step): table = step.Properties["TableB"] for i in range(1, 10): table.AddRow() table.Properties["Integer"].Value = i table.Properties["FileOpen"].Value = "super" table.Properties["Number"].Value = 45.21 table.Properties["ReadOnly"].Value = 777 table.Properties["myselect"].Properties["TestStr"].Value = 777 table.Properties["myselect"].Properties["Number B"].Value = 777 table.SaveActiveRow() def CreateGeometry(step): global geoSystem template1 = GetTemplate(TemplateName="Geometry") geoSystem = template1.CreateSystem() geometry1 = geoSystem.GetContainer(ComponentName="Geometry") geometry1.SetFile(FilePath=step.Properties["definition/filename"].Value) def DeleteGeometry(step): global geoSystem geoSystem.Delete() def RefreshMechanical(step): tree = step.UserInterface.GetComponent("Tree") root = tree.CreateTreeNode("Root") node1 = tree.CreateTreeNode("Node1") node2 = tree.CreateTreeNode("Node2") node3 = tree.CreateTreeNode("Node3") root.Values.Add(node1) root.Values.Add(node2) node2.Values.Add(node1) node2.Values.Add(node3) root.Values.Add(node3) tree.SetTreeRoot(root) chart = step.UserInterface.GetComponent("Chart") chart.Plot([1,2,3,4,5],[10,4,12,13,8],"b","Line1") chart.Plot([1,2,3,4,5],[5,12,7,8,11],"r","Line2") def CreateMechanical(step): global dsSystem, geoSystem template2 = GetTemplate( TemplateName="Static Structural", Solver="ANSYS") geometryComponent1 = geoSystem.GetComponent(Name="Geometry") dsSystem = template2.CreateSystem( ComponentsToShare=[geometryComponent1], Position="Right", RelativeTo=geoSystem) if step.Properties["name"].Value=="error": raise UserErrorMessageException("Invalid system name. Please try again.") dsSystem.DisplayText = step.Properties["name"].Value def DeleteMechanical(step): global dsSystem dsSystem.Delete() def CreateFluent(step): global dsSystem, fluentSystem template3 = GetTemplate(TemplateName="Fluid Flow") geometryComponent2 = dsSystem.GetComponent(Name="Geometry") solutionComponent1 = dsSystem.GetComponent(Name="Solution") componentTemplate1 = GetComponentTemplate(Name="CFDPostTemplate") fluentSystem = template3.CreateSystem( ComponentsToShare=[geometryComponent2], DataTransferFrom=[Set(FromComponent=solutionComponent1, TransferName=None, ToComponentTemplate=componentTemplate1)], Position="Right", RelativeTo=dsSystem) if step.Properties["name"].Value=="error": raise Exception("Invalid system name. Please try again.") fluentSystem.DisplayText = step.Properties["name"].Value def CreateDialog(step): comp = step.UserInterface.Panel.CreateOKCancelDialog("MyDialog", "MyTitle", 400, 150) comp.SetOkButton("Ok") comp.SetMessage("My own message") comp.SetCallback(cbDialog) prop = step.Properties["nextstep"] prop.Options.Clear() s = step.NextStep val = s.Caption while s!=None: prop.Options.Add(s.Caption) s = s.NextStep prop.Value = val def cbDialog(sender, args): dialog = CurrentWizard.CurrentStep.UserInterface.GetComponent("MyDialog").Hide() def ValidateDialog(step, prop): dialog = step.UserInterface.GetComponent("MyDialog") dialog.Show() def worker(step): progressDialog = step.UserInterface.GetComponent("Progress") progress = progressDialog.GetFirstOrDefaultComponent() progress.Reset() stopped = progress.UpdateProgress("Start progress...", 0, True) progressDialog.Show() for i in range(100): System.Threading.Thread.Sleep(100) stopped = progress.UpdateProgress("Start progress...", i+1, True) if stopped: break progressDialog.Hide() def ValidateDialogProgress(step, prop): thread = System.Threading.Thread(System.Threading.ParameterizedThreadStart(worker)) thread.Start(step) def ValidateNextStep(step, prop): prop = step.Properties["nextstep"] s = step.NextStep v = False while s!=None: if prop.Value==s.Caption: v = True s.IsEnabled = v s = s.NextStep steps = step.UserInterface.GetComponent("Steps") steps.UpdateData() steps.Refresh() def RefreshReport(step): report = step.UserInterface.GetComponent("Report") report.SetHtmlContent(System.IO.Path.Combine(ExtAPI.Extension.InstallDir,"help","report.html")) report.Refresh() def EmptyReset(step): pass def LogReport(step): ExtAPI.Log.WriteMessage("Report:") for s in step.Wizard.Steps.Values: ExtAPI.Log.WriteMessage("Step "+s.Caption) for prop in s.AllProperties: ExtAPI.Log.WriteMessage(prop.Caption+": "+prop.DisplayString) import random import math def RefreshCharts(step): graph = step.UserInterface.GetComponent("Graph") graph.Title("Line Bar Graph") graph.ShowLegend(False) graph.Plot([-1, 0, 1, 2, 3, 4], [0.5, -0.5, 0.5, -0.5, 0.5, 0.5], key="Variable A", color='g') graph.Bar([-1, 0, 1, 2, 3, 4], [10, 20, 30, 10, 5, 20], key="Variable B") graphB = step.UserInterface.GetComponent("GraphB") graphB.Title("Plot Graph") graphB.YTickFormat("0.2f") xValues = [] yValues = [] for i in range(0, 100): xValues.append(i) yValues.append(abs(math.sin(i*0.2))*i/100.0) graphB.Plot(xValues, yValues, key="y = a*sin(bx)", color="c") graphB.Plot(xValues, yValues, key="y = x", color="m") xValues = [] yValues = [] for i in range(0, 100): xValues.append(i) yValues.append(i/100.0) graphB.Plot(xValues, yValues, key="y = x", color="m") graphB.Plot([0, 10, 20, 30, 100], [0.2, 0.2, 0.2, 0.3, 0.3], key="Smth", color="r") graphB.Plot([0, 10, 20, 30, 100], [0.2, 0.1, 0.3, 0.5, 0.7], key="Smth", color="r") graphB.Plot([0, 10, 20, 30, 100], [0.2, 0.2, 0.2, 0.3, 0.3]) graphC = step.UserInterface.GetComponent("GraphC") graphC.Title("Pie Graph") graphC.Pie([1, 2, 3]) graphC.Pie([20, 30, 5, 15, 12], [0, "Banana", 2, 3, "42"]) graphD = step.UserInterface.GetComponent("GraphD") graphD.Title("Bar Graph") graphD.Bar(["Banana"], [70], key="key") graphD.Bar([0, "Banana", 2, 3, 4], [20, 30, 5, 15, 12], key="key") graphE = step.UserInterface.GetComponent("GraphE") graphE.Title("Bubble Graph") graphE.XTickFormat("f") graphE.YTickFormat("f") keys = ["one", "two", "three", "four", "five"] colors = ["#BB3333", "#33BB33", "#3333BB", "#BBBB33", "#BB33BB"] for c in range(0, 5): xValues = [] yValues = [] sizeValues = [] for i in range(0, (c+1)*20): rad = random.randrange(c+1, c+2) + (random.random()*2-1) angle = random.random() * 2 * math.pi xValues.append(math.cos(angle) * rad) yValues.append(math.sin(angle) * rad) sizeValues.append(random.random() * 2.0 + 0.5) graphE.Bubble(xValues, yValues, sizeValues, key=keys[c], color=colors[c]) def CreateStaticStructural(step): template1 = GetTemplate( TemplateName="Static Structural", Solver="ANSYS") system1 = template1.CreateSystem() system1.DisplayText = "toto" nextStep = step.NextStep if nextStep!=None: nextStep.SystemName = system1.Name nextStep.ComponentName = "Geometry" nextStep = nextStep.NextStep if nextStep!=None: nextStep.SystemName = system1.Name nextStep.ComponentName = "Geometry" nextStep = nextStep.NextStep if nextStep!=None: nextStep.SystemName = system1.Name nextStep.ComponentName = "Geometry" nextStep = nextStep.NextStep if nextStep!=None: nextStep.SystemName = system1.Name nextStep.ComponentName = "Geometry" nextStep = nextStep.NextStep if nextStep!=None: nextStep.SystemName = system1.Name nextStep.ComponentName = "Model" nextStep = nextStep.NextStep if nextStep!=None: nextStep.SystemName = system1.Name nextStep.ComponentName = "Model" def OnSelectContext(step, prop): firstDMStep = step.NextStep secondDMStep = firstDMStep.NextStep firstSCStep = secondDMStep.NextStep secondSCStep = firstSCStep.NextStep firstGeoStep = step.NextStep if prop.Value == "DesignModeler": firstDMStep.IsEnabled = True secondDMStep.IsEnabled = True firstSCStep.IsEnabled = False secondSCStep.IsEnabled = False elif prop.Value == "SpaceClaim": firstDMStep.IsEnabled = False secondDMStep.IsEnabled = False firstSCStep.IsEnabled = True secondSCStep.IsEnabled = True panel = step.UserInterface.Panel.GetComponent("Steps") panel.UpdateData() panel.Refresh() def RefreshResultsProject(step): step.Properties["Res"].Value = ExtAPI.Extension.Attributes["result"] panel = step.UserInterface.Panel.GetComponent("Properties") panel.UpdateData() panel.Refresh()
For a mixed wizard, the definition of the first step executed in the Project tab specifies the Ansys products from which subsequent steps are executed. For instance, in the following excerpted code, multiple actions are defined. Steps in the mixed wizard call these actions.
… def action1(step): template1 = GetTemplate( TemplateName="Static Structural", Solver="ANSYS") system1 = template1.CreateSystem() geometry1 = system1.GetContainer(ComponentName="Geometry") geometry1.SetFile(FilePath=step.Properties["filename"].Value) nextStep = step.NextStep if nextStep!=None: nextStep.SystemName = system1.Name nextStep.ComponentName = "Geometry" thirdStep = step.Wizard.Steps["Step3"] if thirdStep!=None: thirdStep.SystemName = system1.Name thirdStep.ComponentName = "Model" …