from abaqusGui import * from abaqusConstants import * from odbAccess import * ########################################################################### # Class definition ########################################################################### class MirrorOdbForm(AFXForm): #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def __init__(self, owner): # Construct the base class. AFXForm.__init__(self, owner) self.cmd = AFXGuiCommand(self, 'setValues', 'session.viewports[%s].odbDisplay.basicOptions') # Keywords self.numMirrorsKw = AFXIntKeyword(self.cmd, 'numMirrors', TRUE, 1) self.mirrorCsysNameKw = AFXStringKeyword(self.cmd, 'mirrorCsysName', TRUE) self.mirrorAboutXyPlaneKw = AFXBoolKeyword(command=self.cmd, name='mirrorAboutXyPlane', booleanType=1, isRequired=1, defaultValue=0) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def getFirstDialog(self): return MirrorOdbDB(self) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def doCustomChecks(self): if self.mirrorCsysNameKw.getValue() == '': showAFXErrorDialog(self.getCurrentDialog(), 'A CSYS name must be specified.') return FALSE return TRUE ########################################################################### # Class definition ########################################################################### class MirrorOdbDB(AFXDataDialog): #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def __init__(self, form): self.form = form AFXDataDialog.__init__(self, self.form, 'Mirror ODB Model', self.OK|self.APPLY|self.CANCEL, DIALOG_ACTIONS_SEPARATOR) # Widgets. # va = AFXVerticalAligner(self) spinner = AFXSpinner(va, 4, 'Number of mirrors:', form.numMirrorsKw) spinner.setRange(0, 2) csysCombo = AFXComboBox(va, 1, 5, 'CSYS name:', form.mirrorCsysNameKw, 0) FXCheckButton(self, 'Also mirror about XY plane', form.mirrorAboutXyPlaneKw) # Get csys names. # vp = session.viewports[session.currentViewportName] names = [] try: odbName = vp.odbDisplay.name except: odbName = '' if odbName != '': keys = session.scratchOdbs.keys() if odbName in keys: names.extend ( session.scratchOdbs[odbName].rootAssembly.datumCsyses.keys() ) names.extend ( session.odbs[odbName].rootAssembly.datumCsyses.keys() ) # Fill in csys combo. # names.sort() csysCombo.clearItems() for name in names: csysCombo.appendItem(name) if len(names) > 5: csysCombo.setNumVisible(5) else: csysCombo.setNumVisible( len(names) ) # Register plugin # toolset = getAFXApp().getAFXMainWindow().getPluginToolset() toolset.registerGuiMenuButton(buttonText='Mirror ODB Model...', object=MirrorOdbForm(toolset), applicableModules=('Visualization',), version='1.0', author='', description='Mirrors a symmetric ODB to give the appearance of a full model.', helpUrl='http://www.abaqus.com')