Skip to content

Tracking Issue: Instances tables #1834

@Keavon

Description

@Keavon

Initial

type GraphicElement = VectorData | GraphicGroup;

struct VectorData {
    transform: DAffine2,
}

struct GraphicGroup {
    transform: DAffine2,
    elements: Vec<GraphicElement>,
}

Wrapped in table

type GraphicElement = VectorDataTable | GraphicGroupTable;

struct VectorData {
    // transform has been moved to the table
}
type VectorDataTable = struct Instances<VectorData> {
    transform: Vec<DAffine2>, // count = 1
    instance: Vec<VectorData>, // count = 1
}

struct GraphicGroup {
    // transform has been moved to the table, but not up to the parent group
    elements: Vec<GraphicElement>,
}
type GraphicGroupTable = struct Instances<GraphicGroup> {
    transform: Vec<DAffine2>, // count = 1, parent to all in self.instance[0].elements
    instance: Vec<GraphicGroup>, // count = 1
}

(Inlined GraphicGroup)

type GraphicElement = VectorDataTable | GraphicGroupTable;

struct VectorData {
    // transform has been moved to the table
}
type VectorDataTable = struct Instances<VectorData> {
    transform: Vec<DAffine2>, // count = 1
    instance: Vec<VectorData>, // count = 1
}

type GraphicGroupTable = struct Instances<Vec<GraphicElement>> {
    transform: Vec<DAffine2>, // count = 1, parent to all in self.instance[0]
    instance: Vec<Vec<GraphicElement>>, // count = 1
}
// Document root
// ├─ Top folder
// │  ├─ Inner vector 1
// │  └─ Inner vector 2
// └─ Top vector

// Document root
GraphicGroupTable {
    transform: vec![ // count = 1
        DAffine2::IDENTITY,
    ],
    instance: vec![ // count = 1
        vec![
            // Top folder
            GraphicGroupTable {
                transform: vec![ // count = 1
                    DAffine2::TOP_FOLDER,
                ],
                instance: vec![ // count = 1
                    vec![
                        // Inner vector 1
                        VectorDataTable {
                            transform: vec![ // count = 1
                                DAffine2::INNER_VECTOR_1,
                            ],
                            instance: vec![ // count = 1
                                VectorData {},
                            ],
                        },
                        // Inner vector 2
                        VectorDataTable {
                            transform: vec![ // count = 1
                                DAffine2::INNER_VECTOR_2,
                            ],
                            instance: vec![ // count = 1
                                VectorData {},
                            ],
                        },
                    ],
                ],
            },
            // Top vector
            VectorDataTable {
                transform: vec![ // count = 1
                    DAffine2::TOP_VECTOR,
                ],
                instance: vec![ // count = 1
                    VectorData {},
                ],
            },
        ],
    ],
}

Flattened GraphicGroup with transform moved to parent

type GraphicElement = VectorDataTable | GraphicGroupTable;

struct VectorData {
    // transform has been moved to the table
}
type VectorDataTable = struct Instances<VectorData> {
    transform: Vec<DAffine2>, // count = 1
    instance: Vec<VectorData>, // count = 1
}

type GraphicGroupTable = struct Instances<GraphicElement> {
    transform: Vec<DAffine2>, // parent to its corresponding element in self.instance
    instance: Vec<GraphicElement>,
}
// Document root
// ├─ Top folder
// │  ├─ Inner vector 1
// │  └─ Inner vector 2
// └─ Top vector

// Document root
GraphicGroupTable {
    transform: vec![
        DAffine2::TOP_FOLDER,
        DAffine2::TOP_VECTOR,
    ],
    instance: vec![
        // Top folder
        GraphicGroupTable {
            transform: vec![
                DAffine2::IDENTITY, // from the Merge layer node
                DAffine2::IDENTITY, // from the Merge layer node
            ],
            instance: vec![
                // Inner vector 1
                VectorDataTable {
                    transform: vec![ // count = 1
                        DAffine2::INNER_VECTOR_1,
                    ],
                    instance: vec![ // count = 1
                        VectorData {},
                    ],
                },
                // Inner vector 2
                VectorDataTable {
                    transform: vec![ // count = 1
                        DAffine2::INNER_VECTOR_2,
                    ],
                    instance: vec![ // count = 1
                        VectorData {},
                    ],
                },
            ],
        },
        // Top vector
        VectorDataTable {
            transform: vec![ // count = 1
                DAffine2::IDENTITY,
            ],
            instance: vec![ // count = 1
                VectorData {},
            ],
        },
    ],
}

Metadata

Metadata

Assignees

Labels

ArchitectureInvolves architecture or engineering work or discussion
No fields configured for Feature.

Projects

Status

Completed This Milestone

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions