def load_model(self, fpath):
     self._vsp = VSP(fpath)
     self._vsp.write_stereo = True
     self._vsp.cpath_updated()
     self._model_file = fpath
     self.invoke_callbacks()
Beispiel #2
0
 def load_model(self, fpath):
     self._vsp = VSP(fpath)
     self._vsp.write_stereo = True
     self._vsp.cpath_updated()
     self._model_file = fpath
     self.invoke_callbacks()
class VSPParametricGeometry(object):
    implements(IParametricGeometry)

    def __init__(self):
        self._callbacks = []
        self._model_file = None
        self._vsp = None
        self._excludes = set(['xml_filename', 'write_stereo'])
        base = ExternalCode()
        for key, val in base.items(iotype=not_none):
            self._excludes.add(key)

    @property
    def model_file(self):
        return self._model_file

    @model_file.setter
    def model_file(self, fname):
        self.load_model(os.path.expanduser(fname))

    def load_model(self, fpath):
        self._vsp = VSP(fpath)
        self._vsp.write_stereo = True
        self._vsp.cpath_updated()
        self._model_file = fpath
        self.invoke_callbacks()

    def regen_model(self):
        if self._vsp is not None:
            self._vsp.run()
            if self._vsp.return_code != 0:
                raise RuntimeError("VSP had a return code of %d" % self._vsp.return_code)

    def list_parameters(self):
        params = []
        if self._vsp is not None:
            for key, val in self._vsp.items(iotype=not_none, recurse=True):
                if key in self._excludes:
                    continue
                meta = self._vsp.get_metadata(key)
                meta['value'] = val
                del meta['type'] # this is always 'trait' and confuses geomcomp
                params.append((key, meta))
        return params

    def set_parameter(self, name, value):
        self._vsp.set(name, value)

    def get_parameters(self, names):
        if self._vsp is None:
            return []
        get = self._vsp.get
        return [get(n) for n in names]

    def get_static_geometry(self):
        if self._model_file is None:
            return None
        parts = os.path.splitext(self.model_file)
        if self.model_file.lower().endswith('vsp'):
            stl = parts[0]+'.stl'
        else:
            stl = self.model_file+'.new.stl'
        return STLGeometryObject(stl)

    def register_param_list_changedCB(self, callback):
        """Register a callback that will be called when self.invoke_callbacks() is called.
        self.invoke_callbacks() should be called from the inheriting class whenever any
        parameters are added, removed, or change their type.
        """
        self._callbacks.append(callback)

    def invoke_callbacks(self):
        """Invokes any callbacks that have been registered via register_param_list_changedCB."""

        for cb in self._callbacks:
            cb()

    def get_attributes(self, io_only=True):
        """Return an attribute dict for use by the openmdao GUI.
        """

        return {
            'type': type(self).__name__,
            'Inputs': [
                {
                    'name': 'model_file',
                    'id': 'model_file',
                    'type': type(self._model_file).__name__,
                    'value': self._model_file,
                    'connected': '',
                }
            ]
        }
Beispiel #4
0
class VSPParametricGeometry(object):
    implements(IParametricGeometry)

    def __init__(self):
        self._callbacks = []
        self._model_file = None
        self._vsp = None
        self._excludes = set(['xml_filename', 'write_stereo'])
        base = ExternalCode()
        for key, val in base.items(iotype=not_none):
            self._excludes.add(key)

    @property
    def model_file(self):
        return self._model_file

    @model_file.setter
    def model_file(self, fname):
        self.load_model(os.path.expanduser(fname))

    def load_model(self, fpath):
        self._vsp = VSP(fpath)
        self._vsp.write_stereo = True
        self._vsp.cpath_updated()
        self._model_file = fpath
        self.invoke_callbacks()

    def regen_model(self):
        if self._vsp is not None:
            self._vsp.run()
            if self._vsp.return_code != 0:
                raise RuntimeError("VSP had a return code of %d" %
                                   self._vsp.return_code)

    def list_parameters(self):
        params = []
        if self._vsp is not None:
            for key, val in self._vsp.items(iotype=not_none, recurse=True):
                if key in self._excludes:
                    continue
                meta = self._vsp.get_metadata(key)
                meta['value'] = val
                del meta[
                    'type']  # this is always 'trait' and confuses geomcomp
                params.append((key, meta))
        return params

    def set_parameter(self, name, value):
        self._vsp.set(name, value)

    def get_parameters(self, names):
        if self._vsp is None:
            return []
        get = self._vsp.get
        return [get(n) for n in names]

    def get_static_geometry(self):
        if self._model_file is None:
            return None
        parts = os.path.splitext(self.model_file)
        if self.model_file.lower().endswith('vsp'):
            stl = parts[0] + '.stl'
        else:
            stl = self.model_file + '.new.stl'
        return STLGeometryObject(stl)

    def register_param_list_changedCB(self, callback):
        """Register a callback that will be called when self.invoke_callbacks() is called.
        self.invoke_callbacks() should be called from the inheriting class whenever any
        parameters are added, removed, or change their type.
        """
        self._callbacks.append(callback)

    def invoke_callbacks(self):
        """Invokes any callbacks that have been registered via register_param_list_changedCB."""

        for cb in self._callbacks:
            cb()

    def get_attributes(self, io_only=True):
        """Return an attribute dict for use by the openmdao GUI.
        """

        return {
            'type':
            type(self).__name__,
            'Inputs': [{
                'name': 'model_file',
                'id': 'model_file',
                'type': type(self._model_file).__name__,
                'value': self._model_file,
                'connected': '',
            }]
        }