{"ok":true,"resource":{"id":"sand3d--automate--automate-201829ca9a3705bab439c4ed_35366c7f373dfba68e98c991_aa7376a0b57de5eb1bfaf730_default","sourceId":"sandflow-sand3d","sourceAssetId":"automate:201829ca9a3705bab439c4ed_35366c7f373dfba68e98c991_aa7376a0b57de5eb1bfaf730_default","name":"AUTOMATE 201829Ca9A3705Bab439C4Ed 35366 (Sand3D Program)","category":"industrial","publisher":"Sandflow","formats":["py","usda","glb"],"fileCount":2,"sizeBytes":1009646,"kind":"3d-code","license":"CC-BY-4.0","revision":"ba1baf9d89ddf57433d7c47cb461f6d8883067a1","sourceUrl":"https://huggingface.co/datasets/Sandflow/sand3d-automate","entryUrl":"https://huggingface.co/datasets/SZFSPC/techidaily-resources/resolve/ba1baf9d89ddf57433d7c47cb461f6d8883067a1/usda/0006/automate-201829ca9a3705bab439c4ed_35366c7f373dfba68e98c991_aa7376a0b57de5eb1bfaf730_default.usda","thumbnailUrl":"https://sandflow-sand3d-explorer.hf.space/r/automate-201829ca9a3705bab439c4ed_35366c7f373dfba68e98c991_aa7376a0b57de5eb1bfaf730_default.png","detailImageUrl":"https://sandflow-sand3d-explorer.hf.space/r/automate-201829ca9a3705bab439c4ed_35366c7f373dfba68e98c991_aa7376a0b57de5eb1bfaf730_default.png","sourcePreviewUrl":"https://huggingface.co/datasets/SZFSPC/techidaily-resources/resolve/ba1baf9d89ddf57433d7c47cb461f6d8883067a1/usda/0006/automate-201829ca9a3705bab439c4ed_35366c7f373dfba68e98c991_aa7376a0b57de5eb1bfaf730_default.png","capabilities":["Sand3D (Code)","UsdPhysics","Kinematics Joint Articulation","Parametric Reconstruction"],"capabilityEvidence":"sand3d-program-analysis","runtimeValidation":"not-tested","classificationEvidence":"family-taxonomy-mapping","storageStatus":"hf-mirror-tree-verified","packageHash":"7fc5b30542100f7ad66737168db1e66598f918f7da4cf2b11c76711c2e67f110","contentHash":"284390030fadd7a27ddc693a438c38563feee0eaf69ce06ee76259d03700a5ed","checkedAt":"2026-11-06T14:00:00.000Z","aiGenerated":false,"attribution":"Sandflow Sand3D Library; CC-BY-4.0","evidence":{"license":{"spdx":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/","location":"datasets/Sandflow/sand3d-automate/LICENSE"},"commercialPermitted":true,"notes":"Parametric 3D object from Sandflow/sand3d-automate (3,169 objects). Pinned revision 83cb3d4."},"outputFiles":[{"path":"usda/0006/automate-201829ca9a3705bab439c4ed_35366c7f373dfba68e98c991_aa7376a0b57de5eb1bfaf730_default.usda","format":"usda","sizeBytes":50000,"sha256":"7fc5b30542100f7ad66737168db1e66598f918f7da4cf2b11c76711c2e67f110","url":"https://huggingface.co/datasets/SZFSPC/techidaily-resources/resolve/ba1baf9d89ddf57433d7c47cb461f6d8883067a1/usda/0006/automate-201829ca9a3705bab439c4ed_35366c7f373dfba68e98c991_aa7376a0b57de5eb1bfaf730_default.usda"}],"sand3d":{"datasetRepo":"Sandflow/sand3d-automate","subcollection":"automate","totalInDataset":3169,"entryFunction":"eyeglasses","nJoints":2,"fScore":0.9895,"program":"import math\nimport sand3d as s3d\n\n\ndef eyeglasses():\n    part_a = part_a_body()\n    part_c_body = spinning_body(part_a, \"part_c_body\", x=-65.79, y=2.82, z=15.72, rx=90, ry=70)\n    part_b_body = left_temple(part_c_body, \"part_b_body\", x=48.6, y=133.52, rz=145)\n    return s3d.assembly(\"eyeglasses\", part_a, part_c_body, part_b_body)\n\n\ndef spinning_body(parent, name, x=0, y=0, z=0, rx=0, ry=0, rz=0):\n    frame = s3d.local(parent, x, y, z, rx, ry, rz)\n    part_c_body = s3d.at(part_c_body_fn(f\"{name}_piece\"), on=frame)\n    s3d.joint(f\"{name}_spin\", part_c_body, frame, kind=\"continuous\")\n    return part_c_body\n\n\ndef left_temple(parent, name, x=0, y=0, z=0, rx=0, ry=0, rz=0):\n    frame = s3d.local(parent, x, y, z, rx, ry, rz)\n    part_b_body = s3d.at(part_b_body_fn(f\"{name}_piece\"), on=frame)\n    s3d.joint(f\"{name}_spin\", part_b_body, frame, kind=\"continuous\")\n    return part_b_body\n\n\ndef part_a_body():\n    piece = s3d.transform(part_a(\"part_a_body_piece\"), x=-87.98, y=-2.33, z=74.5, ry=70)\n    return s3d.group(\"part_a_body\", piece)\n\n\ndef part_c_body_fn(name):\n    piece = s3d.transform(part_c(name.replace(\"_piece\", \"\")), x=30.64, y=64.45, z=2.8, rx=-90, rz=70)\n    return s3d.group(name.replace(\"_piece\", \"\"), piece)\n\n\ndef part_b_body_fn(name):\n    piece = s3d.transform(part_b(name.replace(\"_piece\", \"\")), x=62.83, y=-0.75, z=5.15, rx=-90)\n    return s3d.group(name.replace(\"_piece\", \"\"), piece)\n\n\ndef part_a(\n    name,\n    length=130.16,\n    width=29.51,\n    thick=5.92,\n    outer_r=30,\n    inner_r=20,\n    bend_x=-27.08,\n    outer_y=-19.36,\n    inner_y=-14.85,\n    arm_t=2.6,\n    hinge_d=4.4,\n    hinge_pitch=6.8,\n    bore_d=1,\n    bend_angle=140,\n    tip_length=9,\n    edge_r=1,\n):\n    tangent = (\n        bend_x + inner_r * math.cos(math.radians(bend_angle)),\n        inner_y + inner_r * math.sin(math.radians(bend_angle)),\n    )\n    outline = s3d.poly(\n        [\n            (-length / 2, -width / 2 + edge_r),\n            (-length / 2 + edge_r, -width / 2),\n            (-length / 2 + tip_length, -width / 2),\n            tangent,\n            s3d.arc(center=(bend_x, inner_y), r=inner_r, start=bend_angle, end=90),\n            (length / 2, inner_y + inner_r),\n            (length / 2, width / 2),\n            (bend_x, outer_y + outer_r),\n            s3d.arc(center=(bend_x, outer_y), r=outer_r, start=90, end=bend_angle),\n        ]\n    )\n    arm = s3d.extrude(name, outline, arm_t, both=True)\n    arm = s3d.fillet(arm, edge_r, edges=\"top bottom\")\n    arm = s3d.at(arm, z=-thick / 2 + arm_t / 2)\n    return add_hinge(arm, length / 2 - hinge_d / 2, width / 2, thick, hinge_d, hinge_pitch, bore_d, edge_r)\n\n\ndef add_hinge(arm, x, y, thick, d, pitch, bore, t):\n    ear = s3d.extrude(\n        \"ear\",\n        s3d.poly(\n            [(-d * 2, -thick / 2), (d / 2, -thick / 2), (d / 2, 0), s3d.arc(center=(0, 0), r=d / 2, start=0, end=130)]\n        ),\n        t,\n    )\n    ear = s3d.hole(ear, bore, on=ear.face(\"top\"))\n    ear = s3d.at(ear, rx=90)\n    ears = s3d.at(ear, on=s3d.grid(1, 2, 0, pitch), x=x, y=y - pitch / 2, z=thick / 2 - d / 2)\n    return s3d.join(arm, ears)\n\n\ndef part_b(name, length=130.16, width=29.51, thickness=5.92, skin=2.6, edge_r=1, hinge_d=4.4, bore_d=1.75, pitch=6.8):\n    half = length / 2\n    bottom = -thickness / 2\n    outline = s3d.poly(\n        [\n            (-half, width / 2),\n            (27.08, 10.64),\n            s3d.spline([(27.08, 10.64), (36, 9), (43, 5), (55.16, -5.47)], tangents=((1, 0), (0.75, -0.66))),\n            (half, -12.5),\n            (half, -14),\n            (61.34, -14.33),\n            (40.3, 0.2),\n            s3d.spline([(40.3, 0.2), (34, 3.9), (27.08, 5.15)], tangents=((-0.75, 0.66), (-1, 0))),\n            (-half, 5.15),\n        ]\n    )\n    body = s3d.at(s3d.extrude(name, outline, skin), z=bottom)\n    s3d.fillet(body, edge_r, edges=\"top bottom\")\n    return hinge_ears(body, half, bottom, skin, hinge_d, bore_d, pitch)\n\n\ndef hinge_ears(body, half, bottom, skin, hinge_d, bore_d, pitch):\n    x = -half + hinge_d / 2\n    z = 0.75\n    profile = s3d.poly(\n        [\n            (x - hinge_d / 2, bottom),\n            (x + 5.72, bottom),\n            (x + 5.72, bottom + skin),\n            (x + hinge_d / 2, z),\n            s3d.arc(center=(x, z), r=hinge_d / 2, start=0, end=180),\n        ]\n    )\n    ear = s3d.extrude(\"hinge\", profile, 2.3)\n    ear = s3d.at(ear, rx=90, y=7.45)\n    other = s3d.transform(s3d.copy(ear), y=pitch)\n    s3d.join(body, ear, other)\n    s3d.hole(body, bore_d, on=s3d.Frame((x, 16, z), normal=(0, -1, 0)))\n    return body\n\n\ndef part_c(\n    name, w=148.07, d=40.86, h=17.89, rim=3, bridge=14, lens=56, brow=17, heel=60, hinge_d=3.96, bore=1.75, hinge_y=7.2\n):\n    half = frame_half(name, w / 2, d / 2, rim, bridge / 2, lens, brow, heel)\n    other = s3d.transform(s3d.copy(half), mirror=\"x\")\n    frame = s3d.join(half, other)\n    lug = hinge(\"hinge\", hinge_d, bore, rim + 1)\n    lug = s3d.at(lug, x=w / 2 - rim, y=hinge_y, z=h / 2 - hinge_d / 2)\n    stem = s3d.at(\n        s3d.box(\"hinge_root\", hinge_d, rim + 1, h / 2 - hinge_d / 2), x=w / 2 - rim, y=hinge_y, z=-rim / 2 + rim / 12\n    )\n    rest = nose_rest(bridge / 2, rim, h / 2 - hinge_d / 2)\n    s3d.join(\n        frame,\n        lug,\n        stem,\n        rest,\n        s3d.transform(s3d.copy(lug), mirror=\"x\"),\n        s3d.transform(s3d.copy(stem), mirror=\"x\"),\n        s3d.transform(s3d.copy(rest), mirror=\"x\"),\n    )\n    return frame\n\n\ndef frame_half(name, reach, depth, rim, neck, lens, brow, heel):\n    outline = s3d.spline(\n        [\n            (0, depth - neck),\n            (brow, depth - rim / 2),\n            (reach / 2, depth),\n            (heel, brow),\n            (reach - rim / 2, depth - neck),\n            (reach - 2 * rim, neck / 2),\n            (heel + rim, -depth / 2),\n            (heel, -brow),\n            (lens, -depth + rim / 4),\n            (reach / 2, -depth + rim / 4),\n            (brow, -brow),\n            (neck + rim, -depth / 2),\n            (neck, neck),\n            (0, depth - neck - rim),\n        ],\n        closed=True,\n    )\n    half = s3d.at(s3d.extrude(name, outline, rim), z=-rim / 2 + rim / 12)\n    opening = s3d.spline(\n        [\n            (neck + rim, depth - neck),\n            (brow + rim, brow),\n            (reach / 2, depth - rim),\n            (heel, depth - neck - rim),\n            (heel + rim, neck),\n            (heel + rim, -brow + rim),\n            (lens, -depth + rim),\n            (reach / 2, -depth + rim),\n            (brow, -brow + rim),\n            (neck + rim, 0),\n        ],\n        closed=True,\n    )\n    s3d.pocket(half, opening, on=half.face(\"top\"))\n    return half\n\n\ndef hinge(name, diameter, bore, length):\n    lug = s3d.extrude(name, s3d.circle(diameter), length, both=True)\n    s3d.hole(lug, bore)\n    return s3d.at(lug, rx=90)\n\n\ndef nose_rest(neck, rim, height):\n    path = s3d.spline([(neck + rim, 0), (neck + rim / 2, neck / 2), (neck, neck)], tangents=((0, 1), (0, 1)))\n    rest = s3d.extrude(\"nose_rest\", s3d.stroke(path, rim), height - rim / 2)\n    return s3d.at(rest, z=rim / 2)","usdaPath":"usda/0006/automate-201829ca9a3705bab439c4ed_35366c7f373dfba68e98c991_aa7376a0b57de5eb1bfaf730_default.usda","programSha256":"284390030fadd7a27ddc693a438c38563feee0eaf69ce06ee76259d03700a5ed","explorerUrl":"/resources/explorer?oid=automate-201829ca9a3705bab439c4ed_35366c7f373dfba68e98c991_aa7376a0b57de5eb1bfaf730_default","glbUrl":"https://sandflow-sand3d-explorer.hf.space/glb/automate-201829ca9a3705bab439c4ed_35366c7f373dfba68e98c991_aa7376a0b57de5eb1bfaf730_default.glb"},"downloadUrl":"https://huggingface.co/datasets/SZFSPC/techidaily-resources/tree/ba1baf9d89ddf57433d7c47cb461f6d8883067a1/usda/0006","mirror":{"repository":"SZFSPC/techidaily-resources","revision":"ba1baf9d89ddf57433d7c47cb461f6d8883067a1","checkedAt":"2026-11-06T14:00:00.000Z","verification":"official-huggingface-dataset-parquet-manifest"}},"analysis":{"suitability":"candidate-needs-runtime-validation","useCase":"scene-building","evidence":{"formats":"sand3d-python-program-and-openusd-manifest","capabilities":"sand3d-program-analysis","category":"family-taxonomy-mapping"},"limitations":["Runtime compatibility and physical behavior have not been tested by TechIDaily.","Sand3D programs export OpenUSD with UsdPhysics joints; requires sand3d library and Python 3.13 for direct execution.","Mirror verification checks Git tree identity and sampled delivery, not an independent rehash of every payload.","Follow source-specific licensing and attribution. Other rights may apply; no endorsement is implied.","Parametric Python reconstruction available (2 articulated joints, F-score: 0.9895)."],"requiredNextSteps":["Check materials, scale, performance and required file conversion in your target renderer."]}}