{"ok":true,"resource":{"id":"sand3d--articraft--articraft-rec_parabolic_dish_on_azimuth_elevation_mount_6cae286c2723453989eb2a05cdedb038","sourceId":"sandflow-sand3d","sourceAssetId":"articraft:rec_parabolic_dish_on_azimuth_elevation_mount_6cae286c2723453989eb2a05cdedb038","name":"ARTICRAFT Rec Parabolic Dish On Azimuth  (Sand3D Program)","category":"industrial","publisher":"Sandflow","formats":["py","usda","glb"],"fileCount":2,"sizeBytes":420991,"kind":"3d-code","license":"CC-BY-4.0","revision":"ba1baf9d89ddf57433d7c47cb461f6d8883067a1","sourceUrl":"https://huggingface.co/datasets/Sandflow/sand3d-articraft","entryUrl":"https://huggingface.co/datasets/SZFSPC/techidaily-resources/resolve/ba1baf9d89ddf57433d7c47cb461f6d8883067a1/usda/0002/articraft-rec_parabolic_dish_on_azimuth_elevation_mount_6cae286c2723453989eb2a05cdedb038.usda","thumbnailUrl":"https://sandflow-sand3d-explorer.hf.space/r/articraft-rec_parabolic_dish_on_azimuth_elevation_mount_6cae286c2723453989eb2a05cdedb038.png","detailImageUrl":"https://sandflow-sand3d-explorer.hf.space/r/articraft-rec_parabolic_dish_on_azimuth_elevation_mount_6cae286c2723453989eb2a05cdedb038.png","sourcePreviewUrl":"https://huggingface.co/datasets/SZFSPC/techidaily-resources/resolve/ba1baf9d89ddf57433d7c47cb461f6d8883067a1/usda/0002/articraft-rec_parabolic_dish_on_azimuth_elevation_mount_6cae286c2723453989eb2a05cdedb038.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":"89b209547b46996efca7902a922d93ee8c730a82f09d0414960fefbe9e8df20c","contentHash":"d7908b54c20c4391b651a192c1ccf6f2577c2623513edea18b49d3ba53636785","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-articraft/LICENSE"},"commercialPermitted":true,"notes":"Parametric 3D object from Sandflow/sand3d-articraft (9,209 objects). Pinned revision 1d07bda."},"outputFiles":[{"path":"usda/0002/articraft-rec_parabolic_dish_on_azimuth_elevation_mount_6cae286c2723453989eb2a05cdedb038.usda","format":"usda","sizeBytes":50000,"sha256":"89b209547b46996efca7902a922d93ee8c730a82f09d0414960fefbe9e8df20c","url":"https://huggingface.co/datasets/SZFSPC/techidaily-resources/resolve/ba1baf9d89ddf57433d7c47cb461f6d8883067a1/usda/0002/articraft-rec_parabolic_dish_on_azimuth_elevation_mount_6cae286c2723453989eb2a05cdedb038.usda"}],"sand3d":{"datasetRepo":"Sandflow/sand3d-articraft","subcollection":"articraft","totalInDataset":9209,"entryFunction":"compact_ground_dish","nJoints":2,"fScore":1,"program":"import sand3d as s3d\nimport math\n\n\ndef compact_ground_dish():\n    pedestal = pedestal_part()\n    plate = top_plate_part()\n    bracket = elevation_bracket_part()\n    fb = s3d.local(plate, 0, 0, 54)\n    bracket = s3d.at(bracket, on=fb)\n    # The fixed bracket is carried by the azimuth joint; keep its geometry grouped with the plate.\n    moving = s3d.group(\"top_plate_to_bracket\", plate, bracket)\n    fa = s3d.local(pedestal, 0, 0, 335)\n    moving = s3d.at(moving, on=fa)\n    s3d.joint(\"azimuth_axis\", moving, fa, kind=\"continuous\", axis=\"+Z\")\n    fr = s3d.local(moving, 0, 0, 254)\n    reflector = s3d.at(reflector_part(), on=fr)\n    s3d.joint(\n        \"elevation_axis\",\n        reflector,\n        fr,\n        kind=\"revolute\",\n        axis=\"-Y\",\n        range=(-0.20 * 180 / math.pi, 1.10 * 180 / math.pi),\n    )\n    return s3d.assembly(\"compact_ground_dish\", pedestal, moving, reflector)\n\n\ndef pedestal_part():\n    return s3d.group(\n        \"pedestal\",\n        s3d.material(\n            s3d.at(s3d.extrude(\"base_plinth\", s3d.rect(300, 260), 25, both=True), z=12.5),\n            \"plastic\",\n            color=\"#6e737a\",\n        ),\n        s3d.material(\n            s3d.at(s3d.extrude(\"pedestal_box\", s3d.rect(240, 200), 280, both=True), z=165),\n            \"plastic\",\n            color=\"#6e737a\",\n        ),\n        s3d.material(\n            s3d.at(s3d.extrude(\"pedestal_collar\", s3d.circle(180), 30, both=True), z=320),\n            \"steel\",\n            color=\"#4d5259\",\n        ),\n    )\n\n\ndef top_plate_part():\n    return s3d.group(\n        \"top_plate\",\n        s3d.material(\n            s3d.at(s3d.extrude(\"bearing_drum\", s3d.circle(170), 30, both=True), z=16),\n            \"rubber\",\n            color=\"#141719\",\n        ),\n        s3d.material(\n            s3d.at(s3d.extrude(\"rotating_plate\", s3d.circle(220), 14, both=True), z=39),\n            \"steel\",\n            color=\"#4d5259\",\n        ),\n        s3d.material(\n            s3d.at(s3d.extrude(\"center_cap\", s3d.circle(84), 16, both=True), z=47),\n            \"steel\",\n            color=\"#242629\",\n        ),\n    )\n\n\ndef elevation_bracket_part():\n    dark = \"#4d5259\"\n    return s3d.group(\n        \"elevation_bracket\",\n        s3d.material(\n            s3d.at(s3d.extrude(\"bracket_base\", s3d.rect(130, 120), 50, both=True), x=-80, z=25),\n            \"steel\",\n            color=dark,\n        ),\n        s3d.material(\n            s3d.at(s3d.extrude(\"center_mast\", s3d.rect(55, 110), 180, both=True), x=-125, z=140),\n            \"steel\",\n            color=dark,\n        ),\n        s3d.material(\n            s3d.at(s3d.extrude(\"rear_crosshead\", s3d.rect(55, 560), 35, both=True), x=-125, z=200),\n            \"steel\",\n            color=dark,\n        ),\n        s3d.material(\n            s3d.at(\n                s3d.extrude(\"left_yoke_arm\", s3d.rect(160, 50), 80, both=True), x=-60, y=287, z=200\n            ),\n            \"steel\",\n            color=dark,\n        ),\n        s3d.material(\n            s3d.at(\n                s3d.extrude(\"right_yoke_arm\", s3d.rect(160, 50), 80, both=True),\n                x=-60,\n                y=-287,\n                z=200,\n            ),\n            \"steel\",\n            color=dark,\n        ),\n        beam(\"left_brace\", (-95, 0, 50), (-100, 245, 160), 30),\n        beam(\"right_brace\", (-95, 0, 50), (-100, -245, 160), 30),\n    )\n\n\ndef beam(name, a, b, t):\n    dx = b[0] - a[0]\n    dy = b[1] - a[1]\n    dz = b[2] - a[2]\n    length = math.sqrt(dx * dx + dy * dy + dz * dz)\n    mid = ((a[0] + b[0]) / 2, (a[1] + b[1]) / 2, (a[2] + b[2]) / 2)\n    yaw = math.degrees(math.atan2(dy, dx))\n    pitch = math.degrees(math.atan2(-dz, math.hypot(dx, dy)))\n    return s3d.material(\n        s3d.at(\n            s3d.extrude(name, s3d.rect(length, t), t, both=True),\n            x=mid[0],\n            y=mid[1],\n            z=mid[2],\n            ry=pitch,\n            rz=yaw,\n        ),\n        \"steel\",\n        color=\"#242629\",\n    )\n\n\ndef reflector_part():\n    shell = s3d.revolve(\n        \"reflector_shell\",\n        s3d.poly(\n            [\n                (28, -140),\n                (70, -126),\n                (165, -88),\n                (235, -38),\n                (260, 0),\n                (248, -10),\n                (218, -36),\n                (145, -82),\n                (50, -116),\n                (10, -124),\n            ]\n        ),\n    )\n    return s3d.group(\n        \"reflector\",\n        s3d.material(\n            s3d.at(s3d.extrude(\"trunnion_shaft\", s3d.circle(28), 524, both=True), rx=90),\n            \"steel\",\n            color=\"#242629\",\n        ),\n        s3d.material(\n            s3d.at(s3d.extrude(\"hub_barrel\", s3d.circle(110), 120, both=True), x=-10, ry=90),\n            \"steel\",\n            color=\"#4d5259\",\n        ),\n        s3d.material(s3d.at(shell, x=170, ry=90), \"plastic\", color=\"#e0e6eb\"),\n        s3d.material(\n            beam(\"feed_support_arm\", (10, 0, -30), (300, 0, 0), 16), \"steel\", color=\"#242629\"\n        ),\n        s3d.material(\n            s3d.at(s3d.extrude(\"feed_horn\", s3d.circle(44), 60, both=True), x=330, ry=90),\n            \"rubber\",\n            color=\"#141719\",\n        ),\n    )","usdaPath":"usda/0002/articraft-rec_parabolic_dish_on_azimuth_elevation_mount_6cae286c2723453989eb2a05cdedb038.usda","programSha256":"d7908b54c20c4391b651a192c1ccf6f2577c2623513edea18b49d3ba53636785","explorerUrl":"/resources/explorer?oid=articraft-rec_parabolic_dish_on_azimuth_elevation_mount_6cae286c2723453989eb2a05cdedb038","glbUrl":"https://sandflow-sand3d-explorer.hf.space/glb/articraft-rec_parabolic_dish_on_azimuth_elevation_mount_6cae286c2723453989eb2a05cdedb038.glb"},"downloadUrl":"https://huggingface.co/datasets/SZFSPC/techidaily-resources/tree/ba1baf9d89ddf57433d7c47cb461f6d8883067a1/usda/0002","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: 1)."],"requiredNextSteps":["Check materials, scale, performance and required file conversion in your target renderer."]}}