diff --git a/data/crossvault_form.json b/data/crossvault_form.json new file mode 100644 index 0000000..5972ce5 --- /dev/null +++ b/data/crossvault_form.json @@ -0,0 +1 @@ +{"dtype": "compas_tno.diagrams/FormDiagram", "data": {"attributes": {"loadpath": 14835.581113574575, "indset": [{"dtype": "compas.geometry/Point", "data": [0.35714285714285715, 0.35714285714285715, 0.0], "guid": "503d3a5d-e7b2-4397-8e6c-06376f76ae2c"}, {"dtype": "compas.geometry/Point", "data": [0.0, 9.642857142857142, 0.0], "guid": "dae9a059-8258-4e6f-be15-4a4101d5a577"}, {"dtype": "compas.geometry/Point", "data": [0.35714285714285715, 9.642857142857142, 0.0], "guid": "2e87ea4a-be50-4c17-9b75-ea0d07e269a0"}, {"dtype": "compas.geometry/Point", "data": [0.35714285714285715, 10.0, 0.0], "guid": "41145b69-c619-4a21-aa87-e4899643412c"}, {"dtype": "compas.geometry/Point", "data": [2.5, 7.857142857142858, 0.0], "guid": "88a4436b-d59e-475f-ae04-6c42743821ac"}, {"dtype": "compas.geometry/Point", "data": [3.928571428571429, 0.7142857142857143, 0.0], "guid": "ca9ca919-bb28-4ca6-81bd-876e0d47e7df"}, {"dtype": "compas.geometry/Point", "data": [3.928571428571429, 3.5714285714285716, 0.0], "guid": "37384494-4e00-4b2f-bdf3-f0fb8c29c855"}, {"dtype": "compas.geometry/Point", "data": [3.928571428571429, 6.071428571428571, 0.0], "guid": "28c25485-085f-4e5a-9880-b758a67568e3"}, {"dtype": "compas.geometry/Point", "data": [4.642857142857142, 5.714285714285714, 0.0], "guid": "9d4fc3d7-321d-468f-af8c-dc535d81b7b2"}, {"dtype": "compas.geometry/Point", "data": [7.142857142857143, 3.928571428571429, 0.0], "guid": "acec856f-ef1c-4c46-a15e-3251c046cbfd"}, {"dtype": "compas.geometry/Point", "data": [9.642857142857142, 0.0, 0.0], "guid": "18967369-8dc1-4ee8-8e82-76856c318218"}, {"dtype": "compas.geometry/Point", "data": [10.0, 9.642857142857142, 0.0], "guid": "d7851cb8-3783-4699-981c-23f576672cb3"}], "thk": 0.5}, "default_vertex_attributes": {"x": 0.0, "y": 0.0, "z": 0.0, "px": 0.0, "py": 0.0, "pz": 0.0, "t": 1.0, "is_support": false, "is_fixed": false, "_rx": 0.0, "_ry": 0.0, "_rz": 0.0, "is_roller": false, "tubmax": null, "tlbmax": null, "tub_reac": null}, "default_edge_attributes": {"q": -1.0, "lmin": 0.0, "lmax": 10000000.0, "hmin": 0.0, "hmax": 10000000.0, "_h": 0.0, "_f": 0.0, "_l": 0.0, "_a": 0.0, "_is_edge": true, "_is_tension": false, "f": -1.0, "is_symmetry": false, "is_ind": false, "qmin": -10000.0, "qmax": 1e-08}, "default_face_attributes": {"_is_loaded": true}, "vertex": {"0": {"x": 0.0, "y": 0.0, "z": 2.550395006756676, "is_fixed": true, "target": 2.8867513459481287, "pz": -4.051595622038328, "ub": 3.35895589123785, "lb": 2.347143367454404, "_rx": 272.83139323765204, "_ry": 272.83139323765175, "_rz": 387.84706202457096, "px": 0.0, "py": 0.0}, "1": {"x": 0.7142857142857076, "y": 2.401882618005735e-15, "z": 3.5176552239222323, "target": 3.868589716493315, "pz": -4.472905070882868, "ub": 4.232639571296611, "lb": 3.484499253638849, "px": 0.0, "py": 0.0}, "2": {"x": 1.826906027481515e-14, "y": 0.7142857142857151, "z": 3.517655223922244, "target": 3.868589716493315, "pz": -4.472905070882868, "ub": 4.232639571296611, "lb": 3.484499253638849, "px": 0.0, "py": 0.0}, "3": {"x": 0.7142857142857141, "y": 0.7142857142857141, "z": 3.4844992536684503, "target": 3.868589716493315, "pz": -12.208619821584008, "ub": 4.232639571296611, "lb": 3.484499253638849, "px": 0.0, "py": 0.0}, "4": {"x": 3.197289813781073e-14, "y": 1.4285714285714297, "z": 4.319191433444169, "target": 4.536323543632775, "pz": -4.6017977082112065, "ub": 4.850513646869282, "lb": 4.213547192873112, "px": 0.0, "py": 0.0}, "5": {"x": 0.7142857142857071, "y": 1.428571428571432, "z": 4.283717156510171, "target": 4.536323543632775, "pz": -8.387892996467846, "ub": 4.850513646869282, "lb": 4.213547192873112, "px": 0.0, "py": 0.0}, "6": {"x": 4.7039833538756505e-14, "y": 2.142857142857144, "z": 4.950228080269235, "target": 5.016977977548923, "pz": -4.138981480995859, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "7": {"x": 0.7142857142857006, "y": 2.1428571428571486, "z": 4.925559493681186, "target": 5.016977977548923, "pz": -8.277962961991719, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "8": {"x": 6.004134234964307e-14, "y": 2.857142857142858, "z": 5.427912803071002, "target": 5.361109642475097, "pz": -3.86452603874309, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "9": {"x": 0.7142857142856944, "y": 2.8571428571428625, "z": 5.412088797615702, "target": 5.361109642475097, "pz": -7.72905207748618, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "10": {"x": 6.977652044376118e-14, "y": 3.571428571428573, "z": 5.762414352379374, "target": 5.593971487843205, "pz": -3.6996026215149955, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "11": {"x": 0.7142857142856915, "y": 3.571428571428571, "z": 5.7536038597966614, "target": 5.593971487843205, "pz": -7.399205243029989, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "12": {"x": 6.972635857448357e-14, "y": 4.285714285714287, "z": 5.9598432468000855, "target": 5.729147340721889, "pz": -3.6104488222333004, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "13": {"x": 0.7142857142856924, "y": 4.285714285714284, "z": 5.956293341927204, "target": 5.729147340721889, "pz": -7.220897644466601, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "14": {"x": 6.352866284912757e-14, "y": 5.000000000000003, "z": 6.0235026918962955, "target": 5.773502691896259, "pz": -3.5821624136260874, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "15": {"x": 0.7142857142856925, "y": 5.000000000000001, "z": 6.023502691928413, "target": 5.773502691896259, "pz": -7.164324827252176, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "16": {"x": 5.839786888996164e-14, "y": 5.714285714285719, "z": 5.954440717286774, "target": 5.729147340721889, "pz": -3.6104488222333004, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "17": {"x": 0.7142857142856947, "y": 5.714285714285718, "z": 5.9562933419280535, "target": 5.729147340721889, "pz": -7.2208976444666, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "18": {"x": 6.434846516046942e-14, "y": 6.428571428571434, "z": 5.751609293352752, "target": 5.5939714878432065, "pz": -3.6996026215149977, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "19": {"x": 0.7142857142856949, "y": 6.428571428571434, "z": 5.753603859798357, "target": 5.5939714878432065, "pz": -7.3992052430299955, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "20": {"x": 5.956898710636168e-14, "y": 7.14285714285715, "z": 5.41170521453107, "target": 5.361109642475098, "pz": -3.8645260387430893, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "21": {"x": 0.7142857142856959, "y": 7.14285714285715, "z": 5.412088797618241, "target": 5.361109642475098, "pz": -7.729052077486179, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "22": {"x": 5.267961771857148e-14, "y": 7.857142857142864, "z": 4.928617962215989, "target": 5.016977977548923, "pz": -4.138981480995859, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "23": {"x": 0.7142857142856991, "y": 7.857142857142862, "z": 4.925559493684571, "target": 5.016977977548923, "pz": -8.27796296199172, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "24": {"x": 4.5743520236179856e-14, "y": 8.571428571428575, "z": 4.292178785877611, "target": 4.5363235436327765, "pz": -4.601797708211205, "ub": 4.850513646869284, "lb": 4.213547192873114, "px": 0.0, "py": 0.0}, "25": {"x": 0.714285714285702, "y": 8.571428571428577, "z": 4.283717156514403, "target": 4.5363235436327765, "pz": -8.387892996467846, "ub": 4.850513646869284, "lb": 4.213547192873114, "px": 0.0, "py": 0.0}, "26": {"x": 2.240975544939016e-14, "y": 9.28571428571429, "z": 3.485240046842372, "target": 3.8685897164933167, "pz": -4.47290507088287, "ub": 4.2326395712966125, "lb": 3.484499253638851, "px": 0.0, "py": 0.0}, "27": {"x": 0.7142857142857122, "y": 9.285714285714286, "z": 3.484499253673538, "target": 3.868589716493315, "pz": -12.208619821584001, "ub": 4.232639571296611, "lb": 3.484499253638849, "px": 0.0, "py": 0.0}, "28": {"x": 0.0, "y": 10.0, "z": 2.512577300163494, "is_fixed": true, "target": 2.8867513459481287, "pz": -4.051595622038328, "ub": 3.35895589123785, "lb": 2.347143367454404, "_rx": 252.76197520730852, "_ry": -252.7619752073079, "_rz": 374.2547178109539, "px": 0.0, "py": 0.0}, "29": {"x": 1.428571428571418, "y": -1.443379140191935e-15, "z": 4.319191433444149, "target": 4.536323543632775, "pz": -4.6017977082112065, "ub": 4.850513646869282, "lb": 4.213547192873112, "px": 0.0, "py": 0.0}, "30": {"x": 1.4285714285714317, "y": 0.7142857142857229, "z": 4.28371715651016, "target": 4.536323543632775, "pz": -8.387892996467846, "ub": 4.850513646869282, "lb": 4.213547192873112, "px": 0.0, "py": 0.0}, "31": {"x": 1.4285714285714284, "y": 1.4285714285714257, "z": 4.260763118265615, "target": 4.536323543632775, "pz": -10.44511117430995, "ub": 4.850513646869282, "lb": 4.213547192873112, "px": 0.0, "py": 0.0}, "32": {"x": 1.428571428571418, "y": 2.1428571428571437, "z": 4.900014187697362, "target": 5.016977977548923, "pz": -7.559732812542551, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "33": {"x": 1.4285714285714133, "y": 2.8571428571428594, "z": 5.3956249972842265, "target": 5.361109642475097, "pz": -7.72905207748618, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "34": {"x": 1.4285714285714106, "y": 3.5714285714285774, "z": 5.744378361470009, "target": 5.593971487843205, "pz": -7.399205243029989, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "35": {"x": 1.4285714285714128, "y": 4.285714285714293, "z": 5.9525416029478695, "target": 5.729147340721889, "pz": -7.220897644466601, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "36": {"x": 1.4285714285714115, "y": 5.000000000000009, "z": 6.02350269195764, "target": 5.773502691896259, "pz": -7.164324827252176, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "37": {"x": 1.428571428571416, "y": 5.714285714285724, "z": 5.958336551961081, "target": 5.729147340721889, "pz": -7.2208976444666, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "38": {"x": 1.4285714285714188, "y": 6.428571428571437, "z": 5.755968259496435, "target": 5.5939714878432065, "pz": -7.3992052430299955, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "39": {"x": 1.4285714285714213, "y": 7.142857142857145, "z": 5.413009844323872, "target": 5.361109642475098, "pz": -7.729052077486179, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "40": {"x": 1.428571428571422, "y": 7.857142857142858, "z": 4.9231939837502265, "target": 5.016977977548923, "pz": -7.5597328125425545, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "41": {"x": 1.4285714285714255, "y": 8.57142857142857, "z": 4.289737863331702, "target": 4.536323543632775, "pz": -10.445111174309956, "ub": 4.850513646869282, "lb": 4.213547192873112, "px": 0.0, "py": 0.0}, "42": {"x": 1.4285714285714215, "y": 9.285714285714276, "z": 4.283717156514387, "target": 4.536323543632775, "pz": -8.387892996467835, "ub": 4.850513646869282, "lb": 4.213547192873112, "px": 0.0, "py": 0.0}, "43": {"x": 0.7142857142857278, "y": 10.000000000000014, "z": 3.4852400468423865, "target": 3.868589716493315, "pz": -4.472905070882871, "ub": 4.232639571296611, "lb": 3.484499253638849, "px": 0.0, "py": 0.0}, "44": {"x": 2.142857142857118, "y": -1.0792238299727254e-14, "z": 4.950228080269199, "target": 5.016977977548923, "pz": -4.138981480995859, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "45": {"x": 2.1428571428571446, "y": 0.7142857142857305, "z": 4.925559493681161, "target": 5.016977977548923, "pz": -8.277962961991719, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "46": {"x": 2.1428571428571446, "y": 1.428571428571424, "z": 4.900014187697352, "target": 5.016977977548923, "pz": -7.559732812542551, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "47": {"x": 2.1428571428571432, "y": 2.142857142857137, "z": 4.888950838352956, "target": 5.016977977548923, "pz": -9.487224039957855, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "48": {"x": 2.1428571428571455, "y": 2.8571428571428505, "z": 5.379924394764626, "target": 5.361109642475097, "pz": -7.0676217332700615, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "49": {"x": 2.142857142857146, "y": 3.5714285714285627, "z": 5.735285192234411, "target": 5.593971487843205, "pz": -7.399205243029991, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "50": {"x": 2.1428571428571455, "y": 4.285714285714274, "z": 5.948670842355686, "target": 5.729147340721889, "pz": -7.220897644466603, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "51": {"x": 2.142857142857148, "y": 4.999999999999991, "z": 6.023502691982327, "target": 5.773502691896259, "pz": -7.164324827252176, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "52": {"x": 2.1428571428571455, "y": 5.714285714285705, "z": 5.960866254192574, "target": 5.729147340721889, "pz": -7.220897644466601, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "53": {"x": 2.1428571428571437, "y": 6.428571428571417, "z": 5.759676015908182, "target": 5.5939714878432065, "pz": -7.399205243029997, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "54": {"x": 2.1428571428571397, "y": 7.142857142857134, "z": 5.41651063027528, "target": 5.361109642475098, "pz": -7.067621733270065, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "55": {"x": 2.142857142857139, "y": 7.857142857142852, "z": 4.937732485700493, "target": 5.016977977548923, "pz": -9.487224039957857, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "56": {"x": 2.1428571428571326, "y": 8.571428571428568, "z": 4.92319398375022, "target": 5.016977977548923, "pz": -7.559732812542548, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "57": {"x": 2.1428571428571335, "y": 9.285714285714269, "z": 4.9255594936845375, "target": 5.016977977548923, "pz": -8.277962961991713, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "58": {"x": 1.4285714285714488, "y": 10.000000000000016, "z": 4.292178785877626, "target": 4.536323543632775, "pz": -4.601797708211207, "ub": 4.850513646869282, "lb": 4.213547192873112, "px": 0.0, "py": 0.0}, "59": {"x": 2.8571428571428235, "y": -1.4705162838891696e-14, "z": 5.427912803070957, "target": 5.361109642475097, "pz": -3.86452603874309, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "60": {"x": 2.857142857142859, "y": 0.7142857142857363, "z": 5.4120887976156675, "target": 5.361109642475097, "pz": -7.72905207748618, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "61": {"x": 2.8571428571428603, "y": 1.4285714285714184, "z": 5.395624997284207, "target": 5.361109642475097, "pz": -7.729052077486179, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "62": {"x": 2.8571428571428594, "y": 2.1428571428571384, "z": 5.379924394764626, "target": 5.361109642475097, "pz": -7.0676217332700615, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "63": {"x": 2.857142857142859, "y": 2.85714285714285, "z": 5.375342515204375, "target": 5.361109642475097, "pz": -8.913171397180259, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "64": {"x": 2.857142857142858, "y": 3.5714285714285596, "z": 5.725422674019583, "target": 5.593971487843205, "pz": -6.772460240998413, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "65": {"x": 2.8571428571428528, "y": 4.285714285714269, "z": 5.944370371474848, "target": 5.729147340721889, "pz": -7.220897644466604, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "66": {"x": 2.857142857142847, "y": 4.999999999999979, "z": 6.0235026919988615, "target": 5.773502691896259, "pz": -7.164324827252176, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "67": {"x": 2.857142857142846, "y": 5.714285714285694, "z": 5.96391503261182, "target": 5.729147340721889, "pz": -7.220897644466603, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "68": {"x": 2.8571428571428483, "y": 6.42857142857141, "z": 5.764511996293524, "target": 5.5939714878432065, "pz": -6.772460240998419, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "69": {"x": 2.857142857142852, "y": 7.142857142857131, "z": 5.43397649861528, "target": 5.361109642475097, "pz": -8.913171397180259, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "70": {"x": 2.8571428571428523, "y": 7.857142857142853, "z": 5.4165106302752815, "target": 5.361109642475097, "pz": -7.067621733270063, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "71": {"x": 2.857142857142842, "y": 8.57142857142856, "z": 5.41300984432386, "target": 5.361109642475097, "pz": -7.729052077486178, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "72": {"x": 2.857142857142846, "y": 9.285714285714267, "z": 5.412088797618195, "target": 5.361109642475097, "pz": -7.729052077486176, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "73": {"x": 2.1428571428571743, "y": 10.000000000000016, "z": 4.92861796221601, "target": 5.016977977548923, "pz": -4.13898148099586, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "74": {"x": 3.5714285714285334, "y": -1.783955230159077e-14, "z": 5.76241435237932, "target": 5.593971487843205, "pz": -3.6996026215149955, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "75": {"x": 3.571428571428576, "y": 0.7142857142857405, "z": 5.753603859796624, "target": 5.593971487843205, "pz": -7.399205243029991, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "76": {"x": 3.5714285714285787, "y": 1.4285714285714133, "z": 5.744378361469982, "target": 5.593971487843205, "pz": -7.3992052430299875, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "77": {"x": 3.571428571428574, "y": 2.1428571428571397, "z": 5.73528519223441, "target": 5.593971487843205, "pz": -7.399205243029991, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "78": {"x": 3.571428571428572, "y": 2.8571428571428505, "z": 5.725422674019581, "target": 5.593971487843205, "pz": -6.772460240998414, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "79": {"x": 3.571428571428574, "y": 3.5714285714285636, "z": 5.724392700848528, "target": 5.593971487843205, "pz": -8.571538726193845, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "80": {"x": 3.571428571428577, "y": 4.285714285714275, "z": 5.938885193400314, "target": 5.729147340721889, "pz": -6.614441772659851, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "81": {"x": 3.5714285714285743, "y": 4.999999999999986, "z": 6.0235026919989245, "target": 5.773502691896259, "pz": -7.164324827252175, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "82": {"x": 3.5714285714285707, "y": 5.714285714285697, "z": 5.967448207140979, "target": 5.729147340721889, "pz": -6.614441772659851, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "83": {"x": 3.571428571428568, "y": 6.428571428571415, "z": 5.78151872832986, "target": 5.593971487843205, "pz": -8.571538726193852, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "84": {"x": 3.5714285714285667, "y": 7.142857142857131, "z": 5.764511996293528, "target": 5.593971487843205, "pz": -6.7724602409984085, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "85": {"x": 3.571428571428565, "y": 7.857142857142857, "z": 5.759676015908183, "target": 5.593971487843205, "pz": -7.399205243029994, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "86": {"x": 3.571428571428555, "y": 8.571428571428559, "z": 5.755968259496423, "target": 5.593971487843205, "pz": -7.399205243029987, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "87": {"x": 3.5714285714285574, "y": 9.285714285714269, "z": 5.753603859798305, "target": 5.593971487843205, "pz": -7.399205243029987, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "88": {"x": 2.8571428571428936, "y": 10.000000000000012, "z": 5.411705214531089, "target": 5.361109642475097, "pz": -3.864526038743091, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "89": {"x": 4.285714285714247, "y": -1.7274503715222304e-14, "z": 5.959843246800026, "target": 5.729147340721889, "pz": -3.6104488222333004, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "90": {"x": 4.285714285714292, "y": 0.7142857142857427, "z": 5.956293341927163, "target": 5.729147340721889, "pz": -7.220897644466601, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "91": {"x": 4.2857142857142945, "y": 1.4285714285714122, "z": 5.952541602947837, "target": 5.729147340721889, "pz": -7.220897644466601, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "92": {"x": 4.285714285714291, "y": 2.1428571428571384, "z": 5.948670842355681, "target": 5.729147340721889, "pz": -7.220897644466603, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "93": {"x": 4.285714285714286, "y": 2.8571428571428505, "z": 5.944370371474841, "target": 5.729147340721889, "pz": -7.220897644466603, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "94": {"x": 4.285714285714287, "y": 3.571428571428565, "z": 5.938885193400311, "target": 5.729147340721889, "pz": -6.614441772659851, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "95": {"x": 4.285714285714287, "y": 4.285714285714276, "z": 5.939452475554869, "target": 5.729147340721889, "pz": -8.396094176603814, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "96": {"x": 4.285714285714287, "y": 4.999999999999989, "z": 6.023502691963068, "target": 5.773502691896259, "pz": -5.970270689376807, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "97": {"x": 4.285714285714286, "y": 5.714285714285702, "z": 5.981001638421747, "target": 5.729147340721889, "pz": -8.396094176603818, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "98": {"x": 4.285714285714281, "y": 6.428571428571416, "z": 5.96744820714098, "target": 5.729147340721889, "pz": -6.614441772659854, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "99": {"x": 4.285714285714284, "y": 7.142857142857131, "z": 5.963915032611831, "target": 5.729147340721889, "pz": -7.2208976444666, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "100": {"x": 4.28571428571428, "y": 7.857142857142855, "z": 5.960866254192578, "target": 5.729147340721889, "pz": -7.220897644466606, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "101": {"x": 4.285714285714268, "y": 8.571428571428559, "z": 5.958336551961068, "target": 5.729147340721889, "pz": -7.2208976444666, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "102": {"x": 4.285714285714261, "y": 9.285714285714272, "z": 5.956293341927995, "target": 5.729147340721889, "pz": -7.220897644466598, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "103": {"x": 3.5714285714286063, "y": 10.000000000000014, "z": 5.751609293352768, "target": 5.593971487843205, "pz": -3.6996026215149955, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "104": {"x": 4.999999999999963, "y": -1.872640919640374e-14, "z": 6.023502691896229, "target": 5.773502691896259, "pz": -3.5821624136260874, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "105": {"x": 5.000000000000007, "y": 0.7142857142857421, "z": 6.023502691928364, "target": 5.773502691896259, "pz": -7.164324827252175, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "106": {"x": 5.000000000000009, "y": 1.4285714285714097, "z": 6.023502691957602, "target": 5.773502691896259, "pz": -7.164324827252175, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "107": {"x": 5.000000000000006, "y": 2.142857142857139, "z": 6.023502691982314, "target": 5.773502691896259, "pz": -7.164324827252176, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "108": {"x": 4.999999999999998, "y": 2.857142857142848, "z": 6.023502691998848, "target": 5.773502691896259, "pz": -7.164324827252176, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "109": {"x": 5.0, "y": 3.5714285714285663, "z": 6.0235026919989165, "target": 5.773502691896259, "pz": -7.164324827252175, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "110": {"x": 4.999999999999998, "y": 4.285714285714275, "z": 6.02350269196306, "target": 5.773502691896259, "pz": -5.970270689376807, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "111": {"x": 5.000000000000001, "y": 4.999999999999993, "z": 6.023502691508385, "target": 5.773502691896259, "pz": -9.552433103002903, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "112": {"x": 5.000000000000003, "y": 5.714285714285704, "z": 6.023502691963066, "target": 5.773502691896259, "pz": -5.970270689376804, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "113": {"x": 4.999999999999999, "y": 6.4285714285714155, "z": 6.023502691998925, "target": 5.773502691896259, "pz": -7.164324827252181, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "114": {"x": 4.999999999999995, "y": 7.142857142857132, "z": 6.023502691998875, "target": 5.773502691896259, "pz": -7.164324827252171, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "115": {"x": 4.999999999999995, "y": 7.857142857142852, "z": 6.023502691982333, "target": 5.773502691896259, "pz": -7.164324827252178, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "116": {"x": 4.999999999999981, "y": 8.57142857142856, "z": 6.023502691957628, "target": 5.773502691896259, "pz": -7.164324827252171, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "117": {"x": 4.9999999999999725, "y": 9.285714285714274, "z": 6.023502691928358, "target": 5.773502691896259, "pz": -7.164324827252171, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "118": {"x": 4.285714285714317, "y": 10.00000000000001, "z": 5.954440717286784, "target": 5.729147340721889, "pz": -3.610448822233302, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "119": {"x": 5.71428571428568, "y": -1.6905148589523366e-14, "z": 5.954440717286699, "target": 5.729147340721889, "pz": -3.6104488222333004, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "120": {"x": 5.714285714285726, "y": 0.7142857142857386, "z": 5.9562933419279975, "target": 5.729147340721889, "pz": -7.220897644466601, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "121": {"x": 5.714285714285722, "y": 1.4285714285714095, "z": 5.95833655196104, "target": 5.729147340721889, "pz": -7.2208976444666, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "122": {"x": 5.714285714285715, "y": 2.14285714285714, "z": 5.9608662541925534, "target": 5.729147340721889, "pz": -7.220897644466601, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "123": {"x": 5.7142857142857135, "y": 2.8571428571428465, "z": 5.963915032611799, "target": 5.729147340721889, "pz": -7.220897644466603, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "124": {"x": 5.7142857142857135, "y": 3.571428571428565, "z": 5.967448207140966, "target": 5.729147340721889, "pz": -6.61444177265985, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "125": {"x": 5.714285714285711, "y": 4.285714285714278, "z": 5.981001638421733, "target": 5.729147340721889, "pz": -8.396094176603818, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "126": {"x": 5.714285714285715, "y": 4.999999999999991, "z": 6.023502691963061, "target": 5.773502691896259, "pz": -5.970270689376806, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "127": {"x": 5.714285714285715, "y": 5.714285714285706, "z": 5.939452475554869, "target": 5.729147340721889, "pz": -8.39609417660382, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "128": {"x": 5.714285714285713, "y": 6.428571428571414, "z": 5.9388851934003135, "target": 5.729147340721889, "pz": -6.614441772659853, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "129": {"x": 5.71428571428571, "y": 7.1428571428571335, "z": 5.944370371474861, "target": 5.729147340721889, "pz": -7.220897644466598, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "130": {"x": 5.7142857142857055, "y": 7.857142857142846, "z": 5.948670842355694, "target": 5.729147340721889, "pz": -7.220897644466604, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "131": {"x": 5.714285714285694, "y": 8.571428571428562, "z": 5.952541602947857, "target": 5.729147340721889, "pz": -7.220897644466598, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "132": {"x": 5.7142857142856815, "y": 9.285714285714274, "z": 5.956293341927153, "target": 5.729147340721889, "pz": -7.220897644466598, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "133": {"x": 5.00000000000002, "y": 10.000000000000007, "z": 6.023502691896299, "target": 5.773502691896259, "pz": -3.582162413626088, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "134": {"x": 6.428571428571398, "y": -1.2022248116280905e-14, "z": 5.7516092933526695, "target": 5.5939714878432065, "pz": -3.6996026215149977, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "135": {"x": 6.428571428571437, "y": 0.7142857142857311, "z": 5.753603859798294, "target": 5.5939714878432065, "pz": -7.3992052430299955, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "136": {"x": 6.428571428571437, "y": 1.4285714285714133, "z": 5.755968259496387, "target": 5.5939714878432065, "pz": -7.3992052430299955, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "137": {"x": 6.428571428571429, "y": 2.14285714285714, "z": 5.759676015908154, "target": 5.5939714878432065, "pz": -7.399205243029997, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "138": {"x": 6.4285714285714315, "y": 2.857142857142848, "z": 5.764511996293495, "target": 5.5939714878432065, "pz": -6.772460240998419, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "139": {"x": 6.428571428571431, "y": 3.571428571428567, "z": 5.78151872832984, "target": 5.593971487843205, "pz": -8.571538726193852, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "140": {"x": 6.428571428571432, "y": 4.285714285714279, "z": 5.967448207140969, "target": 5.729147340721889, "pz": -6.614441772659853, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "141": {"x": 6.42857142857143, "y": 4.999999999999991, "z": 6.02350269199892, "target": 5.773502691896259, "pz": -7.164324827252181, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "142": {"x": 6.4285714285714235, "y": 5.714285714285702, "z": 5.938885193400312, "target": 5.729147340721889, "pz": -6.614441772659852, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "143": {"x": 6.428571428571424, "y": 6.428571428571416, "z": 5.724392700848527, "target": 5.5939714878432065, "pz": -8.571538726193852, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "144": {"x": 6.428571428571424, "y": 7.142857142857134, "z": 5.7254226740195895, "target": 5.5939714878432065, "pz": -6.772460240998414, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "145": {"x": 6.428571428571417, "y": 7.857142857142843, "z": 5.735285192234415, "target": 5.5939714878432065, "pz": -7.399205243029999, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "146": {"x": 6.428571428571409, "y": 8.571428571428564, "z": 5.744378361469999, "target": 5.5939714878432065, "pz": -7.399205243029993, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "147": {"x": 6.428571428571396, "y": 9.285714285714272, "z": 5.753603859796614, "target": 5.5939714878432065, "pz": -7.399205243029993, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "148": {"x": 5.714285714285725, "y": 10.000000000000007, "z": 5.9598432468000855, "target": 5.729147340721889, "pz": -3.6104488222333004, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "149": {"x": 7.1428571428571175, "y": -7.242814466969943e-15, "z": 5.411705214530981, "target": 5.361109642475098, "pz": -3.8645260387430893, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "150": {"x": 7.142857142857146, "y": 0.7142857142857236, "z": 5.41208879761817, "target": 5.361109642475098, "pz": -7.729052077486179, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "151": {"x": 7.142857142857149, "y": 1.428571428571417, "z": 5.413009844323818, "target": 5.361109642475098, "pz": -7.729052077486179, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "152": {"x": 7.142857142857145, "y": 2.1428571428571384, "z": 5.416510630275241, "target": 5.361109642475098, "pz": -7.067621733270063, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "153": {"x": 7.142857142857148, "y": 2.857142857142853, "z": 5.433976498615248, "target": 5.361109642475097, "pz": -8.913171397180259, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "154": {"x": 7.142857142857147, "y": 3.5714285714285667, "z": 5.764511996293499, "target": 5.593971487843205, "pz": -6.7724602409984085, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "155": {"x": 7.142857142857145, "y": 4.285714285714279, "z": 5.963915032611805, "target": 5.729147340721889, "pz": -7.220897644466598, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "156": {"x": 7.142857142857144, "y": 4.999999999999992, "z": 6.023502691998855, "target": 5.773502691896259, "pz": -7.164324827252171, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "157": {"x": 7.142857142857144, "y": 5.7142857142857055, "z": 5.944370371474847, "target": 5.729147340721889, "pz": -7.220897644466598, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "158": {"x": 7.142857142857139, "y": 6.428571428571417, "z": 5.7254226740195815, "target": 5.5939714878432065, "pz": -6.772460240998414, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "159": {"x": 7.142857142857136, "y": 7.14285714285713, "z": 5.375342515204373, "target": 5.361109642475098, "pz": -8.913171397180259, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "160": {"x": 7.142857142857131, "y": 7.857142857142843, "z": 5.379924394764625, "target": 5.361109642475098, "pz": -7.067621733270067, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "161": {"x": 7.142857142857124, "y": 8.571428571428562, "z": 5.3956249972842185, "target": 5.361109642475098, "pz": -7.729052077486176, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "162": {"x": 7.1428571428571175, "y": 9.285714285714272, "z": 5.4120887976156595, "target": 5.361109642475098, "pz": -7.729052077486176, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "163": {"x": 6.428571428571432, "y": 10.000000000000009, "z": 5.762414352379373, "target": 5.5939714878432065, "pz": -3.6996026215149986, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "164": {"x": 7.857142857142837, "y": -4.456505547450406e-15, "z": 4.928617962215896, "target": 5.016977977548923, "pz": -4.138981480995859, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "165": {"x": 7.857142857142856, "y": 0.7142857142857185, "z": 4.925559493684495, "target": 5.016977977548923, "pz": -8.277962961991722, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "166": {"x": 7.857142857142862, "y": 1.4285714285714217, "z": 4.923193983750167, "target": 5.016977977548923, "pz": -7.5597328125425545, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "167": {"x": 7.857142857142859, "y": 2.1428571428571392, "z": 4.937732485700442, "target": 5.016977977548923, "pz": -9.487224039957859, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "168": {"x": 7.857142857142858, "y": 2.857142857142854, "z": 5.416510630275242, "target": 5.361109642475097, "pz": -7.0676217332700615, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "169": {"x": 7.857142857142853, "y": 3.571428571428566, "z": 5.759676015908152, "target": 5.593971487843205, "pz": -7.399205243029994, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "170": {"x": 7.857142857142849, "y": 4.2857142857142785, "z": 5.960866254192551, "target": 5.729147340721889, "pz": -7.220897644466606, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "171": {"x": 7.857142857142848, "y": 4.99999999999999, "z": 6.02350269198231, "target": 5.773502691896259, "pz": -7.164324827252178, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "172": {"x": 7.857142857142848, "y": 5.714285714285704, "z": 5.948670842355678, "target": 5.729147340721889, "pz": -7.220897644466604, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "173": {"x": 7.857142857142848, "y": 6.428571428571418, "z": 5.735285192234406, "target": 5.5939714878432065, "pz": -7.399205243029999, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "174": {"x": 7.85714285714285, "y": 7.142857142857132, "z": 5.379924394764623, "target": 5.361109642475098, "pz": -7.067621733270067, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "175": {"x": 7.857142857142848, "y": 7.857142857142845, "z": 4.888950838352954, "target": 5.016977977548923, "pz": -9.487224039957853, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "176": {"x": 7.857142857142844, "y": 8.571428571428564, "z": 4.900014187697354, "target": 5.016977977548923, "pz": -7.559732812542548, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "177": {"x": 7.857142857142839, "y": 9.285714285714276, "z": 4.925559493681153, "target": 5.016977977548923, "pz": -8.277962961991715, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "178": {"x": 7.1428571428571415, "y": 10.000000000000009, "z": 5.427912803071003, "target": 5.361109642475098, "pz": -3.86452603874309, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "179": {"x": 8.571428571428557, "y": -1.037522472133624e-15, "z": 4.292178785877516, "target": 4.5363235436327765, "pz": -4.601797708211205, "ub": 4.850513646869284, "lb": 4.213547192873114, "px": 0.0, "py": 0.0}, "180": {"x": 8.57142857142857, "y": 0.7142857142857132, "z": 4.283717156514328, "target": 4.5363235436327765, "pz": -8.387892996467844, "ub": 4.850513646869284, "lb": 4.213547192873114, "px": 0.0, "py": 0.0}, "181": {"x": 8.571428571428573, "y": 1.4285714285714264, "z": 4.289737863331634, "target": 4.536323543632775, "pz": -10.445111174309956, "ub": 4.850513646869282, "lb": 4.213547192873112, "px": 0.0, "py": 0.0}, "182": {"x": 8.571428571428573, "y": 2.1428571428571406, "z": 4.923193983750167, "target": 5.016977977548923, "pz": -7.559732812542548, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "183": {"x": 8.57142857142857, "y": 2.8571428571428523, "z": 5.413009844323817, "target": 5.361109642475097, "pz": -7.729052077486176, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "184": {"x": 8.571428571428568, "y": 3.571428571428567, "z": 5.7559682594963855, "target": 5.593971487843205, "pz": -7.3992052430299875, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "185": {"x": 8.571428571428571, "y": 4.285714285714281, "z": 5.958336551961037, "target": 5.729147340721889, "pz": -7.2208976444666, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "186": {"x": 8.571428571428575, "y": 4.999999999999997, "z": 6.0235026919576, "target": 5.773502691896259, "pz": -7.164324827252171, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "187": {"x": 8.57142857142857, "y": 5.71428571428571, "z": 5.952541602947831, "target": 5.729147340721889, "pz": -7.220897644466596, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "188": {"x": 8.571428571428564, "y": 6.428571428571423, "z": 5.744378361469975, "target": 5.5939714878432065, "pz": -7.399205243029993, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "189": {"x": 8.571428571428562, "y": 7.142857142857133, "z": 5.395624997284202, "target": 5.361109642475098, "pz": -7.729052077486176, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "190": {"x": 8.571428571428562, "y": 7.857142857142847, "z": 4.900014187697346, "target": 5.016977977548923, "pz": -7.559732812542548, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "191": {"x": 8.571428571428562, "y": 8.571428571428562, "z": 4.2607631182656105, "target": 4.5363235436327765, "pz": -10.445111174309956, "ub": 4.850513646869284, "lb": 4.213547192873114, "px": 0.0, "py": 0.0}, "192": {"x": 8.571428571428559, "y": 9.28571428571428, "z": 4.283717156510151, "target": 4.5363235436327765, "pz": -8.38789299646783, "ub": 4.850513646869284, "lb": 4.213547192873114, "px": 0.0, "py": 0.0}, "193": {"x": 7.857142857142856, "y": 10.000000000000009, "z": 4.950228080269235, "target": 5.016977977548923, "pz": -4.13898148099586, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "194": {"x": 9.28571428571428, "y": -9.034645218544719e-17, "z": 3.485240046842274, "target": 3.8685897164933167, "pz": -4.47290507088287, "ub": 4.2326395712966125, "lb": 3.484499253638851, "px": 0.0, "py": 0.0}, "195": {"x": 9.285714285714285, "y": 0.7142857142857129, "z": 3.484499253673451, "target": 3.868589716493315, "pz": -12.208619821584001, "ub": 4.232639571296611, "lb": 3.484499253638849, "px": 0.0, "py": 0.0}, "196": {"x": 9.285714285714281, "y": 1.4285714285714284, "z": 4.283717156514318, "target": 4.536323543632775, "pz": -8.387892996467835, "ub": 4.850513646869282, "lb": 4.213547192873112, "px": 0.0, "py": 0.0}, "197": {"x": 9.285714285714276, "y": 2.1428571428571437, "z": 4.9255594936844815, "target": 5.016977977548923, "pz": -8.277962961991715, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "198": {"x": 9.285714285714274, "y": 2.85714285714286, "z": 5.412088797618152, "target": 5.361109642475097, "pz": -7.729052077486176, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "199": {"x": 9.285714285714276, "y": 3.571428571428572, "z": 5.753603859798268, "target": 5.593971487843205, "pz": -7.3992052430299875, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "200": {"x": 9.285714285714276, "y": 4.285714285714286, "z": 5.956293341927969, "target": 5.729147340721889, "pz": -7.2208976444666, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "201": {"x": 9.285714285714281, "y": 5.0, "z": 6.023502691928338, "target": 5.773502691896259, "pz": -7.16432482725217, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "202": {"x": 9.285714285714286, "y": 5.71428571428572, "z": 5.956293341927137, "target": 5.729147340721889, "pz": -7.220897644466596, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "203": {"x": 9.285714285714288, "y": 6.428571428571435, "z": 5.753603859796603, "target": 5.5939714878432065, "pz": -7.399205243029993, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "204": {"x": 9.285714285714286, "y": 7.142857142857148, "z": 5.412088797615648, "target": 5.361109642475098, "pz": -7.729052077486176, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "205": {"x": 9.285714285714286, "y": 7.857142857142861, "z": 4.925559493681145, "target": 5.016977977548923, "pz": -8.277962961991715, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "206": {"x": 9.285714285714285, "y": 8.571428571428575, "z": 4.283717156510145, "target": 4.5363235436327765, "pz": -8.38789299646783, "ub": 4.850513646869284, "lb": 4.213547192873114, "px": 0.0, "py": 0.0}, "207": {"x": 9.285714285714281, "y": 9.285714285714283, "z": 3.484499253668444, "target": 3.8685897164933167, "pz": -12.208619821583987, "ub": 4.2326395712966125, "lb": 3.484499253638851, "px": 0.0, "py": 0.0}, "208": {"x": 8.57142857142857, "y": 10.000000000000005, "z": 4.319191433444169, "target": 4.5363235436327765, "pz": -4.601797708211204, "ub": 4.850513646869284, "lb": 4.213547192873114, "px": 0.0, "py": 0.0}, "209": {"x": 10.0, "y": 0.0, "z": 2.512577300163392, "is_fixed": true, "target": 2.8867513459481287, "pz": -4.051595622038328, "ub": 3.35895589123785, "lb": 2.347143367454404, "_rx": -252.76197520730938, "_ry": 252.76197520730824, "_rz": 374.25471781095905, "px": 0.0, "py": 0.0}, "210": {"x": 9.999999999999993, "y": 0.7142857142857141, "z": 3.485240046842276, "target": 3.868589716493315, "pz": -4.472905070882871, "ub": 4.232639571296611, "lb": 3.484499253638849, "px": 0.0, "py": 0.0}, "211": {"x": 9.999999999999991, "y": 1.4285714285714277, "z": 4.292178785877516, "target": 4.536323543632775, "pz": -4.601797708211207, "ub": 4.850513646869282, "lb": 4.213547192873112, "px": 0.0, "py": 0.0}, "212": {"x": 9.999999999999993, "y": 2.1428571428571415, "z": 4.928617962215899, "target": 5.016977977548923, "pz": -4.13898148099586, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "213": {"x": 9.999999999999995, "y": 2.8571428571428545, "z": 5.411705214530985, "target": 5.361109642475097, "pz": -3.864526038743091, "ub": 5.629453609773118, "lb": 5.090898275618098, "px": 0.0, "py": 0.0}, "214": {"x": 10.000000000000002, "y": 3.571428571428568, "z": 5.751609293352675, "target": 5.593971487843205, "pz": -3.6996026215149955, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "215": {"x": 10.000000000000005, "y": 4.285714285714281, "z": 5.954440717286705, "target": 5.729147340721889, "pz": -3.610448822233302, "ub": 5.981001638325207, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "216": {"x": 10.000000000000002, "y": 4.999999999999996, "z": 6.023502691896233, "target": 5.773502691896259, "pz": -3.582162413626088, "ub": 6.023502691896258, "lb": 5.523502691896258, "px": 0.0, "py": 0.0}, "217": {"x": 10.0, "y": 5.714285714285711, "z": 5.95984324680003, "target": 5.729147340721889, "pz": -3.6104488222333004, "ub": 5.981001638325208, "lb": 5.4771231413719885, "px": 0.0, "py": 0.0}, "218": {"x": 9.999999999999996, "y": 6.4285714285714235, "z": 5.762414352379326, "target": 5.5939714878432065, "pz": -3.6996026215149986, "ub": 5.851646636012026, "lb": 5.335566105002786, "px": 0.0, "py": 0.0}, "219": {"x": 9.999999999999996, "y": 7.142857142857139, "z": 5.427912803070964, "target": 5.361109642475098, "pz": -3.86452603874309, "ub": 5.629453609773119, "lb": 5.090898275618099, "px": 0.0, "py": 0.0}, "220": {"x": 9.999999999999998, "y": 7.857142857142853, "z": 4.950228080269204, "target": 5.016977977548923, "pz": -4.13898148099586, "ub": 5.302765257218069, "lb": 4.72713620295235, "px": 0.0, "py": 0.0}, "221": {"x": 9.999999999999998, "y": 8.571428571428568, "z": 4.319191433444146, "target": 4.5363235436327765, "pz": -4.601797708211204, "ub": 4.850513646869284, "lb": 4.213547192873114, "px": 0.0, "py": 0.0}, "222": {"x": 10.000000000000002, "y": 9.285714285714285, "z": 3.517655223922229, "target": 3.8685897164933167, "pz": -4.472905070882871, "ub": 4.2326395712966125, "lb": 3.484499253638851, "px": 0.0, "py": 0.0}, "223": {"x": 9.285714285714285, "y": 10.0, "z": 3.5176552239222403, "target": 3.8685897164933167, "pz": -4.472905070882871, "ub": 4.2326395712966125, "lb": 3.484499253638851, "px": 0.0, "py": 0.0}, "224": {"x": 10.0, "y": 10.0, "z": 2.5503950067566703, "is_fixed": true, "target": 2.8867513459481304, "pz": -4.051595622038324, "ub": 3.3589558912378514, "lb": 2.347143367454407, "_rx": -272.831393237653, "_ry": -272.83139323765243, "_rz": 387.8470620245704, "px": 0.0, "py": 0.0}}, "face": {"1": [0, 1, 3], "2": [2, 0, 3], "3": [1, 29, 30, 3], "4": [2, 3, 5, 4], "5": [3, 30, 31], "6": [5, 3, 31], "7": [4, 5, 7, 6], "8": [5, 31, 32, 7], "9": [6, 7, 9, 8], "10": [7, 32, 33, 9], "11": [8, 9, 11, 10], "12": [9, 33, 34, 11], "13": [10, 11, 13, 12], "14": [11, 34, 35, 13], "15": [12, 13, 15, 14], "16": [13, 35, 36, 15], "17": [14, 15, 17, 16], "18": [15, 36, 37, 17], "19": [16, 17, 19, 18], "20": [17, 37, 38, 19], "21": [18, 19, 21, 20], "22": [19, 38, 39, 21], "23": [20, 21, 23, 22], "24": [21, 39, 40, 23], "25": [22, 23, 25, 24], "26": [23, 40, 41, 25], "27": [24, 25, 27, 26], "28": [25, 41, 27], "29": [26, 27, 28], "30": [27, 42, 58, 43], "31": [42, 27, 41], "32": [27, 43, 28], "33": [29, 44, 45, 30], "34": [30, 45, 46, 31], "35": [31, 46, 47], "36": [32, 31, 47], "37": [32, 47, 48, 33], "38": [33, 48, 49, 34], "39": [34, 49, 50, 35], "40": [35, 50, 51, 36], "41": [36, 51, 52, 37], "42": [37, 52, 53, 38], "43": [38, 53, 54, 39], "44": [39, 54, 55, 40], "45": [40, 55, 41], "46": [41, 56, 57, 42], "47": [56, 41, 55], "48": [42, 57, 73, 58], "49": [44, 59, 60, 45], "50": [45, 60, 61, 46], "51": [46, 61, 62, 47], "52": [47, 62, 63], "53": [48, 47, 63], "54": [48, 63, 64, 49], "55": [49, 64, 65, 50], "56": [50, 65, 66, 51], "57": [51, 66, 67, 52], "58": [52, 67, 68, 53], "59": [53, 68, 69, 54], "60": [54, 69, 55], "61": [55, 70, 71, 56], "62": [70, 55, 69], "63": [56, 71, 72, 57], "64": [57, 72, 88, 73], "65": [59, 74, 75, 60], "66": [60, 75, 76, 61], "67": [61, 76, 77, 62], "68": [62, 77, 78, 63], "69": [63, 78, 79], "70": [64, 63, 79], "71": [64, 79, 80, 65], "72": [65, 80, 81, 66], "73": [66, 81, 82, 67], "74": [67, 82, 83, 68], "75": [68, 83, 69], "76": [69, 84, 85, 70], "77": [84, 69, 83], "78": [70, 85, 86, 71], "79": [71, 86, 87, 72], "80": [72, 87, 103, 88], "81": [74, 89, 90, 75], "82": [75, 90, 91, 76], "83": [76, 91, 92, 77], "84": [77, 92, 93, 78], "85": [78, 93, 94, 79], "86": [79, 94, 95], "87": [80, 79, 95], "88": [80, 95, 96, 81], "89": [81, 96, 97, 82], "90": [82, 97, 83], "91": [83, 98, 99, 84], "92": [98, 83, 97], "93": [84, 99, 100, 85], "94": [85, 100, 101, 86], "95": [86, 101, 102, 87], "96": [87, 102, 118, 103], "97": [89, 104, 105, 90], "98": [90, 105, 106, 91], "99": [91, 106, 107, 92], "100": [92, 107, 108, 93], "101": [93, 108, 109, 94], "102": [94, 109, 110, 95], "103": [95, 110, 111], "104": [96, 95, 111], "105": [96, 111, 97], "106": [97, 112, 113, 98], "107": [112, 97, 111], "108": [98, 113, 114, 99], "109": [99, 114, 115, 100], "110": [100, 115, 116, 101], "111": [101, 116, 117, 102], "112": [102, 117, 133, 118], "113": [104, 119, 120, 105], "114": [105, 120, 121, 106], "115": [106, 121, 122, 107], "116": [107, 122, 123, 108], "117": [108, 123, 124, 109], "118": [109, 124, 125, 110], "119": [110, 125, 111], "120": [111, 126, 127], "121": [126, 111, 125], "122": [112, 111, 127], "123": [112, 127, 128, 113], "124": [113, 128, 129, 114], "125": [114, 129, 130, 115], "126": [115, 130, 131, 116], "127": [116, 131, 132, 117], "128": [117, 132, 148, 133], "129": [119, 134, 135, 120], "130": [120, 135, 136, 121], "131": [121, 136, 137, 122], "132": [122, 137, 138, 123], "133": [123, 138, 139, 124], "134": [124, 139, 125], "135": [125, 140, 141, 126], "136": [140, 125, 139], "137": [126, 141, 142, 127], "138": [127, 142, 143], "139": [128, 127, 143], "140": [128, 143, 144, 129], "141": [129, 144, 145, 130], "142": [130, 145, 146, 131], "143": [131, 146, 147, 132], "144": [132, 147, 163, 148], "145": [134, 149, 150, 135], "146": [135, 150, 151, 136], "147": [136, 151, 152, 137], "148": [137, 152, 153, 138], "149": [138, 153, 139], "150": [139, 154, 155, 140], "151": [154, 139, 153], "152": [140, 155, 156, 141], "153": [141, 156, 157, 142], "154": [142, 157, 158, 143], "155": [143, 158, 159], "156": [144, 143, 159], "157": [144, 159, 160, 145], "158": [145, 160, 161, 146], "159": [146, 161, 162, 147], "160": [147, 162, 178, 163], "161": [149, 164, 165, 150], "162": [150, 165, 166, 151], "163": [151, 166, 167, 152], "164": [152, 167, 153], "165": [153, 168, 169, 154], "166": [168, 153, 167], "167": [154, 169, 170, 155], "168": [155, 170, 171, 156], "169": [156, 171, 172, 157], "170": [157, 172, 173, 158], "171": [158, 173, 174, 159], "172": [159, 174, 175], "173": [160, 159, 175], "174": [160, 175, 176, 161], "175": [161, 176, 177, 162], "176": [162, 177, 193, 178], "177": [164, 179, 180, 165], "178": [165, 180, 181, 166], "179": [166, 181, 167], "180": [167, 182, 183, 168], "181": [182, 167, 181], "182": [168, 183, 184, 169], "183": [169, 184, 185, 170], "184": [170, 185, 186, 171], "185": [171, 186, 187, 172], "186": [172, 187, 188, 173], "187": [173, 188, 189, 174], "188": [174, 189, 190, 175], "189": [175, 190, 191], "190": [176, 175, 191], "191": [176, 191, 192, 177], "192": [177, 192, 208, 193], "193": [179, 194, 195, 180], "194": [180, 195, 181], "195": [181, 196, 197, 182], "196": [196, 181, 195], "197": [182, 197, 198, 183], "198": [183, 198, 199, 184], "199": [184, 199, 200, 185], "200": [185, 200, 201, 186], "201": [186, 201, 202, 187], "202": [187, 202, 203, 188], "203": [188, 203, 204, 189], "204": [189, 204, 205, 190], "205": [190, 205, 206, 191], "206": [191, 206, 207], "207": [192, 191, 207], "208": [192, 207, 223, 208], "209": [194, 209, 195], "210": [195, 210, 211, 196], "211": [210, 195, 209], "212": [196, 211, 212, 197], "213": [197, 212, 213, 198], "214": [198, 213, 214, 199], "215": [199, 214, 215, 200], "216": [200, 215, 216, 201], "217": [201, 216, 217, 202], "218": [202, 217, 218, 203], "219": [203, 218, 219, 204], "220": [204, 219, 220, 205], "221": [205, 220, 221, 206], "222": [206, 221, 222, 207], "223": [207, 222, 224], "224": [223, 207, 224]}, "facedata": {"1": {}, "2": {}, "3": {}, "4": {}, "5": {}, "6": {}, "7": {}, "8": {}, "9": {}, "10": {}, "11": {}, "12": {}, "13": {}, "14": {}, "15": {}, "16": {}, "17": {}, "18": {}, "19": {}, "20": {}, "21": {}, "22": {}, "23": {}, "24": {}, "25": {}, "26": {}, "27": {}, "28": {}, "29": {}, "30": {}, "31": {}, "32": {}, "33": {}, "34": {}, "35": {}, "36": {}, "37": {}, "38": {}, "39": {}, "40": {}, "41": {}, "42": {}, "43": {}, "44": {}, "45": {}, "46": {}, "47": {}, "48": {}, "49": {}, "50": {}, "51": {}, "52": {}, "53": {}, "54": {}, "55": {}, "56": {}, "57": {}, "58": {}, "59": {}, "60": {}, "61": {}, "62": {}, "63": {}, "64": {}, "65": {}, "66": {}, "67": {}, "68": {}, "69": {}, "70": {}, "71": {}, "72": {}, "73": {}, "74": {}, "75": {}, "76": {}, "77": {}, "78": {}, "79": {}, "80": {}, "81": {}, "82": {}, "83": {}, "84": {}, "85": {}, "86": {}, "87": {}, "88": {}, "89": {}, "90": {}, "91": {}, "92": {}, "93": {}, "94": {}, "95": {}, "96": {}, "97": {}, "98": {}, "99": {}, "100": {}, "101": {}, "102": {}, "103": {}, "104": {}, "105": {}, "106": {}, "107": {}, "108": {}, "109": {}, "110": {}, "111": {}, "112": {}, "113": {}, "114": {}, "115": {}, "116": {}, "117": {}, "118": {}, "119": {}, "120": {}, "121": {}, "122": {}, "123": {}, "124": {}, "125": {}, "126": {}, "127": {}, "128": {}, "129": {}, "130": {}, "131": {}, "132": {}, "133": {}, "134": {}, "135": {}, "136": {}, "137": {}, "138": {}, "139": {}, "140": {}, "141": {}, "142": {}, "143": {}, "144": {}, "145": {}, "146": {}, "147": {}, "148": {}, "149": {}, "150": {}, "151": {}, "152": {}, "153": {}, "154": {}, "155": {}, "156": {}, "157": {}, "158": {}, "159": {}, "160": {}, "161": {}, "162": {}, "163": {}, "164": {}, "165": {}, "166": {}, "167": {}, "168": {}, "169": {}, "170": {}, "171": {}, "172": {}, "173": {}, "174": {}, "175": {}, "176": {}, "177": {}, "178": {}, "179": {}, "180": {}, "181": {}, "182": {}, "183": {}, "184": {}, "185": {}, "186": {}, "187": {}, "188": {}, "189": {}, "190": {}, "191": {}, "192": {}, "193": {}, "194": {}, "195": {}, "196": {}, "197": {}, "198": {}, "199": {}, "200": {}, "201": {}, "202": {}, "203": {}, "204": {}, "205": {}, "206": {}, "207": {}, "208": {}, "209": {}, "210": {}, "211": {}, "212": {}, "213": {}, "214": {}, "215": {}, "216": {}, "217": {}, "218": {}, "219": {}, "220": {}, "221": {}, "222": {}, "223": {}, "224": {}}, "edgedata": {"(0, 2)": {"q": -26.990085108857485, "f": -32.453222323585564, "is_ind": false}, "(0, 1)": {"q": -26.990085108857606, "f": -32.45322232358534, "is_ind": false}, "(0, 3)": {"q": -354.97386542385493, "f": -488.3902360833797, "is_ind": true}, "(1, 29)": {"q": -26.9900851088575, "f": -28.977151391175006, "is_ind": false}, "(1, 3)": {"q": -2.3605534176147174e-13, "f": -1.6879251063805182e-13, "is_ind": false}, "(2, 4)": {"q": -26.990085108857492, "f": -28.97715139117524, "is_ind": false}, "(2, 3)": {"q": -1.7250203801022757e-13, "f": -1.2334841426866933e-13, "is_ind": false}, "(3, 30)": {"q": -53.29857249897877, "f": -57.13033530658881, "is_ind": false}, "(3, 5)": {"q": -53.298572498978714, "f": -57.13033530658921, "is_ind": false}, "(3, 31)": {"q": -301.6752929248766, "f": -384.3245850063246, "is_ind": false}, "(4, 6)": {"q": -26.990085108857492, "f": -25.7244160793883, "is_ind": false}, "(4, 5)": {"q": 5.15061659853328e-14, "f": 3.683546224646534e-14, "is_ind": false}, "(5, 31)": {"q": 9.352830758108338e-14, "f": 6.684042033692047e-14, "is_ind": false}, "(5, 7)": {"q": -53.29857249897882, "f": -51.182329932863375, "is_ind": false}, "(6, 8)": {"q": -26.99008510885752, "f": -23.19242757863786, "is_ind": false}, "(6, 7)": {"q": -7.804445523251959e-14, "f": -5.577927471980999e-14, "is_ind": false}, "(7, 32)": {"q": -7.168542064576247e-14, "f": -5.123660688600951e-14, "is_ind": false}, "(7, 9)": {"q": -53.29857249897898, "f": -46.06288372349738, "is_ind": false}, "(8, 10)": {"q": -26.990085108857517, "f": -21.28789590570529, "is_ind": false}, "(8, 9)": {"q": -1.23421961654973e-13, "f": -8.818017471348007e-14, "is_ind": false}, "(9, 33)": {"q": 1.4052758118512123e-13, "f": 1.0040350382498151e-13, "is_ind": false}, "(9, 11)": {"q": -53.29857249897942, "f": -42.198086426121286, "is_ind": false}, "(10, 12)": {"q": -26.9900851088575, "f": -20.00149693863288, "is_ind": false}, "(10, 11)": {"q": -3.697500218036652e-13, "f": -2.641272489017721e-13, "is_ind": false}, "(11, 34)": {"q": -7.912865872047078e-14, "f": -5.6525184556132823e-14, "is_ind": false}, "(11, 13)": {"q": -53.298572498979134, "f": -39.573503036152474, "is_ind": false}, "(12, 14)": {"q": -26.99008510885748, "f": -19.35504537958979, "is_ind": false}, "(12, 13)": {"q": -2.322914467792238e-13, "f": -1.6592451107973467e-13, "is_ind": false}, "(13, 35)": {"q": -2.771785869198607e-13, "f": -1.979874359317667e-13, "is_ind": false}, "(13, 15)": {"q": -53.29857249897871, "f": -38.23856591833531, "is_ind": false}, "(14, 16)": {"q": -26.990085108857464, "f": -19.368534113247648, "is_ind": false}, "(14, 15)": {"q": 4.031407726116993e-14, "f": 2.87957694722608e-14, "is_ind": false}, "(15, 36)": {"q": 1.703321391310798e-13, "f": 1.216658136650578e-13, "is_ind": false}, "(15, 17)": {"q": -53.29857249897875, "f": -38.238565918331105, "is_ind": false}, "(16, 18)": {"q": -26.99008510885748, "f": -20.040836436797168, "is_ind": false}, "(16, 17)": {"q": 4.1872273159274294e-13, "f": 2.990886714250687e-13, "is_ind": false}, "(17, 37)": {"q": 2.8479893092194094e-13, "f": 2.034286400661969e-13, "is_ind": false}, "(17, 19)": {"q": -53.298572498978814, "f": -39.5735030361401, "is_ind": false}, "(18, 20)": {"q": -26.99008510885749, "f": -21.350144508112933, "is_ind": false}, "(18, 19)": {"q": -4.054478669440836e-13, "f": -2.896067483374812e-13, "is_ind": false}, "(19, 38)": {"q": -3.2959366094978357e-13, "f": -2.3542533332106564e-13, "is_ind": false}, "(19, 21)": {"q": -53.29857249897868, "f": -42.19808642610168, "is_ind": false}, "(20, 22)": {"q": -26.99008510885749, "f": -23.273802118861596, "is_ind": false}, "(20, 21)": {"q": -7.972460533314967e-14, "f": -5.694615487777949e-14, "is_ind": false}, "(21, 39)": {"q": 8.807900647793614e-14, "f": 6.291362835950953e-14, "is_ind": false}, "(21, 23)": {"q": -53.29857249897891, "f": -46.06288372347183, "is_ind": false}, "(22, 24)": {"q": -26.99008510885753, "f": -25.821188966595358, "is_ind": false}, "(22, 23)": {"q": -1.7656733503752208e-15, "f": -1.2612068117748398e-15, "is_ind": false}, "(23, 40)": {"q": -8.331722913233722e-15, "f": -5.951263287129753e-15, "is_ind": false}, "(23, 25)": {"q": -53.29857249897868, "f": -51.182329932832964, "is_ind": false}, "(24, 26)": {"q": -26.990085108857404, "f": -29.086174371399956, "is_ind": false}, "(24, 25)": {"q": -6.196042105854545e-13, "f": -4.4260548924670146e-13, "is_ind": false}, "(25, 41)": {"q": -8.897551085250968e-14, "f": -6.35561939688582e-14, "is_ind": false}, "(25, 27)": {"q": -53.29857249897915, "f": -57.130335306555395, "is_ind": false}, "(26, 28)": {"q": -26.99008510885754, "f": -32.57063565396216, "is_ind": true}, "(26, 27)": {"q": 3.491472692090651e-14, "f": 2.493910407000463e-14, "is_ind": false}, "(27, 41)": {"q": -273.5781076823949, "f": -353.41562675503286, "is_ind": false}, "(27, 28)": {"q": -326.8766801813745, "f": -458.2154046350054, "is_ind": true}, "(27, 42)": {"q": -53.29857249898012, "f": -57.13033530655575, "is_ind": false}, "(27, 43)": {"q": 5.391861647074665e-13, "f": 3.8513318191513885e-13, "is_ind": false}, "(28, 43)": {"q": -26.99008510885704, "f": -32.570635653962164, "is_ind": true}, "(29, 44)": {"q": -26.990085108857883, "f": -25.724416079388092, "is_ind": false}, "(29, 30)": {"q": -2.079595871737883e-13, "f": -1.4872564042744916e-13, "is_ind": false}, "(30, 31)": {"q": -3.111278319286125e-13, "f": -2.2234888668966728e-13, "is_ind": false}, "(30, 45)": {"q": -53.29857249897911, "f": -51.182329932863, "is_ind": false}, "(31, 32)": {"q": -52.62962362158332, "f": -50.44889189213618, "is_ind": false}, "(31, 46)": {"q": -52.62962362158357, "f": -50.44889189213601, "is_ind": false}, "(31, 47)": {"q": -249.04566930329352, "f": -296.25214741731446, "is_ind": false}, "(32, 33)": {"q": -52.62962362158349, "f": -45.75552271219972, "is_ind": false}, "(32, 47)": {"q": 3.8286197681332245e-13, "f": 2.7350564161125074e-13, "is_ind": false}, "(33, 34)": {"q": -52.62962362158332, "f": -41.834194712033316, "is_ind": false}, "(33, 48)": {"q": 2.5726839369390223e-13, "f": 1.8380752625947388e-13, "is_ind": false}, "(34, 35)": {"q": -52.62962362158339, "f": -39.1564405663724, "is_ind": false}, "(34, 49)": {"q": 3.5592637314147996e-13, "f": 2.5425372385947185e-13, "is_ind": false}, "(35, 36)": {"q": -52.629623621583264, "f": -37.77764347047867, "is_ind": false}, "(35, 50)": {"q": -5.309024793672138e-13, "f": -3.792216247293441e-13, "is_ind": false}, "(36, 37)": {"q": -52.629623621583406, "f": -37.74871292527635, "is_ind": false}, "(36, 51)": {"q": 5.904993474120933e-13, "f": 4.217852481515084e-13, "is_ind": false}, "(37, 38)": {"q": -52.62962362158351, "f": -39.07220590127969, "is_ind": false}, "(37, 52)": {"q": 1.8534564527079998e-13, "f": 1.323905768891861e-13, "is_ind": false}, "(38, 39)": {"q": -52.6296236215838, "f": -41.701282660883926, "is_ind": false}, "(38, 53)": {"q": -3.60346312256726e-13, "f": -2.5739369070912e-13, "is_ind": false}, "(39, 40)": {"q": -52.629623621583576, "f": -45.582348358723415, "is_ind": false}, "(39, 54)": {"q": -3.359122456378687e-14, "f": -2.3994020003676356e-14, "is_ind": false}, "(40, 41)": {"q": -52.62962362158372, "f": -50.24601567537833, "is_ind": false}, "(40, 55)": {"q": 1.9847774307744283e-13, "f": 1.4179917973897262e-13, "is_ind": false}, "(41, 42)": {"q": 1.5882882841706514e-14, "f": 1.1345319324386343e-14, "is_ind": false}, "(41, 55)": {"q": -220.94848406081152, "f": -265.16627610361485, "is_ind": false}, "(41, 56)": {"q": -52.62962362158413, "f": -50.246015675378324, "is_ind": false}, "(42, 58)": {"q": 1.8535803992701693e-14, "f": 1.3240788965942925e-14, "is_ind": false}, "(42, 57)": {"q": -53.29857249897995, "f": -51.18232993283349, "is_ind": false}, "(43, 58)": {"q": -26.990085108857297, "f": -29.08617437139995, "is_ind": false}, "(44, 59)": {"q": -26.990085108857706, "f": -23.192427578637698, "is_ind": false}, "(44, 45)": {"q": 2.054028732699891e-13, "f": 1.468038089603121e-13, "is_ind": false}, "(45, 46)": {"q": 5.922132483254189e-14, "f": 4.232798960206539e-14, "is_ind": false}, "(45, 60)": {"q": -53.29857249897899, "f": -46.062883723497144, "is_ind": false}, "(46, 47)": {"q": -2.1847113804792067e-13, "f": -1.5606953002405438e-13, "is_ind": false}, "(46, 61)": {"q": -52.629623621583605, "f": -45.75552271219953, "is_ind": false}, "(47, 48)": {"q": -52.11620048448991, "f": -45.171823564518824, "is_ind": false}, "(47, 62)": {"q": -52.11620048448968, "f": -45.17182356451874, "is_ind": false}, "(47, 63)": {"q": -196.9294688188033, "f": -220.7881505737913, "is_ind": false}, "(48, 49)": {"q": -52.11620048449004, "f": -41.5783223192786, "is_ind": false}, "(48, 63)": {"q": 1.4189203117411976e-13, "f": 1.0135353599640602e-13, "is_ind": false}, "(49, 50)": {"q": -52.116200484490214, "f": -38.85148331059334, "is_ind": false}, "(49, 64)": {"q": 3.367083678959929e-13, "f": 2.405289019389259e-13, "is_ind": false}, "(50, 51)": {"q": -52.11620048448987, "f": -37.4295884144404, "is_ind": false}, "(50, 65)": {"q": -3.735740214651631e-13, "f": -2.6684342294459175e-13, "is_ind": false}, "(51, 52)": {"q": -52.116200484490086, "f": -37.36871148226238, "is_ind": false}, "(51, 66)": {"q": 2.289753902801938e-13, "f": 1.635538502001349e-13, "is_ind": false}, "(52, 53)": {"q": -52.11620048449011, "f": -38.67435027777433, "is_ind": false}, "(52, 67)": {"q": 2.366698634733203e-13, "f": 1.6905144237465153e-13, "is_ind": false}, "(53, 54)": {"q": -52.11620048448988, "f": -41.299139808267945, "is_ind": false}, "(53, 68)": {"q": -5.489654238591686e-13, "f": -3.921271467416083e-13, "is_ind": false}, "(54, 55)": {"q": -52.116200484489845, "f": -44.81485968874266, "is_ind": false}, "(54, 69)": {"q": 1.836855909492903e-13, "f": 1.3124321181956869e-13, "is_ind": false}, "(55, 56)": {"q": 1.71400988522479e-13, "f": 1.224546349736217e-13, "is_ind": false}, "(55, 69)": {"q": -168.83228357632115, "f": -190.0144373105255, "is_ind": false}, "(55, 70)": {"q": -52.116200484490115, "f": -44.81485968874275, "is_ind": true}, "(56, 57)": {"q": -1.3610346896525826e-13, "f": -9.721729665509804e-14, "is_ind": false}, "(56, 71)": {"q": -52.62962362158399, "f": -45.58234835872348, "is_ind": false}, "(57, 73)": {"q": 1.8770224150039845e-13, "f": 1.3407425870443962e-13, "is_ind": false}, "(57, 72)": {"q": -53.2985724989799, "f": -46.062883723472375, "is_ind": false}, "(58, 73)": {"q": -26.990085108857123, "f": -25.821188966595376, "is_ind": false}, "(59, 74)": {"q": -26.99008510885752, "f": -21.28789590570506, "is_ind": false}, "(59, 60)": {"q": 2.9417819163643134e-14, "f": 2.1017883679338797e-14, "is_ind": false}, "(60, 61)": {"q": -9.587127270579846e-14, "f": -6.84976686757428e-14, "is_ind": false}, "(60, 75)": {"q": -53.2985724989789, "f": -42.19808642612122, "is_ind": false}, "(61, 62)": {"q": -4.267349610026116e-14, "f": -3.048843133200657e-14, "is_ind": false}, "(61, 76)": {"q": -52.629623621583335, "f": -41.83419471203319, "is_ind": false}, "(62, 63)": {"q": -7.40350968777967e-14, "f": -5.288330002967629e-14, "is_ind": false}, "(62, 77)": {"q": -52.1162004844899, "f": -41.57832231927858, "is_ind": false}, "(63, 64)": {"q": -51.64594769870757, "f": -41.082402021241194, "is_ind": false}, "(63, 78)": {"q": -51.64594769870793, "f": -41.08240202124158, "is_ind": false}, "(63, 79)": {"q": -145.28352112009554, "f": -155.27296167879265, "is_ind": false}, "(64, 65)": {"q": -51.64594769870763, "f": -38.58412640003719, "is_ind": false}, "(64, 79)": {"q": 3.2706753606639543e-14, "f": 2.3361991149623922e-14, "is_ind": false}, "(65, 66)": {"q": -51.645947698707644, "f": -37.1156543593116, "is_ind": false}, "(65, 80)": {"q": -4.798534429775469e-13, "f": -3.4276256532603056e-13, "is_ind": false}, "(66, 67)": {"q": -51.64594769870732, "f": -37.01810517561189, "is_ind": false}, "(66, 81)": {"q": 5.701263398056028e-13, "f": 4.072330998611523e-13, "is_ind": false}, "(67, 68)": {"q": -51.64594769870721, "f": -38.30046393166561, "is_ind": false}, "(67, 82)": {"q": 4.63559665173416e-13, "f": 3.311180972629463e-13, "is_ind": false}, "(68, 69)": {"q": -51.64594769870683, "f": -40.64827432905349, "is_ind": false}, "(68, 83)": {"q": -3.8029793912135476e-13, "f": -2.71718369395268e-13, "is_ind": false}, "(69, 70)": {"q": -5.096115292245564e-13, "f": -3.6411704113567626e-13, "is_ind": false}, "(69, 83)": {"q": -117.18633587761471, "f": -125.18626154011612, "is_ind": false}, "(69, 84)": {"q": -51.645947698706266, "f": -40.648274329052875, "is_ind": false}, "(70, 71)": {"q": -4.701978763970684e-13, "f": -3.358596597314811e-13, "is_ind": false}, "(70, 85)": {"q": -52.11620048449015, "f": -41.29913980826793, "is_ind": false}, "(71, 72)": {"q": -3.739365844101247e-13, "f": -2.670977823472105e-13, "is_ind": false}, "(71, 86)": {"q": -52.62962362158378, "f": -41.701282660884125, "is_ind": false}, "(72, 88)": {"q": -2.1327154222281208e-13, "f": -1.5233683783938515e-13, "is_ind": false}, "(72, 87)": {"q": -53.29857249898007, "f": -42.198086426102385, "is_ind": false}, "(73, 88)": {"q": -26.99008510885733, "f": -23.273802118861564, "is_ind": false}, "(74, 89)": {"q": -26.99008510885736, "f": -20.00149693863273, "is_ind": false}, "(74, 75)": {"q": 1.3978740691898166e-13, "f": 9.985574318704266e-14, "is_ind": false}, "(75, 76)": {"q": -9.473040681855994e-15, "f": -6.767021980509111e-15, "is_ind": false}, "(75, 90)": {"q": -53.29857249897895, "f": -39.57350303615243, "is_ind": true}, "(76, 77)": {"q": 3.02619443752428e-13, "f": 2.1617426044389096e-13, "is_ind": false}, "(76, 91)": {"q": -52.62962362158353, "f": -39.15644056637244, "is_ind": false}, "(77, 78)": {"q": 1.6143397032684568e-13, "f": 1.153209700756575e-13, "is_ind": false}, "(77, 92)": {"q": -52.11620048448964, "f": -38.85148331059313, "is_ind": false}, "(78, 79)": {"q": 2.2454646731085646e-13, "f": 1.6039050053963796e-13, "is_ind": false}, "(78, 93)": {"q": -51.64594769870776, "f": -38.58412640003744, "is_ind": false}, "(79, 80)": {"q": -50.92929417224512, "f": -37.98284466616181, "is_ind": false}, "(79, 94)": {"q": -50.92929417224531, "f": -37.982844666162, "is_ind": true}, "(79, 95)": {"q": -94.35422694785031, "f": -97.44827041688453, "is_ind": false}, "(80, 81)": {"q": -50.92929417224516, "f": -36.63243985792745, "is_ind": false}, "(80, 95)": {"q": -9.012594432039981e-13, "f": -6.437569481690846e-13, "is_ind": false}, "(81, 82)": {"q": -50.92929417224519, "f": -36.489912971648366, "is_ind": false}, "(81, 96)": {"q": 5.070862448180575e-13, "f": 3.6220446058432615e-13, "is_ind": false}, "(82, 83)": {"q": -50.92929417224465, "f": -37.590299392765395, "is_ind": false}, "(82, 97)": {"q": 5.226851874074998e-13, "f": 3.734137668269533e-13, "is_ind": false}, "(83, 84)": {"q": 2.2366731846489844e-14, "f": 1.5980764765832875e-14, "is_ind": false}, "(83, 97)": {"q": -66.25704170537, "f": -68.22228602041228, "is_ind": true}, "(83, 98)": {"q": -50.92929417224521, "f": -37.59029939276557, "is_ind": false}, "(84, 85)": {"q": -6.588943153856389e-14, "f": -4.706495831379097e-14, "is_ind": false}, "(84, 99)": {"q": -51.64594769870601, "f": -38.300463931664844, "is_ind": false}, "(85, 86)": {"q": -2.564841304646209e-13, "f": -1.8320541851854032e-13, "is_ind": false}, "(85, 100)": {"q": -52.11620048448992, "f": -38.67435027777437, "is_ind": false}, "(86, 87)": {"q": -2.1422720562371173e-13, "f": -1.5302027091499785e-13, "is_ind": false}, "(86, 101)": {"q": -52.62962362158377, "f": -39.072205901279865, "is_ind": false}, "(87, 103)": {"q": -1.490305973295481e-14, "f": -1.0645084168456657e-14, "is_ind": false}, "(87, 102)": {"q": -53.29857249898055, "f": -39.573503036140636, "is_ind": false}, "(88, 103)": {"q": -26.990085108857606, "f": -21.3501445081129, "is_ind": false}, "(89, 104)": {"q": -26.990085108857322, "f": -19.35504537958966, "is_ind": false}, "(89, 90)": {"q": -7.621286672135437e-14, "f": -5.4438434234502154e-14, "is_ind": false}, "(90, 91)": {"q": -2.7966749602568966e-13, "f": -1.9976525267295966e-13, "is_ind": false}, "(90, 105)": {"q": -53.29857249897898, "f": -38.23856591833538, "is_ind": false}, "(91, 92)": {"q": -3.7194798570079477e-13, "f": -2.6568103358714806e-13, "is_ind": false}, "(91, 106)": {"q": -52.629623621583605, "f": -37.7776434704788, "is_ind": false}, "(92, 93)": {"q": -2.0906611297925803e-13, "f": -1.4933564435317333e-13, "is_ind": false}, "(92, 107)": {"q": -52.116200484489745, "f": -37.429588414440175, "is_ind": false}, "(93, 94)": {"q": -3.3838277052701857e-13, "f": -2.4170910553078173e-13, "is_ind": false}, "(93, 108)": {"q": -51.64594769870774, "f": -37.11565435931177, "is_ind": false}, "(94, 95)": {"q": -2.5930739047308653e-13, "f": -1.8521962303684734e-13, "is_ind": false}, "(94, 109)": {"q": -50.92929417224523, "f": -36.632439857927565, "is_ind": false}, "(95, 96)": {"q": -47.176695198383364, "f": -33.930131222127855, "is_ind": false}, "(95, 110)": {"q": -47.1766951983844, "f": -33.93013122212843, "is_ind": false}, "(95, 111)": {"q": -47.17753174946682, "f": -47.821185767008146, "is_ind": false}, "(96, 97)": {"q": -47.17669519838341, "f": -33.75723871364921, "is_ind": false}, "(96, 111)": {"q": 4.709440464343084e-13, "f": 3.363886045959342e-13, "is_ind": false}, "(97, 98)": {"q": 5.825304400393143e-13, "f": 4.16168070469643e-13, "is_ind": false}, "(97, 111)": {"q": -19.080346506986324, "f": -19.291112625496417, "is_ind": false}, "(97, 112)": {"q": -47.17669519838307, "f": -33.757238713649166, "is_ind": true}, "(98, 99)": {"q": 4.343564939789416e-13, "f": 3.102584340816316e-13, "is_ind": false}, "(98, 113)": {"q": -50.9292941722448, "f": -36.489912971648444, "is_ind": false}, "(99, 100)": {"q": 4.495312531581025e-13, "f": 3.210966771332554e-13, "is_ind": false}, "(99, 114)": {"q": -51.6459476987065, "f": -37.01810517561109, "is_ind": false}, "(100, 101)": {"q": 2.0931125051826943e-13, "f": 1.4950897370705753e-13, "is_ind": false}, "(100, 115)": {"q": -52.11620048449001, "f": -37.368711482262384, "is_ind": false}, "(101, 102)": {"q": 1.834452951345271e-13, "f": 1.3103288974770372e-13, "is_ind": false}, "(101, 116)": {"q": -52.62962362158377, "f": -37.74871292527652, "is_ind": false}, "(102, 118)": {"q": 2.3690230143321572e-14, "f": 1.69216498764453e-14, "is_ind": false}, "(102, 117)": {"q": -53.29857249897992, "f": -38.23856591833168, "is_ind": false}, "(103, 118)": {"q": -26.990085108857667, "f": -20.040836436797136, "is_ind": false}, "(104, 119)": {"q": -26.990085108857254, "f": -19.36853411324754, "is_ind": false}, "(104, 105)": {"q": 1.2368024380909139e-13, "f": 8.834303129221389e-14, "is_ind": false}, "(105, 106)": {"q": -7.577061729922218e-14, "f": -5.412186949944088e-14, "is_ind": false}, "(105, 120)": {"q": -53.29857249897869, "f": -38.2385659183312, "is_ind": false}, "(106, 107)": {"q": 1.0322822601013589e-13, "f": 7.373444715009859e-14, "is_ind": false}, "(106, 121)": {"q": -52.62962362158356, "f": -37.748712925276386, "is_ind": false}, "(107, 108)": {"q": 1.481425664203984e-13, "f": 1.0581611887171238e-13, "is_ind": false}, "(107, 122)": {"q": -52.11620048449009, "f": -37.36871148226219, "is_ind": false}, "(108, 109)": {"q": 2.261643721979778e-13, "f": 1.6154598014141365e-13, "is_ind": false}, "(108, 123)": {"q": -51.64594769870757, "f": -37.018105175612114, "is_ind": false}, "(109, 110)": {"q": 1.2510483533849164e-13, "f": 8.936059667035046e-14, "is_ind": false}, "(109, 124)": {"q": -50.92929417224513, "f": -36.48991297164847, "is_ind": false}, "(110, 111)": {"q": 2.7555247050850776e-13, "f": 1.968231932203637e-13, "is_ind": false}, "(110, 125)": {"q": -47.17669519838429, "f": -33.75723871364985, "is_ind": false}, "(111, 112)": {"q": 6.392205542500839e-15, "f": 4.565861101786291e-15, "is_ind": false}, "(111, 125)": {"q": -19.080346506986388, "f": -19.29111262549651, "is_ind": false}, "(111, 126)": {"q": 2.7433958921746084e-13, "f": 1.9595684944104348e-13, "is_ind": false}, "(111, 127)": {"q": -47.17753174946665, "f": -47.82118576700789, "is_ind": false}, "(112, 113)": {"q": 3.1559814981172656e-14, "f": 2.2542724986551817e-14, "is_ind": false}, "(112, 127)": {"q": -47.17669519838335, "f": -33.93013122212779, "is_ind": false}, "(113, 114)": {"q": -1.6171572689796194e-14, "f": -1.1551123349854455e-14, "is_ind": false}, "(113, 128)": {"q": -50.92929417224519, "f": -36.63243985792762, "is_ind": false}, "(114, 115)": {"q": -4.704291933448676e-14, "f": -3.360208523891941e-14, "is_ind": false}, "(114, 129)": {"q": -51.64594769870623, "f": -37.11565435931086, "is_ind": false}, "(115, 116)": {"q": -4.548553549132621e-14, "f": -3.2489668208089875e-14, "is_ind": false}, "(115, 130)": {"q": -52.11620048449015, "f": -37.42958841444027, "is_ind": false}, "(116, 117)": {"q": 1.0493524692252082e-13, "f": 7.495374780180051e-14, "is_ind": false}, "(116, 131)": {"q": -52.62962362158373, "f": -37.77764347047882, "is_ind": false}, "(117, 133)": {"q": -4.1008178024447115e-14, "f": -2.929155573174871e-14, "is_ind": false}, "(117, 132)": {"q": -53.29857249898009, "f": -38.23856591833587, "is_ind": false}, "(118, 133)": {"q": -26.990085108857926, "f": -19.368534113247627, "is_ind": false}, "(119, 134)": {"q": -26.990085108857315, "f": -20.04083643679718, "is_ind": false}, "(119, 120)": {"q": 1.1568748879209007e-13, "f": 8.263419851059791e-14, "is_ind": false}, "(120, 121)": {"q": -1.7034673916660446e-13, "f": -1.2167674006427025e-13, "is_ind": false}, "(120, 135)": {"q": -53.29857249897917, "f": -39.5735030361402, "is_ind": false}, "(121, 122)": {"q": 1.404555466981132e-13, "f": 1.0032601967788868e-13, "is_ind": false}, "(121, 136)": {"q": -52.6296236215836, "f": -39.07220590127993, "is_ind": false}, "(122, 123)": {"q": 5.264326282956161e-14, "f": 3.7602673116210126e-14, "is_ind": false}, "(122, 137)": {"q": -52.1162004844898, "f": -38.67435027777426, "is_ind": false}, "(123, 124)": {"q": 2.46323616351679e-13, "f": 1.7594759269399136e-13, "is_ind": false}, "(123, 138)": {"q": -51.64594769870739, "f": -38.30046393166593, "is_ind": false}, "(124, 125)": {"q": 3.562396755164481e-13, "f": 2.545027146983185e-13, "is_ind": false}, "(124, 139)": {"q": -50.929294172244994, "f": -37.59029939276568, "is_ind": false}, "(125, 126)": {"q": -47.17669519838405, "f": -33.75723871364973, "is_ind": false}, "(125, 139)": {"q": -66.25704170537038, "f": -68.22228602041275, "is_ind": false}, "(125, 140)": {"q": 7.882831202315845e-14, "f": 5.631607253149398e-14, "is_ind": false}, "(126, 127)": {"q": -47.176695198383825, "f": -33.930131222128225, "is_ind": false}, "(126, 141)": {"q": 1.9297498553557174e-13, "f": 1.3783927538255127e-13, "is_ind": false}, "(127, 128)": {"q": -4.3458858806235807e-13, "f": -3.1042051794269934e-13, "is_ind": false}, "(127, 142)": {"q": 2.71914852039803e-13, "f": 1.9422495556739446e-13, "is_ind": false}, "(127, 143)": {"q": -94.35422694785039, "f": -97.44827041688418, "is_ind": false}, "(128, 129)": {"q": -1.767279959234368e-13, "f": -1.2623800482031665e-13, "is_ind": false}, "(128, 143)": {"q": -50.92929417224529, "f": -37.98284466616196, "is_ind": false}, "(129, 130)": {"q": -2.6214179469224627e-13, "f": -1.8724753267952027e-13, "is_ind": false}, "(129, 144)": {"q": -51.64594769870633, "f": -38.58412640003658, "is_ind": false}, "(130, 131)": {"q": -1.0637766171352232e-13, "f": -7.598515975663156e-14, "is_ind": false}, "(130, 145)": {"q": -52.11620048449002, "f": -38.85148331059327, "is_ind": false}, "(131, 132)": {"q": -7.841338255119988e-14, "f": -5.6010331557600566e-14, "is_ind": false}, "(131, 146)": {"q": -52.629623621583626, "f": -39.15644056637254, "is_ind": false}, "(132, 148)": {"q": -7.269787569814042e-14, "f": -5.1927695354257015e-14, "is_ind": false}, "(132, 147)": {"q": -53.2985724989798, "f": -39.57350303615299, "is_ind": false}, "(133, 148)": {"q": -26.990085108857897, "f": -19.35504537958981, "is_ind": false}, "(134, 149)": {"q": -26.990085108857308, "f": -21.350144508112948, "is_ind": false}, "(134, 135)": {"q": -3.9096097373956105e-15, "f": -2.792589271340343e-15, "is_ind": false}, "(135, 136)": {"q": 1.813335477329384e-16, "f": 1.2952467227159497e-16, "is_ind": false}, "(135, 150)": {"q": -53.29857249897912, "f": -42.19808642610186, "is_ind": false}, "(136, 137)": {"q": -2.194888707487365e-15, "f": -1.5677987699606317e-15, "is_ind": false}, "(136, 151)": {"q": -52.62962362158373, "f": -41.70128266088418, "is_ind": false}, "(137, 138)": {"q": -1.0131162803302787e-13, "f": -7.236710711771547e-14, "is_ind": false}, "(137, 152)": {"q": -52.11620048448966, "f": -41.299139808267974, "is_ind": false}, "(138, 139)": {"q": 2.1843891120665932e-13, "f": 1.560720126506158e-13, "is_ind": false}, "(138, 153)": {"q": -51.645947698707445, "f": -40.64827432905384, "is_ind": false}, "(139, 140)": {"q": -50.92929417224481, "f": -37.59029939276535, "is_ind": false}, "(139, 153)": {"q": -117.18633587761515, "f": -125.18626154011696, "is_ind": false}, "(139, 154)": {"q": 1.563090056530068e-13, "f": 1.1168093162944416e-13, "is_ind": false}, "(140, 141)": {"q": -50.92929417224478, "f": -36.48991297164814, "is_ind": false}, "(140, 155)": {"q": -1.132383348635219e-13, "f": -8.088551440990073e-14, "is_ind": false}, "(141, 142)": {"q": -50.92929417224475, "f": -36.63243985792715, "is_ind": false}, "(141, 156)": {"q": 5.364396886706161e-14, "f": 3.831712061932973e-14, "is_ind": false}, "(142, 143)": {"q": -50.92929417224461, "f": -37.98284466616155, "is_ind": false}, "(142, 157)": {"q": 6.316363643266376e-13, "f": 4.5118213437500537e-13, "is_ind": false}, "(143, 144)": {"q": 2.647899208175473e-13, "f": 1.8913585435741325e-13, "is_ind": false}, "(143, 158)": {"q": -2.44701595993432e-13, "f": -1.7478703599420793e-13, "is_ind": false}, "(143, 159)": {"q": -145.28352112009532, "f": -155.27296167879211, "is_ind": false}, "(144, 145)": {"q": -3.3348931603790894e-14, "f": -2.3822936001322918e-14, "is_ind": false}, "(144, 159)": {"q": -51.64594769870652, "f": -41.08240202124064, "is_ind": false}, "(145, 146)": {"q": 1.7426195901939915e-13, "f": 1.244829137460858e-13, "is_ind": false}, "(145, 160)": {"q": -52.11620048448992, "f": -41.57832231927869, "is_ind": false}, "(146, 147)": {"q": 3.416688463261905e-13, "f": 2.440695306601008e-13, "is_ind": false}, "(146, 161)": {"q": -52.62962362158335, "f": -41.83419471203313, "is_ind": false}, "(147, 163)": {"q": 1.6898119110590406e-13, "f": 1.2071003243010985e-13, "is_ind": false}, "(147, 162)": {"q": -53.29857249897942, "f": -42.1980864261218, "is_ind": false}, "(148, 163)": {"q": -26.99008510885781, "f": -20.00149693863293, "is_ind": false}, "(149, 164)": {"q": -26.99008510885733, "f": -23.273802118861653, "is_ind": false}, "(149, 150)": {"q": -7.531244852549243e-14, "f": -5.379461384645804e-14, "is_ind": false}, "(150, 151)": {"q": 1.090579801386874e-13, "f": 7.789862200367336e-14, "is_ind": false}, "(150, 165)": {"q": -53.29857249897903, "f": -46.062883723472034, "is_ind": false}, "(151, 152)": {"q": 1.442248489807478e-13, "f": 1.0301898654810931e-13, "is_ind": false}, "(151, 166)": {"q": -52.629623621583654, "f": -45.58234835872368, "is_ind": false}, "(152, 153)": {"q": 3.0798130495294507e-13, "f": 2.2005240276884597e-13, "is_ind": false}, "(152, 167)": {"q": -52.116200484489625, "f": -44.81485968874265, "is_ind": false}, "(153, 154)": {"q": -51.64594769870689, "f": -40.648274329053365, "is_ind": false}, "(153, 167)": {"q": -168.83228357632228, "f": -190.01443731052717, "is_ind": false}, "(153, 168)": {"q": -2.506042936060531e-13, "f": -1.7905657280277594e-13, "is_ind": false}, "(154, 155)": {"q": -51.645947698706856, "f": -38.300463931665305, "is_ind": true}, "(154, 169)": {"q": 1.2541493661320368e-13, "f": 8.958415068693217e-14, "is_ind": false}, "(155, 156)": {"q": -51.64594769870688, "f": -37.01810517561148, "is_ind": false}, "(155, 170)": {"q": -1.8855878390309817e-14, "f": -1.3468607250378752e-14, "is_ind": false}, "(156, 157)": {"q": -51.645947698706735, "f": -37.1156543593111, "is_ind": false}, "(156, 171)": {"q": 1.965960168583461e-13, "f": 1.40425726327388e-13, "is_ind": false}, "(157, 158)": {"q": -51.645947698706806, "f": -38.58412640003671, "is_ind": false}, "(157, 172)": {"q": 3.4464048912460076e-13, "f": 2.4617623956456614e-13, "is_ind": false}, "(158, 159)": {"q": -51.64594769870679, "f": -41.08240202124072, "is_ind": false}, "(158, 173)": {"q": -2.0888023548982646e-13, "f": -1.4921438986818216e-13, "is_ind": false}, "(159, 160)": {"q": -1.8054665035066913e-13, "f": -1.289645463098051e-13, "is_ind": false}, "(159, 174)": {"q": 1.713983338744564e-13, "f": 1.224299001030669e-13, "is_ind": false}, "(159, 175)": {"q": -196.9294688188018, "f": -220.78815057378952, "is_ind": false}, "(160, 161)": {"q": -4.089385160958277e-14, "f": -2.9216949644123465e-14, "is_ind": false}, "(160, 175)": {"q": -52.11620048448978, "f": -45.171823564518924, "is_ind": false}, "(161, 162)": {"q": -8.867199593749126e-14, "f": -6.335396231968416e-14, "is_ind": false}, "(161, 176)": {"q": -52.62962362158316, "f": -45.75552271219964, "is_ind": false}, "(162, 178)": {"q": 7.827012439750501e-14, "f": 5.5920949170400035e-14, "is_ind": false}, "(162, 177)": {"q": -53.298572498979354, "f": -46.06288372349777, "is_ind": false}, "(163, 178)": {"q": -26.990085108857816, "f": -21.287895905705366, "is_ind": false}, "(164, 179)": {"q": -26.990085108857443, "f": -25.821188966595503, "is_ind": false}, "(164, 165)": {"q": 2.3906301035599206e-14, "f": 1.7076085847947782e-14, "is_ind": false}, "(165, 166)": {"q": -6.923905807353822e-16, "f": -4.945674125743966e-16, "is_ind": false}, "(165, 180)": {"q": -53.29857249897918, "f": -51.18232993283338, "is_ind": false}, "(166, 167)": {"q": 5.2688458777544614e-14, "f": 3.764240826464544e-14, "is_ind": false}, "(166, 181)": {"q": -52.62962362158363, "f": -50.246015675378494, "is_ind": false}, "(167, 168)": {"q": -52.11620048448928, "f": -44.81485968874243, "is_ind": false}, "(167, 181)": {"q": -220.948484060812, "f": -265.1662761036169, "is_ind": false}, "(167, 182)": {"q": -1.2283088894605196e-13, "f": -8.775452113219047e-14, "is_ind": false}, "(168, 169)": {"q": -52.11620048448945, "f": -41.29913980826751, "is_ind": false}, "(168, 183)": {"q": -3.32181388217061e-13, "f": -2.3727526987276164e-13, "is_ind": false}, "(169, 170)": {"q": -52.116200484489404, "f": -38.67435027777391, "is_ind": false}, "(169, 184)": {"q": 1.1147768790392579e-13, "f": 7.962799269850135e-14, "is_ind": false}, "(170, 171)": {"q": -52.11620048448946, "f": -37.368711482261865, "is_ind": false}, "(170, 185)": {"q": 2.833630072224142e-13, "f": 2.02403417357979e-13, "is_ind": false}, "(171, 172)": {"q": -52.11620048448953, "f": -37.42958841443993, "is_ind": false}, "(171, 186)": {"q": 1.6959959717075703e-13, "f": 1.2114256940768573e-13, "is_ind": false}, "(172, 173)": {"q": -52.11620048448949, "f": -38.85148331059289, "is_ind": false}, "(172, 187)": {"q": 1.6285361700881059e-13, "f": 1.163257201374155e-13, "is_ind": false}, "(173, 174)": {"q": -52.11620048448937, "f": -41.5783223192781, "is_ind": false}, "(173, 188)": {"q": -6.612153423464111e-14, "f": -4.723349427038947e-14, "is_ind": false}, "(174, 175)": {"q": -52.11620048448942, "f": -45.17182356451838, "is_ind": false}, "(174, 189)": {"q": -1.5234123913099352e-13, "f": -1.0884145506535182e-13, "is_ind": false}, "(175, 176)": {"q": 3.331756036773329e-14, "f": 2.38011118292416e-14, "is_ind": false}, "(175, 190)": {"q": 5.972008541615154e-14, "f": 4.266232028255726e-14, "is_ind": false}, "(175, 191)": {"q": -249.0456693032918, "f": -296.25214741731344, "is_ind": false}, "(176, 177)": {"q": -1.2269180152618002e-13, "f": -8.769302804258193e-14, "is_ind": false}, "(176, 191)": {"q": -52.62962362158328, "f": -50.44889189213602, "is_ind": false}, "(177, 193)": {"q": 2.6507994526977778e-14, "f": 1.8945570246937643e-14, "is_ind": false}, "(177, 192)": {"q": -53.29857249897946, "f": -51.18232993286364, "is_ind": false}, "(178, 193)": {"q": -26.99008510885767, "f": -23.192427578638014, "is_ind": false}, "(179, 194)": {"q": -26.990085108857322, "f": -29.08617437140005, "is_ind": false}, "(179, 180)": {"q": -9.339999591590226e-14, "f": -6.671896378647954e-14, "is_ind": false}, "(180, 181)": {"q": 2.766530069109286e-13, "f": 1.9761631038505736e-13, "is_ind": false}, "(180, 195)": {"q": -53.29857249897888, "f": -57.13033530655576, "is_ind": false}, "(181, 182)": {"q": -52.629623621583114, "f": -50.246015675378125, "is_ind": false}, "(181, 195)": {"q": -273.57810768239494, "f": -353.41562675503553, "is_ind": false}, "(181, 196)": {"q": 2.0710789863637775e-13, "f": 1.4793946842334635e-13, "is_ind": false}, "(182, 183)": {"q": -52.6296236215832, "f": -45.58234835872319, "is_ind": false}, "(182, 197)": {"q": -3.3276276959381896e-13, "f": -2.376889959772601e-13, "is_ind": false}, "(183, 184)": {"q": -52.62962362158309, "f": -41.701282660883805, "is_ind": false}, "(183, 198)": {"q": -2.916246346521735e-13, "f": -2.0830348364090636e-13, "is_ind": false}, "(184, 185)": {"q": -52.62962362158326, "f": -39.07220590127964, "is_ind": false}, "(184, 199)": {"q": 1.7685196804281205e-13, "f": 1.2632352638392547e-13, "is_ind": false}, "(185, 186)": {"q": -52.629623621583114, "f": -37.74871292527621, "is_ind": false}, "(185, 200)": {"q": 8.735143169242931e-14, "f": 6.239413504644161e-14, "is_ind": false}, "(186, 187)": {"q": -52.62962362158322, "f": -37.777643470478445, "is_ind": false}, "(186, 201)": {"q": -3.474982694719704e-14, "f": -2.482130496228333e-14, "is_ind": false}, "(187, 188)": {"q": -52.629623621583335, "f": -39.15644056637216, "is_ind": false}, "(187, 202)": {"q": 6.307841001001624e-14, "f": 4.505662864984063e-14, "is_ind": false}, "(188, 189)": {"q": -52.62962362158346, "f": -41.83419471203285, "is_ind": false}, "(188, 203)": {"q": 5.063002982760934e-14, "f": 3.616732327282294e-14, "is_ind": false}, "(189, 190)": {"q": -52.62962362158328, "f": -45.75552271219921, "is_ind": false}, "(189, 204)": {"q": -7.865593642541195e-14, "f": -5.6197733904940766e-14, "is_ind": false}, "(190, 191)": {"q": -52.629623621583384, "f": -50.448891892135734, "is_ind": false}, "(190, 205)": {"q": -2.7776382604559705e-14, "f": -1.9852957315517376e-14, "is_ind": false}, "(191, 192)": {"q": 8.080085016592213e-14, "f": 5.774468637731518e-14, "is_ind": false}, "(191, 206)": {"q": -1.1800067093005817e-13, "f": -8.432970347684296e-14, "is_ind": false}, "(191, 207)": {"q": -301.6752929248743, "f": -384.3245850063243, "is_ind": false}, "(192, 208)": {"q": 4.1268516819540696e-14, "f": 2.951384293885914e-14, "is_ind": false}, "(192, 207)": {"q": -53.29857249897927, "f": -57.1303353065894, "is_ind": false}, "(193, 208)": {"q": -26.99008510885759, "f": -25.724416079388373, "is_ind": false}, "(194, 209)": {"q": -26.99008510885744, "f": -32.57063565396229, "is_ind": true}, "(194, 195)": {"q": -3.2376264140782156e-14, "f": -2.3125915394786297e-14, "is_ind": false}, "(195, 196)": {"q": -53.29857249897937, "f": -57.1303353065559, "is_ind": false}, "(195, 209)": {"q": -326.8766801813747, "f": -458.21540463500946, "is_ind": false}, "(195, 210)": {"q": -1.1743563601023175e-13, "f": -8.388264226213196e-14, "is_ind": false}, "(196, 197)": {"q": -53.29857249897942, "f": -51.18232993283356, "is_ind": false}, "(196, 211)": {"q": 6.692538690986697e-15, "f": 4.780720193666815e-15, "is_ind": false}, "(197, 198)": {"q": -53.29857249897932, "f": -46.0628837234724, "is_ind": false}, "(197, 212)": {"q": -4.1916539666177445e-14, "f": -2.9940659942442996e-14, "is_ind": false}, "(198, 199)": {"q": -53.29857249897964, "f": -42.19808642610225, "is_ind": false}, "(198, 213)": {"q": -1.4229776658217803e-13, "f": -1.0164127650039814e-13, "is_ind": false}, "(199, 200)": {"q": -53.29857249897959, "f": -39.57350303614061, "is_ind": false}, "(199, 214)": {"q": 2.4066579192956527e-13, "f": 1.7190480729895617e-13, "is_ind": false}, "(200, 201)": {"q": -53.298572498979475, "f": -38.23856591833154, "is_ind": false}, "(200, 215)": {"q": 1.7168901630398223e-13, "f": 1.2263542413691037e-13, "is_ind": false}, "(201, 202)": {"q": -53.29857249897911, "f": -38.238565918335716, "is_ind": false}, "(201, 216)": {"q": 9.299052117688952e-15, "f": 6.642180084063596e-15, "is_ind": false}, "(202, 203)": {"q": -53.29857249897939, "f": -39.57350303615267, "is_ind": false}, "(202, 217)": {"q": 3.4332845561092834e-14, "f": 2.4523763972744783e-14, "is_ind": false}, "(203, 204)": {"q": -53.29857249897926, "f": -42.19808642612125, "is_ind": false}, "(203, 218)": {"q": -3.057883266451776e-14, "f": -2.184368484120435e-14, "is_ind": false}, "(204, 205)": {"q": -53.298572498979446, "f": -46.062883723497386, "is_ind": false}, "(204, 219)": {"q": -1.5564367845027434e-14, "f": -1.112013338206601e-14, "is_ind": false}, "(205, 206)": {"q": -53.298572498979354, "f": -51.182329932863226, "is_ind": false}, "(205, 220)": {"q": -4.497428517441339e-14, "f": -3.214364173081689e-14, "is_ind": false}, "(206, 207)": {"q": -53.29857249897955, "f": -57.13033530658896, "is_ind": false}, "(206, 221)": {"q": -2.6474818604446086e-14, "f": -1.8933891943419975e-14, "is_ind": false}, "(207, 223)": {"q": -1.2570365695806145e-13, "f": -8.988500618543893e-14, "is_ind": false}, "(207, 222)": {"q": 7.767226978154031e-14, "f": 5.553993112610976e-14, "is_ind": false}, "(207, 224)": {"q": -354.9738654238545, "f": -488.39023608338033, "is_ind": false}, "(208, 223)": {"q": -26.990085108857517, "f": -28.97715139117535, "is_ind": false}, "(209, 210)": {"q": -26.990085108857507, "f": -32.57063565396231, "is_ind": false}, "(210, 211)": {"q": -26.990085108857528, "f": -29.08617437140008, "is_ind": false}, "(211, 212)": {"q": -26.99008510885753, "f": -25.82118896659551, "is_ind": false}, "(212, 213)": {"q": -26.99008510885754, "f": -23.27380211886171, "is_ind": false}, "(213, 214)": {"q": -26.99008510885753, "f": -21.350144508112987, "is_ind": false}, "(214, 215)": {"q": -26.99008510885755, "f": -20.04083643679722, "is_ind": false}, "(215, 216)": {"q": -26.990085108857524, "f": -19.368534113247662, "is_ind": false}, "(216, 217)": {"q": -26.99008510885751, "f": -19.355045379589797, "is_ind": false}, "(217, 218)": {"q": -26.99008510885754, "f": -20.001496938632812, "is_ind": false}, "(218, 219)": {"q": -26.990085108857524, "f": -21.287895905705195, "is_ind": false}, "(219, 220)": {"q": -26.99008510885752, "f": -23.192427578637766, "is_ind": false}, "(220, 221)": {"q": -26.99008510885754, "f": -25.724416079388185, "is_ind": false}, "(221, 222)": {"q": -26.99008510885746, "f": -28.9771513911751, "is_ind": false}, "(222, 224)": {"q": -26.99008510885752, "f": -32.453222323585415, "is_ind": true}, "(223, 224)": {"q": -26.990085108857524, "f": -32.45322232358566, "is_ind": false}}, "max_vertex": 224, "max_face": 224}, "inheritance": ["compas_tna.diagrams/FormDiagram", "compas_tna.diagrams/Diagram", "compas.datastructures/Mesh"], "name": "FormDiagram", "guid": "5d946c84-d485-408f-9c5c-77d40d6fb35e"} \ No newline at end of file diff --git a/data/extrados_mesh.json b/data/extrados_mesh.json new file mode 100644 index 0000000..e2b05da --- /dev/null +++ b/data/extrados_mesh.json @@ -0,0 +1 @@ +{"dtype": "compas.datastructures/Mesh", "data": {"attributes": {}, "default_vertex_attributes": {"x": 0.0, "y": 0.0, "z": 0.0}, "default_edge_attributes": {}, "default_face_attributes": {}, "vertex": {"0": {"x": 0.0, "y": 0.0, "z": 1.6007810593582121}, "1": {"x": 0.5, "y": 0.0, "z": 2.704163456597992}, "2": {"x": 0.0, "y": 0.5, "z": 2.704163456597992}, "3": {"x": 0.5, "y": 0.5, "z": 2.704163456597992}, "4": {"x": 0.0, "y": 1.0, "z": 3.400367627183861}, "5": {"x": 0.5, "y": 1.0, "z": 3.400367627183861}, "6": {"x": 0.0, "y": 1.5, "z": 3.913118960624632}, "7": {"x": 0.5, "y": 1.5, "z": 3.913118960624632}, "8": {"x": 0.0, "y": 2.0, "z": 4.3084219849035215}, "9": {"x": 0.5, "y": 2.0, "z": 4.3084219849035215}, "10": {"x": 0.0, "y": 2.5, "z": 4.616546328154847}, "11": {"x": 0.5, "y": 2.5, "z": 4.616546328154847}, "12": {"x": 0.0, "y": 3.0, "z": 4.8541219597369}, "13": {"x": 0.5, "y": 3.0, "z": 4.8541219597369}, "14": {"x": 0.0, "y": 3.5, "z": 5.031152949374527}, "15": {"x": 0.5, "y": 3.5, "z": 5.031152949374527}, "16": {"x": 0.0, "y": 4.0, "z": 5.153882032022076}, "17": {"x": 0.5, "y": 4.0, "z": 5.153882032022076}, "18": {"x": 0.0, "y": 4.5, "z": 5.226136240091718}, "19": {"x": 0.5, "y": 4.5, "z": 5.226136240091718}, "20": {"x": 0.0, "y": 5.0, "z": 5.25}, "21": {"x": 0.5, "y": 5.0, "z": 5.25}, "22": {"x": 0.0, "y": 5.5, "z": 5.226136240091718}, "23": {"x": 0.5, "y": 5.5, "z": 5.226136240091718}, "24": {"x": 0.0, "y": 6.0, "z": 5.153882032022076}, "25": {"x": 0.5, "y": 6.0, "z": 5.153882032022076}, "26": {"x": 0.0, "y": 6.5, "z": 5.031152949374527}, "27": {"x": 0.5, "y": 6.5, "z": 5.031152949374527}, "28": {"x": 0.0, "y": 7.0, "z": 4.8541219597369}, "29": {"x": 0.5, "y": 7.0, "z": 4.8541219597369}, "30": {"x": 0.0, "y": 7.5, "z": 4.616546328154847}, "31": {"x": 0.5, "y": 7.5, "z": 4.616546328154847}, "32": {"x": 0.0, "y": 8.0, "z": 4.3084219849035215}, "33": {"x": 0.5, "y": 8.0, "z": 4.3084219849035215}, "34": {"x": 0.0, "y": 8.5, "z": 3.913118960624632}, "35": {"x": 0.5, "y": 8.5, "z": 3.913118960624632}, "36": {"x": 0.0, "y": 9.0, "z": 3.400367627183861}, "37": {"x": 0.5, "y": 9.0, "z": 3.400367627183861}, "38": {"x": 0.0, "y": 9.5, "z": 2.704163456597992}, "39": {"x": 0.5, "y": 9.5, "z": 2.704163456597992}, "40": {"x": 0.0, "y": 10.0, "z": 1.6007810593582121}, "41": {"x": 1.0, "y": 0.0, "z": 3.400367627183861}, "42": {"x": 1.0, "y": 0.5, "z": 3.400367627183861}, "43": {"x": 1.0, "y": 1.0, "z": 3.400367627183861}, "44": {"x": 1.0, "y": 1.5, "z": 3.913118960624632}, "45": {"x": 1.0, "y": 2.0, "z": 4.3084219849035215}, "46": {"x": 1.0, "y": 2.5, "z": 4.616546328154847}, "47": {"x": 1.0, "y": 3.0, "z": 4.8541219597369}, "48": {"x": 1.0, "y": 3.5, "z": 5.031152949374527}, "49": {"x": 1.0, "y": 4.0, "z": 5.153882032022076}, "50": {"x": 1.0, "y": 4.5, "z": 5.226136240091718}, "51": {"x": 1.0, "y": 5.0, "z": 5.25}, "52": {"x": 1.0, "y": 5.5, "z": 5.226136240091718}, "53": {"x": 1.0, "y": 6.0, "z": 5.153882032022076}, "54": {"x": 1.0, "y": 6.5, "z": 5.031152949374527}, "55": {"x": 1.0, "y": 7.0, "z": 4.8541219597369}, "56": {"x": 1.0, "y": 7.5, "z": 4.616546328154847}, "57": {"x": 1.0, "y": 8.0, "z": 4.3084219849035215}, "58": {"x": 1.0, "y": 8.5, "z": 3.913118960624632}, "59": {"x": 1.0, "y": 9.0, "z": 3.400367627183861}, "60": {"x": 1.0, "y": 9.5, "z": 3.400367627183861}, "61": {"x": 0.5, "y": 10.0, "z": 2.704163456597992}, "62": {"x": 1.5, "y": 0.0, "z": 3.913118960624632}, "63": {"x": 1.5, "y": 0.5, "z": 3.913118960624632}, "64": {"x": 1.5, "y": 1.0, "z": 3.913118960624632}, "65": {"x": 1.5, "y": 1.5, "z": 3.913118960624632}, "66": {"x": 1.5, "y": 2.0, "z": 4.3084219849035215}, "67": {"x": 1.5, "y": 2.5, "z": 4.616546328154847}, "68": {"x": 1.5, "y": 3.0, "z": 4.8541219597369}, "69": {"x": 1.5, "y": 3.5, "z": 5.031152949374527}, "70": {"x": 1.5, "y": 4.0, "z": 5.153882032022076}, "71": {"x": 1.5, "y": 4.5, "z": 5.226136240091718}, "72": {"x": 1.5, "y": 5.0, "z": 5.25}, "73": {"x": 1.5, "y": 5.5, "z": 5.226136240091718}, "74": {"x": 1.5, "y": 6.0, "z": 5.153882032022076}, "75": {"x": 1.5, "y": 6.5, "z": 5.031152949374527}, "76": {"x": 1.5, "y": 7.0, "z": 4.8541219597369}, "77": {"x": 1.5, "y": 7.5, "z": 4.616546328154847}, "78": {"x": 1.5, "y": 8.0, "z": 4.3084219849035215}, "79": {"x": 1.5, "y": 8.5, "z": 3.913118960624632}, "80": {"x": 1.5, "y": 9.0, "z": 3.913118960624632}, "81": {"x": 1.5, "y": 9.5, "z": 3.913118960624632}, "82": {"x": 1.0, "y": 10.0, "z": 3.400367627183861}, "83": {"x": 2.0, "y": 0.0, "z": 4.3084219849035215}, "84": {"x": 2.0, "y": 0.5, "z": 4.3084219849035215}, "85": {"x": 2.0, "y": 1.0, "z": 4.3084219849035215}, "86": {"x": 2.0, "y": 1.5, "z": 4.3084219849035215}, "87": {"x": 2.0, "y": 2.0, "z": 4.3084219849035215}, "88": {"x": 2.0, "y": 2.5, "z": 4.616546328154847}, "89": {"x": 2.0, "y": 3.0, "z": 4.8541219597369}, "90": {"x": 2.0, "y": 3.5, "z": 5.031152949374527}, "91": {"x": 2.0, "y": 4.0, "z": 5.153882032022076}, "92": {"x": 2.0, "y": 4.5, "z": 5.226136240091718}, "93": {"x": 2.0, "y": 5.0, "z": 5.25}, "94": {"x": 2.0, "y": 5.5, "z": 5.226136240091718}, "95": {"x": 2.0, "y": 6.0, "z": 5.153882032022076}, "96": {"x": 2.0, "y": 6.5, "z": 5.031152949374527}, "97": {"x": 2.0, "y": 7.0, "z": 4.8541219597369}, "98": {"x": 2.0, "y": 7.5, "z": 4.616546328154847}, "99": {"x": 2.0, "y": 8.0, "z": 4.3084219849035215}, "100": {"x": 2.0, "y": 8.5, "z": 4.3084219849035215}, "101": {"x": 2.0, "y": 9.0, "z": 4.3084219849035215}, "102": {"x": 2.0, "y": 9.5, "z": 4.3084219849035215}, "103": {"x": 1.5, "y": 10.0, "z": 3.913118960624632}, "104": {"x": 2.5, "y": 0.0, "z": 4.616546328154847}, "105": {"x": 2.5, "y": 0.5, "z": 4.616546328154847}, "106": {"x": 2.5, "y": 1.0, "z": 4.616546328154847}, "107": {"x": 2.5, "y": 1.5, "z": 4.616546328154847}, "108": {"x": 2.5, "y": 2.0, "z": 4.616546328154847}, "109": {"x": 2.5, "y": 2.5, "z": 4.616546328154847}, "110": {"x": 2.5, "y": 3.0, "z": 4.8541219597369}, "111": {"x": 2.5, "y": 3.5, "z": 5.031152949374527}, "112": {"x": 2.5, "y": 4.0, "z": 5.153882032022076}, "113": {"x": 2.5, "y": 4.5, "z": 5.226136240091718}, "114": {"x": 2.5, "y": 5.0, "z": 5.25}, "115": {"x": 2.5, "y": 5.5, "z": 5.226136240091718}, "116": {"x": 2.5, "y": 6.0, "z": 5.153882032022076}, "117": {"x": 2.5, "y": 6.5, "z": 5.031152949374527}, "118": {"x": 2.5, "y": 7.0, "z": 4.8541219597369}, "119": {"x": 2.5, "y": 7.5, "z": 4.616546328154847}, "120": {"x": 2.5, "y": 8.0, "z": 4.616546328154847}, "121": {"x": 2.5, "y": 8.5, "z": 4.616546328154847}, "122": {"x": 2.5, "y": 9.0, "z": 4.616546328154847}, "123": {"x": 2.5, "y": 9.5, "z": 4.616546328154847}, "124": {"x": 2.0, "y": 10.0, "z": 4.3084219849035215}, "125": {"x": 3.0, "y": 0.0, "z": 4.8541219597369}, "126": {"x": 3.0, "y": 0.5, "z": 4.8541219597369}, "127": {"x": 3.0, "y": 1.0, "z": 4.8541219597369}, "128": {"x": 3.0, "y": 1.5, "z": 4.8541219597369}, "129": {"x": 3.0, "y": 2.0, "z": 4.8541219597369}, "130": {"x": 3.0, "y": 2.5, "z": 4.8541219597369}, "131": {"x": 3.0, "y": 3.0, "z": 4.8541219597369}, "132": {"x": 3.0, "y": 3.5, "z": 5.031152949374527}, "133": {"x": 3.0, "y": 4.0, "z": 5.153882032022076}, "134": {"x": 3.0, "y": 4.5, "z": 5.226136240091718}, "135": {"x": 3.0, "y": 5.0, "z": 5.25}, "136": {"x": 3.0, "y": 5.5, "z": 5.226136240091718}, "137": {"x": 3.0, "y": 6.0, "z": 5.153882032022076}, "138": {"x": 3.0, "y": 6.5, "z": 5.031152949374527}, "139": {"x": 3.0, "y": 7.0, "z": 4.8541219597369}, "140": {"x": 3.0, "y": 7.5, "z": 4.8541219597369}, "141": {"x": 3.0, "y": 8.0, "z": 4.8541219597369}, "142": {"x": 3.0, "y": 8.5, "z": 4.8541219597369}, "143": {"x": 3.0, "y": 9.0, "z": 4.8541219597369}, "144": {"x": 3.0, "y": 9.5, "z": 4.8541219597369}, "145": {"x": 2.5, "y": 10.0, "z": 4.616546328154847}, "146": {"x": 3.5, "y": 0.0, "z": 5.031152949374527}, "147": {"x": 3.5, "y": 0.5, "z": 5.031152949374527}, "148": {"x": 3.5, "y": 1.0, "z": 5.031152949374527}, "149": {"x": 3.5, "y": 1.5, "z": 5.031152949374527}, "150": {"x": 3.5, "y": 2.0, "z": 5.031152949374527}, "151": {"x": 3.5, "y": 2.5, "z": 5.031152949374527}, "152": {"x": 3.5, "y": 3.0, "z": 5.031152949374527}, "153": {"x": 3.5, "y": 3.5, "z": 5.031152949374527}, "154": {"x": 3.5, "y": 4.0, "z": 5.153882032022076}, "155": {"x": 3.5, "y": 4.5, "z": 5.226136240091718}, "156": {"x": 3.5, "y": 5.0, "z": 5.25}, "157": {"x": 3.5, "y": 5.5, "z": 5.226136240091718}, "158": {"x": 3.5, "y": 6.0, "z": 5.153882032022076}, "159": {"x": 3.5, "y": 6.5, "z": 5.031152949374527}, "160": {"x": 3.5, "y": 7.0, "z": 5.031152949374527}, "161": {"x": 3.5, "y": 7.5, "z": 5.031152949374527}, "162": {"x": 3.5, "y": 8.0, "z": 5.031152949374527}, "163": {"x": 3.5, "y": 8.5, "z": 5.031152949374527}, "164": {"x": 3.5, "y": 9.0, "z": 5.031152949374527}, "165": {"x": 3.5, "y": 9.5, "z": 5.031152949374527}, "166": {"x": 3.0, "y": 10.0, "z": 4.8541219597369}, "167": {"x": 4.0, "y": 0.0, "z": 5.153882032022076}, "168": {"x": 4.0, "y": 0.5, "z": 5.153882032022076}, "169": {"x": 4.0, "y": 1.0, "z": 5.153882032022076}, "170": {"x": 4.0, "y": 1.5, "z": 5.153882032022076}, "171": {"x": 4.0, "y": 2.0, "z": 5.153882032022076}, "172": {"x": 4.0, "y": 2.5, "z": 5.153882032022076}, "173": {"x": 4.0, "y": 3.0, "z": 5.153882032022076}, "174": {"x": 4.0, "y": 3.5, "z": 5.153882032022076}, "175": {"x": 4.0, "y": 4.0, "z": 5.153882032022076}, "176": {"x": 4.0, "y": 4.5, "z": 5.226136240091718}, "177": {"x": 4.0, "y": 5.0, "z": 5.25}, "178": {"x": 4.0, "y": 5.5, "z": 5.226136240091718}, "179": {"x": 4.0, "y": 6.0, "z": 5.153882032022076}, "180": {"x": 4.0, "y": 6.5, "z": 5.153882032022076}, "181": {"x": 4.0, "y": 7.0, "z": 5.153882032022076}, "182": {"x": 4.0, "y": 7.5, "z": 5.153882032022076}, "183": {"x": 4.0, "y": 8.0, "z": 5.153882032022076}, "184": {"x": 4.0, "y": 8.5, "z": 5.153882032022076}, "185": {"x": 4.0, "y": 9.0, "z": 5.153882032022076}, "186": {"x": 4.0, "y": 9.5, "z": 5.153882032022076}, "187": {"x": 3.5, "y": 10.0, "z": 5.031152949374527}, "188": {"x": 4.5, "y": 0.0, "z": 5.226136240091718}, "189": {"x": 4.5, "y": 0.5, "z": 5.226136240091718}, "190": {"x": 4.5, "y": 1.0, "z": 5.226136240091718}, "191": {"x": 4.5, "y": 1.5, "z": 5.226136240091718}, "192": {"x": 4.5, "y": 2.0, "z": 5.226136240091718}, "193": {"x": 4.5, "y": 2.5, "z": 5.226136240091718}, "194": {"x": 4.5, "y": 3.0, "z": 5.226136240091718}, "195": {"x": 4.5, "y": 3.5, "z": 5.226136240091718}, "196": {"x": 4.5, "y": 4.0, "z": 5.226136240091718}, "197": {"x": 4.5, "y": 4.5, "z": 5.226136240091718}, "198": {"x": 4.5, "y": 5.0, "z": 5.25}, "199": {"x": 4.5, "y": 5.5, "z": 5.226136240091718}, "200": {"x": 4.5, "y": 6.0, "z": 5.226136240091718}, "201": {"x": 4.5, "y": 6.5, "z": 5.226136240091718}, "202": {"x": 4.5, "y": 7.0, "z": 5.226136240091718}, "203": {"x": 4.5, "y": 7.5, "z": 5.226136240091718}, "204": {"x": 4.5, "y": 8.0, "z": 5.226136240091718}, "205": {"x": 4.5, "y": 8.5, "z": 5.226136240091718}, "206": {"x": 4.5, "y": 9.0, "z": 5.226136240091718}, "207": {"x": 4.5, "y": 9.5, "z": 5.226136240091718}, "208": {"x": 4.0, "y": 10.0, "z": 5.153882032022076}, "209": {"x": 5.0, "y": 0.0, "z": 5.25}, "210": {"x": 5.0, "y": 0.5, "z": 5.25}, "211": {"x": 5.0, "y": 1.0, "z": 5.25}, "212": {"x": 5.0, "y": 1.5, "z": 5.25}, "213": {"x": 5.0, "y": 2.0, "z": 5.25}, "214": {"x": 5.0, "y": 2.5, "z": 5.25}, "215": {"x": 5.0, "y": 3.0, "z": 5.25}, "216": {"x": 5.0, "y": 3.5, "z": 5.25}, "217": {"x": 5.0, "y": 4.0, "z": 5.25}, "218": {"x": 5.0, "y": 4.5, "z": 5.25}, "219": {"x": 5.0, "y": 5.0, "z": 5.25}, "220": {"x": 5.0, "y": 5.5, "z": 5.25}, "221": {"x": 5.0, "y": 6.0, "z": 5.25}, "222": {"x": 5.0, "y": 6.5, "z": 5.25}, "223": {"x": 5.0, "y": 7.0, "z": 5.25}, "224": {"x": 5.0, "y": 7.5, "z": 5.25}, "225": {"x": 5.0, "y": 8.0, "z": 5.25}, "226": {"x": 5.0, "y": 8.5, "z": 5.25}, "227": {"x": 5.0, "y": 9.0, "z": 5.25}, "228": {"x": 5.0, "y": 9.5, "z": 5.25}, "229": {"x": 4.5, "y": 10.0, "z": 5.226136240091718}, "230": {"x": 5.5, "y": 0.0, "z": 5.226136240091718}, "231": {"x": 5.5, "y": 0.5, "z": 5.226136240091718}, "232": {"x": 5.5, "y": 1.0, "z": 5.226136240091718}, "233": {"x": 5.5, "y": 1.5, "z": 5.226136240091718}, "234": {"x": 5.5, "y": 2.0, "z": 5.226136240091718}, "235": {"x": 5.5, "y": 2.5, "z": 5.226136240091718}, "236": {"x": 5.5, "y": 3.0, "z": 5.226136240091718}, "237": {"x": 5.5, "y": 3.5, "z": 5.226136240091718}, "238": {"x": 5.5, "y": 4.0, "z": 5.226136240091718}, "239": {"x": 5.5, "y": 4.5, "z": 5.226136240091718}, "240": {"x": 5.5, "y": 5.0, "z": 5.25}, "241": {"x": 5.5, "y": 5.5, "z": 5.226136240091718}, "242": {"x": 5.5, "y": 6.0, "z": 5.226136240091718}, "243": {"x": 5.5, "y": 6.5, "z": 5.226136240091718}, "244": {"x": 5.5, "y": 7.0, "z": 5.226136240091718}, "245": {"x": 5.5, "y": 7.5, "z": 5.226136240091718}, "246": {"x": 5.5, "y": 8.0, "z": 5.226136240091718}, "247": {"x": 5.5, "y": 8.5, "z": 5.226136240091718}, "248": {"x": 5.5, "y": 9.0, "z": 5.226136240091718}, "249": {"x": 5.5, "y": 9.5, "z": 5.226136240091718}, "250": {"x": 5.0, "y": 10.0, "z": 5.25}, "251": {"x": 6.0, "y": 0.0, "z": 5.153882032022076}, "252": {"x": 6.0, "y": 0.5, "z": 5.153882032022076}, "253": {"x": 6.0, "y": 1.0, "z": 5.153882032022076}, "254": {"x": 6.0, "y": 1.5, "z": 5.153882032022076}, "255": {"x": 6.0, "y": 2.0, "z": 5.153882032022076}, "256": {"x": 6.0, "y": 2.5, "z": 5.153882032022076}, "257": {"x": 6.0, "y": 3.0, "z": 5.153882032022076}, "258": {"x": 6.0, "y": 3.5, "z": 5.153882032022076}, "259": {"x": 6.0, "y": 4.0, "z": 5.153882032022076}, "260": {"x": 6.0, "y": 4.5, "z": 5.226136240091718}, "261": {"x": 6.0, "y": 5.0, "z": 5.25}, "262": {"x": 6.0, "y": 5.5, "z": 5.226136240091718}, "263": {"x": 6.0, "y": 6.0, "z": 5.153882032022076}, "264": {"x": 6.0, "y": 6.5, "z": 5.153882032022076}, "265": {"x": 6.0, "y": 7.0, "z": 5.153882032022076}, "266": {"x": 6.0, "y": 7.5, "z": 5.153882032022076}, "267": {"x": 6.0, "y": 8.0, "z": 5.153882032022076}, "268": {"x": 6.0, "y": 8.5, "z": 5.153882032022076}, "269": {"x": 6.0, "y": 9.0, "z": 5.153882032022076}, "270": {"x": 6.0, "y": 9.5, "z": 5.153882032022076}, "271": {"x": 5.5, "y": 10.0, "z": 5.226136240091718}, "272": {"x": 6.5, "y": 0.0, "z": 5.031152949374527}, "273": {"x": 6.5, "y": 0.5, "z": 5.031152949374527}, "274": {"x": 6.5, "y": 1.0, "z": 5.031152949374527}, "275": {"x": 6.5, "y": 1.5, "z": 5.031152949374527}, "276": {"x": 6.5, "y": 2.0, "z": 5.031152949374527}, "277": {"x": 6.5, "y": 2.5, "z": 5.031152949374527}, "278": {"x": 6.5, "y": 3.0, "z": 5.031152949374527}, "279": {"x": 6.5, "y": 3.5, "z": 5.031152949374527}, "280": {"x": 6.5, "y": 4.0, "z": 5.153882032022076}, "281": {"x": 6.5, "y": 4.5, "z": 5.226136240091718}, "282": {"x": 6.5, "y": 5.0, "z": 5.25}, "283": {"x": 6.5, "y": 5.5, "z": 5.226136240091718}, "284": {"x": 6.5, "y": 6.0, "z": 5.153882032022076}, "285": {"x": 6.5, "y": 6.5, "z": 5.031152949374527}, "286": {"x": 6.5, "y": 7.0, "z": 5.031152949374527}, "287": {"x": 6.5, "y": 7.5, "z": 5.031152949374527}, "288": {"x": 6.5, "y": 8.0, "z": 5.031152949374527}, "289": {"x": 6.5, "y": 8.5, "z": 5.031152949374527}, "290": {"x": 6.5, "y": 9.0, "z": 5.031152949374527}, "291": {"x": 6.5, "y": 9.5, "z": 5.031152949374527}, "292": {"x": 6.0, "y": 10.0, "z": 5.153882032022076}, "293": {"x": 7.0, "y": 0.0, "z": 4.8541219597369}, "294": {"x": 7.0, "y": 0.5, "z": 4.8541219597369}, "295": {"x": 7.0, "y": 1.0, "z": 4.8541219597369}, "296": {"x": 7.0, "y": 1.5, "z": 4.8541219597369}, "297": {"x": 7.0, "y": 2.0, "z": 4.8541219597369}, "298": {"x": 7.0, "y": 2.5, "z": 4.8541219597369}, "299": {"x": 7.0, "y": 3.0, "z": 4.8541219597369}, "300": {"x": 7.0, "y": 3.5, "z": 5.031152949374527}, "301": {"x": 7.0, "y": 4.0, "z": 5.153882032022076}, "302": {"x": 7.0, "y": 4.5, "z": 5.226136240091718}, "303": {"x": 7.0, "y": 5.0, "z": 5.25}, "304": {"x": 7.0, "y": 5.5, "z": 5.226136240091718}, "305": {"x": 7.0, "y": 6.0, "z": 5.153882032022076}, "306": {"x": 7.0, "y": 6.5, "z": 5.031152949374527}, "307": {"x": 7.0, "y": 7.0, "z": 4.8541219597369}, "308": {"x": 7.0, "y": 7.5, "z": 4.8541219597369}, "309": {"x": 7.0, "y": 8.0, "z": 4.8541219597369}, "310": {"x": 7.0, "y": 8.5, "z": 4.8541219597369}, "311": {"x": 7.0, "y": 9.0, "z": 4.8541219597369}, "312": {"x": 7.0, "y": 9.5, "z": 4.8541219597369}, "313": {"x": 6.5, "y": 10.0, "z": 5.031152949374527}, "314": {"x": 7.5, "y": 0.0, "z": 4.616546328154847}, "315": {"x": 7.5, "y": 0.5, "z": 4.616546328154847}, "316": {"x": 7.5, "y": 1.0, "z": 4.616546328154847}, "317": {"x": 7.5, "y": 1.5, "z": 4.616546328154847}, "318": {"x": 7.5, "y": 2.0, "z": 4.616546328154847}, "319": {"x": 7.5, "y": 2.5, "z": 4.616546328154847}, "320": {"x": 7.5, "y": 3.0, "z": 4.8541219597369}, "321": {"x": 7.5, "y": 3.5, "z": 5.031152949374527}, "322": {"x": 7.5, "y": 4.0, "z": 5.153882032022076}, "323": {"x": 7.5, "y": 4.5, "z": 5.226136240091718}, "324": {"x": 7.5, "y": 5.0, "z": 5.25}, "325": {"x": 7.5, "y": 5.5, "z": 5.226136240091718}, "326": {"x": 7.5, "y": 6.0, "z": 5.153882032022076}, "327": {"x": 7.5, "y": 6.5, "z": 5.031152949374527}, "328": {"x": 7.5, "y": 7.0, "z": 4.8541219597369}, "329": {"x": 7.5, "y": 7.5, "z": 4.616546328154847}, "330": {"x": 7.5, "y": 8.0, "z": 4.616546328154847}, "331": {"x": 7.5, "y": 8.5, "z": 4.616546328154847}, "332": {"x": 7.5, "y": 9.0, "z": 4.616546328154847}, "333": {"x": 7.5, "y": 9.5, "z": 4.616546328154847}, "334": {"x": 7.0, "y": 10.0, "z": 4.8541219597369}, "335": {"x": 8.0, "y": 0.0, "z": 4.3084219849035215}, "336": {"x": 8.0, "y": 0.5, "z": 4.3084219849035215}, "337": {"x": 8.0, "y": 1.0, "z": 4.3084219849035215}, "338": {"x": 8.0, "y": 1.5, "z": 4.3084219849035215}, "339": {"x": 8.0, "y": 2.0, "z": 4.3084219849035215}, "340": {"x": 8.0, "y": 2.5, "z": 4.616546328154847}, "341": {"x": 8.0, "y": 3.0, "z": 4.8541219597369}, "342": {"x": 8.0, "y": 3.5, "z": 5.031152949374527}, "343": {"x": 8.0, "y": 4.0, "z": 5.153882032022076}, "344": {"x": 8.0, "y": 4.5, "z": 5.226136240091718}, "345": {"x": 8.0, "y": 5.0, "z": 5.25}, "346": {"x": 8.0, "y": 5.5, "z": 5.226136240091718}, "347": {"x": 8.0, "y": 6.0, "z": 5.153882032022076}, "348": {"x": 8.0, "y": 6.5, "z": 5.031152949374527}, "349": {"x": 8.0, "y": 7.0, "z": 4.8541219597369}, "350": {"x": 8.0, "y": 7.5, "z": 4.616546328154847}, "351": {"x": 8.0, "y": 8.0, "z": 4.3084219849035215}, "352": {"x": 8.0, "y": 8.5, "z": 4.3084219849035215}, "353": {"x": 8.0, "y": 9.0, "z": 4.3084219849035215}, "354": {"x": 8.0, "y": 9.5, "z": 4.3084219849035215}, "355": {"x": 7.5, "y": 10.0, "z": 4.616546328154847}, "356": {"x": 8.5, "y": 0.0, "z": 3.913118960624632}, "357": {"x": 8.5, "y": 0.5, "z": 3.913118960624632}, "358": {"x": 8.5, "y": 1.0, "z": 3.913118960624632}, "359": {"x": 8.5, "y": 1.5, "z": 3.913118960624632}, "360": {"x": 8.5, "y": 2.0, "z": 4.3084219849035215}, "361": {"x": 8.5, "y": 2.5, "z": 4.616546328154847}, "362": {"x": 8.5, "y": 3.0, "z": 4.8541219597369}, "363": {"x": 8.5, "y": 3.5, "z": 5.031152949374527}, "364": {"x": 8.5, "y": 4.0, "z": 5.153882032022076}, "365": {"x": 8.5, "y": 4.5, "z": 5.226136240091718}, "366": {"x": 8.5, "y": 5.0, "z": 5.25}, "367": {"x": 8.5, "y": 5.5, "z": 5.226136240091718}, "368": {"x": 8.5, "y": 6.0, "z": 5.153882032022076}, "369": {"x": 8.5, "y": 6.5, "z": 5.031152949374527}, "370": {"x": 8.5, "y": 7.0, "z": 4.8541219597369}, "371": {"x": 8.5, "y": 7.5, "z": 4.616546328154847}, "372": {"x": 8.5, "y": 8.0, "z": 4.3084219849035215}, "373": {"x": 8.5, "y": 8.5, "z": 3.913118960624632}, "374": {"x": 8.5, "y": 9.0, "z": 3.913118960624632}, "375": {"x": 8.5, "y": 9.5, "z": 3.913118960624632}, "376": {"x": 8.0, "y": 10.0, "z": 4.3084219849035215}, "377": {"x": 9.0, "y": 0.0, "z": 3.400367627183861}, "378": {"x": 9.0, "y": 0.5, "z": 3.400367627183861}, "379": {"x": 9.0, "y": 1.0, "z": 3.400367627183861}, "380": {"x": 9.0, "y": 1.5, "z": 3.913118960624632}, "381": {"x": 9.0, "y": 2.0, "z": 4.3084219849035215}, "382": {"x": 9.0, "y": 2.5, "z": 4.616546328154847}, "383": {"x": 9.0, "y": 3.0, "z": 4.8541219597369}, "384": {"x": 9.0, "y": 3.5, "z": 5.031152949374527}, "385": {"x": 9.0, "y": 4.0, "z": 5.153882032022076}, "386": {"x": 9.0, "y": 4.5, "z": 5.226136240091718}, "387": {"x": 9.0, "y": 5.0, "z": 5.25}, "388": {"x": 9.0, "y": 5.5, "z": 5.226136240091718}, "389": {"x": 9.0, "y": 6.0, "z": 5.153882032022076}, "390": {"x": 9.0, "y": 6.5, "z": 5.031152949374527}, "391": {"x": 9.0, "y": 7.0, "z": 4.8541219597369}, "392": {"x": 9.0, "y": 7.5, "z": 4.616546328154847}, "393": {"x": 9.0, "y": 8.0, "z": 4.3084219849035215}, "394": {"x": 9.0, "y": 8.5, "z": 3.913118960624632}, "395": {"x": 9.0, "y": 9.0, "z": 3.400367627183861}, "396": {"x": 9.0, "y": 9.5, "z": 3.400367627183861}, "397": {"x": 8.5, "y": 10.0, "z": 3.913118960624632}, "398": {"x": 9.5, "y": 0.0, "z": 2.704163456597992}, "399": {"x": 9.5, "y": 0.5, "z": 2.704163456597992}, "400": {"x": 9.5, "y": 1.0, "z": 3.400367627183861}, "401": {"x": 9.5, "y": 1.5, "z": 3.913118960624632}, "402": {"x": 9.5, "y": 2.0, "z": 4.3084219849035215}, "403": {"x": 9.5, "y": 2.5, "z": 4.616546328154847}, "404": {"x": 9.5, "y": 3.0, "z": 4.8541219597369}, "405": {"x": 9.5, "y": 3.5, "z": 5.031152949374527}, "406": {"x": 9.5, "y": 4.0, "z": 5.153882032022076}, "407": {"x": 9.5, "y": 4.5, "z": 5.226136240091718}, "408": {"x": 9.5, "y": 5.0, "z": 5.25}, "409": {"x": 9.5, "y": 5.5, "z": 5.226136240091718}, "410": {"x": 9.5, "y": 6.0, "z": 5.153882032022076}, "411": {"x": 9.5, "y": 6.5, "z": 5.031152949374527}, "412": {"x": 9.5, "y": 7.0, "z": 4.8541219597369}, "413": {"x": 9.5, "y": 7.5, "z": 4.616546328154847}, "414": {"x": 9.5, "y": 8.0, "z": 4.3084219849035215}, "415": {"x": 9.5, "y": 8.5, "z": 3.913118960624632}, "416": {"x": 9.5, "y": 9.0, "z": 3.400367627183861}, "417": {"x": 9.5, "y": 9.5, "z": 2.704163456597992}, "418": {"x": 9.0, "y": 10.0, "z": 3.400367627183861}, "419": {"x": 10.0, "y": 0.0, "z": 1.6007810593582121}, "420": {"x": 10.0, "y": 0.5, "z": 2.704163456597992}, "421": {"x": 10.0, "y": 1.0, "z": 3.400367627183861}, "422": {"x": 10.0, "y": 1.5, "z": 3.913118960624632}, "423": {"x": 10.0, "y": 2.0, "z": 4.3084219849035215}, "424": {"x": 10.0, "y": 2.5, "z": 4.616546328154847}, "425": {"x": 10.0, "y": 3.0, "z": 4.8541219597369}, "426": {"x": 10.0, "y": 3.5, "z": 5.031152949374527}, "427": {"x": 10.0, "y": 4.0, "z": 5.153882032022076}, "428": {"x": 10.0, "y": 4.5, "z": 5.226136240091718}, "429": {"x": 10.0, "y": 5.0, "z": 5.25}, "430": {"x": 10.0, "y": 5.5, "z": 5.226136240091718}, "431": {"x": 10.0, "y": 6.0, "z": 5.153882032022076}, "432": {"x": 10.0, "y": 6.5, "z": 5.031152949374527}, "433": {"x": 10.0, "y": 7.0, "z": 4.8541219597369}, "434": {"x": 10.0, "y": 7.5, "z": 4.616546328154847}, "435": {"x": 10.0, "y": 8.0, "z": 4.3084219849035215}, "436": {"x": 10.0, "y": 8.5, "z": 3.913118960624632}, "437": {"x": 10.0, "y": 9.0, "z": 3.400367627183861}, "438": {"x": 10.0, "y": 9.5, "z": 2.704163456597992}, "439": {"x": 9.5, "y": 10.0, "z": 2.704163456597992}, "440": {"x": 10.0, "y": 10.0, "z": 1.6007810593582121}}, "face": {"0": [0, 1, 3], "1": [2, 0, 3], "2": [1, 41, 42, 3], "3": [2, 3, 5, 4], "4": [3, 42, 43], "5": [5, 3, 43], "6": [4, 5, 7, 6], "7": [5, 43, 44, 7], "8": [6, 7, 9, 8], "9": [7, 44, 45, 9], "10": [8, 9, 11, 10], "11": [9, 45, 46, 11], "12": [10, 11, 13, 12], "13": [11, 46, 47, 13], "14": [12, 13, 15, 14], "15": [13, 47, 48, 15], "16": [14, 15, 17, 16], "17": [15, 48, 49, 17], "18": [16, 17, 19, 18], "19": [17, 49, 50, 19], "20": [18, 19, 21, 20], "21": [19, 50, 51, 21], "22": [20, 21, 23, 22], "23": [21, 51, 52, 23], "24": [22, 23, 25, 24], "25": [23, 52, 53, 25], "26": [24, 25, 27, 26], "27": [25, 53, 54, 27], "28": [26, 27, 29, 28], "29": [27, 54, 55, 29], "30": [28, 29, 31, 30], "31": [29, 55, 56, 31], "32": [30, 31, 33, 32], "33": [31, 56, 57, 33], "34": [32, 33, 35, 34], "35": [33, 57, 58, 35], "36": [34, 35, 37, 36], "37": [35, 58, 59, 37], "38": [36, 37, 39, 38], "39": [37, 59, 39], "40": [38, 39, 40], "41": [39, 60, 82, 61], "42": [60, 39, 59], "43": [39, 61, 40], "44": [41, 62, 63, 42], "45": [42, 63, 64, 43], "46": [43, 64, 65], "47": [44, 43, 65], "48": [44, 65, 66, 45], "49": [45, 66, 67, 46], "50": [46, 67, 68, 47], "51": [47, 68, 69, 48], "52": [48, 69, 70, 49], "53": [49, 70, 71, 50], "54": [50, 71, 72, 51], "55": [51, 72, 73, 52], "56": [52, 73, 74, 53], "57": [53, 74, 75, 54], "58": [54, 75, 76, 55], "59": [55, 76, 77, 56], "60": [56, 77, 78, 57], "61": [57, 78, 79, 58], "62": [58, 79, 59], "63": [59, 80, 81, 60], "64": [80, 59, 79], "65": [60, 81, 103, 82], "66": [62, 83, 84, 63], "67": [63, 84, 85, 64], "68": [64, 85, 86, 65], "69": [65, 86, 87], "70": [66, 65, 87], "71": [66, 87, 88, 67], "72": [67, 88, 89, 68], "73": [68, 89, 90, 69], "74": [69, 90, 91, 70], "75": [70, 91, 92, 71], "76": [71, 92, 93, 72], "77": [72, 93, 94, 73], "78": [73, 94, 95, 74], "79": [74, 95, 96, 75], "80": [75, 96, 97, 76], "81": [76, 97, 98, 77], "82": [77, 98, 99, 78], "83": [78, 99, 79], "84": [79, 100, 101, 80], "85": [100, 79, 99], "86": [80, 101, 102, 81], "87": [81, 102, 124, 103], "88": [83, 104, 105, 84], "89": [84, 105, 106, 85], "90": [85, 106, 107, 86], "91": [86, 107, 108, 87], "92": [87, 108, 109], "93": [88, 87, 109], "94": [88, 109, 110, 89], "95": [89, 110, 111, 90], "96": [90, 111, 112, 91], "97": [91, 112, 113, 92], "98": [92, 113, 114, 93], "99": [93, 114, 115, 94], "100": [94, 115, 116, 95], "101": [95, 116, 117, 96], "102": [96, 117, 118, 97], "103": [97, 118, 119, 98], "104": [98, 119, 99], "105": [99, 120, 121, 100], "106": [120, 99, 119], "107": [100, 121, 122, 101], "108": [101, 122, 123, 102], "109": [102, 123, 145, 124], "110": [104, 125, 126, 105], "111": [105, 126, 127, 106], "112": [106, 127, 128, 107], "113": [107, 128, 129, 108], "114": [108, 129, 130, 109], "115": [109, 130, 131], "116": [110, 109, 131], "117": [110, 131, 132, 111], "118": [111, 132, 133, 112], "119": [112, 133, 134, 113], "120": [113, 134, 135, 114], "121": [114, 135, 136, 115], "122": [115, 136, 137, 116], "123": [116, 137, 138, 117], "124": [117, 138, 139, 118], "125": [118, 139, 119], "126": [119, 140, 141, 120], "127": [140, 119, 139], "128": [120, 141, 142, 121], "129": [121, 142, 143, 122], "130": [122, 143, 144, 123], "131": [123, 144, 166, 145], "132": [125, 146, 147, 126], "133": [126, 147, 148, 127], "134": [127, 148, 149, 128], "135": [128, 149, 150, 129], "136": [129, 150, 151, 130], "137": [130, 151, 152, 131], "138": [131, 152, 153], "139": [132, 131, 153], "140": [132, 153, 154, 133], "141": [133, 154, 155, 134], "142": [134, 155, 156, 135], "143": [135, 156, 157, 136], "144": [136, 157, 158, 137], "145": [137, 158, 159, 138], "146": [138, 159, 139], "147": [139, 160, 161, 140], "148": [160, 139, 159], "149": [140, 161, 162, 141], "150": [141, 162, 163, 142], "151": [142, 163, 164, 143], "152": [143, 164, 165, 144], "153": [144, 165, 187, 166], "154": [146, 167, 168, 147], "155": [147, 168, 169, 148], "156": [148, 169, 170, 149], "157": [149, 170, 171, 150], "158": [150, 171, 172, 151], "159": [151, 172, 173, 152], "160": [152, 173, 174, 153], "161": [153, 174, 175], "162": [154, 153, 175], "163": [154, 175, 176, 155], "164": [155, 176, 177, 156], "165": [156, 177, 178, 157], "166": [157, 178, 179, 158], "167": [158, 179, 159], "168": [159, 180, 181, 160], "169": [180, 159, 179], "170": [160, 181, 182, 161], "171": [161, 182, 183, 162], "172": [162, 183, 184, 163], "173": [163, 184, 185, 164], "174": [164, 185, 186, 165], "175": [165, 186, 208, 187], "176": [167, 188, 189, 168], "177": [168, 189, 190, 169], "178": [169, 190, 191, 170], "179": [170, 191, 192, 171], "180": [171, 192, 193, 172], "181": [172, 193, 194, 173], "182": [173, 194, 195, 174], "183": [174, 195, 196, 175], "184": [175, 196, 197], "185": [176, 175, 197], "186": [176, 197, 198, 177], "187": [177, 198, 199, 178], "188": [178, 199, 179], "189": [179, 200, 201, 180], "190": [200, 179, 199], "191": [180, 201, 202, 181], "192": [181, 202, 203, 182], "193": [182, 203, 204, 183], "194": [183, 204, 205, 184], "195": [184, 205, 206, 185], "196": [185, 206, 207, 186], "197": [186, 207, 229, 208], "198": [188, 209, 210, 189], "199": [189, 210, 211, 190], "200": [190, 211, 212, 191], "201": [191, 212, 213, 192], "202": [192, 213, 214, 193], "203": [193, 214, 215, 194], "204": [194, 215, 216, 195], "205": [195, 216, 217, 196], "206": [196, 217, 218, 197], "207": [197, 218, 219], "208": [198, 197, 219], "209": [198, 219, 199], "210": [199, 220, 221, 200], "211": [220, 199, 219], "212": [200, 221, 222, 201], "213": [201, 222, 223, 202], "214": [202, 223, 224, 203], "215": [203, 224, 225, 204], "216": [204, 225, 226, 205], "217": [205, 226, 227, 206], "218": [206, 227, 228, 207], "219": [207, 228, 250, 229], "220": [209, 230, 231, 210], "221": [210, 231, 232, 211], "222": [211, 232, 233, 212], "223": [212, 233, 234, 213], "224": [213, 234, 235, 214], "225": [214, 235, 236, 215], "226": [215, 236, 237, 216], "227": [216, 237, 238, 217], "228": [217, 238, 239, 218], "229": [218, 239, 219], "230": [219, 240, 241], "231": [240, 219, 239], "232": [220, 219, 241], "233": [220, 241, 242, 221], "234": [221, 242, 243, 222], "235": [222, 243, 244, 223], "236": [223, 244, 245, 224], "237": [224, 245, 246, 225], "238": [225, 246, 247, 226], "239": [226, 247, 248, 227], "240": [227, 248, 249, 228], "241": [228, 249, 271, 250], "242": [230, 251, 252, 231], "243": [231, 252, 253, 232], "244": [232, 253, 254, 233], "245": [233, 254, 255, 234], "246": [234, 255, 256, 235], "247": [235, 256, 257, 236], "248": [236, 257, 258, 237], "249": [237, 258, 259, 238], "250": [238, 259, 239], "251": [239, 260, 261, 240], "252": [260, 239, 259], "253": [240, 261, 262, 241], "254": [241, 262, 263], "255": [242, 241, 263], "256": [242, 263, 264, 243], "257": [243, 264, 265, 244], "258": [244, 265, 266, 245], "259": [245, 266, 267, 246], "260": [246, 267, 268, 247], "261": [247, 268, 269, 248], "262": [248, 269, 270, 249], "263": [249, 270, 292, 271], "264": [251, 272, 273, 252], "265": [252, 273, 274, 253], "266": [253, 274, 275, 254], "267": [254, 275, 276, 255], "268": [255, 276, 277, 256], "269": [256, 277, 278, 257], "270": [257, 278, 279, 258], "271": [258, 279, 259], "272": [259, 280, 281, 260], "273": [280, 259, 279], "274": [260, 281, 282, 261], "275": [261, 282, 283, 262], "276": [262, 283, 284, 263], "277": [263, 284, 285], "278": [264, 263, 285], "279": [264, 285, 286, 265], "280": [265, 286, 287, 266], "281": [266, 287, 288, 267], "282": [267, 288, 289, 268], "283": [268, 289, 290, 269], "284": [269, 290, 291, 270], "285": [270, 291, 313, 292], "286": [272, 293, 294, 273], "287": [273, 294, 295, 274], "288": [274, 295, 296, 275], "289": [275, 296, 297, 276], "290": [276, 297, 298, 277], "291": [277, 298, 299, 278], "292": [278, 299, 279], "293": [279, 300, 301, 280], "294": [300, 279, 299], "295": [280, 301, 302, 281], "296": [281, 302, 303, 282], "297": [282, 303, 304, 283], "298": [283, 304, 305, 284], "299": [284, 305, 306, 285], "300": [285, 306, 307], "301": [286, 285, 307], "302": [286, 307, 308, 287], "303": [287, 308, 309, 288], "304": [288, 309, 310, 289], "305": [289, 310, 311, 290], "306": [290, 311, 312, 291], "307": [291, 312, 334, 313], "308": [293, 314, 315, 294], "309": [294, 315, 316, 295], "310": [295, 316, 317, 296], "311": [296, 317, 318, 297], "312": [297, 318, 319, 298], "313": [298, 319, 299], "314": [299, 320, 321, 300], "315": [320, 299, 319], "316": [300, 321, 322, 301], "317": [301, 322, 323, 302], "318": [302, 323, 324, 303], "319": [303, 324, 325, 304], "320": [304, 325, 326, 305], "321": [305, 326, 327, 306], "322": [306, 327, 328, 307], "323": [307, 328, 329], "324": [308, 307, 329], "325": [308, 329, 330, 309], "326": [309, 330, 331, 310], "327": [310, 331, 332, 311], "328": [311, 332, 333, 312], "329": [312, 333, 355, 334], "330": [314, 335, 336, 315], "331": [315, 336, 337, 316], "332": [316, 337, 338, 317], "333": [317, 338, 339, 318], "334": [318, 339, 319], "335": [319, 340, 341, 320], "336": [340, 319, 339], "337": [320, 341, 342, 321], "338": [321, 342, 343, 322], "339": [322, 343, 344, 323], "340": [323, 344, 345, 324], "341": [324, 345, 346, 325], "342": [325, 346, 347, 326], "343": [326, 347, 348, 327], "344": [327, 348, 349, 328], "345": [328, 349, 350, 329], "346": [329, 350, 351], "347": [330, 329, 351], "348": [330, 351, 352, 331], "349": [331, 352, 353, 332], "350": [332, 353, 354, 333], "351": [333, 354, 376, 355], "352": [335, 356, 357, 336], "353": [336, 357, 358, 337], "354": [337, 358, 359, 338], "355": [338, 359, 339], "356": [339, 360, 361, 340], "357": [360, 339, 359], "358": [340, 361, 362, 341], "359": [341, 362, 363, 342], "360": [342, 363, 364, 343], "361": [343, 364, 365, 344], "362": [344, 365, 366, 345], "363": [345, 366, 367, 346], "364": [346, 367, 368, 347], "365": [347, 368, 369, 348], "366": [348, 369, 370, 349], "367": [349, 370, 371, 350], "368": [350, 371, 372, 351], "369": [351, 372, 373], "370": [352, 351, 373], "371": [352, 373, 374, 353], "372": [353, 374, 375, 354], "373": [354, 375, 397, 376], "374": [356, 377, 378, 357], "375": [357, 378, 379, 358], "376": [358, 379, 359], "377": [359, 380, 381, 360], "378": [380, 359, 379], "379": [360, 381, 382, 361], "380": [361, 382, 383, 362], "381": [362, 383, 384, 363], "382": [363, 384, 385, 364], "383": [364, 385, 386, 365], "384": [365, 386, 387, 366], "385": [366, 387, 388, 367], "386": [367, 388, 389, 368], "387": [368, 389, 390, 369], "388": [369, 390, 391, 370], "389": [370, 391, 392, 371], "390": [371, 392, 393, 372], "391": [372, 393, 394, 373], "392": [373, 394, 395], "393": [374, 373, 395], "394": [374, 395, 396, 375], "395": [375, 396, 418, 397], "396": [377, 398, 399, 378], "397": [378, 399, 379], "398": [379, 400, 401, 380], "399": [400, 379, 399], "400": [380, 401, 402, 381], "401": [381, 402, 403, 382], "402": [382, 403, 404, 383], "403": [383, 404, 405, 384], "404": [384, 405, 406, 385], "405": [385, 406, 407, 386], "406": [386, 407, 408, 387], "407": [387, 408, 409, 388], "408": [388, 409, 410, 389], "409": [389, 410, 411, 390], "410": [390, 411, 412, 391], "411": [391, 412, 413, 392], "412": [392, 413, 414, 393], "413": [393, 414, 415, 394], "414": [394, 415, 416, 395], "415": [395, 416, 417], "416": [396, 395, 417], "417": [396, 417, 439, 418], "418": [398, 419, 399], "419": [399, 420, 421, 400], "420": [420, 399, 419], "421": [400, 421, 422, 401], "422": [401, 422, 423, 402], "423": [402, 423, 424, 403], "424": [403, 424, 425, 404], "425": [404, 425, 426, 405], "426": [405, 426, 427, 406], "427": [406, 427, 428, 407], "428": [407, 428, 429, 408], "429": [408, 429, 430, 409], "430": [409, 430, 431, 410], "431": [410, 431, 432, 411], "432": [411, 432, 433, 412], "433": [412, 433, 434, 413], "434": [413, 434, 435, 414], "435": [414, 435, 436, 415], "436": [415, 436, 437, 416], "437": [416, 437, 438, 417], "438": [417, 438, 440], "439": [439, 417, 440]}, "facedata": {"0": {}, "1": {}, "2": {}, "3": {}, "4": {}, "5": {}, "6": {}, "7": {}, "8": {}, "9": {}, "10": {}, "11": {}, "12": {}, "13": {}, "14": {}, "15": {}, "16": {}, "17": {}, "18": {}, "19": {}, "20": {}, "21": {}, "22": {}, "23": {}, "24": {}, "25": {}, "26": {}, "27": {}, "28": {}, "29": {}, "30": {}, "31": {}, "32": {}, "33": {}, "34": {}, "35": {}, "36": {}, "37": {}, "38": {}, "39": {}, "40": {}, "41": {}, "42": {}, "43": {}, "44": {}, "45": {}, "46": {}, "47": {}, "48": {}, "49": {}, "50": {}, "51": {}, "52": {}, "53": {}, "54": {}, "55": {}, "56": {}, "57": {}, "58": {}, "59": {}, "60": {}, "61": {}, "62": {}, "63": {}, "64": {}, "65": {}, "66": {}, "67": {}, "68": {}, "69": {}, "70": {}, "71": {}, "72": {}, "73": {}, "74": {}, "75": {}, "76": {}, "77": {}, "78": {}, "79": {}, "80": {}, "81": {}, "82": {}, "83": {}, "84": {}, "85": {}, "86": {}, "87": {}, "88": {}, "89": {}, "90": {}, "91": {}, "92": {}, "93": {}, "94": {}, "95": {}, "96": {}, "97": {}, "98": {}, "99": {}, "100": {}, "101": {}, "102": {}, "103": {}, "104": {}, "105": {}, "106": {}, "107": {}, "108": {}, "109": {}, "110": {}, "111": {}, "112": {}, "113": {}, "114": {}, "115": {}, "116": {}, "117": {}, "118": {}, "119": {}, "120": {}, "121": {}, "122": {}, "123": {}, "124": {}, "125": {}, "126": {}, "127": {}, "128": {}, "129": {}, "130": {}, "131": {}, "132": {}, "133": {}, "134": {}, "135": {}, "136": {}, "137": {}, "138": {}, "139": {}, "140": {}, "141": {}, "142": {}, "143": {}, "144": {}, "145": {}, "146": {}, "147": {}, "148": {}, "149": {}, "150": {}, "151": {}, "152": {}, "153": {}, "154": {}, "155": {}, "156": {}, "157": {}, "158": {}, "159": {}, "160": {}, "161": {}, "162": {}, "163": {}, "164": {}, "165": {}, "166": {}, "167": {}, "168": {}, "169": {}, "170": {}, "171": {}, "172": {}, "173": {}, "174": {}, "175": {}, "176": {}, "177": {}, "178": {}, "179": {}, "180": {}, "181": {}, "182": {}, "183": {}, "184": {}, "185": {}, "186": {}, "187": {}, "188": {}, "189": {}, "190": {}, "191": {}, "192": {}, "193": {}, "194": {}, "195": {}, "196": {}, "197": {}, "198": {}, "199": {}, "200": {}, "201": {}, "202": {}, "203": {}, "204": {}, "205": {}, "206": {}, "207": {}, "208": {}, "209": {}, "210": {}, "211": {}, "212": {}, "213": {}, "214": {}, "215": {}, "216": {}, "217": {}, "218": {}, "219": {}, "220": {}, "221": {}, "222": {}, "223": {}, "224": {}, "225": {}, "226": {}, "227": {}, "228": {}, "229": {}, "230": {}, "231": {}, "232": {}, "233": {}, "234": {}, "235": {}, "236": {}, "237": {}, "238": {}, "239": {}, "240": {}, "241": {}, "242": {}, "243": {}, "244": {}, "245": {}, "246": {}, "247": {}, "248": {}, "249": {}, "250": {}, "251": {}, "252": {}, "253": {}, "254": {}, "255": {}, "256": {}, "257": {}, "258": {}, "259": {}, "260": {}, "261": {}, "262": {}, "263": {}, "264": {}, "265": {}, "266": {}, "267": {}, "268": {}, "269": {}, "270": {}, "271": {}, "272": {}, "273": {}, "274": {}, "275": {}, "276": {}, "277": {}, "278": {}, "279": {}, "280": {}, "281": {}, "282": {}, "283": {}, "284": {}, "285": {}, "286": {}, "287": {}, "288": {}, "289": {}, "290": {}, "291": {}, "292": {}, "293": {}, "294": {}, "295": {}, "296": {}, "297": {}, "298": {}, "299": {}, "300": {}, "301": {}, "302": {}, "303": {}, "304": {}, "305": {}, "306": {}, "307": {}, "308": {}, "309": {}, "310": {}, "311": {}, "312": {}, "313": {}, "314": {}, "315": {}, "316": {}, "317": {}, "318": {}, "319": {}, "320": {}, "321": {}, "322": {}, "323": {}, "324": {}, "325": {}, "326": {}, "327": {}, "328": {}, "329": {}, "330": {}, "331": {}, "332": {}, "333": {}, "334": {}, "335": {}, "336": {}, "337": {}, "338": {}, "339": {}, "340": {}, "341": {}, "342": {}, "343": {}, "344": {}, "345": {}, "346": {}, "347": {}, "348": {}, "349": {}, "350": {}, "351": {}, "352": {}, "353": {}, "354": {}, "355": {}, "356": {}, "357": {}, "358": {}, "359": {}, "360": {}, "361": {}, "362": {}, "363": {}, "364": {}, "365": {}, "366": {}, "367": {}, "368": {}, "369": {}, "370": {}, "371": {}, "372": {}, "373": {}, "374": {}, "375": {}, "376": {}, "377": {}, "378": {}, "379": {}, "380": {}, "381": {}, "382": {}, "383": {}, "384": {}, "385": {}, "386": {}, "387": {}, "388": {}, "389": {}, "390": {}, "391": {}, "392": {}, "393": {}, "394": {}, "395": {}, "396": {}, "397": {}, "398": {}, "399": {}, "400": {}, "401": {}, "402": {}, "403": {}, "404": {}, "405": {}, "406": {}, "407": {}, "408": {}, "409": {}, "410": {}, "411": {}, "412": {}, "413": {}, "414": {}, "415": {}, "416": {}, "417": {}, "418": {}, "419": {}, "420": {}, "421": {}, "422": {}, "423": {}, "424": {}, "425": {}, "426": {}, "427": {}, "428": {}, "429": {}, "430": {}, "431": {}, "432": {}, "433": {}, "434": {}, "435": {}, "436": {}, "437": {}, "438": {}, "439": {}}, "edgedata": {}, "max_vertex": 440, "max_face": 439}, "inheritance": [], "guid": "769c0ec5-019f-42cd-9684-c80c7996d83e"} \ No newline at end of file diff --git a/data/intrados_mesh.json b/data/intrados_mesh.json new file mode 100644 index 0000000..d44cc7b --- /dev/null +++ b/data/intrados_mesh.json @@ -0,0 +1 @@ +{"dtype": "compas.datastructures/Mesh", "data": {"attributes": {}, "default_vertex_attributes": {"x": 0.0, "y": 0.0, "z": 0.0}, "default_edge_attributes": {}, "default_face_attributes": {}, "vertex": {"0": {"x": 0.0, "y": 0.0, "z": -0.0}, "1": {"x": 0.5, "y": 0.0, "z": 1.5206906325745548}, "2": {"x": 0.0, "y": 0.5, "z": 1.5206906325745548}, "3": {"x": 0.5, "y": 0.5, "z": 1.5206906325745548}, "4": {"x": 0.0, "y": 1.0, "z": 2.5617376914898995}, "5": {"x": 0.5, "y": 1.0, "z": 2.5617376914898995}, "6": {"x": 0.0, "y": 1.5, "z": 3.2113081446662823}, "7": {"x": 0.5, "y": 1.5, "z": 3.2113081446662823}, "8": {"x": 0.0, "y": 2.0, "z": 3.6827299656640586}, "9": {"x": 0.5, "y": 2.0, "z": 3.6827299656640586}, "10": {"x": 0.0, "y": 2.5, "z": 4.038873605350878}, "11": {"x": 0.5, "y": 2.5, "z": 4.038873605350878}, "12": {"x": 0.0, "y": 3.0, "z": 4.3084219849035215}, "13": {"x": 0.5, "y": 3.0, "z": 4.3084219849035215}, "14": {"x": 0.0, "y": 3.5, "z": 4.5069390943299865}, "15": {"x": 0.5, "y": 3.5, "z": 4.5069390943299865}, "16": {"x": 0.0, "y": 4.0, "z": 4.643543905251677}, "17": {"x": 0.5, "y": 4.0, "z": 4.643543905251677}, "18": {"x": 0.0, "y": 4.5, "z": 4.723610906922796}, "19": {"x": 0.5, "y": 4.5, "z": 4.723610906922796}, "20": {"x": 0.0, "y": 5.0, "z": 4.75}, "21": {"x": 0.5, "y": 5.0, "z": 4.75}, "22": {"x": 0.0, "y": 5.5, "z": 4.723610906922796}, "23": {"x": 0.5, "y": 5.5, "z": 4.723610906922796}, "24": {"x": 0.0, "y": 6.0, "z": 4.643543905251677}, "25": {"x": 0.5, "y": 6.0, "z": 4.643543905251677}, "26": {"x": 0.0, "y": 6.5, "z": 4.5069390943299865}, "27": {"x": 0.5, "y": 6.5, "z": 4.5069390943299865}, "28": {"x": 0.0, "y": 7.0, "z": 4.3084219849035215}, "29": {"x": 0.5, "y": 7.0, "z": 4.3084219849035215}, "30": {"x": 0.0, "y": 7.5, "z": 4.038873605350878}, "31": {"x": 0.5, "y": 7.5, "z": 4.038873605350878}, "32": {"x": 0.0, "y": 8.0, "z": 3.6827299656640586}, "33": {"x": 0.5, "y": 8.0, "z": 3.6827299656640586}, "34": {"x": 0.0, "y": 8.5, "z": 3.2113081446662823}, "35": {"x": 0.5, "y": 8.5, "z": 3.2113081446662823}, "36": {"x": 0.0, "y": 9.0, "z": 2.5617376914898995}, "37": {"x": 0.5, "y": 9.0, "z": 2.5617376914898995}, "38": {"x": 0.0, "y": 9.5, "z": 1.5206906325745548}, "39": {"x": 0.5, "y": 9.5, "z": 1.5206906325745548}, "40": {"x": 0.0, "y": 10.0, "z": -0.0}, "41": {"x": 1.0, "y": 0.0, "z": 2.5617376914898995}, "42": {"x": 1.0, "y": 0.5, "z": 2.5617376914898995}, "43": {"x": 1.0, "y": 1.0, "z": 2.5617376914898995}, "44": {"x": 1.0, "y": 1.5, "z": 3.2113081446662823}, "45": {"x": 1.0, "y": 2.0, "z": 3.6827299656640586}, "46": {"x": 1.0, "y": 2.5, "z": 4.038873605350878}, "47": {"x": 1.0, "y": 3.0, "z": 4.3084219849035215}, "48": {"x": 1.0, "y": 3.5, "z": 4.5069390943299865}, "49": {"x": 1.0, "y": 4.0, "z": 4.643543905251677}, "50": {"x": 1.0, "y": 4.5, "z": 4.723610906922796}, "51": {"x": 1.0, "y": 5.0, "z": 4.75}, "52": {"x": 1.0, "y": 5.5, "z": 4.723610906922796}, "53": {"x": 1.0, "y": 6.0, "z": 4.643543905251677}, "54": {"x": 1.0, "y": 6.5, "z": 4.5069390943299865}, "55": {"x": 1.0, "y": 7.0, "z": 4.3084219849035215}, "56": {"x": 1.0, "y": 7.5, "z": 4.038873605350878}, "57": {"x": 1.0, "y": 8.0, "z": 3.6827299656640586}, "58": {"x": 1.0, "y": 8.5, "z": 3.2113081446662823}, "59": {"x": 1.0, "y": 9.0, "z": 2.5617376914898995}, "60": {"x": 1.0, "y": 9.5, "z": 2.5617376914898995}, "61": {"x": 0.5, "y": 10.0, "z": 1.5206906325745548}, "62": {"x": 1.5, "y": 0.0, "z": 3.2113081446662823}, "63": {"x": 1.5, "y": 0.5, "z": 3.2113081446662823}, "64": {"x": 1.5, "y": 1.0, "z": 3.2113081446662823}, "65": {"x": 1.5, "y": 1.5, "z": 3.2113081446662823}, "66": {"x": 1.5, "y": 2.0, "z": 3.6827299656640586}, "67": {"x": 1.5, "y": 2.5, "z": 4.038873605350878}, "68": {"x": 1.5, "y": 3.0, "z": 4.3084219849035215}, "69": {"x": 1.5, "y": 3.5, "z": 4.5069390943299865}, "70": {"x": 1.5, "y": 4.0, "z": 4.643543905251677}, "71": {"x": 1.5, "y": 4.5, "z": 4.723610906922796}, "72": {"x": 1.5, "y": 5.0, "z": 4.75}, "73": {"x": 1.5, "y": 5.5, "z": 4.723610906922796}, "74": {"x": 1.5, "y": 6.0, "z": 4.643543905251677}, "75": {"x": 1.5, "y": 6.5, "z": 4.5069390943299865}, "76": {"x": 1.5, "y": 7.0, "z": 4.3084219849035215}, "77": {"x": 1.5, "y": 7.5, "z": 4.038873605350878}, "78": {"x": 1.5, "y": 8.0, "z": 3.6827299656640586}, "79": {"x": 1.5, "y": 8.5, "z": 3.2113081446662823}, "80": {"x": 1.5, "y": 9.0, "z": 3.2113081446662823}, "81": {"x": 1.5, "y": 9.5, "z": 3.2113081446662823}, "82": {"x": 1.0, "y": 10.0, "z": 2.5617376914898995}, "83": {"x": 2.0, "y": 0.0, "z": 3.6827299656640586}, "84": {"x": 2.0, "y": 0.5, "z": 3.6827299656640586}, "85": {"x": 2.0, "y": 1.0, "z": 3.6827299656640586}, "86": {"x": 2.0, "y": 1.5, "z": 3.6827299656640586}, "87": {"x": 2.0, "y": 2.0, "z": 3.6827299656640586}, "88": {"x": 2.0, "y": 2.5, "z": 4.038873605350878}, "89": {"x": 2.0, "y": 3.0, "z": 4.3084219849035215}, "90": {"x": 2.0, "y": 3.5, "z": 4.5069390943299865}, "91": {"x": 2.0, "y": 4.0, "z": 4.643543905251677}, "92": {"x": 2.0, "y": 4.5, "z": 4.723610906922796}, "93": {"x": 2.0, "y": 5.0, "z": 4.75}, "94": {"x": 2.0, "y": 5.5, "z": 4.723610906922796}, "95": {"x": 2.0, "y": 6.0, "z": 4.643543905251677}, "96": {"x": 2.0, "y": 6.5, "z": 4.5069390943299865}, "97": {"x": 2.0, "y": 7.0, "z": 4.3084219849035215}, "98": {"x": 2.0, "y": 7.5, "z": 4.038873605350878}, "99": {"x": 2.0, "y": 8.0, "z": 3.6827299656640586}, "100": {"x": 2.0, "y": 8.5, "z": 3.6827299656640586}, "101": {"x": 2.0, "y": 9.0, "z": 3.6827299656640586}, "102": {"x": 2.0, "y": 9.5, "z": 3.6827299656640586}, "103": {"x": 1.5, "y": 10.0, "z": 3.2113081446662823}, "104": {"x": 2.5, "y": 0.0, "z": 4.038873605350878}, "105": {"x": 2.5, "y": 0.5, "z": 4.038873605350878}, "106": {"x": 2.5, "y": 1.0, "z": 4.038873605350878}, "107": {"x": 2.5, "y": 1.5, "z": 4.038873605350878}, "108": {"x": 2.5, "y": 2.0, "z": 4.038873605350878}, "109": {"x": 2.5, "y": 2.5, "z": 4.038873605350878}, "110": {"x": 2.5, "y": 3.0, "z": 4.3084219849035215}, "111": {"x": 2.5, "y": 3.5, "z": 4.5069390943299865}, "112": {"x": 2.5, "y": 4.0, "z": 4.643543905251677}, "113": {"x": 2.5, "y": 4.5, "z": 4.723610906922796}, "114": {"x": 2.5, "y": 5.0, "z": 4.75}, "115": {"x": 2.5, "y": 5.5, "z": 4.723610906922796}, "116": {"x": 2.5, "y": 6.0, "z": 4.643543905251677}, "117": {"x": 2.5, "y": 6.5, "z": 4.5069390943299865}, "118": {"x": 2.5, "y": 7.0, "z": 4.3084219849035215}, "119": {"x": 2.5, "y": 7.5, "z": 4.038873605350878}, "120": {"x": 2.5, "y": 8.0, "z": 4.038873605350878}, "121": {"x": 2.5, "y": 8.5, "z": 4.038873605350878}, "122": {"x": 2.5, "y": 9.0, "z": 4.038873605350878}, "123": {"x": 2.5, "y": 9.5, "z": 4.038873605350878}, "124": {"x": 2.0, "y": 10.0, "z": 3.6827299656640586}, "125": {"x": 3.0, "y": 0.0, "z": 4.3084219849035215}, "126": {"x": 3.0, "y": 0.5, "z": 4.3084219849035215}, "127": {"x": 3.0, "y": 1.0, "z": 4.3084219849035215}, "128": {"x": 3.0, "y": 1.5, "z": 4.3084219849035215}, "129": {"x": 3.0, "y": 2.0, "z": 4.3084219849035215}, "130": {"x": 3.0, "y": 2.5, "z": 4.3084219849035215}, "131": {"x": 3.0, "y": 3.0, "z": 4.3084219849035215}, "132": {"x": 3.0, "y": 3.5, "z": 4.5069390943299865}, "133": {"x": 3.0, "y": 4.0, "z": 4.643543905251677}, "134": {"x": 3.0, "y": 4.5, "z": 4.723610906922796}, "135": {"x": 3.0, "y": 5.0, "z": 4.75}, "136": {"x": 3.0, "y": 5.5, "z": 4.723610906922796}, "137": {"x": 3.0, "y": 6.0, "z": 4.643543905251677}, "138": {"x": 3.0, "y": 6.5, "z": 4.5069390943299865}, "139": {"x": 3.0, "y": 7.0, "z": 4.3084219849035215}, "140": {"x": 3.0, "y": 7.5, "z": 4.3084219849035215}, "141": {"x": 3.0, "y": 8.0, "z": 4.3084219849035215}, "142": {"x": 3.0, "y": 8.5, "z": 4.3084219849035215}, "143": {"x": 3.0, "y": 9.0, "z": 4.3084219849035215}, "144": {"x": 3.0, "y": 9.5, "z": 4.3084219849035215}, "145": {"x": 2.5, "y": 10.0, "z": 4.038873605350878}, "146": {"x": 3.5, "y": 0.0, "z": 4.5069390943299865}, "147": {"x": 3.5, "y": 0.5, "z": 4.5069390943299865}, "148": {"x": 3.5, "y": 1.0, "z": 4.5069390943299865}, "149": {"x": 3.5, "y": 1.5, "z": 4.5069390943299865}, "150": {"x": 3.5, "y": 2.0, "z": 4.5069390943299865}, "151": {"x": 3.5, "y": 2.5, "z": 4.5069390943299865}, "152": {"x": 3.5, "y": 3.0, "z": 4.5069390943299865}, "153": {"x": 3.5, "y": 3.5, "z": 4.5069390943299865}, "154": {"x": 3.5, "y": 4.0, "z": 4.643543905251677}, "155": {"x": 3.5, "y": 4.5, "z": 4.723610906922796}, "156": {"x": 3.5, "y": 5.0, "z": 4.75}, "157": {"x": 3.5, "y": 5.5, "z": 4.723610906922796}, "158": {"x": 3.5, "y": 6.0, "z": 4.643543905251677}, "159": {"x": 3.5, "y": 6.5, "z": 4.5069390943299865}, "160": {"x": 3.5, "y": 7.0, "z": 4.5069390943299865}, "161": {"x": 3.5, "y": 7.5, "z": 4.5069390943299865}, "162": {"x": 3.5, "y": 8.0, "z": 4.5069390943299865}, "163": {"x": 3.5, "y": 8.5, "z": 4.5069390943299865}, "164": {"x": 3.5, "y": 9.0, "z": 4.5069390943299865}, "165": {"x": 3.5, "y": 9.5, "z": 4.5069390943299865}, "166": {"x": 3.0, "y": 10.0, "z": 4.3084219849035215}, "167": {"x": 4.0, "y": 0.0, "z": 4.643543905251677}, "168": {"x": 4.0, "y": 0.5, "z": 4.643543905251677}, "169": {"x": 4.0, "y": 1.0, "z": 4.643543905251677}, "170": {"x": 4.0, "y": 1.5, "z": 4.643543905251677}, "171": {"x": 4.0, "y": 2.0, "z": 4.643543905251677}, "172": {"x": 4.0, "y": 2.5, "z": 4.643543905251677}, "173": {"x": 4.0, "y": 3.0, "z": 4.643543905251677}, "174": {"x": 4.0, "y": 3.5, "z": 4.643543905251677}, "175": {"x": 4.0, "y": 4.0, "z": 4.643543905251677}, "176": {"x": 4.0, "y": 4.5, "z": 4.723610906922796}, "177": {"x": 4.0, "y": 5.0, "z": 4.75}, "178": {"x": 4.0, "y": 5.5, "z": 4.723610906922796}, "179": {"x": 4.0, "y": 6.0, "z": 4.643543905251677}, "180": {"x": 4.0, "y": 6.5, "z": 4.643543905251677}, "181": {"x": 4.0, "y": 7.0, "z": 4.643543905251677}, "182": {"x": 4.0, "y": 7.5, "z": 4.643543905251677}, "183": {"x": 4.0, "y": 8.0, "z": 4.643543905251677}, "184": {"x": 4.0, "y": 8.5, "z": 4.643543905251677}, "185": {"x": 4.0, "y": 9.0, "z": 4.643543905251677}, "186": {"x": 4.0, "y": 9.5, "z": 4.643543905251677}, "187": {"x": 3.5, "y": 10.0, "z": 4.5069390943299865}, "188": {"x": 4.5, "y": 0.0, "z": 4.723610906922796}, "189": {"x": 4.5, "y": 0.5, "z": 4.723610906922796}, "190": {"x": 4.5, "y": 1.0, "z": 4.723610906922796}, "191": {"x": 4.5, "y": 1.5, "z": 4.723610906922796}, "192": {"x": 4.5, "y": 2.0, "z": 4.723610906922796}, "193": {"x": 4.5, "y": 2.5, "z": 4.723610906922796}, "194": {"x": 4.5, "y": 3.0, "z": 4.723610906922796}, "195": {"x": 4.5, "y": 3.5, "z": 4.723610906922796}, "196": {"x": 4.5, "y": 4.0, "z": 4.723610906922796}, "197": {"x": 4.5, "y": 4.5, "z": 4.723610906922796}, "198": {"x": 4.5, "y": 5.0, "z": 4.75}, "199": {"x": 4.5, "y": 5.5, "z": 4.723610906922796}, "200": {"x": 4.5, "y": 6.0, "z": 4.723610906922796}, "201": {"x": 4.5, "y": 6.5, "z": 4.723610906922796}, "202": {"x": 4.5, "y": 7.0, "z": 4.723610906922796}, "203": {"x": 4.5, "y": 7.5, "z": 4.723610906922796}, "204": {"x": 4.5, "y": 8.0, "z": 4.723610906922796}, "205": {"x": 4.5, "y": 8.5, "z": 4.723610906922796}, "206": {"x": 4.5, "y": 9.0, "z": 4.723610906922796}, "207": {"x": 4.5, "y": 9.5, "z": 4.723610906922796}, "208": {"x": 4.0, "y": 10.0, "z": 4.643543905251677}, "209": {"x": 5.0, "y": 0.0, "z": 4.75}, "210": {"x": 5.0, "y": 0.5, "z": 4.75}, "211": {"x": 5.0, "y": 1.0, "z": 4.75}, "212": {"x": 5.0, "y": 1.5, "z": 4.75}, "213": {"x": 5.0, "y": 2.0, "z": 4.75}, "214": {"x": 5.0, "y": 2.5, "z": 4.75}, "215": {"x": 5.0, "y": 3.0, "z": 4.75}, "216": {"x": 5.0, "y": 3.5, "z": 4.75}, "217": {"x": 5.0, "y": 4.0, "z": 4.75}, "218": {"x": 5.0, "y": 4.5, "z": 4.75}, "219": {"x": 5.0, "y": 5.0, "z": 4.75}, "220": {"x": 5.0, "y": 5.5, "z": 4.75}, "221": {"x": 5.0, "y": 6.0, "z": 4.75}, "222": {"x": 5.0, "y": 6.5, "z": 4.75}, "223": {"x": 5.0, "y": 7.0, "z": 4.75}, "224": {"x": 5.0, "y": 7.5, "z": 4.75}, "225": {"x": 5.0, "y": 8.0, "z": 4.75}, "226": {"x": 5.0, "y": 8.5, "z": 4.75}, "227": {"x": 5.0, "y": 9.0, "z": 4.75}, "228": {"x": 5.0, "y": 9.5, "z": 4.75}, "229": {"x": 4.5, "y": 10.0, "z": 4.723610906922796}, "230": {"x": 5.5, "y": 0.0, "z": 4.723610906922796}, "231": {"x": 5.5, "y": 0.5, "z": 4.723610906922796}, "232": {"x": 5.5, "y": 1.0, "z": 4.723610906922796}, "233": {"x": 5.5, "y": 1.5, "z": 4.723610906922796}, "234": {"x": 5.5, "y": 2.0, "z": 4.723610906922796}, "235": {"x": 5.5, "y": 2.5, "z": 4.723610906922796}, "236": {"x": 5.5, "y": 3.0, "z": 4.723610906922796}, "237": {"x": 5.5, "y": 3.5, "z": 4.723610906922796}, "238": {"x": 5.5, "y": 4.0, "z": 4.723610906922796}, "239": {"x": 5.5, "y": 4.5, "z": 4.723610906922796}, "240": {"x": 5.5, "y": 5.0, "z": 4.75}, "241": {"x": 5.5, "y": 5.5, "z": 4.723610906922796}, "242": {"x": 5.5, "y": 6.0, "z": 4.723610906922796}, "243": {"x": 5.5, "y": 6.5, "z": 4.723610906922796}, "244": {"x": 5.5, "y": 7.0, "z": 4.723610906922796}, "245": {"x": 5.5, "y": 7.5, "z": 4.723610906922796}, "246": {"x": 5.5, "y": 8.0, "z": 4.723610906922796}, "247": {"x": 5.5, "y": 8.5, "z": 4.723610906922796}, "248": {"x": 5.5, "y": 9.0, "z": 4.723610906922796}, "249": {"x": 5.5, "y": 9.5, "z": 4.723610906922796}, "250": {"x": 5.0, "y": 10.0, "z": 4.75}, "251": {"x": 6.0, "y": 0.0, "z": 4.643543905251677}, "252": {"x": 6.0, "y": 0.5, "z": 4.643543905251677}, "253": {"x": 6.0, "y": 1.0, "z": 4.643543905251677}, "254": {"x": 6.0, "y": 1.5, "z": 4.643543905251677}, "255": {"x": 6.0, "y": 2.0, "z": 4.643543905251677}, "256": {"x": 6.0, "y": 2.5, "z": 4.643543905251677}, "257": {"x": 6.0, "y": 3.0, "z": 4.643543905251677}, "258": {"x": 6.0, "y": 3.5, "z": 4.643543905251677}, "259": {"x": 6.0, "y": 4.0, "z": 4.643543905251677}, "260": {"x": 6.0, "y": 4.5, "z": 4.723610906922796}, "261": {"x": 6.0, "y": 5.0, "z": 4.75}, "262": {"x": 6.0, "y": 5.5, "z": 4.723610906922796}, "263": {"x": 6.0, "y": 6.0, "z": 4.643543905251677}, "264": {"x": 6.0, "y": 6.5, "z": 4.643543905251677}, "265": {"x": 6.0, "y": 7.0, "z": 4.643543905251677}, "266": {"x": 6.0, "y": 7.5, "z": 4.643543905251677}, "267": {"x": 6.0, "y": 8.0, "z": 4.643543905251677}, "268": {"x": 6.0, "y": 8.5, "z": 4.643543905251677}, "269": {"x": 6.0, "y": 9.0, "z": 4.643543905251677}, "270": {"x": 6.0, "y": 9.5, "z": 4.643543905251677}, "271": {"x": 5.5, "y": 10.0, "z": 4.723610906922796}, "272": {"x": 6.5, "y": 0.0, "z": 4.5069390943299865}, "273": {"x": 6.5, "y": 0.5, "z": 4.5069390943299865}, "274": {"x": 6.5, "y": 1.0, "z": 4.5069390943299865}, "275": {"x": 6.5, "y": 1.5, "z": 4.5069390943299865}, "276": {"x": 6.5, "y": 2.0, "z": 4.5069390943299865}, "277": {"x": 6.5, "y": 2.5, "z": 4.5069390943299865}, "278": {"x": 6.5, "y": 3.0, "z": 4.5069390943299865}, "279": {"x": 6.5, "y": 3.5, "z": 4.5069390943299865}, "280": {"x": 6.5, "y": 4.0, "z": 4.643543905251677}, "281": {"x": 6.5, "y": 4.5, "z": 4.723610906922796}, "282": {"x": 6.5, "y": 5.0, "z": 4.75}, "283": {"x": 6.5, "y": 5.5, "z": 4.723610906922796}, "284": {"x": 6.5, "y": 6.0, "z": 4.643543905251677}, "285": {"x": 6.5, "y": 6.5, "z": 4.5069390943299865}, "286": {"x": 6.5, "y": 7.0, "z": 4.5069390943299865}, "287": {"x": 6.5, "y": 7.5, "z": 4.5069390943299865}, "288": {"x": 6.5, "y": 8.0, "z": 4.5069390943299865}, "289": {"x": 6.5, "y": 8.5, "z": 4.5069390943299865}, "290": {"x": 6.5, "y": 9.0, "z": 4.5069390943299865}, "291": {"x": 6.5, "y": 9.5, "z": 4.5069390943299865}, "292": {"x": 6.0, "y": 10.0, "z": 4.643543905251677}, "293": {"x": 7.0, "y": 0.0, "z": 4.3084219849035215}, "294": {"x": 7.0, "y": 0.5, "z": 4.3084219849035215}, "295": {"x": 7.0, "y": 1.0, "z": 4.3084219849035215}, "296": {"x": 7.0, "y": 1.5, "z": 4.3084219849035215}, "297": {"x": 7.0, "y": 2.0, "z": 4.3084219849035215}, "298": {"x": 7.0, "y": 2.5, "z": 4.3084219849035215}, "299": {"x": 7.0, "y": 3.0, "z": 4.3084219849035215}, "300": {"x": 7.0, "y": 3.5, "z": 4.5069390943299865}, "301": {"x": 7.0, "y": 4.0, "z": 4.643543905251677}, "302": {"x": 7.0, "y": 4.5, "z": 4.723610906922796}, "303": {"x": 7.0, "y": 5.0, "z": 4.75}, "304": {"x": 7.0, "y": 5.5, "z": 4.723610906922796}, "305": {"x": 7.0, "y": 6.0, "z": 4.643543905251677}, "306": {"x": 7.0, "y": 6.5, "z": 4.5069390943299865}, "307": {"x": 7.0, "y": 7.0, "z": 4.3084219849035215}, "308": {"x": 7.0, "y": 7.5, "z": 4.3084219849035215}, "309": {"x": 7.0, "y": 8.0, "z": 4.3084219849035215}, "310": {"x": 7.0, "y": 8.5, "z": 4.3084219849035215}, "311": {"x": 7.0, "y": 9.0, "z": 4.3084219849035215}, "312": {"x": 7.0, "y": 9.5, "z": 4.3084219849035215}, "313": {"x": 6.5, "y": 10.0, "z": 4.5069390943299865}, "314": {"x": 7.5, "y": 0.0, "z": 4.038873605350878}, "315": {"x": 7.5, "y": 0.5, "z": 4.038873605350878}, "316": {"x": 7.5, "y": 1.0, "z": 4.038873605350878}, "317": {"x": 7.5, "y": 1.5, "z": 4.038873605350878}, "318": {"x": 7.5, "y": 2.0, "z": 4.038873605350878}, "319": {"x": 7.5, "y": 2.5, "z": 4.038873605350878}, "320": {"x": 7.5, "y": 3.0, "z": 4.3084219849035215}, "321": {"x": 7.5, "y": 3.5, "z": 4.5069390943299865}, "322": {"x": 7.5, "y": 4.0, "z": 4.643543905251677}, "323": {"x": 7.5, "y": 4.5, "z": 4.723610906922796}, "324": {"x": 7.5, "y": 5.0, "z": 4.75}, "325": {"x": 7.5, "y": 5.5, "z": 4.723610906922796}, "326": {"x": 7.5, "y": 6.0, "z": 4.643543905251677}, "327": {"x": 7.5, "y": 6.5, "z": 4.5069390943299865}, "328": {"x": 7.5, "y": 7.0, "z": 4.3084219849035215}, "329": {"x": 7.5, "y": 7.5, "z": 4.038873605350878}, "330": {"x": 7.5, "y": 8.0, "z": 4.038873605350878}, "331": {"x": 7.5, "y": 8.5, "z": 4.038873605350878}, "332": {"x": 7.5, "y": 9.0, "z": 4.038873605350878}, "333": {"x": 7.5, "y": 9.5, "z": 4.038873605350878}, "334": {"x": 7.0, "y": 10.0, "z": 4.3084219849035215}, "335": {"x": 8.0, "y": 0.0, "z": 3.6827299656640586}, "336": {"x": 8.0, "y": 0.5, "z": 3.6827299656640586}, "337": {"x": 8.0, "y": 1.0, "z": 3.6827299656640586}, "338": {"x": 8.0, "y": 1.5, "z": 3.6827299656640586}, "339": {"x": 8.0, "y": 2.0, "z": 3.6827299656640586}, "340": {"x": 8.0, "y": 2.5, "z": 4.038873605350878}, "341": {"x": 8.0, "y": 3.0, "z": 4.3084219849035215}, "342": {"x": 8.0, "y": 3.5, "z": 4.5069390943299865}, "343": {"x": 8.0, "y": 4.0, "z": 4.643543905251677}, "344": {"x": 8.0, "y": 4.5, "z": 4.723610906922796}, "345": {"x": 8.0, "y": 5.0, "z": 4.75}, "346": {"x": 8.0, "y": 5.5, "z": 4.723610906922796}, "347": {"x": 8.0, "y": 6.0, "z": 4.643543905251677}, "348": {"x": 8.0, "y": 6.5, "z": 4.5069390943299865}, "349": {"x": 8.0, "y": 7.0, "z": 4.3084219849035215}, "350": {"x": 8.0, "y": 7.5, "z": 4.038873605350878}, "351": {"x": 8.0, "y": 8.0, "z": 3.6827299656640586}, "352": {"x": 8.0, "y": 8.5, "z": 3.6827299656640586}, "353": {"x": 8.0, "y": 9.0, "z": 3.6827299656640586}, "354": {"x": 8.0, "y": 9.5, "z": 3.6827299656640586}, "355": {"x": 7.5, "y": 10.0, "z": 4.038873605350878}, "356": {"x": 8.5, "y": 0.0, "z": 3.2113081446662823}, "357": {"x": 8.5, "y": 0.5, "z": 3.2113081446662823}, "358": {"x": 8.5, "y": 1.0, "z": 3.2113081446662823}, "359": {"x": 8.5, "y": 1.5, "z": 3.2113081446662823}, "360": {"x": 8.5, "y": 2.0, "z": 3.6827299656640586}, "361": {"x": 8.5, "y": 2.5, "z": 4.038873605350878}, "362": {"x": 8.5, "y": 3.0, "z": 4.3084219849035215}, "363": {"x": 8.5, "y": 3.5, "z": 4.5069390943299865}, "364": {"x": 8.5, "y": 4.0, "z": 4.643543905251677}, "365": {"x": 8.5, "y": 4.5, "z": 4.723610906922796}, "366": {"x": 8.5, "y": 5.0, "z": 4.75}, "367": {"x": 8.5, "y": 5.5, "z": 4.723610906922796}, "368": {"x": 8.5, "y": 6.0, "z": 4.643543905251677}, "369": {"x": 8.5, "y": 6.5, "z": 4.5069390943299865}, "370": {"x": 8.5, "y": 7.0, "z": 4.3084219849035215}, "371": {"x": 8.5, "y": 7.5, "z": 4.038873605350878}, "372": {"x": 8.5, "y": 8.0, "z": 3.6827299656640586}, "373": {"x": 8.5, "y": 8.5, "z": 3.2113081446662823}, "374": {"x": 8.5, "y": 9.0, "z": 3.2113081446662823}, "375": {"x": 8.5, "y": 9.5, "z": 3.2113081446662823}, "376": {"x": 8.0, "y": 10.0, "z": 3.6827299656640586}, "377": {"x": 9.0, "y": 0.0, "z": 2.5617376914898995}, "378": {"x": 9.0, "y": 0.5, "z": 2.5617376914898995}, "379": {"x": 9.0, "y": 1.0, "z": 2.5617376914898995}, "380": {"x": 9.0, "y": 1.5, "z": 3.2113081446662823}, "381": {"x": 9.0, "y": 2.0, "z": 3.6827299656640586}, "382": {"x": 9.0, "y": 2.5, "z": 4.038873605350878}, "383": {"x": 9.0, "y": 3.0, "z": 4.3084219849035215}, "384": {"x": 9.0, "y": 3.5, "z": 4.5069390943299865}, "385": {"x": 9.0, "y": 4.0, "z": 4.643543905251677}, "386": {"x": 9.0, "y": 4.5, "z": 4.723610906922796}, "387": {"x": 9.0, "y": 5.0, "z": 4.75}, "388": {"x": 9.0, "y": 5.5, "z": 4.723610906922796}, "389": {"x": 9.0, "y": 6.0, "z": 4.643543905251677}, "390": {"x": 9.0, "y": 6.5, "z": 4.5069390943299865}, "391": {"x": 9.0, "y": 7.0, "z": 4.3084219849035215}, "392": {"x": 9.0, "y": 7.5, "z": 4.038873605350878}, "393": {"x": 9.0, "y": 8.0, "z": 3.6827299656640586}, "394": {"x": 9.0, "y": 8.5, "z": 3.2113081446662823}, "395": {"x": 9.0, "y": 9.0, "z": 2.5617376914898995}, "396": {"x": 9.0, "y": 9.5, "z": 2.5617376914898995}, "397": {"x": 8.5, "y": 10.0, "z": 3.2113081446662823}, "398": {"x": 9.5, "y": 0.0, "z": 1.5206906325745548}, "399": {"x": 9.5, "y": 0.5, "z": 1.5206906325745548}, "400": {"x": 9.5, "y": 1.0, "z": 2.5617376914898995}, "401": {"x": 9.5, "y": 1.5, "z": 3.2113081446662823}, "402": {"x": 9.5, "y": 2.0, "z": 3.6827299656640586}, "403": {"x": 9.5, "y": 2.5, "z": 4.038873605350878}, "404": {"x": 9.5, "y": 3.0, "z": 4.3084219849035215}, "405": {"x": 9.5, "y": 3.5, "z": 4.5069390943299865}, "406": {"x": 9.5, "y": 4.0, "z": 4.643543905251677}, "407": {"x": 9.5, "y": 4.5, "z": 4.723610906922796}, "408": {"x": 9.5, "y": 5.0, "z": 4.75}, "409": {"x": 9.5, "y": 5.5, "z": 4.723610906922796}, "410": {"x": 9.5, "y": 6.0, "z": 4.643543905251677}, "411": {"x": 9.5, "y": 6.5, "z": 4.5069390943299865}, "412": {"x": 9.5, "y": 7.0, "z": 4.3084219849035215}, "413": {"x": 9.5, "y": 7.5, "z": 4.038873605350878}, "414": {"x": 9.5, "y": 8.0, "z": 3.6827299656640586}, "415": {"x": 9.5, "y": 8.5, "z": 3.2113081446662823}, "416": {"x": 9.5, "y": 9.0, "z": 2.5617376914898995}, "417": {"x": 9.5, "y": 9.5, "z": 1.5206906325745548}, "418": {"x": 9.0, "y": 10.0, "z": 2.5617376914898995}, "419": {"x": 10.0, "y": 0.0, "z": -0.0}, "420": {"x": 10.0, "y": 0.5, "z": 1.5206906325745548}, "421": {"x": 10.0, "y": 1.0, "z": 2.5617376914898995}, "422": {"x": 10.0, "y": 1.5, "z": 3.2113081446662823}, "423": {"x": 10.0, "y": 2.0, "z": 3.6827299656640586}, "424": {"x": 10.0, "y": 2.5, "z": 4.038873605350878}, "425": {"x": 10.0, "y": 3.0, "z": 4.3084219849035215}, "426": {"x": 10.0, "y": 3.5, "z": 4.5069390943299865}, "427": {"x": 10.0, "y": 4.0, "z": 4.643543905251677}, "428": {"x": 10.0, "y": 4.5, "z": 4.723610906922796}, "429": {"x": 10.0, "y": 5.0, "z": 4.75}, "430": {"x": 10.0, "y": 5.5, "z": 4.723610906922796}, "431": {"x": 10.0, "y": 6.0, "z": 4.643543905251677}, "432": {"x": 10.0, "y": 6.5, "z": 4.5069390943299865}, "433": {"x": 10.0, "y": 7.0, "z": 4.3084219849035215}, "434": {"x": 10.0, "y": 7.5, "z": 4.038873605350878}, "435": {"x": 10.0, "y": 8.0, "z": 3.6827299656640586}, "436": {"x": 10.0, "y": 8.5, "z": 3.2113081446662823}, "437": {"x": 10.0, "y": 9.0, "z": 2.5617376914898995}, "438": {"x": 10.0, "y": 9.5, "z": 1.5206906325745548}, "439": {"x": 9.5, "y": 10.0, "z": 1.5206906325745548}, "440": {"x": 10.0, "y": 10.0, "z": -0.0}}, "face": {"0": [0, 1, 3], "1": [2, 0, 3], "2": [1, 41, 42, 3], "3": [2, 3, 5, 4], "4": [3, 42, 43], "5": [5, 3, 43], "6": [4, 5, 7, 6], "7": [5, 43, 44, 7], "8": [6, 7, 9, 8], "9": [7, 44, 45, 9], "10": [8, 9, 11, 10], "11": [9, 45, 46, 11], "12": [10, 11, 13, 12], "13": [11, 46, 47, 13], "14": [12, 13, 15, 14], "15": [13, 47, 48, 15], "16": [14, 15, 17, 16], "17": [15, 48, 49, 17], "18": [16, 17, 19, 18], "19": [17, 49, 50, 19], "20": [18, 19, 21, 20], "21": [19, 50, 51, 21], "22": [20, 21, 23, 22], "23": [21, 51, 52, 23], "24": [22, 23, 25, 24], "25": [23, 52, 53, 25], "26": [24, 25, 27, 26], "27": [25, 53, 54, 27], "28": [26, 27, 29, 28], "29": [27, 54, 55, 29], "30": [28, 29, 31, 30], "31": [29, 55, 56, 31], "32": [30, 31, 33, 32], "33": [31, 56, 57, 33], "34": [32, 33, 35, 34], "35": [33, 57, 58, 35], "36": [34, 35, 37, 36], "37": [35, 58, 59, 37], "38": [36, 37, 39, 38], "39": [37, 59, 39], "40": [38, 39, 40], "41": [39, 60, 82, 61], "42": [60, 39, 59], "43": [39, 61, 40], "44": [41, 62, 63, 42], "45": [42, 63, 64, 43], "46": [43, 64, 65], "47": [44, 43, 65], "48": [44, 65, 66, 45], "49": [45, 66, 67, 46], "50": [46, 67, 68, 47], "51": [47, 68, 69, 48], "52": [48, 69, 70, 49], "53": [49, 70, 71, 50], "54": [50, 71, 72, 51], "55": [51, 72, 73, 52], "56": [52, 73, 74, 53], "57": [53, 74, 75, 54], "58": [54, 75, 76, 55], "59": [55, 76, 77, 56], "60": [56, 77, 78, 57], "61": [57, 78, 79, 58], "62": [58, 79, 59], "63": [59, 80, 81, 60], "64": [80, 59, 79], "65": [60, 81, 103, 82], "66": [62, 83, 84, 63], "67": [63, 84, 85, 64], "68": [64, 85, 86, 65], "69": [65, 86, 87], "70": [66, 65, 87], "71": [66, 87, 88, 67], "72": [67, 88, 89, 68], "73": [68, 89, 90, 69], "74": [69, 90, 91, 70], "75": [70, 91, 92, 71], "76": [71, 92, 93, 72], "77": [72, 93, 94, 73], "78": [73, 94, 95, 74], "79": [74, 95, 96, 75], "80": [75, 96, 97, 76], "81": [76, 97, 98, 77], "82": [77, 98, 99, 78], "83": [78, 99, 79], "84": [79, 100, 101, 80], "85": [100, 79, 99], "86": [80, 101, 102, 81], "87": [81, 102, 124, 103], "88": [83, 104, 105, 84], "89": [84, 105, 106, 85], "90": [85, 106, 107, 86], "91": [86, 107, 108, 87], "92": [87, 108, 109], "93": [88, 87, 109], "94": [88, 109, 110, 89], "95": [89, 110, 111, 90], "96": [90, 111, 112, 91], "97": [91, 112, 113, 92], "98": [92, 113, 114, 93], "99": [93, 114, 115, 94], "100": [94, 115, 116, 95], "101": [95, 116, 117, 96], "102": [96, 117, 118, 97], "103": [97, 118, 119, 98], "104": [98, 119, 99], "105": [99, 120, 121, 100], "106": [120, 99, 119], "107": [100, 121, 122, 101], "108": [101, 122, 123, 102], "109": [102, 123, 145, 124], "110": [104, 125, 126, 105], "111": [105, 126, 127, 106], "112": [106, 127, 128, 107], "113": [107, 128, 129, 108], "114": [108, 129, 130, 109], "115": [109, 130, 131], "116": [110, 109, 131], "117": [110, 131, 132, 111], "118": [111, 132, 133, 112], "119": [112, 133, 134, 113], "120": [113, 134, 135, 114], "121": [114, 135, 136, 115], "122": [115, 136, 137, 116], "123": [116, 137, 138, 117], "124": [117, 138, 139, 118], "125": [118, 139, 119], "126": [119, 140, 141, 120], "127": [140, 119, 139], "128": [120, 141, 142, 121], "129": [121, 142, 143, 122], "130": [122, 143, 144, 123], "131": [123, 144, 166, 145], "132": [125, 146, 147, 126], "133": [126, 147, 148, 127], "134": [127, 148, 149, 128], "135": [128, 149, 150, 129], "136": [129, 150, 151, 130], "137": [130, 151, 152, 131], "138": [131, 152, 153], "139": [132, 131, 153], "140": [132, 153, 154, 133], "141": [133, 154, 155, 134], "142": [134, 155, 156, 135], "143": [135, 156, 157, 136], "144": [136, 157, 158, 137], "145": [137, 158, 159, 138], "146": [138, 159, 139], "147": [139, 160, 161, 140], "148": [160, 139, 159], "149": [140, 161, 162, 141], "150": [141, 162, 163, 142], "151": [142, 163, 164, 143], "152": [143, 164, 165, 144], "153": [144, 165, 187, 166], "154": [146, 167, 168, 147], "155": [147, 168, 169, 148], "156": [148, 169, 170, 149], "157": [149, 170, 171, 150], "158": [150, 171, 172, 151], "159": [151, 172, 173, 152], "160": [152, 173, 174, 153], "161": [153, 174, 175], "162": [154, 153, 175], "163": [154, 175, 176, 155], "164": [155, 176, 177, 156], "165": [156, 177, 178, 157], "166": [157, 178, 179, 158], "167": [158, 179, 159], "168": [159, 180, 181, 160], "169": [180, 159, 179], "170": [160, 181, 182, 161], "171": [161, 182, 183, 162], "172": [162, 183, 184, 163], "173": [163, 184, 185, 164], "174": [164, 185, 186, 165], "175": [165, 186, 208, 187], "176": [167, 188, 189, 168], "177": [168, 189, 190, 169], "178": [169, 190, 191, 170], "179": [170, 191, 192, 171], "180": [171, 192, 193, 172], "181": [172, 193, 194, 173], "182": [173, 194, 195, 174], "183": [174, 195, 196, 175], "184": [175, 196, 197], "185": [176, 175, 197], "186": [176, 197, 198, 177], "187": [177, 198, 199, 178], "188": [178, 199, 179], "189": [179, 200, 201, 180], "190": [200, 179, 199], "191": [180, 201, 202, 181], "192": [181, 202, 203, 182], "193": [182, 203, 204, 183], "194": [183, 204, 205, 184], "195": [184, 205, 206, 185], "196": [185, 206, 207, 186], "197": [186, 207, 229, 208], "198": [188, 209, 210, 189], "199": [189, 210, 211, 190], "200": [190, 211, 212, 191], "201": [191, 212, 213, 192], "202": [192, 213, 214, 193], "203": [193, 214, 215, 194], "204": [194, 215, 216, 195], "205": [195, 216, 217, 196], "206": [196, 217, 218, 197], "207": [197, 218, 219], "208": [198, 197, 219], "209": [198, 219, 199], "210": [199, 220, 221, 200], "211": [220, 199, 219], "212": [200, 221, 222, 201], "213": [201, 222, 223, 202], "214": [202, 223, 224, 203], "215": [203, 224, 225, 204], "216": [204, 225, 226, 205], "217": [205, 226, 227, 206], "218": [206, 227, 228, 207], "219": [207, 228, 250, 229], "220": [209, 230, 231, 210], "221": [210, 231, 232, 211], "222": [211, 232, 233, 212], "223": [212, 233, 234, 213], "224": [213, 234, 235, 214], "225": [214, 235, 236, 215], "226": [215, 236, 237, 216], "227": [216, 237, 238, 217], "228": [217, 238, 239, 218], "229": [218, 239, 219], "230": [219, 240, 241], "231": [240, 219, 239], "232": [220, 219, 241], "233": [220, 241, 242, 221], "234": [221, 242, 243, 222], "235": [222, 243, 244, 223], "236": [223, 244, 245, 224], "237": [224, 245, 246, 225], "238": [225, 246, 247, 226], "239": [226, 247, 248, 227], "240": [227, 248, 249, 228], "241": [228, 249, 271, 250], "242": [230, 251, 252, 231], "243": [231, 252, 253, 232], "244": [232, 253, 254, 233], "245": [233, 254, 255, 234], "246": [234, 255, 256, 235], "247": [235, 256, 257, 236], "248": [236, 257, 258, 237], "249": [237, 258, 259, 238], "250": [238, 259, 239], "251": [239, 260, 261, 240], "252": [260, 239, 259], "253": [240, 261, 262, 241], "254": [241, 262, 263], "255": [242, 241, 263], "256": [242, 263, 264, 243], "257": [243, 264, 265, 244], "258": [244, 265, 266, 245], "259": [245, 266, 267, 246], "260": [246, 267, 268, 247], "261": [247, 268, 269, 248], "262": [248, 269, 270, 249], "263": [249, 270, 292, 271], "264": [251, 272, 273, 252], "265": [252, 273, 274, 253], "266": [253, 274, 275, 254], "267": [254, 275, 276, 255], "268": [255, 276, 277, 256], "269": [256, 277, 278, 257], "270": [257, 278, 279, 258], "271": [258, 279, 259], "272": [259, 280, 281, 260], "273": [280, 259, 279], "274": [260, 281, 282, 261], "275": [261, 282, 283, 262], "276": [262, 283, 284, 263], "277": [263, 284, 285], "278": [264, 263, 285], "279": [264, 285, 286, 265], "280": [265, 286, 287, 266], "281": [266, 287, 288, 267], "282": [267, 288, 289, 268], "283": [268, 289, 290, 269], "284": [269, 290, 291, 270], "285": [270, 291, 313, 292], "286": [272, 293, 294, 273], "287": [273, 294, 295, 274], "288": [274, 295, 296, 275], "289": [275, 296, 297, 276], "290": [276, 297, 298, 277], "291": [277, 298, 299, 278], "292": [278, 299, 279], "293": [279, 300, 301, 280], "294": [300, 279, 299], "295": [280, 301, 302, 281], "296": [281, 302, 303, 282], "297": [282, 303, 304, 283], "298": [283, 304, 305, 284], "299": [284, 305, 306, 285], "300": [285, 306, 307], "301": [286, 285, 307], "302": [286, 307, 308, 287], "303": [287, 308, 309, 288], "304": [288, 309, 310, 289], "305": [289, 310, 311, 290], "306": [290, 311, 312, 291], "307": [291, 312, 334, 313], "308": [293, 314, 315, 294], "309": [294, 315, 316, 295], "310": [295, 316, 317, 296], "311": [296, 317, 318, 297], "312": [297, 318, 319, 298], "313": [298, 319, 299], "314": [299, 320, 321, 300], "315": [320, 299, 319], "316": [300, 321, 322, 301], "317": [301, 322, 323, 302], "318": [302, 323, 324, 303], "319": [303, 324, 325, 304], "320": [304, 325, 326, 305], "321": [305, 326, 327, 306], "322": [306, 327, 328, 307], "323": [307, 328, 329], "324": [308, 307, 329], "325": [308, 329, 330, 309], "326": [309, 330, 331, 310], "327": [310, 331, 332, 311], "328": [311, 332, 333, 312], "329": [312, 333, 355, 334], "330": [314, 335, 336, 315], "331": [315, 336, 337, 316], "332": [316, 337, 338, 317], "333": [317, 338, 339, 318], "334": [318, 339, 319], "335": [319, 340, 341, 320], "336": [340, 319, 339], "337": [320, 341, 342, 321], "338": [321, 342, 343, 322], "339": [322, 343, 344, 323], "340": [323, 344, 345, 324], "341": [324, 345, 346, 325], "342": [325, 346, 347, 326], "343": [326, 347, 348, 327], "344": [327, 348, 349, 328], "345": [328, 349, 350, 329], "346": [329, 350, 351], "347": [330, 329, 351], "348": [330, 351, 352, 331], "349": [331, 352, 353, 332], "350": [332, 353, 354, 333], "351": [333, 354, 376, 355], "352": [335, 356, 357, 336], "353": [336, 357, 358, 337], "354": [337, 358, 359, 338], "355": [338, 359, 339], "356": [339, 360, 361, 340], "357": [360, 339, 359], "358": [340, 361, 362, 341], "359": [341, 362, 363, 342], "360": [342, 363, 364, 343], "361": [343, 364, 365, 344], "362": [344, 365, 366, 345], "363": [345, 366, 367, 346], "364": [346, 367, 368, 347], "365": [347, 368, 369, 348], "366": [348, 369, 370, 349], "367": [349, 370, 371, 350], "368": [350, 371, 372, 351], "369": [351, 372, 373], "370": [352, 351, 373], "371": [352, 373, 374, 353], "372": [353, 374, 375, 354], "373": [354, 375, 397, 376], "374": [356, 377, 378, 357], "375": [357, 378, 379, 358], "376": [358, 379, 359], "377": [359, 380, 381, 360], "378": [380, 359, 379], "379": [360, 381, 382, 361], "380": [361, 382, 383, 362], "381": [362, 383, 384, 363], "382": [363, 384, 385, 364], "383": [364, 385, 386, 365], "384": [365, 386, 387, 366], "385": [366, 387, 388, 367], "386": [367, 388, 389, 368], "387": [368, 389, 390, 369], "388": [369, 390, 391, 370], "389": [370, 391, 392, 371], "390": [371, 392, 393, 372], "391": [372, 393, 394, 373], "392": [373, 394, 395], "393": [374, 373, 395], "394": [374, 395, 396, 375], "395": [375, 396, 418, 397], "396": [377, 398, 399, 378], "397": [378, 399, 379], "398": [379, 400, 401, 380], "399": [400, 379, 399], "400": [380, 401, 402, 381], "401": [381, 402, 403, 382], "402": [382, 403, 404, 383], "403": [383, 404, 405, 384], "404": [384, 405, 406, 385], "405": [385, 406, 407, 386], "406": [386, 407, 408, 387], "407": [387, 408, 409, 388], "408": [388, 409, 410, 389], "409": [389, 410, 411, 390], "410": [390, 411, 412, 391], "411": [391, 412, 413, 392], "412": [392, 413, 414, 393], "413": [393, 414, 415, 394], "414": [394, 415, 416, 395], "415": [395, 416, 417], "416": [396, 395, 417], "417": [396, 417, 439, 418], "418": [398, 419, 399], "419": [399, 420, 421, 400], "420": [420, 399, 419], "421": [400, 421, 422, 401], "422": [401, 422, 423, 402], "423": [402, 423, 424, 403], "424": [403, 424, 425, 404], "425": [404, 425, 426, 405], "426": [405, 426, 427, 406], "427": [406, 427, 428, 407], "428": [407, 428, 429, 408], "429": [408, 429, 430, 409], "430": [409, 430, 431, 410], "431": [410, 431, 432, 411], "432": [411, 432, 433, 412], "433": [412, 433, 434, 413], "434": [413, 434, 435, 414], "435": [414, 435, 436, 415], "436": [415, 436, 437, 416], "437": [416, 437, 438, 417], "438": [417, 438, 440], "439": [439, 417, 440]}, "facedata": {"0": {}, "1": {}, "2": {}, "3": {}, "4": {}, "5": {}, "6": {}, "7": {}, "8": {}, "9": {}, "10": {}, "11": {}, "12": {}, "13": {}, "14": {}, "15": {}, "16": {}, "17": {}, "18": {}, "19": {}, "20": {}, "21": {}, "22": {}, "23": {}, "24": {}, "25": {}, "26": {}, "27": {}, "28": {}, "29": {}, "30": {}, "31": {}, "32": {}, "33": {}, "34": {}, "35": {}, "36": {}, "37": {}, "38": {}, "39": {}, "40": {}, "41": {}, "42": {}, "43": {}, "44": {}, "45": {}, "46": {}, "47": {}, "48": {}, "49": {}, "50": {}, "51": {}, "52": {}, "53": {}, "54": {}, "55": {}, "56": {}, "57": {}, "58": {}, "59": {}, "60": {}, "61": {}, "62": {}, "63": {}, "64": {}, "65": {}, "66": {}, "67": {}, "68": {}, "69": {}, "70": {}, "71": {}, "72": {}, "73": {}, "74": {}, "75": {}, "76": {}, "77": {}, "78": {}, "79": {}, "80": {}, "81": {}, "82": {}, "83": {}, "84": {}, "85": {}, "86": {}, "87": {}, "88": {}, "89": {}, "90": {}, "91": {}, "92": {}, "93": {}, "94": {}, "95": {}, "96": {}, "97": {}, "98": {}, "99": {}, "100": {}, "101": {}, "102": {}, "103": {}, "104": {}, "105": {}, "106": {}, "107": {}, "108": {}, "109": {}, "110": {}, "111": {}, "112": {}, "113": {}, "114": {}, "115": {}, "116": {}, "117": {}, "118": {}, "119": {}, "120": {}, "121": {}, "122": {}, "123": {}, "124": {}, "125": {}, "126": {}, "127": {}, "128": {}, "129": {}, "130": {}, "131": {}, "132": {}, "133": {}, "134": {}, "135": {}, "136": {}, "137": {}, "138": {}, "139": {}, "140": {}, "141": {}, "142": {}, "143": {}, "144": {}, "145": {}, "146": {}, "147": {}, "148": {}, "149": {}, "150": {}, "151": {}, "152": {}, "153": {}, "154": {}, "155": {}, "156": {}, "157": {}, "158": {}, "159": {}, "160": {}, "161": {}, "162": {}, "163": {}, "164": {}, "165": {}, "166": {}, "167": {}, "168": {}, "169": {}, "170": {}, "171": {}, "172": {}, "173": {}, "174": {}, "175": {}, "176": {}, "177": {}, "178": {}, "179": {}, "180": {}, "181": {}, "182": {}, "183": {}, "184": {}, "185": {}, "186": {}, "187": {}, "188": {}, "189": {}, "190": {}, "191": {}, "192": {}, "193": {}, "194": {}, "195": {}, "196": {}, "197": {}, "198": {}, "199": {}, "200": {}, "201": {}, "202": {}, "203": {}, "204": {}, "205": {}, "206": {}, "207": {}, "208": {}, "209": {}, "210": {}, "211": {}, "212": {}, "213": {}, "214": {}, "215": {}, "216": {}, "217": {}, "218": {}, "219": {}, "220": {}, "221": {}, "222": {}, "223": {}, "224": {}, "225": {}, "226": {}, "227": {}, "228": {}, "229": {}, "230": {}, "231": {}, "232": {}, "233": {}, "234": {}, "235": {}, "236": {}, "237": {}, "238": {}, "239": {}, "240": {}, "241": {}, "242": {}, "243": {}, "244": {}, "245": {}, "246": {}, "247": {}, "248": {}, "249": {}, "250": {}, "251": {}, "252": {}, "253": {}, "254": {}, "255": {}, "256": {}, "257": {}, "258": {}, "259": {}, "260": {}, "261": {}, "262": {}, "263": {}, "264": {}, "265": {}, "266": {}, "267": {}, "268": {}, "269": {}, "270": {}, "271": {}, "272": {}, "273": {}, "274": {}, "275": {}, "276": {}, "277": {}, "278": {}, "279": {}, "280": {}, "281": {}, "282": {}, "283": {}, "284": {}, "285": {}, "286": {}, "287": {}, "288": {}, "289": {}, "290": {}, "291": {}, "292": {}, "293": {}, "294": {}, "295": {}, "296": {}, "297": {}, "298": {}, "299": {}, "300": {}, "301": {}, "302": {}, "303": {}, "304": {}, "305": {}, "306": {}, "307": {}, "308": {}, "309": {}, "310": {}, "311": {}, "312": {}, "313": {}, "314": {}, "315": {}, "316": {}, "317": {}, "318": {}, "319": {}, "320": {}, "321": {}, "322": {}, "323": {}, "324": {}, "325": {}, "326": {}, "327": {}, "328": {}, "329": {}, "330": {}, "331": {}, "332": {}, "333": {}, "334": {}, "335": {}, "336": {}, "337": {}, "338": {}, "339": {}, "340": {}, "341": {}, "342": {}, "343": {}, "344": {}, "345": {}, "346": {}, "347": {}, "348": {}, "349": {}, "350": {}, "351": {}, "352": {}, "353": {}, "354": {}, "355": {}, "356": {}, "357": {}, "358": {}, "359": {}, "360": {}, "361": {}, "362": {}, "363": {}, "364": {}, "365": {}, "366": {}, "367": {}, "368": {}, "369": {}, "370": {}, "371": {}, "372": {}, "373": {}, "374": {}, "375": {}, "376": {}, "377": {}, "378": {}, "379": {}, "380": {}, "381": {}, "382": {}, "383": {}, "384": {}, "385": {}, "386": {}, "387": {}, "388": {}, "389": {}, "390": {}, "391": {}, "392": {}, "393": {}, "394": {}, "395": {}, "396": {}, "397": {}, "398": {}, "399": {}, "400": {}, "401": {}, "402": {}, "403": {}, "404": {}, "405": {}, "406": {}, "407": {}, "408": {}, "409": {}, "410": {}, "411": {}, "412": {}, "413": {}, "414": {}, "415": {}, "416": {}, "417": {}, "418": {}, "419": {}, "420": {}, "421": {}, "422": {}, "423": {}, "424": {}, "425": {}, "426": {}, "427": {}, "428": {}, "429": {}, "430": {}, "431": {}, "432": {}, "433": {}, "434": {}, "435": {}, "436": {}, "437": {}, "438": {}, "439": {}}, "edgedata": {}, "max_vertex": 440, "max_face": 439}, "inheritance": [], "guid": "9d1a6d8d-cc6f-4d72-a7cc-74eb2dc0423e"} \ No newline at end of file diff --git a/scripts/TNO_integration/tno_arch.py b/scripts/TNO_integration/tno_arch.py new file mode 100644 index 0000000..45a876e --- /dev/null +++ b/scripts/TNO_integration/tno_arch.py @@ -0,0 +1,24 @@ +from compas_dem.templates import ArchTemplate +from compas_dem.models import SurfaceModel +from compas_dem.viewer import DEMViewer + +# ============================================================================= +# Template +# ============================================================================= + +template = ArchTemplate(rise=3, span=10, thickness=0.5, depth=2.5, n=50) + +# ============================================================================= +# Model +# ============================================================================= + +model = SurfaceModel.from_template(template) + +# ============================================================================= +# Viz +# ============================================================================= + +viewer = DEMViewer(model) + +viewer.setup2() +viewer.show() diff --git a/scripts/TNO_integration/tno_cv.py b/scripts/TNO_integration/tno_cv.py new file mode 100644 index 0000000..11925eb --- /dev/null +++ b/scripts/TNO_integration/tno_cv.py @@ -0,0 +1,68 @@ +from compas_dem.templates.crossvault import CrossVaultTemplate +from compas_dem.models import SurfaceModel +from compas_dem.viewer import MasonryViewer +from compas_tno.analysis import Analysis +from compas_tno.diagrams import FormDiagram + +# ============================================================================= +# Template +# ============================================================================= + +xy_span = [[0.0, 10.0], [0.0, 10.0]] +thk = 0.50 +min_lb = 0.0 +n = 50 + +template = CrossVaultTemplate( + xy_span=xy_span, + thk=thk, + min_lb=min_lb, + n=n +) + +# ============================================================================= +# Model +# ============================================================================= + +model = SurfaceModel.from_template(template) + +# Access as properties +print(f"Volume: {model.volume}") +print(f"Total Selfweight: {model.total_selfweight}") + +# ============================================================================= +# Diagram +# ============================================================================= + +form = FormDiagram.create_cross_form( + # xy_span=[[0.1, 9.9], [0.1, 9.9]], + xy_span=xy_span, + discretisation=10, +) +model.formdiagram = form + +# model.apply_selfweight() + +# for key in model.formdiagram.vertices(): +# print(model.formdiagram.vertex_attribute(key, "pz")) + +# User should set the formdiagram themselves + +# ============================================================================= +# Diagram +# ============================================================================= + +analysis = Analysis.create_minthrust_analysis(model, printout=True) +analysis.apply_selfweight() +analysis.apply_envelope() +analysis.set_up_optimiser() +analysis.run() + +# ============================================================================= +# Viz +# ============================================================================= + +viewer = MasonryViewer(model) + +viewer.setup() +viewer.show() diff --git a/scripts/TNO_integration/tno_cv_to_dem.py b/scripts/TNO_integration/tno_cv_to_dem.py new file mode 100644 index 0000000..a241b5b --- /dev/null +++ b/scripts/TNO_integration/tno_cv_to_dem.py @@ -0,0 +1,70 @@ +# Interoperability between TNO and DEM + +from compas_dem.templates.crossvault import CrossVaultTemplate +from compas_dem.models import SurfaceModel +from compas_dem.viewer import MasonryViewer +from compas_tno.analysis import Analysis +from compas_tno.diagrams import FormDiagram + +# ============================================================================= +# Template +# ============================================================================= + +xy_span = [[0.0, 10.0], [0.0, 10.0]] +thk = 0.50 +min_lb = 0.0 +n = 50 + +template = CrossVaultTemplate( + xy_span=xy_span, + thk=thk, + min_lb=min_lb, + n=n +) + +# ============================================================================= +# Model +# ============================================================================= + +model = SurfaceModel.from_template(template) + +# Access as properties +print(f"Volume: {model.volume}") +print(f"Total Selfweight: {model.total_selfweight}") + +# ============================================================================= +# Diagram +# ============================================================================= + +form = FormDiagram.create_fan_form( + xy_span=xy_span, + discretisation=10, +) + +model.formdiagram = form + + +# ============================================================================= +# Diagram +# ============================================================================= + +analysis = Analysis.create_minthrust_analysis(model, printout=True) +analysis.apply_selfweight() +analysis.apply_envelope() +analysis.set_up_optimiser() +analysis.run() + +# ============================================================================= +# Make DEM blocks with the minimum thrust solution with variable thk +# ============================================================================= + +blockmodel = model.to_blocks(option="Dual") + +# ============================================================================= +# Viz +# ============================================================================= + +viewer = MasonryViewer(model) +viewer.add_model(blockmodel) +viewer.setup() +viewer.show() diff --git a/scripts/TNO_integration/tno_general-1.py b/scripts/TNO_integration/tno_general-1.py new file mode 100644 index 0000000..24a7706 --- /dev/null +++ b/scripts/TNO_integration/tno_general-1.py @@ -0,0 +1,45 @@ +from compas.datastructures import Mesh +from compas_dem.models import SurfaceModel +from compas_dem.viewer import MasonryViewer +from compas_tno.analysis import Analysis +from compas_tno.diagrams import FormDiagram + +intrados_json = "./data/intrados_mesh.json" +extrados_json = "./data/extrados_mesh.json" + +intrados_mesh = Mesh.from_json(intrados_json) +extrados_mesh = Mesh.from_json(extrados_json) + +model = SurfaceModel.from_meshes(intrados_mesh, extrados_mesh) + +# ============================================================================= +# Diagram +# ============================================================================= + +xy_span = [[0.0, 10.0], [0.0, 10.0]] +form = FormDiagram.create_cross_form(xy_span=xy_span, discretisation=10) +model.formdiagram = form + +print(model.thickness) + +model.apply_selfweight() + +# Users should set the formdiagram themselves + +# ============================================================================= +# Analysis +# ============================================================================= + +analysis = Analysis.create_minthrust_analysis(model, printout=True) +analysis.apply_selfweight() +analysis.apply_envelope() +analysis.set_up_optimiser() +analysis.run() + +# ============================================================================= +# Viz +# ============================================================================= + +viewer = MasonryViewer(model) +viewer.setup() +viewer.show() diff --git a/scripts/TNO_integration/tno_general-2.py b/scripts/TNO_integration/tno_general-2.py new file mode 100644 index 0000000..fe1c0d8 --- /dev/null +++ b/scripts/TNO_integration/tno_general-2.py @@ -0,0 +1,34 @@ +# This script creates a SurfaceModel from an existing 3D FormDiagram = ThrustNetwoek +# It then applies the thickness and visualizes it using the DEMViewer. +# It will be usefull if we are working from a TNA analysis and constraining it to further analysis. + +import json +from compas.datastructures import Mesh +from compas_dem.models import SurfaceModel +from compas_dem.viewer import MasonryViewer +from compas_tno.analysis import Analysis +from compas_tno.diagrams import FormDiagram + +# form_json = "./data/crossvault_form.json" +form_json = "./data/fan_form.json" + +formdiagram = FormDiagram.from_json(form_json) +surfacemodel = SurfaceModel.from_formdiagram(formdiagram, thickness=0.75) + +# ============================================================================= +# Analysis +# ============================================================================= + +analysis = Analysis.create_minthrust_analysis(surfacemodel, printout=True) +analysis.apply_selfweight() +analysis.apply_envelope() +analysis.set_up_optimiser() +analysis.run() + +# ============================================================================= +# Viz +# ============================================================================= + +viewer = MasonryViewer(surfacemodel) +viewer.setup() +viewer.show() \ No newline at end of file diff --git a/scripts/dem_arch.py b/scripts/dem_arch.py index 34ba52c..9a54eca 100644 --- a/scripts/dem_arch.py +++ b/scripts/dem_arch.py @@ -1,6 +1,6 @@ from compas_dem.models import BlockModel from compas_dem.templates import ArchTemplate -from compas_dem.viewer import DEMViewer +from compas_dem.viewer import MasonryViewer # ============================================================================= # Template @@ -31,7 +31,7 @@ # Viz # ============================================================================= -viewer = DEMViewer(model) +viewer = MasonryViewer(blockmodel=model) viewer.setup() viewer.show() diff --git a/src/compas_dem/models/__init__.py b/src/compas_dem/models/__init__.py index 55f56ca..15ae5b2 100644 --- a/src/compas_dem/models/__init__.py +++ b/src/compas_dem/models/__init__.py @@ -1,5 +1,7 @@ from .blockmodel import BlockModel +from .surfacemodel import SurfaceModel __all__ = [ "BlockModel", + "SurfaceModel", ] diff --git a/src/compas_dem/models/blockmodel.py b/src/compas_dem/models/blockmodel.py index e0ac63a..bab4ba7 100644 --- a/src/compas_dem/models/blockmodel.py +++ b/src/compas_dem/models/blockmodel.py @@ -249,7 +249,7 @@ def from_pavilionvault(cls) -> "BlockModel": # ============================================================================= @classmethod - def from_triangulation_dual(cls, mesh: Mesh, lengthfactor: float = 1.0, tmin=None, tmax=None) -> "BlockModel": + def from_triangulation_dual(cls, mesh: Mesh, lengthfactor: float = 1.0, tmin=None, tmax=None, fixed_vertices=[]) -> "BlockModel": """Construct a Block Model from the dual of an isotropically remeshed triangulation of the input mesh. Parameters @@ -264,6 +264,8 @@ def from_triangulation_dual(cls, mesh: Mesh, lengthfactor: float = 1.0, tmin=Non tmax : float, optional Maximum thickness of the blocks. If none is provided, the maximum thickness will be 50/1000 of the diagonal of the xy bounding box of the input mesh. + fixed_vertices : list[list[float]], optional + A list of fixed points on the target mesh. Returns ------- @@ -274,7 +276,7 @@ def from_triangulation_dual(cls, mesh: Mesh, lengthfactor: float = 1.0, tmin=Non temp.quads_to_triangles() M = temp.to_vertices_and_faces() - V1, F1, V2, F2 = trimesh_dual(M, length_factor=lengthfactor, number_of_iterations=100) # type: ignore + V1, F1, V2, F2 = trimesh_dual(M, length_factor=lengthfactor, number_of_iterations=100, fixed_vertices=fixed_vertices) # type: ignore dual = Mesh.from_vertices_and_faces(V2, F2) dual.unify_cycles() @@ -299,6 +301,53 @@ def from_triangulation_dual(cls, mesh: Mesh, lengthfactor: float = 1.0, tmin=Non return model + + @classmethod + def from_dual(cls, mesh: Mesh, tmin=None, tmax=None, include_boundary=True) -> "BlockModel": + """Construct a Block Model from the dual of an the input mesh. Note: It does not triangulate the mesh + + Parameters + ---------- + mesh : :class:`Mesh` + The input mesh. + tmin : float, optional + Minimum thickness of the blocks. + If none is provided, the minimum thickness will be 3/1000 of the diagonal of the xy bounding box of the input mesh. + tmax : float, optional + Maximum thickness of the blocks. + If none is provided, the maximum thickness will be 50/1000 of the diagonal of the xy bounding box of the input mesh. + include_boundary : bool, optional + Whether to include boundary faces for the dual mesh. + + Returns + ------- + :class:`BlockModel` + + """ + dual = mesh.dual(cls=Mesh, include_boundary=include_boundary) + dual.unify_cycles() + + pattern_inverse_height_thickness(dual, tmin=tmin, tmax=tmax) + idos = pattern_idos(dual) + face_block: dict[int, Mesh] = pattern_blocks(dual, idos) + + face: int + face_node: dict[int, int] = {} + + model = cls() + for face, block in face_block.items(): + node = model.add_block_from_mesh(block) + face_node[face] = node + + for face in dual.faces(): # type: ignore + u = face_node[face] + nbrs = dual.face_neighbors(face) + for nbr in nbrs: + v = face_node[nbr] + model.graph.add_edge(u, v) + + return model + @classmethod def from_meshpattern(cls, mesh: Mesh, patternname: str, tmin=None, tmax=None, **kwargs) -> "BlockModel": """Construct a Block Model from the dual of an isotropically remeshed triangulation of the input mesh. diff --git a/src/compas_dem/models/surfacemodel.py b/src/compas_dem/models/surfacemodel.py new file mode 100644 index 0000000..e8b8c8b --- /dev/null +++ b/src/compas_dem/models/surfacemodel.py @@ -0,0 +1,689 @@ +from typing import Generator +from typing import Iterator +from typing import Optional +from typing import Type +from typing import TYPE_CHECKING + +from compas.datastructures import Mesh + +from compas_model.models import Model + +from compas_dem.templates import Template +from compas_tna.diagrams import FormDiagram +from compas_dem.models.blockmodel import BlockModel, pattern_inverse_height_thickness +from compas_libigl.mapping import TESSAGON_TYPES +from compas_cgal.meshing import trimesh_dual +from compas_libigl.intersections import intersection_ray_mesh +from compas.geometry import Vector + +def interpolate_middle_mesh(intrados: Mesh, extrados: Mesh) -> Mesh: + """Interpolate a middle mesh between the intrados and extrados meshes. Assumes that the meshes are aligned and have the same number of vertices. + + Parameters + ---------- + intrados : :class:`Mesh` + The intrados surface mesh. + extrados : :class:`Mesh` + The extrados surface mesh. + + Returns + ------- + :class:`Mesh` + The interpolated middle mesh. + + """ + middle = intrados.copy(cls=Mesh) + thk_list = [] + for key in intrados.vertices(): + _, _, zi = intrados.vertex_coordinates(key) # type: ignore + _, _, ze = extrados.vertex_coordinates(key) # type: ignore + middle.vertex_attribute(key, 'z', (zi + ze) / 2) + middle.vertex_attribute(key, 'thickness', ze - zi) + + return middle + +def offset_from_middle(middle: Mesh, fixed_xy: bool = True) -> tuple: + """ + Offset a middle surface mesh to obtain extrados and intrados meshes using thickness attributes. + + Parameters + ---------- + middle : Mesh + The middle surface mesh with thickness attributes per vertex. + fixed_xy : bool, optional + If True, extrados/intrados will have the same XY as the middle mesh, + and only Z will be offset (with normal correction). + If False, full 3D normal offset is used. + + Returns + ------- + intrados : Mesh + Offset mesh (intrados). + extrados : Mesh + Offset mesh (extrados). + """ + extrados = middle.copy(cls=Mesh) + intrados = middle.copy(cls=Mesh) + + for key in middle.vertices(): + x, y, z = middle.vertex_coordinates(key) # type: ignore + nx, ny, nz = middle.vertex_normal(key) + + # Get thickness for this specific vertex + thickness = middle.vertex_attribute(key, 'thickness') + if thickness is None: + thickness = 0.5 + half_thick = 0.5 * thickness + + if fixed_xy: + # Prevent division by zero for horizontal normals + if abs(nz) < 1e-8: + raise ValueError(f"Normal at vertex {key} is (almost) horizontal: {nx, ny, nz}") + dz = half_thick / nz + extrados_z = z + dz + intrados_z = z - dz + # print('z, dz, intrados_z, extrados_z', z, dz, intrados_z, extrados_z) + + extrados.vertex_attribute(key, 'z', extrados_z) + intrados.vertex_attribute(key, 'z', intrados_z) + + print('changed extrados z', extrados.vertex_attribute(key, 'z')) + print('changed intrados z', intrados.vertex_attribute(key, 'z')) + else: + # Full normal offset + extrados.vertex_attributes(key, 'xyz', [ + x + half_thick * nx, + y + half_thick * ny, + z + half_thick * nz + ]) + intrados.vertex_attributes(key, 'xyz', [ + x - half_thick * nx, + y - half_thick * ny, + z - half_thick * nz + ]) + return intrados, extrados + + +def project_mesh_to_target_vertical(mesh: Mesh, target: Mesh): + """Project a mesh vertically (in Z direction) onto a target mesh. + + Parameters + ---------- + mesh : Mesh + The mesh to be projected. + target : Mesh + The target mesh to project onto. + + Returns + ------- + None + The mesh is modified in place. + """ + # Get target mesh vertices for simple vertical projection + target_vertices = list(target.vertices()) + target_points = [target.vertex_point(v) for v in target_vertices] + + for vertex in mesh.vertices(): + point = mesh.vertex_point(vertex) + + # Find the closest target vertex in XY plane + min_distance = float('inf') + closest_z = point.z + + for target_point in target_points: + # Calculate XY distance (ignore Z) + xy_distance = ((point.x - target_point.x) ** 2 + (point.y - target_point.y) ** 2) ** 0.5 + + if xy_distance < min_distance: + min_distance = xy_distance + closest_z = target_point.z + + # Update vertex to closest Z value + new_point = point.copy() + new_point.z = closest_z + mesh.vertex_attributes(vertex, "xyz", new_point) + + +class SurfaceModel(Model): + """Variation of COMPAS Model specifically designed for working with Intrados and Extrados surfaces for masonry construction.""" + + intrados: Mesh + extrados: Mesh + middle: Mesh + fill: Mesh + formdiagram: FormDiagram + template: Template + + def __init__(self, name=None): + super().__init__(name) + + self._thickness = 0.5 + self._rho = 20.0 + self._area = 0.0 + self._volume = 0.0 + self._total_selfweight = 0.0 + + + # ============================================================================= + # Factory methods + # ============================================================================= + + @classmethod + def from_polysurfaces(cls, guid_intrados: str, guid_extrados: str, guid_middle : Optional[str] = None) -> "SurfaceModel": + """Construct a model from Rhino polysurfaces representing intrados and extrados surfaces. + + Parameters + ---------- + guids : list[str] + A list of GUIDs identifying the poly-surfaces representing the blocks of the model. + + Returns + ------- + :class:`SurfaceModel` + + """ + raise NotImplementedError + + @classmethod + def from_rhinomeshes(cls, guid_intrados: str, guid_extrados: str, middle : Optional[str] = None) -> "SurfaceModel": + """Construct a model from Rhino meshes. + + Parameters + ---------- + guids : list[str] + A list of GUIDs identifying the meshes representing the blocks of the model. + + Returns + ------- + :class:`SurfaceModel` + + """ + raise NotImplementedError + + @classmethod + def from_meshes(cls, intrados: Mesh, extrados: Mesh, middle : Optional[Mesh] = None) -> "SurfaceModel": + """Construct a model from Rhino meshes. + + Parameters + ---------- + intrados : Mesh + The intrados surface mesh of the model. + extrados : Mesh + The extrados surface mesh of the model. + middle : Mesh, optional + The middle surface mesh of the model. + + Returns + ------- + :class:`SurfaceModel` + + """ + model = cls() + model.intrados = intrados + model.extrados = extrados + if middle is not None: + model.middle = middle + else: + model.middle = interpolate_middle_mesh(intrados, extrados) + + return model + + @classmethod + def from_formdiagram(cls, formdiagram: FormDiagram, thickness: Optional[float] = None) -> "SurfaceModel": + """Construct a model from a FormDiagram with specified thickness. + + Parameters + ---------- + formdiagram : FormDiagram + The form diagram to create the surface model from. + thickness : float, optional + The thickness of the model. If None, uses thickness values stored in formdiagram vertices. + + Returns + ------- + :class:`SurfaceModel` + + """ + model = cls() + + model.formdiagram = formdiagram + model.middle = formdiagram.copy(cls=Mesh) + + if thickness is not None: + model.thickness = thickness + # Using setter will update the formdiagram and middle mesh attributes. + + # Create intrados and extrados using thickness from middle mesh + intrados, extrados = offset_from_middle(model.middle) + model.intrados = intrados + model.extrados = extrados + + # Todo: Check the meaning of the funicular trajectory + ze = model.extrados.vertices_attribute('z') + zi = model.intrados.vertices_attribute('z') + max_ze, min_ze = max(ze), min(ze) + max_zi, min_zi = max(zi), min(zi) + print(f"Max z: {max_ze}, Min z: {min_ze}") + print(f"Max z: {max_zi}, Min z: {min_zi}") + + return model + + @classmethod + def from_pointcloud(cls, pointcloud) -> "SurfaceModel": + """Construct a surface model from pointclouds. + """ + return NotImplementedError + + + # ============================================================================= + # Templates + # ============================================================================= + + @classmethod + def from_template(cls, template: Template) -> "SurfaceModel": + """Construct a block model from a template. + + Parameters + ---------- + template : :class:`Template` + The model template. + + Returns + ------- + :class:`BlockModel` + + """ + + model = cls.from_meshes(*template.intrados_and_extrados()) + model.template = template + model.thickness = template.thk + return model + + @classmethod + def from_blockmodel(cls): + raise NotImplementedError + + + # ============================================================================= + # Interoperability + # ============================================================================= + + def to_blocks(self, option="Dual", option2="Hex", base_mesh=None, **kwargs) -> BlockModel: + + if base_mesh is None: + mesh = self.formdiagram.copy(cls=Mesh) + else: + mesh = base_mesh + + if option == "Dual": + blockmodel = BlockModel.from_dual(mesh) + + elif option == "MeshPattern": + + if option2 not in TESSAGON_TYPES: + raise NotImplementedError + + blockmodel = BlockModel.from_meshpattern(mesh, option2) + else: + raise NotImplementedError(f"Option {option} is not implemented for SurfaceModel.to_blocks()") + + return blockmodel + + # ============================================================================= + # Properties + # ============================================================================= + + @property + def area(self): + if not self._area: + self._area = self.middle.area() + return self._area + + @property + def volume(self): + if not self._volume: + self._volume = self.compute_volume() + return self._volume + + @property + def total_selfweight(self): + if not self._total_selfweight: + self._total_selfweight = self.compute_selfweight() + return self._total_selfweight + + @property + def thickness(self) -> float: + """Get the average thickness of the model. + + Returns + ------- + float + The average thickness of the model. + """ + if hasattr(self, 'formdiagram') and self.formdiagram is not None: + has_thickness = all(self.formdiagram.vertex_attribute(vertex, 'thickness') is not None + for vertex in self.formdiagram.vertices()) + # Return average thickness from form diagram vertices + if has_thickness: + thicknesses = [self.formdiagram.vertex_attribute(key, 'thickness') + for key in self.formdiagram.vertices()] + return sum(thicknesses) / len(thicknesses) + else: + return self._thickness + return self._thickness + + @thickness.setter + def thickness(self, value: float) -> None: + """Set a uniform thickness for all vertices of the model. + + Parameters + ------- + value : float + The thickness value to set for all vertices. + """ + self._thickness = value + # Update all vertices in form diagram if it exists + if hasattr(self, 'formdiagram') and self.formdiagram is not None: + for key in self.formdiagram.vertices(): + self.formdiagram.vertex_attribute(key, 'thickness', value) + + # Sync thickness to middle mesh if it exists + if hasattr(self, 'middle') and self.middle is not None: + for key in self.middle.vertices(): + self.middle.vertex_attribute(key, 'thickness', value) + + @property + def rho(self) -> float: + """Get the density of the model. + + Returns + ------- + float + The density of the model in kg/m³. + """ + return self._rho + + @rho.setter + def rho(self, value: float) -> None: + """Set the density of the model. + + Parameters + ------- + value : float + The density value to set in kg/m³. + """ + self._rho = value + + def set_vertex_thickness(self, vertex_key: int, thickness: float) -> None: + """Set the thickness for a specific vertex in the form diagram. + + Parameters + ------- + vertex_key : int + The vertex key to set thickness for. + thickness : float + The thickness value to set. + """ + if hasattr(self, 'formdiagram') and self.formdiagram is not None: + self.formdiagram.vertex_attribute(vertex_key, 'thickness', thickness) + + # Also update the middle mesh if it exists + if hasattr(self, 'middle') and self.middle is not None: + self.middle.vertex_attribute(vertex_key, 'thickness', thickness) + else: + raise ValueError("FormDiagram is not set. Cannot set vertex thickness.") + + def get_vertex_thickness(self, vertex_key: int) -> float: + """Get the thickness for a specific vertex in the form diagram. + + Parameters + ------- + vertex_key : int + The vertex key to get thickness for. + + Returns + ------- + float + The thickness value for the vertex. + """ + if hasattr(self, 'formdiagram') and self.formdiagram is not None: + return self.formdiagram.vertex_attribute(vertex_key, 'thickness') + return self._thickness + + + def set_variable_thickness(self, tmin: float = None, tmax: float = None) -> None: + """Set variable thickness based on inverse height using the pattern_inverse_height_thickness function. + + This method applies thickness variation based on the height of vertices in the form diagram, + where higher vertices get thinner thickness and lower vertices get thicker thickness. + + Parameters + ------- + tmin : float, optional + Minimum thickness. If None, will be calculated as 3/1000 of the diagonal of the xy bounding box. + tmax : float, optional + Maximum thickness. If None, will be calculated as 50/1000 of the diagonal of the xy bounding box. + """ + if hasattr(self, 'formdiagram') and self.formdiagram is not None: + # Apply the pattern_inverse_height_thickness function to the form diagram + pattern_inverse_height_thickness(self.formdiagram, tmin=tmin, tmax=tmax) + + # Sync the thickness values to the middle mesh + self.sync_thickness_to_middle() + else: + raise ValueError("FormDiagram is not set. Cannot set inverse height thickness.") + + def sync_thickness_to_middle(self) -> None: + """Synchronize thickness attributes from formdiagram to middle mesh. + + This method ensures that the middle mesh has the same thickness values + as the formdiagram vertices. + """ + if hasattr(self, 'formdiagram') and self.formdiagram is not None and hasattr(self, 'middle') and self.middle is not None: + for vertex in self.middle.vertices(): + thickness_value = self.formdiagram.vertex_attribute(vertex, 'thickness') + if thickness_value is None: + thickness_value = self._thickness + self.middle.vertex_attribute(vertex, 'thickness', thickness_value) + else: + raise ValueError("Both FormDiagram and middle mesh must be set to sync thickness.") + + def compute_volume(self) -> float: + """Compute and returns the volume of the structure based on the area and thickness in the data. + + Returns + ------- + float + The total volume of the structure. + + """ + if self.middle is None: + if self.intrados is not None and self.extrados is not None: + self.middle = interpolate_middle_mesh(self.intrados, self.extrados) + else: + raise ValueError("Middle mesh is not available and cannot be interpolated.") + + middle = self.middle + total_volume = 0.0 + + print('test') + + # Use variable thickness from middle mesh vertices + for vertex in middle.vertices(): + thickness = middle.vertex_attribute(vertex, 'thickness') + if thickness is None: + thickness = self._thickness + vertex_area = middle.vertex_area(vertex) # should be projected area + vertex_volume = thickness * vertex_area + total_volume += vertex_volume + + return total_volume + + def compute_selfweight(self) -> float: + """Compute and returns the total selfweight of the structure based on the area and thickness in the data. + + Returns + ------- + float + The total selfweight of the structure. + + """ + if self.middle is None: + if self.intrados is not None and self.extrados is not None: + self.middle = interpolate_middle_mesh(self.intrados, self.extrados) + else: + raise ValueError("Middle mesh is not available and cannot be interpolated.") + + middle = self.middle + rho = self.rho + total_selfweight = 0.0 + + # Use variable thickness from middle mesh vertices + for vertex in middle.vertices(): + thickness = middle.vertex_attribute(vertex, 'thickness') + if thickness is None: + thickness = self._thickness + vertex_area = middle.vertex_area(vertex) + vertex_volume = thickness * vertex_area + vertex_weight = vertex_volume * rho + total_selfweight += vertex_weight + + return total_selfweight + + + # ============================================================================= + # Routines / Loads + # ============================================================================= + + def apply_selfweight(self, normalize=True) -> None: + """Apply selfweight to the nodes of the form diagram based on the middle surface and local thicknesses. + + Parameters + ---------- + normalize : bool, optional + Whether or not normalize the selfweight to match the computed total selfweight, by default True + + Returns + ------- + None + The FormDiagram is modified in place + + """ + # Step 1: Check that formdiagram and middle mesh are present + if self.formdiagram is None: + raise ValueError("FormDiagram is not set. Please set the formdiagram before applying selfweight.") + + if self.middle is None: + raise ValueError("Middle mesh is not set. Please set the middle mesh before applying selfweight.") + + # Step 2: Compute the selfweight of the shell + total_selfweight = self.compute_selfweight() + print(f"Total computed selfweight: {total_selfweight}") + + # Step 3: Copy the form diagram and project it onto the middle mesh vertically + form_ = self.formdiagram.copy() + + # Project form diagram vertically onto the middle mesh + project_mesh_to_target_vertical(form_, self.middle) + + # Step 4: Handle thickness property - placeholder for different cases + # Case 1: Form diagram already has thickness property + has_thickness = all(form_.vertex_attribute(vertex, 'thickness') is not None + for vertex in form_.vertices()) + + if not has_thickness: + thickness = self.thickness + for vertex in form_.vertices(): + form_.vertex_attribute(vertex, 'thickness', thickness) + + # Step 5: Compute and lump selfweight at vertices + total_pz = 0.0 + for vertex in form_.vertices(): + # Get vertex area and thickness + vertex_area = form_.vertex_area(vertex) + thickness = form_.vertex_attribute(vertex, 'thickness') + + # Compute selfweight contribution (negative for downward direction) + pz = -vertex_area * thickness * self.rho + + # Store in form diagram + form_.vertex_attribute(vertex, 'pz', pz) + total_pz += abs(pz) # Sum absolute values for normalization + + # Step 6: Scale to match total selfweight if normalize=True + if normalize and total_pz > 0: + scale_factor = total_selfweight / total_pz + print(f"Scaling selfweight by factor: {scale_factor}") + + for vertex in form_.vertices(): + pz = form_.vertex_attribute(vertex, 'pz') + form_.vertex_attribute(vertex, 'pz', pz * scale_factor) + + # Copy the computed loads back to the original form diagram + for vertex in self.formdiagram.vertices(): + if vertex in form_.vertices(): + pz = form_.vertex_attribute(vertex, 'pz') + self.formdiagram.vertex_attribute(vertex, 'pz', pz) + else: + self.formdiagram.vertex_attribute(vertex, 'pz', 0.0) + + print(f"Selfweight applied to form diagram. Total load: {sum(abs(self.formdiagram.vertex_attribute(vertex, 'pz')) for vertex in self.formdiagram.vertices())}") + + + # ============================================================================= + # Routines / Bounds + # ============================================================================= + + def apply_envelope(self) -> None: + """Apply envelope to the form diagram based on the intrados and extrados surfaces. + + This method projects the form diagram onto both intrados and extrados surfaces + and assigns the heights to 'ub' (upper bound) and 'lb' (lower bound) properties. + + Returns + ------- + None + The FormDiagram is modified in place. + """ + # Step 1: Check that formdiagram, intrados and extrados are present + if self.formdiagram is None: + raise ValueError("FormDiagram is not set. Please set the formdiagram before applying envelope.") + + if self.intrados is None or self.extrados is None: + raise ValueError("Intra/Extrados not set. Please set them before applying envelope.") + + # Step 2: Copy the form diagram for projection + form_ub = self.formdiagram.copy() # For upper bound (extrados) + form_lb = self.formdiagram.copy() # For lower bound (intrados) + + # Step 3: Project form diagram onto extrados (upper bound) + project_mesh_to_target_vertical(form_ub, self.extrados) + + # Step 4: Project form diagram onto intrados (lower bound) + v, f = self.intrados.to_vertices_and_faces() + fresh_intrados = Mesh.from_vertices_and_faces(v, f) + project_mesh_to_target_vertical(form_lb, self.intrados) + + # Step 5: Collect heights and assign to form diagram + for vertex in self.formdiagram.vertices(): + if vertex in form_ub.vertices() and vertex in form_lb.vertices(): + # Get z coordinates from projected meshes + _, _, z_ub = form_ub.vertex_coordinates(vertex) + _, _, z_lb = form_lb.vertex_coordinates(vertex) + + # Assign to form diagram + self.formdiagram.vertex_attribute(vertex, 'ub', z_ub) + self.formdiagram.vertex_attribute(vertex, 'lb', z_lb) + else: + print(f"Warning: Vertex {vertex} not found in projected meshes") + # Set default values if vertex not found + self.formdiagram.vertex_attribute(vertex, 'ub', 0.0) + self.formdiagram.vertex_attribute(vertex, 'lb', 0.0) + + # Step 6: Print summary + ub_values = [self.formdiagram.vertex_attribute(vertex, 'ub') for vertex in self.formdiagram.vertices()] + lb_values = [self.formdiagram.vertex_attribute(vertex, 'lb') for vertex in self.formdiagram.vertices()] + + print(f"Envelope applied to form diagram.") + print(f"Upper bound range: {min(ub_values):.3f} to {max(ub_values):.3f}") + print(f"Lower bound range: {min(lb_values):.3f} to {max(lb_values):.3f}") \ No newline at end of file diff --git a/src/compas_dem/templates/arch.py b/src/compas_dem/templates/arch.py index 1e34952..2606f1c 100644 --- a/src/compas_dem/templates/arch.py +++ b/src/compas_dem/templates/arch.py @@ -28,6 +28,8 @@ class ArchTemplate(Template): """ def __init__(self, rise, span, thickness, depth, n=None): + """Initialize the ArchTemplate.""" + super().__init__() self.rise = rise self.span = span @@ -51,6 +53,8 @@ def blocks(self): """ if self.rise > self.span / 2: raise Exception("Not a semicircular arch.") + if self.n is None: + raise ValueError("Number of segments 'n' must be specified and not None.") radius = self.rise / 2 + self.span**2 / (8 * self.rise) # base = [0.0, 0.0, 0.0] @@ -69,7 +73,7 @@ def blocks(self): R = Rotation.from_axis_and_angle([0, 1.0, 0], 0.5 * sector, center) bottom = transform_points([a, b, c, d], R) - + blocks = [] for i in range(self.n): R = Rotation.from_axis_and_angle([0, 1.0, 0], -angle, center) @@ -88,3 +92,64 @@ def blocks(self): bottom = top return blocks + + + def intrados_and_extrados(self): + """Helper to create meshes to define upper and lower bounds of 2D arch . + + Returns + ------- + intrados : :class:`~compas.datastructures.Mesh` + A Mesh for the intrados of the pattern + extrados : :class:`~compas.datastructures.Mesh` + A Mesh for the extrados of the pattern + middle : :class:`~compas.datastructures.Mesh` + A Mesh for the middle of the pattern + + """ + if self.rise > self.span / 2: + raise Exception("Not a semicircular arch.") + if self.n is None: + raise ValueError("Number of segments 'n' must be specified and not None.") + + radius = self.rise / 2 + self.span**2 / (8 * self.rise) + # base = [0.0, 0.0, 0.0] + top = [0.0, 0.0, self.rise] + left = [-self.span / 2, 0.0, 0.0] + center = [0.0, 0.0, self.rise - radius] + vector = subtract_vectors(left, center) + springing = angle_vectors(vector, [-1.0, 0.0, 0.0]) + sector = radians(180) - 2 * springing + angle = sector / self.n + + a = top + b = add_vectors(top, [0, self.depth, 0]) + c = add_vectors(top, [0, self.depth, self.thickness]) + d = add_vectors(top, [0, 0, self.thickness]) + + R = Rotation.from_axis_and_angle([0, 1.0, 0], 0.5 * sector, center) + bottom = transform_points([a, b, c, d], R) + + idos = Mesh() + edos = Mesh() + + for i in range(self.n): + R = Rotation.from_axis_and_angle([0, 1.0, 0], -angle, center) + top = transform_points(bottom, R) + idos_indices = [] + for v in bottom[:2]: + idos_indices.append(idos.add_vertex(x=v[0], y=v[1], z=v[2])) + for v in reversed(top[:2]): + idos_indices.append(idos.add_vertex(x=v[0], y=v[1], z=v[2])) + idos.add_face(idos_indices) + + edos_indices = [] + for v in bottom[2:]: + edos_indices.append(edos.add_vertex(x=v[0], y=v[1], z=v[2])) + for v in reversed(top[2:]): + edos_indices.append(edos.add_vertex(x=v[0], y=v[1], z=v[2])) + edos.add_face(edos_indices) + + bottom = top + + return idos, edos, None \ No newline at end of file diff --git a/src/compas_dem/templates/crossvault.py b/src/compas_dem/templates/crossvault.py new file mode 100644 index 0000000..50cabf4 --- /dev/null +++ b/src/compas_dem/templates/crossvault.py @@ -0,0 +1,404 @@ +from numpy import array +from numpy import concatenate +from numpy import linspace +from numpy import ones +from numpy import zeros + +from typing import List + +import math + +from compas.datastructures import Mesh +from compas_pattern.parametric import create_cross_form +from compas_pattern.parametric import create_fan_form + +from .template import Template + + +def crossvault_ub_lb_update(x, y, thk, min_lb, xy_span=[[0.0, 10.0], [0.0, 10.0]], tol=1e-6): + """Update upper and lower bounds of an crossvault based in the parameters + + Parameters + ---------- + x : list + x-coordinates of the points + y : list + y-coordinates of the points + thk : float + Thickness of the arch + min_lb : float + Parameter for lower bound in nodes in the boundary + xy_span : [list[float], list[float]], optional + xy-span of the shape, by default [[0.0, 10.0], [0.0, 10.0]] + tol : float, optional + Tolerance, by default 10e-6 + + Returns + ------- + ub : array + Values of the upper bound in the points + lb : array + Values of the lower bound in the points + """ + + y1 = xy_span[1][1] + y0 = xy_span[1][0] + x1 = xy_span[0][1] + x0 = xy_span[0][0] + + y1_ub = y1 + thk / 2 + y0_ub = y0 - thk / 2 + x1_ub = x1 + thk / 2 + x0_ub = x0 - thk / 2 + + y1_lb = y1 - thk / 2 + y0_lb = y0 + thk / 2 + x1_lb = x1 - thk / 2 + x0_lb = x0 + thk / 2 + + rx_ub = (x1_ub - x0_ub) / 2 + ry_ub = (y1_ub - y0_ub) / 2 + rx_lb = (x1_lb - x0_lb) / 2 + ry_lb = (y1_lb - y0_lb) / 2 + + hc_ub = max(rx_ub, ry_ub) + hc_lb = max(rx_lb, ry_lb) + + ub = ones((len(x), 1)) + lb = ones((len(x), 1)) * - min_lb + + for i in range(len(x)): + xi, yi = x[i], y[i] + xd_ub = x0_ub + (x1_ub - x0_ub) / (y1_ub - y0_ub) * (yi - y0_ub) + yd_ub = y0_ub + (y1_ub - y0_ub) / (x1_ub - x0_ub) * (xi - x0_ub) + hxd_ub = math.sqrt((rx_ub) ** 2 - ((xd_ub - x0_ub) - rx_ub) ** 2) + hyd_ub = math.sqrt((ry_ub) ** 2 - ((yd_ub - y0_ub) - ry_ub) ** 2) + + intrados_null = False + + if (yi > y1_lb and (xi > x1_lb or xi < x0_lb)) or (yi < y0_lb and (xi > x1_lb or xi < x0_lb)): + intrados_null = True + else: + yi_intra = yi + xi_intra = xi + if yi > y1_lb: + yi_intra = y1_lb + if yi < y0_lb: + yi_intra = y0_lb + elif xi > x1_lb: + xi_intra = x1_lb + elif xi < x0_lb: + xi_intra = x0_lb + + xd_lb = x0_lb + (x1_lb - x0_lb) / (y1_lb - y0_lb) * (yi_intra - y0_lb) + yd_lb = y0_lb + (y1_lb - y0_lb) / (x1_lb - x0_lb) * (xi_intra - x0_lb) + hxd_lb = _sqrt(((rx_lb) ** 2 - ((xd_lb - x0_lb) - rx_lb) ** 2)) + hyd_lb = _sqrt(((ry_lb) ** 2 - ((yd_lb - y0_lb) - ry_lb) ** 2)) + + if yi <= y0 + (y1 - y0) / (x1 - x0) * (xi - x0) + tol and yi >= y1 - (y1 - y0) / (x1 - x0) * (xi - x0) - tol: # Q1 + ub[i] = hc_ub * (hxd_ub + math.sqrt((ry_ub) ** 2 - ((yi - y0_ub) - ry_ub) ** 2)) / (rx_ub + ry_ub) + if not intrados_null: + lb[i] = hc_lb * (hxd_lb + math.sqrt((ry_lb) ** 2 - ((yi_intra - y0_lb) - ry_lb) ** 2)) / (rx_lb + ry_lb) + elif yi >= y0 + (y1 - y0) / (x1 - x0) * (xi - x0) - tol and yi >= y1 - (y1 - y0) / (x1 - x0) * (xi - x0) - tol: # Q3 + ub[i] = hc_ub * (hyd_ub + math.sqrt((rx_ub) ** 2 - ((xi - x0_ub) - rx_ub) ** 2)) / (rx_ub + ry_ub) + if not intrados_null: + lb[i] = hc_lb * (hyd_lb + math.sqrt((rx_lb) ** 2 - ((xi_intra - x0_lb) - rx_lb) ** 2)) / (rx_lb + ry_lb) + elif yi >= y0 + (y1 - y0) / (x1 - x0) * (xi - x0) - tol and yi <= y1 - (y1 - y0) / (x1 - x0) * (xi - x0) + tol: # Q2 + ub[i] = hc_ub * (hxd_ub + math.sqrt((ry_ub) ** 2 - ((yi - y0_ub) - ry_ub) ** 2)) / (rx_ub + ry_ub) + if not intrados_null: + lb[i] = hc_lb * (hxd_lb + math.sqrt((ry_lb) ** 2 - ((yi_intra - y0_lb) - ry_lb) ** 2)) / (rx_lb + ry_lb) + elif yi <= y0 + (y1 - y0) / (x1 - x0) * (xi - x0) + tol and yi <= y1 - (y1 - y0) / (x1 - x0) * (xi - x0) + tol: # Q4 + ub[i] = hc_ub * (hyd_ub + math.sqrt((rx_ub) ** 2 - ((xi - x0_ub) - rx_ub) ** 2)) / (rx_ub + ry_ub) + if not intrados_null: + lb[i] = hc_lb * (hyd_lb + math.sqrt((rx_lb) ** 2 - ((xi_intra - x0_lb) - rx_lb) ** 2)) / (rx_lb + ry_lb) + else: + print("Error Q. (x,y) = ({0},{1})".format(xi, yi)) + + return ub, lb + + +def crossvault_dub_dlb(x, y, thk, min_lb, xy_span=[[0.0, 10.0], [0.0, 10.0]], tol=1e-6): + """Computes the sensitivities of upper and lower bounds in the x, y coordinates and thickness specified. + + Parameters + ---------- + x : list + x-coordinates of the points + y : list + y-coordinates of the points + thk : float + Thickness of the arch + min_lb : float + Parameter for lower bound in nodes in the boundary + xy_span : [list[float], list[float]], optional + xy-span of the shape, by default [[0.0, 10.0], [0.0, 10.0]] + tol : float, optional + Tolerance, by default 10e-6 + + Returns + ------- + dub : array + Values of the sensitivities for the upper bound in the points + dlb : array + Values of the sensitivities for the lower bound in the points + """ + + y1 = xy_span[1][1] + y0 = xy_span[1][0] + x1 = xy_span[0][1] + x0 = xy_span[0][0] + + y1_ub = y1 + thk / 2 + y0_ub = y0 - thk / 2 + x1_ub = x1 + thk / 2 + x0_ub = x0 - thk / 2 + + y1_lb = y1 - thk / 2 + y0_lb = y0 + thk / 2 + x1_lb = x1 - thk / 2 + x0_lb = x0 + thk / 2 + + rx_ub = (x1_ub - x0_ub) / 2 + ry_ub = (y1_ub - y0_ub) / 2 + rx_lb = (x1_lb - x0_lb) / 2 + ry_lb = (y1_lb - y0_lb) / 2 + + hc_ub = max(rx_ub, ry_ub) + hc_lb = max(rx_lb, ry_lb) + + ub = ones((len(x), 1)) + lb = ones((len(x), 1)) * - min_lb + dub = zeros((len(x), 1)) # dzub / dt + dlb = zeros((len(x), 1)) # dzlb / dt + + dubdx = zeros((len(x), len(x))) + dubdy = zeros((len(x), len(x))) + dlbdx = zeros((len(x), len(x))) + dlbdy = zeros((len(x), len(x))) + + yc = ry_ub + y0_ub # Only works for square + xc = rx_ub + x0_ub + + for i in range(len(x)): + xi, yi = x[i], y[i] + xd_ub = x0_ub + (x1_ub - x0_ub) / (y1_ub - y0_ub) * (yi - y0_ub) + yd_ub = y0_ub + (y1_ub - y0_ub) / (x1_ub - x0_ub) * (xi - x0_ub) + hxd_ub = math.sqrt((rx_ub) ** 2 - ((xd_ub - x0_ub) - rx_ub) ** 2) + hyd_ub = math.sqrt((ry_ub) ** 2 - ((yd_ub - y0_ub) - ry_ub) ** 2) + + intrados_null = False + + if (yi > y1_lb and (xi > x1_lb or xi < x0_lb)) or (yi < y0_lb and (xi > x1_lb or xi < x0_lb)): + intrados_null = True + else: + yi_intra = yi + xi_intra = xi + if yi > y1_lb: + yi_intra = y1_lb + elif yi < y0_lb: + yi_intra = y0_lb + if xi > x1_lb: + xi_intra = x1_lb + elif xi < x0_lb: + xi_intra = x0_lb + + xd_lb = x0_lb + (x1_lb - x0_lb) / (y1_lb - y0_lb) * (yi_intra - y0_lb) + yd_lb = y0_lb + (y1_lb - y0_lb) / (x1_lb - x0_lb) * (xi_intra - x0_lb) + hxd_lb = _sqrt(((rx_lb) ** 2 - ((xd_lb - x0_lb) - rx_lb) ** 2)) + hyd_lb = _sqrt(((ry_lb) ** 2 - ((yd_lb - y0_lb) - ry_lb) ** 2)) + + if yi <= y0 + (y1 - y0) / (x1 - x0) * (xi - x0) + tol and yi >= y1 - (y1 - y0) / (x1 - x0) * (xi - x0) - tol: # Q1 + ub[i] = hc_ub * (hxd_ub + math.sqrt((ry_ub) ** 2 - ((yi - y0_ub) - ry_ub) ** 2)) / (rx_ub + ry_ub) + dub[i] = 1 / 2 * ry_ub / ub[i] * hc_ub / ((rx_ub + ry_ub) / 2) + # dubdx[i, i] += 0.0 + dubdy[i, i] += -(yi - yc) / ub[i] + if not intrados_null: + lb[i] = hc_lb * (hxd_lb + math.sqrt((ry_lb) ** 2 - ((yi_intra - y0_lb) - ry_lb) ** 2)) / (rx_lb + ry_lb) + dlb[i] = -1 / 2 * ry_lb / lb[i] * hc_lb / ((rx_lb + ry_lb) / 2) + # dlbdx[i, i] += 0.0 + dlbdy[i, i] += -(yi - yc) / lb[i] + if yi >= y0 + (y1 - y0) / (x1 - x0) * (xi - x0) - tol and yi >= y1 - (y1 - y0) / (x1 - x0) * (xi - x0) - tol: # Q3 + ub[i] = hc_ub * (hyd_ub + math.sqrt((rx_ub) ** 2 - ((xi - x0_ub) - rx_ub) ** 2)) / (rx_ub + ry_ub) + dub[i] = 1 / 2 * rx_ub / ub[i] * hc_ub / ((rx_ub + ry_ub) / 2) + # dubdy[i, i] += 0.0 + dubdx[i, i] += -(xi - xc) / ub[i] + if not intrados_null: + lb[i] = hc_lb * (hyd_lb + math.sqrt((rx_lb) ** 2 - ((xi_intra - x0_lb) - rx_lb) ** 2)) / (rx_lb + ry_lb) + dlb[i] = -1 / 2 * rx_lb / lb[i] * hc_lb / ((rx_lb + ry_lb) / 2) + # dlbdy[i, i] += 0.0 + dlbdx[i, i] += -(xi - xc) / lb[i] + if yi >= y0 + (y1 - y0) / (x1 - x0) * (xi - x0) - tol and yi <= y1 - (y1 - y0) / (x1 - x0) * (xi - x0) + tol: # Q2 + ub[i] = hc_ub * (hxd_ub + math.sqrt((ry_ub) ** 2 - ((yi - y0_ub) - ry_ub) ** 2)) / (rx_ub + ry_ub) + dub[i] = 1 / 2 * ry_ub / ub[i] * hc_ub / ((rx_ub + ry_ub) / 2) + # dubdx[i, i] += 0.0 + dubdy[i, i] += -(yi - yc) / ub[i] + if not intrados_null: + lb[i] = hc_lb * (hxd_lb + math.sqrt((ry_lb) ** 2 - ((yi_intra - y0_lb) - ry_lb) ** 2)) / (rx_lb + ry_lb) + dlb[i] = -1 / 2 * ry_lb / lb[i] * hc_lb / ((rx_lb + ry_lb) / 2) + # dlbdx[i, i] += 0.0 + dlbdy[i, i] += -(yi - yc) / lb[i] + if yi <= y0 + (y1 - y0) / (x1 - x0) * (xi - x0) + tol and yi <= y1 - (y1 - y0) / (x1 - x0) * (xi - x0) + tol: # Q4 + ub[i] = hc_ub * (hyd_ub + math.sqrt((rx_ub) ** 2 - ((xi - x0_ub) - rx_ub) ** 2)) / (rx_ub + ry_ub) + dub[i] = 1 / 2 * rx_ub / ub[i] * hc_ub / ((rx_ub + ry_ub) / 2) + # dubdy[i, i] += 0.0 + dubdx[i, i] += -(xi - xc) / ub[i] + if not intrados_null: + lb[i] = hc_lb * (hyd_lb + math.sqrt((rx_lb) ** 2 - ((xi_intra - x0_lb) - rx_lb) ** 2)) / (rx_lb + ry_lb) + dlb[i] = -1 / 2 * rx_lb / lb[i] * hc_lb / ((rx_lb + ry_lb) / 2) + # dlbdy[i, i] += 0.0 + dlbdx[i, i] += -(xi - xc) / lb[i] + # else: + # print('Error Q. (x,y) = ({0},{1})'.format(xi, yi)) + + return dub, dlb, dubdx, dubdy, dlbdx, dlbdy + + +def crossvault_middle_update(x, y, min_lb, xy_span=[[0.0, 10.0], [0.0, 10.0]], tol=1e-6): + """Update middle of a crossvault based in the parameters + + Parameters + ---------- + x : list + x-coordinates of the points + y : list + y-coordinates of the points + thk : float + Thickness of the arch + min_lb : float + Parameter for lower bound in nodes in the boundary + xy_span : [list[float], list[float]], optional + xy-span of the shape, by default [[0.0, 10.0], [0.0, 10.0]] + tol : float, optional + Tolerance, by default 10e-6 + + Returns + ------- + z : array + Values of the middle surface in the points + """ + + y1 = xy_span[1][1] + y0 = xy_span[1][0] + x1 = xy_span[0][1] + x0 = xy_span[0][0] + + rx = (x1 - x0) / 2 + ry = (y1 - y0) / 2 + hc = max(rx, ry) + + z = zeros((len(x), 1)) + + for i in range(len(x)): + xi, yi = x[i], y[i] + if yi > y1: + yi = y1 + if yi < y0: + yi = y0 + if xi > x1: + xi = x1 + if xi < x0: + xi = x0 + xd = x0 + (x1 - x0) / (y1 - y0) * (yi - y0) + yd = y0 + (y1 - y0) / (x1 - x0) * (xi - x0) + hxd = math.sqrt(abs((rx) ** 2 - ((xd - x0) - rx) ** 2)) + hyd = math.sqrt(abs((ry) ** 2 - ((yd - y0) - ry) ** 2)) + if yi <= y0 + (y1 - y0) / (x1 - x0) * (xi - x0) + tol and yi >= y1 - (y1 - y0) / (x1 - x0) * (xi - x0) - tol: # Q1 + z[i] = hc * (hxd + math.sqrt((ry) ** 2 - ((yi - y0) - ry) ** 2)) / (rx + ry) + elif yi >= y0 + (y1 - y0) / (x1 - x0) * (xi - x0) - tol and yi >= y1 - (y1 - y0) / (x1 - x0) * (xi - x0) - tol: # Q3 + z[i] = hc * (hyd + math.sqrt((rx) ** 2 - ((xi - x0) - rx) ** 2)) / (rx + ry) + elif yi >= y0 + (y1 - y0) / (x1 - x0) * (xi - x0) - tol and yi <= y1 - (y1 - y0) / (x1 - x0) * (xi - x0) + tol: # Q2 + z[i] = hc * (hxd + math.sqrt((ry) ** 2 - ((yi - y0) - ry) ** 2)) / (rx + ry) + elif yi <= y0 + (y1 - y0) / (x1 - x0) * (xi - x0) + tol and yi <= y1 - (y1 - y0) / (x1 - x0) * (xi - x0) + tol: # Q4 + z[i] = hc * (hyd + math.sqrt((rx) ** 2 - ((xi - x0) - rx) ** 2)) / (rx + ry) + else: + print("Vertex did not belong to any Q. (x,y) = ({0},{1})".format(xi, yi)) + z[i] = - min_lb + + return z + +def _sqrt(x): + try: + sqrt_x = math.sqrt(x) + except BaseException: + if x > -10e4: + sqrt_x = math.sqrt(abs(x)) + else: + sqrt_x = 0.0 + print("Problems to sqrt: ", x) + return sqrt_x + + +class CrossVaultTemplate(Template): + """Create voussoirs for a spherical dome geometry with given rise and span.""" + + def __init__( + self, + xy_span : List[List[float]] = [[0.0, 10.0], [0.0, 10.0]], + thk : float = 0.50, + min_lb : float = 0.0, + n : int = 100 + ): + super().__init__() + self.xy_span = xy_span + self.thk = thk + self.min_lb = min_lb + self.n = n + + def blocks(self): + """Compute the blocks. + + Returns + ------- + list + A list of blocks defined as simple meshes. + + Notes + ----- + This method is used by the ``from_geometry`` constructor of the assembly data structure + to create an assembly "from geometry". + + """ + + return NotImplementedError + + def intrados_and_extrados(self): + """Helper to create meshes to define upper and lower bounds of 2D arch . + + Returns + ------- + intrados : :class:`~compas.datastructures.Mesh` + A Mesh for the intrados of the pattern + extrados : :class:`~compas.datastructures.Mesh` + A Mesh for the extrados of the pattern + middle : :class:`~compas.datastructures.Mesh` + A Mesh for the middle of the pattern + + """ + + if isinstance(self.n, int): + discretisation = [self.n, self.n] + + [x0, x1], [y0, y1] = self.xy_span + + density_x = discretisation[0] # type: ignore + density_y = discretisation[1] # type: ignore + x = linspace(x0, x1, num=density_x + 1, endpoint=True) # arange(x0, x1 + dx/density_x, dx/density_x) + y = linspace(y0, y1, num=density_y + 1, endpoint=True) # arange(y0, y1 + dy/density_y, dy/density_y) + + base_topology : Mesh = create_cross_form(self.xy_span, self.n) + xyz0, faces_i = base_topology.to_vertices_and_faces() + xi, yi, _ = array(xyz0).transpose() + + zt = crossvault_middle_update(xi, yi, self.min_lb, xy_span=self.xy_span, tol=1e-6) + xyzt = array([xi, yi, zt.flatten()]).transpose() + middle = Mesh.from_vertices_and_faces(xyzt, faces_i) + middle.update_default_vertex_attributes(thickness=self.thk) + + zub, zlb = crossvault_ub_lb_update(xi, yi, self.thk, self.min_lb, xy_span=self.xy_span, tol=1e-6) + xyzub = array([xi, yi, zub.flatten()]).transpose() + xyzlb = array([xi, yi, zlb.flatten()]).transpose() + + extrados = Mesh.from_vertices_and_faces(xyzub, faces_i) + intrados = Mesh.from_vertices_and_faces(xyzlb, faces_i) + + return intrados, extrados, middle diff --git a/src/compas_dem/templates/template.py b/src/compas_dem/templates/template.py index 39871fc..573dbba 100644 --- a/src/compas_dem/templates/template.py +++ b/src/compas_dem/templates/template.py @@ -7,6 +7,16 @@ def blocks(self): def interfaces(self): raise NotImplementedError + + def intrados_and_extrados(self): + """Return the intrados and extrados surfaces as meshes. + Returns + ------- + tuple + 0. Mesh representing the intrados surface. + 1. Mesh representing the extrados surface. + """ + raise NotImplementedError def to_blocks_and_interfaces(self): """Convert the geometry to a list of block meshes, diff --git a/src/compas_dem/viewer/__init__.py b/src/compas_dem/viewer/__init__.py index e109d77..a2e6028 100644 --- a/src/compas_dem/viewer/__init__.py +++ b/src/compas_dem/viewer/__init__.py @@ -1,3 +1,5 @@ from .viewer import DEMViewer +from .masonryviewer import MasonryViewer -__all__ = ["DEMViewer"] +__all__ = ["DEMViewer", + "MasonryViewer"] diff --git a/src/compas_dem/viewer/masonryviewer.py b/src/compas_dem/viewer/masonryviewer.py new file mode 100644 index 0000000..db81916 --- /dev/null +++ b/src/compas_dem/viewer/masonryviewer.py @@ -0,0 +1,420 @@ +from compas.colors import Color +from compas.geometry import Line +from compas.geometry import Point +from compas.geometry import Cylinder +from compas.scene import Group +from compas_viewer.config import Config +from compas_viewer.config import MenubarConfig +from compas_viewer.scene import ViewerSceneObject +from compas_viewer.viewer import Viewer + +from compas_dem.models import BlockModel +from compas_dem.models import SurfaceModel +from compas_tna.diagrams import FormDiagram + +from typing import Optional, Union + +import math + +config = Config() + + +def show_blocks(): + from compas_viewer import Viewer + + viewer: DEMViewer = Viewer() # type: ignore + + viewer.groups["supports"].show = True + viewer.groups["blocks"].show = True + viewer.groups["contacts"].show = False + viewer.groups["interactions"].show = False + + obj: ViewerSceneObject + + for obj in viewer.groups["supports"].children: + obj.show_faces = True + obj.update() + + for obj in viewer.groups["blocks"].children: + obj.show_faces = True + obj.update() + + viewer.ui.sidebar.update() + viewer.renderer.update() + + +def show_contacts(): + from compas_viewer import Viewer + + viewer: DEMViewer = Viewer() # type: ignore + + viewer.groups["supports"].show = True + viewer.groups["blocks"].show = True + viewer.groups["contacts"].show = True + viewer.groups["interactions"].show = False + + obj: ViewerSceneObject + + for obj in viewer.groups["supports"].children: + obj.show_faces = False + obj.update() + + for obj in viewer.groups["blocks"].children: + obj.show_faces = False + obj.update() + + viewer.ui.sidebar.update() + viewer.renderer.update() + + +def show_interactions(): + from compas_viewer import Viewer + + viewer: DEMViewer = Viewer() # type: ignore + + viewer.groups["supports"].show = True + viewer.groups["blocks"].show = True + viewer.groups["contacts"].show = False + viewer.groups["interactions"].show = True + + obj: ViewerSceneObject + + for obj in viewer.groups["supports"].children: + obj.show_faces = False + obj.update() + + for obj in viewer.groups["blocks"].children: + obj.show_faces = False + obj.update() + + viewer.ui.sidebar.update() + viewer.renderer.update() + + +def show_intrados_extrados(): + from compas_viewer import Viewer + + viewer: DEMViewer = Viewer() # type: ignore + + viewer.groups["intrados"].show = True + viewer.groups["extrados"].show = True + + viewer.ui.sidebar.update() + viewer.renderer.update() + + +MenubarConfig._items.append( + { + "title": "COMPAS DEM", + "items": [ + { + "title": "Show Blocks", + "action": show_blocks, + }, + { + "title": "Show Contacts", + "action": show_contacts, + }, + { + "title": "Show Interactions", + "action": show_interactions, + }, + { + "title": "Show Inrados|Extrados", + "action": show_intrados_extrados, + }, + ], + } +) + + +class MasonryViewer(Viewer): + blockcolor: Color = Color.grey().lightened(85) + supportcolor: Color = Color.red().lightened(50) + interfacecolor: Color = Color.cyan().lightened(50) + graphnodecolor: Color = Color.blue() + graphedgecolor: Color = Color.blue().lightened(50) + surfacecolor: Color = Color.grey().lightened(90) + + form_max_thk: float = 0.1 # Maximum pipe radius for the largest detected force + intrados_color: Color = Color.blue().darkened(30) + extrados_color: Color = Color.green().darkened(30) + form_color: Color = Color.red() + shape_color: Color = Color.grey().lightened(30) + shape_opacity: float = 0.4 + thrust_opacity: float = 0.9 + crack_opacity: float = 0.9 + crack_size: int = 20 # Size of crack points + cracks_tol: float = 1e-3 # Tolerance for comparing vertex z to lb/ub values + surface_linewidth: float = 0.1 + + def __init__(self, model=None, config=config): + super().__init__(config=config) + self.blockmodel = None + self.surfacemodel = None + self.groups = {} + + # Auto-detect model type and assign to appropriate attribute + if model is not None: + if isinstance(model, BlockModel): + self.blockmodel = model + elif isinstance(model, SurfaceModel): + self.surfacemodel = model + else: + raise TypeError(f"Model must be either BlockModel or SurfaceModel, got {type(model).__name__}") + + def add_model(self, model): + """Add an additional model to the viewer. + + Parameters + ---------- + model : BlockModel or SurfaceModel + The model to add to the viewer. + """ + if isinstance(model, BlockModel): + if self.blockmodel is not None: + print("Warning: BlockModel already exists, replacing it.") + self.blockmodel = model + elif isinstance(model, SurfaceModel): + if self.surfacemodel is not None: + print("Warning: SurfaceModel already exists, replacing it.") + self.surfacemodel = model + else: + raise TypeError(f"Model must be either BlockModel or SurfaceModel, got {type(model).__name__}") + + def setup(self): + self.setup_groups() + + # add blockmodel stuff + self.add_supports() + self.add_blocks() + self.add_contacts() + self.add_graph() + + # add surfacemodel stuff + self.add_idos_edos() + self.add_form() + self.add_cracks() + # self.add_bounds() + + # ============================================================================= + # Groups + # ============================================================================= + + def setup_groups(self): + self.groups["blockmodel"] = self.scene.add_group(name="BlockModel") + self.groups["supports"] = self.scene.add_group(name="Supports", parent=self.groups["blockmodel"]) + self.groups["blocks"] = self.scene.add_group(name="Blocks", parent=self.groups["blockmodel"]) + self.groups["contacts"] = self.scene.add_group(name="Contacts", parent=self.groups["blockmodel"], show=False) + self.groups["interactions"] = self.scene.add_group(name="Interactions", parent=self.groups["blockmodel"], show=False) + + self.groups["surfacemodel"] = self.scene.add_group(name="SurfaceModel") + self.groups["intrados"] = self.scene.add_group(name="Intrados", parent=self.groups["surfacemodel"]) + self.groups["extrados"] = self.scene.add_group(name="Extrados", parent=self.groups["surfacemodel"]) + self.groups["form"] = self.scene.add_group(name="Form", parent=self.groups["surfacemodel"]) + self.groups["cracks"] = self.scene.add_group(name="Cracks", parent=self.groups["surfacemodel"]) + + # ============================================================================= + # Blocks and Contacts + # ============================================================================= + + def add_supports(self): + if self.blockmodel is None: + return + + parent: Group = self.groups["supports"] + + for block in self.blockmodel.supports(): + parent.add( + block.modelgeometry, + facecolor=self.supportcolor, # type: ignore + edgecolor=self.supportcolor.contrast, + linewidth=0.5, # type: ignore + name=block.name, # type: ignore + ) + + def add_blocks(self): + if self.blockmodel is None: + return + + parent: Group = self.groups["blocks"] + + for block in self.blockmodel.blocks(): + parent.add( + block.modelgeometry, + facecolor=self.blockcolor, # type: ignore + edgecolor=self.blockcolor.contrast, + linewidth=0.5, # type: ignore + name=block.name, # type: ignore + ) + + def add_contacts(self): + if self.blockmodel is None: + return + + parent: Group = self.groups["contacts"] + + for contact in self.blockmodel.contacts(): + geometry = contact.polygon + color = self.interfacecolor + parent.add(geometry, linewidth=1, surfacecolor=color, linecolor=color.contrast) # type: ignore + + def add_form(self): + """ + Create and add cylindrical pipes for each form-diagram edge into 'Form' group. + + Parameters + ---------- + max_thick : float, optional + Maximum pipe radius for the largest detected force. + + """ + + if self.surfacemodel is None: + return + + if self.surfacemodel.formdiagram is None: + return + else: + formdiagram : FormDiagram = self.surfacemodel.formdiagram # type: ignore + + grp: Group = self.groups["form"] + + edges = list(formdiagram.edges_where({'_is_edge': True})) + forces = [formdiagram.edge_attribute(e, 'q') * formdiagram.edge_length(e) for e in edges] # type: ignore + f_max = math.sqrt(max(abs(max(forces)), abs(min(forces)))) or 1e-6 + for edge in edges: + q = formdiagram.edge_attribute(edge, 'q') + line = formdiagram.edge_line(edge) + length = line.length + force = math.sqrt(abs(q * length)) + if force < 1e-3: + continue + radius = (force / f_max) * self.form_max_thk + cyl = Cylinder.from_line_and_radius(line, radius) + grp.add(cyl, + name=f"thrust_{edge}", # type: ignore + color = self.form_color, # type: ignore + opacity = self.thrust_opacity) # type: ignore + self.groups['form'] = grp + + def add_cracks(self): + """ + Identify vertices where the form touches intrados/extrados and add them to 'Cracks' group. + + Parameters + ---------- + tol : float, optional + Tolerance for comparing vertex z to lb/ub values. + """ + + if self.surfacemodel is None: + return + + if self.surfacemodel.formdiagram is None: + return + else: + formdiagram : FormDiagram = self.surfacemodel.formdiagram # type: ignore + + grp: Group = self.groups["cracks"] + + for key in formdiagram.vertices(): # type: ignore + x, y, z = formdiagram.vertex_coordinates(key) # type: ignore + lb = formdiagram.vertex_attribute(key, 'lb') # type: ignore + ub = formdiagram.vertex_attribute(key, 'ub') # type: ignore + if lb is not None and abs(z - lb) < self.cracks_tol: + grp.add(Point(x, y, z), + name=f"intrados_crack_{key}", # type: ignore + pointsize=self.crack_size, # type: ignore + pointcolor=self.intrados_color, # type: ignore + opacity=self.crack_opacity) # type: ignore + if ub is not None and abs(ub - z) < self.cracks_tol: + grp.add(Point(x, y, z), + name=f"extrados_crack_{key}", # type: ignore + pointsize=self.crack_size, # type: ignore + pointcolor=self.extrados_color, # type: ignore + opacity=self.crack_opacity) # type: ignore + self.groups['cracks'] = grp + + def add_bounds(self): + """ + Identify vertices where the form touches intrados/extrados and add them to 'Cracks' group. + + Parameters + ---------- + tol : float, optional + Tolerance for comparing vertex z to lb/ub values. + """ + + if self.surfacemodel is None: + return + + if self.surfacemodel.formdiagram is None: + return + else: + formdiagram : FormDiagram = self.surfacemodel.formdiagram # type: ignore + + grp: Group = self.groups["cracks"] + + for key in formdiagram.vertices(): # type: ignore + x, y, z = formdiagram.vertex_coordinates(key) # type: ignore + lb = formdiagram.vertex_attribute(key, 'lb') # type: ignore + ub = formdiagram.vertex_attribute(key, 'ub') # type: ignore + if lb is not None: + grp.add(Point(x, y, lb), + name=f"intrados_limit_{key}", # type: ignore + pointsize=self.crack_size, # type: ignore + pointcolor=self.intrados_color, # type: ignore + opacity=0.95) # type: ignore + if ub is not None: + grp.add(Point(x, y, ub), + name=f"extrados_limit_{key}", # type: ignore + pointsize=self.crack_size, # type: ignore + pointcolor=self.extrados_color, # type: ignore + opacity=0.95) # type: ignore + self.groups['cracks'] = grp + + def add_forcediagram(self, forcediagram): + if self.surfacemodel is None: + return + self.scene.add(forcediagram, show_faces=False, show_lines=True) + + def add_idos_edos(self): + if self.surfacemodel is None: + return + parent: Group = self.groups["intrados"] + parent.add( + self.surfacemodel.intrados, # type: ignore + facecolor=self.surfacecolor, # type: ignore + edgecolor=self.surfacecolor, + linewidth=self.surface_linewidth, + opacity=0.8, # type: ignore + ) + + parent : Group = self.groups["extrados"] + parent.add( + self.surfacemodel.extrados, # type: ignore + facecolor=self.surfacecolor, # type: ignore + edgecolor=self.surfacecolor, + linewidth=self.surface_linewidth, + opacity=0.8, # type: ignore + ) + + # ============================================================================= + # Graph + # ============================================================================= + + def add_graph(self): + if self.blockmodel is None: + return + parent: Group = self.groups["interactions"] + + node_point = {node: self.blockmodel.graph.node_element(node).point for node in self.blockmodel.graph.nodes()} # type: ignore + points = list(node_point.values()) + lines = [Line(node_point[u], node_point[v]) for u, v in self.blockmodel.graph.edges()] + + nodegroup = self.scene.add_group(name="Nodes", parent=parent) # type: ignore + edgegroup = self.scene.add_group(name="Edges", parent=parent) # type: ignore + + nodegroup.add_from_list(points, pointsize=10, pointcolor=self.graphnodecolor) # type: ignore + edgegroup.add_from_list(lines, linewidth=1, linecolor=self.graphedgecolor) # type: ignore diff --git a/src/compas_dem/viewer/viewer.py b/src/compas_dem/viewer/viewer.py index 0a977e8..cfe3cf0 100644 --- a/src/compas_dem/viewer/viewer.py +++ b/src/compas_dem/viewer/viewer.py @@ -210,4 +210,4 @@ def add_graph(self): edgegroup = self.scene.add_group(name="Edges", parent=parent) # type: ignore nodegroup.add_from_list(points, pointsize=10, pointcolor=self.graphnodecolor) # type: ignore - edgegroup.add_from_list(lines, linewidth=1, linecolor=self.graphedgecolor) # type: ignore + edgegroup.add_from_list(lines, linewidth=1, linecolor=self.graphedgecolor) # type: ignore \ No newline at end of file