Beispiel #1
0
    def pickPositions(self):

        refs = []

        for name in self.pick_transform:

            if "#" in name:
                i = 0
                while not self.minmax[name].max > 0 or i < self.minmax[name].max:
                    localName = string.replaceSharpWithPadding(name, i)

                    position = uit.pickPosition("Pick %s position"%localName, False)
                    if not position:
                        break
                    self.tra[localName] = tra.getTransformFromPosition(position)
                    refs.append(self.drawRef(self.tra[localName]))

                    i += 1

                if i < self.minmax[name].min:
                    gear.log("Minimum of object requiered for "+name+" hasn't been reached", gear.sev_warning)
                    xsi.DeleteObj(refs)
                    return False
            else:
                position = uit.pickPosition("Pick %s position"%name, True)
                if not position:
                    xsi.DeleteObj(refs)
                    return False

                self.tra[name] = tra.getTransformFromPosition(position)
                refs.append(self.drawRef(self.tra[name]))

        xsi.DeleteObj(refs)

        return True
Beispiel #2
0
    def addLocMulti(self, name, parent):

        if "#" not in name:
            gear.log("You need to put a '#' in the name of multiple location.",
                     gear.sev_error)
            return False

        locs = []

        i = 0
        while True:
            localName = string.replaceSharpWithPadding(name, i)
            if localName not in self.tra.keys():
                break

            loc = pri.addNull(parent, self.getName(localName),
                              self.tra[localName])
            pri.setNullDisplay(loc, 1, .5, 2, 0, 0, 0, .5, .5, .5,
                               GUIDE_LOC_COLOR)
            par.addExpression(loc.size, self.root.size.FullName + " * .5")
            locs.append(loc)
            parent = loc

            i += 1

        return locs
Beispiel #3
0
    def addLocMulti(self, name, parent):

        if "#" not in name:
            gear.log("You need to put a '#' in the name of multiple location.", gear.sev_error)
            return False

        locs = []

        i = 0
        while True:
            localName = string.replaceSharpWithPadding(name, i)
            if localName not in self.tra.keys():
                break

            loc = pri.addNull(parent, self.getName(localName), self.tra[localName])
            pri.setNullDisplay(loc, 1, .5, 2, 0, 0, 0, .5, .5, .5, GUIDE_LOC_COLOR)
            par.addExpression(loc.size, self.root.size.FullName+" * .5")
            locs.append(loc)
            parent = loc

            i += 1

        return locs
Beispiel #4
0
    def getAsXml(self):

        xml_comp = etree.Element("component")
        xml_comp.set("name", self.fullName)
        xml_comp.set("type", self.type)
        if self.parentComponent is None:
            xml_comp.set("parent", "None")
        else:
            xml_comp.set(
                "parent",
                self.parentComponent.fullName + "." + self.parentLocalName)
        xml_comp.set("root_size", str(self.root.size.Value))

        # Settings and parameters
        xml_settings = self.getParametersAsXml("settings")
        xml_comp.append(xml_settings)

        # Objects
        xml_objects = etree.SubElement(xml_comp, "objects")
        for name in self.objectNames:
            if "#" in name:
                i = 0
                while not self.minmax[name].max > 0 or i < self.minmax[
                        name].max:
                    localName = string.replaceSharpWithPadding(name, i)

                    xsixmldom.setOptions(
                        X3DObject_children=False,
                        X3DObject_primitive=(name in self.save_primitive),
                        X3DObject_kinematics=(name in self.save_transform
                                              or name in self.save_blade),
                        X3DObject_properties=[],
                        Kinematics_local=False,
                        Kinematics_constraints=False,
                        Kinematics_removeScaling=True,
                        Geometry_addScaling=True,
                        Geometry_stack=False)

                    obj = self.model.FindChild(self.getName(localName))
                    if not obj:
                        break
                    xml_def = xsixmldom.getObject(obj).xml
                    xml_def.set("localName", localName)
                    xml_objects.append(xml_def)

                    i += 1

                if i < self.minmax[name].min:
                    gear.log(
                        "Minimum of object requiered for " + name +
                        " hasn't been reached", gear.sev_warning)
                    self.valid = False
                    continue

            else:
                xsixmldom.setOptions(
                    X3DObject_children=False,
                    X3DObject_primitive=(name in self.save_primitive),
                    X3DObject_kinematics=(name in self.save_transform
                                          or name in self.save_blade),
                    X3DObject_properties=[],
                    Kinematics_local=False,
                    Kinematics_constraints=False,
                    Kinematics_removeScaling=True,
                    Geometry_addScaling=True,
                    Geometry_stack=False)

                obj = self.model.FindChild(self.getName(name))
                if not obj:
                    gear.log("Object missing : %s" % name, gear.sev_warning)
                    continue
                xml_def = xsixmldom.getObject(obj).xml
                xml_def.set("localName", name)
                xml_objects.append(xml_def)

        return xml_comp
Beispiel #5
0
    def setFromXml(self, xml_comp):

        # ---------------------------------------------------
        # Settings
        xml_settings = xml_comp.find("settings")
        self.setParamDefValuesFromXml(xml_settings)

        # ---------------------------------------------------
        # First get all the object available in the xml (it's faster that way)
        xml_objects = xml_comp.find("objects")
        for xml_obj in xml_objects.findall("x3dobject"):
            localName = xml_obj.get("localName")
            xObj = xsixmldom.xmlToObject(xml_obj)

            xml_kine = xml_obj.find("kinematics")
            if xml_kine and len(xml_kine):
                t = xObj.getGlobalTransform()
                self.tra[localName] = t
                self.pos[localName] = t.Translation

            xml_prim = xml_obj.find("primitive")
            if xml_prim and len(xml_prim):
                self.prim[localName] = pri.getPrimitive(xml_obj)

            if localName in self.save_blade:
                self.blades[localName] = vec.Blade(self.tra[localName])

        # ---------------------------------------------------
        # Then check what is missing
        for name in self.save_transform:
            if "#" in name:
                i = 0
                while not self.minmax[name].max > 0 or i < self.minmax[
                        name].max:
                    localName = string.replaceSharpWithPadding(name, i)

                    if localName not in self.tra.keys():
                        break

                    self.atra.append(self.tra[localName])
                    self.apos.append(self.pos[localName])

                    i += 1

                if i < self.minmax[name].min:
                    gear.log(
                        "Minimum of object requiered for " + name +
                        " hasn't been reached", gear.sev_warning)
                    self.valid = False
                    continue
            else:
                if name not in self.tra.keys():
                    gear.log("Object missing : %s" % name, gear.sev_warning)
                    self.valid = False
                    continue

                self.atra.append(self.tra[name])
                self.apos.append(self.pos[name])

        for name in self.save_primitive:
            if name not in self.prim.keys():
                gear.log("Object missing : %s" % name, gear.sev_warning)
                self.valid = False
                continue

        for name in self.save_blade:
            if name not in self.blades.keys():
                gear.log("Object missing : %s" % name, gear.sev_warning)
                self.valid = False
                continue

        self.size = self.getSize()
        self.root_size = float(xml_comp.get("root_size"))
Beispiel #6
0
    def setFromHierarchy(self, root):

        self.root = root
        self.model = self.root.Model

        # ---------------------------------------------------
        # First check and set the settings
        self.settings = self.root.Properties("settings")
        if not self.settings:
            gear.log(
                "Can't find the 'setting' property. %s is not a proper guide."
                % self.root.Name, gear.sev_error)
            self.valid = False
            return

        self.setParamDefValuesFromProperty(self.settings)

        # ---------------------------------------------------
        # Then get the objects
        for name in self.save_transform:
            if "#" in name:
                i = 0
                while not self.minmax[name].max > 0 or i < self.minmax[
                        name].max:
                    localName = string.replaceSharpWithPadding(name, i)

                    obj = self.model.FindChild(self.getName(localName))
                    if not obj:
                        break

                    self.tra[localName] = obj.Kinematics.Global.Transform
                    self.atra.append(obj.Kinematics.Global.Transform)
                    self.pos[
                        localName] = obj.Kinematics.Global.Transform.Translation
                    self.apos.append(
                        obj.Kinematics.Global.Transform.Translation)

                    i += 1

                if i < self.minmax[name].min:
                    gear.log(
                        "Minimum of object requiered for " + name +
                        " hasn't been reached", gear.sev_warning)
                    self.valid = False
                    continue

            else:
                obj = self.model.FindChild(self.getName(name))
                if not obj:
                    gear.log("Object missing : %s" % name, gear.sev_warning)
                    self.valid = False
                    continue

                self.tra[name] = obj.Kinematics.Global.Transform
                self.atra.append(obj.Kinematics.Global.Transform)
                self.pos[name] = obj.Kinematics.Global.Transform.Translation
                self.apos.append(obj.Kinematics.Global.Transform.Translation)

        for name in self.save_primitive:
            obj = self.model.FindChild(self.getName(name))
            if not obj:
                gear.log("Object missing : %s" % name, gear.sev_warning)
                self.valid = False
                continue

            self.prim[name] = pri.getPrimitive(obj)

        for name in self.save_blade:
            obj = self.model.FindChild(self.getName(name))
            if not obj:
                gear.log("Object missing : %s" % name, gear.sev_warning)
                self.valid = False
                continue

            self.blades[name] = vec.Blade(obj.Kinematics.Global.Transform)

        self.size = self.getSize()
        self.root_size = self.root.size.Value
Beispiel #7
0
    def getAsXml(self):

        xml_comp = etree.Element("component")
        xml_comp.set("name", self.fullName)
        xml_comp.set("type", self.type)
        if self.parentComponent is None:
            xml_comp.set("parent", "None")
        else:
            xml_comp.set("parent", self.parentComponent.fullName+"."+self.parentLocalName)
        xml_comp.set("root_size", str(self.root.size.Value))

        # Settings and parameters
        xml_settings = self.getParametersAsXml("settings")
        xml_comp.append(xml_settings)

        # Objects
        xml_objects = etree.SubElement(xml_comp, "objects")
        for name in self.objectNames:
            if "#" in name:
                i = 0
                while not self.minmax[name].max > 0 or i < self.minmax[name].max:
                    localName = string.replaceSharpWithPadding(name, i)

                    xsixmldom.setOptions(X3DObject_children=False,
                                             X3DObject_primitive=(name in self.save_primitive),
                                             X3DObject_kinematics=(name in self.save_transform or name in self.save_blade),
                                             X3DObject_properties=[],
                                             Kinematics_local=False,
                                             Kinematics_constraints=False,
                                             Kinematics_removeScaling=True,
                                             Geometry_addScaling=True,
                                             Geometry_stack=False)

                    obj = self.model.FindChild(self.getName(localName))
                    if not obj:
                        break
                    xml_def = xsixmldom.getObject(obj).xml
                    xml_def.set("localName", localName)
                    xml_objects.append(xml_def)

                    i += 1

                if i < self.minmax[name].min:
                    gear.log("Minimum of object requiered for "+name+" hasn't been reached", gear.sev_warning)
                    self.valid = False
                    continue

            else:
                xsixmldom.setOptions(X3DObject_children=False,
                                         X3DObject_primitive=(name in self.save_primitive),
                                         X3DObject_kinematics=(name in self.save_transform or name in self.save_blade),
                                         X3DObject_properties=[],
                                         Kinematics_local=False,
                                         Kinematics_constraints=False,
                                         Kinematics_removeScaling=True,
                                         Geometry_addScaling=True,
                                         Geometry_stack=False)

                obj = self.model.FindChild(self.getName(name))
                if not obj:
                    gear.log("Object missing : %s"%name, gear.sev_warning)
                    continue
                xml_def = xsixmldom.getObject(obj).xml
                xml_def.set("localName", name)
                xml_objects.append(xml_def)

        return xml_comp
Beispiel #8
0
    def setFromXml(self, xml_comp):

        # ---------------------------------------------------
        # Settings
        xml_settings = xml_comp.find("settings")
        self.setParamDefValuesFromXml(xml_settings)

        # ---------------------------------------------------
        # First get all the object available in the xml (it's faster that way)
        xml_objects = xml_comp.find("objects")
        for xml_obj in xml_objects.findall("x3dobject"):
            localName = xml_obj.get("localName")
            xObj = xsixmldom.xmlToObject(xml_obj)

            xml_kine = xml_obj.find("kinematics")
            if xml_kine and len(xml_kine):
                t = xObj.getGlobalTransform()
                self.tra[localName] = t
                self.pos[localName] = t.Translation

            xml_prim = xml_obj.find("primitive")
            if xml_prim  and len(xml_prim):
                self.prim[localName] = pri.getPrimitive(xml_obj)

            if localName in self.save_blade:
                self.blades[localName] = vec.Blade(self.tra[localName])

        # ---------------------------------------------------
        # Then check what is missing
        for name in self.save_transform:
            if "#" in name:
                i = 0
                while not self.minmax[name].max > 0 or i < self.minmax[name].max:
                    localName = string.replaceSharpWithPadding(name, i)

                    if localName not in self.tra.keys():
                        break

                    self.atra.append(self.tra[localName])
                    self.apos.append(self.pos[localName])

                    i += 1

                if i < self.minmax[name].min:
                    gear.log("Minimum of object requiered for "+name+" hasn't been reached", gear.sev_warning)
                    self.valid = False
                    continue
            else:
                if name not in self.tra.keys():
                    gear.log("Object missing : %s"%name, gear.sev_warning)
                    self.valid = False
                    continue

                self.atra.append(self.tra[name])
                self.apos.append(self.pos[name])

        for name in self.save_primitive:
            if name not in self.prim.keys():
                gear.log("Object missing : %s"%name, gear.sev_warning)
                self.valid = False
                continue

        for name in self.save_blade:
            if name not in self.blades.keys():
                gear.log("Object missing : %s"%name, gear.sev_warning)
                self.valid = False
                continue

        self.size = self.getSize()
        self.root_size = float(xml_comp.get("root_size"))
Beispiel #9
0
    def setFromHierarchy(self, root):

        self.root = root
        self.model = self.root.Model

        # ---------------------------------------------------
        # First check and set the settings
        self.settings = self.root.Properties("settings")
        if not self.settings:
            gear.log("Can't find the 'setting' property. %s is not a proper guide."%self.root.Name, gear.sev_error)
            self.valid = False
            return

        self.setParamDefValuesFromProperty(self.settings)

        # ---------------------------------------------------
        # Then get the objects
        for name in self.save_transform:
            if "#" in name:
                i = 0
                while not self.minmax[name].max > 0 or i < self.minmax[name].max:
                    localName = string.replaceSharpWithPadding(name, i)

                    obj = self.model.FindChild(self.getName(localName))
                    if not obj:
                        break

                    self.tra[localName] = obj.Kinematics.Global.Transform
                    self.atra.append(obj.Kinematics.Global.Transform)
                    self.pos[localName] = obj.Kinematics.Global.Transform.Translation
                    self.apos.append(obj.Kinematics.Global.Transform.Translation)

                    i += 1

                if i < self.minmax[name].min:
                    gear.log("Minimum of object requiered for "+name+" hasn't been reached", gear.sev_warning)
                    self.valid = False
                    continue

            else:
                obj = self.model.FindChild(self.getName(name))
                if not obj:
                    gear.log("Object missing : %s"%name, gear.sev_warning)
                    self.valid = False
                    continue

                self.tra[name] = obj.Kinematics.Global.Transform
                self.atra.append(obj.Kinematics.Global.Transform)
                self.pos[name] = obj.Kinematics.Global.Transform.Translation
                self.apos.append(obj.Kinematics.Global.Transform.Translation)

        for name in self.save_primitive:
            obj = self.model.FindChild(self.getName(name))
            if not obj:
                gear.log("Object missing : %s"%name, gear.sev_warning)
                self.valid = False
                continue

            self.prim[name] = pri.getPrimitive(obj)

        for name in self.save_blade:
            obj = self.model.FindChild(self.getName(name))
            if not obj:
                gear.log("Object missing : %s"%name, gear.sev_warning)
                self.valid = False
                continue

            self.blades[name] = vec.Blade(obj.Kinematics.Global.Transform)

        self.size = self.getSize()
        self.root_size = self.root.size.Value