Skip to content
Tamu edited this page Jun 20, 2023 · 11 revisions


Speckle connector for TopSolid : Wiki

Speckle is an open source data platform for interoperability in AEC.


Community forum users website docs



About the connector for TopSolid

https://github.com/ENAC-CNPA/Speckle.TopSolid



New Features



Topological tracking


How to identify the topological elements of a geometry (vertex, edge, face) to keep track of the modifications in Speckle ?


A) Example of a workflow


1. Sending first v1.0 geometry (every vertex, face has is own unique ID)

form-a


2. Send seconding v1.0 geometry : the Face 1.1 and 1.2 are merged to create one new surface.

form-b


Vertices 1, 2, 5, 6, 7, 8 are not modified. Only vertex 3 and 4 are moved.


Use case

  1. Doc A: Sending an item in Speckle (with Moniker info)
  2. Doc B: In another document import the Speckle element
  3. Doc B: Create a Topsolid Shape with the same Monikers
  4. Doc B: Edit Geometry and Reference in Speckle
  5. Doc A: Reception of the new geometry (with the links of the existing Operations: Coloring 1, etc.)

workflow-stream-speckle


Tracking methodology

Alternative :

  1. Geometry comparison : Like code in Git

  2. Object tracking with ID : each ID can have a state (modified, unmodified)

  3. Other ???



Result with object tracking methodology (alias)

Geometry-Tracking

Conclusion

All geometries that remain after the update keep the link to their modifiers (color, fillet, etc.)




Code implementation suggestion


"elements": [
                {
                    "id": "83d869f2927f51530a580651ac4313cb",
                    "area": 0,
                    "bbox": {},
                     
                    // Example of new alias Class
                    "alias": {
                        // List of faces with are Moniker* (sorting matters)
                        "Faces": [
                            "F142(s132(7),0,1)",
                            "F142(s132(10),0,1)"
                        ],
                        // List of edges with are Moniker* (sorting matters
                        "Edges": [
                            "E159.1(F142(s132(7),0,1),F159(1),0)",
                            "E159.1(F142(s132(7),0,1),F159(s149(10),0,1),0)"
                        ],
                        // List of vertices with are Moniker* and a hash containing 
                        // all the Monikers* of the faces and edges that are connected
                        "Vertices": [
                            {
                                "Moniker": "V159(v149(5),2)",
                                "Hash": "00F54800373471341CF5FE075B3768CD"
                            },
                            {
                                "Moniker": "V142(v132(3),2)",
                                "Hash": "36F4019130AA9DA5066FC2B95D3D9B20"
                            }
                        ]
                    },

                    // * A Moniker is the geometry modification history,
                    //   it can be compared to a unique identifier. 

                    "units": "m",
                    "volume": 0,
                    "IsClosed": false,
                    "EdgesValue": [],
                    "FacesValue": [],
                    "LoopsValue": [],
                    "TrimsValue": [],
                }
            ]