예제 #1
0
class Marker_Set_State:

    version = 1

    state_attributes = (
        "name",
        "marker_model",
        "curve_model",
        "curve_parameters",
        "next_marker_id",
        "file_path",
        "markers",
        "links",
        "extra_attributes",
        "version",
    )

    # ---------------------------------------------------------------------------
    #
    def state_from_marker_set(self, marker_set):

        ms = marker_set
        self.name = ms.name

        if ms.marker_molecule:
            from SessionUtil.stateclasses import Model_State

            self.marker_model = Model_State()
            self.marker_model.state_from_model(ms.marker_molecule)
        else:
            self.marker_model = None

        if ms.curve_model:
            from SessionUtil.stateclasses import Model_State

            cm = Model_State()
            cm.state_from_model(ms.curve_model)
            self.curve_parameters = ms.curve_parameters
            self.curve_model = cm
        else:
            self.curve_model = None
            self.curve_parameters = None

        self.next_marker_id = ms.next_marker_id
        self.file_path = ms.file_path

        self.markers = []
        for m in ms.atom_to_marker.values():
            s = Marker_State()
            s.state_from_marker(m)
            self.markers.append(s)

        self.links = []
        for l in ms.bond_to_link.values():
            s = Link_State()
            s.state_from_link(l)
            self.links.append(s)

        if hasattr(ms, "extra_attribtues"):  # from reading XML
            self.extra_attributes = ms.extra_attributes
        else:
            self.extra_attributes = None

    # ---------------------------------------------------------------------------
    #
    def create_object(self):

        import markerset

        ms = markerset.Marker_Set(self.name)

        ms.next_marker_id = self.next_marker_id
        ms.file_path = self.file_path

        id_to_marker = {}
        for m in self.markers:
            marker = m.create_object(ms)
            id_to_marker[marker.id] = marker

        for l in self.links:
            l.create_object(id_to_marker)

        if self.extra_attributes:
            ms.extra_attributes = self.extra_attributes

        if self.marker_model and ms.marker_molecule:
            self.marker_model.restore_state(ms.marker_molecule)

        cm = self.curve_model
        if cm:
            radius, band_length, subdivisions = self.curve_parameters
            ms.show_curve(radius, band_length, subdivisions)
            cm.restore_state(ms.curve_model)

        return ms