mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-05 19:45:54 +00:00
Kernel rig: bodies moved, copied and extracted, designs inserted, occurrences copied, reparented, dragged and exploded land where worked out
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "the body of an arm turned 90 degrees copied to the root",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); hinge driven to 90 puts ArmBox at (0,20,5); its copy in the root stays there: centres (0,0,-5), (0,20,5), (0,20,5): mean (0,13.333,1.667)",
|
||||
"body_count": 3,
|
||||
"volume_mm3": 12000.0,
|
||||
"center_of_mass": [
|
||||
0,
|
||||
13.333333,
|
||||
1.666667
|
||||
]
|
||||
}
|
||||
+127
@@ -0,0 +1,127 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "joint.create",
|
||||
"params": {
|
||||
"type": "revolute",
|
||||
"name": "Hinge",
|
||||
"flip": true,
|
||||
"a": {
|
||||
"occurrence": "Base",
|
||||
"point": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"z": [
|
||||
0,
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
"b": {
|
||||
"occurrence": "Arm",
|
||||
"point": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"z": [
|
||||
0,
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
"quiet": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "joint.drive",
|
||||
"params": {
|
||||
"joint": "Hinge",
|
||||
"quiet": true,
|
||||
"value": 90
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.copy_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "root"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "the arm's body copied into the base's component",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); a copy stays where its body is: Base then holds 4000 at (0,0,-5) and 4000 at (20,0,5): 8000, centre (10,0,0); the world has 3 bodies, 12000",
|
||||
"body_count": 3,
|
||||
"volume_mm3": 12000.0,
|
||||
"results": [
|
||||
{
|
||||
"step": 9,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
10.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"volume_mm3": 8000.0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.copy_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Base:1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "component.extract of a component that is already linked",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5), Arm's box built inside Arm; after one extract Arm is linked; extracting it again is refused",
|
||||
"outcome": "refused",
|
||||
"refusal": "is linked to a design file already"
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.activate",
|
||||
"params": {
|
||||
"component": "root"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.extract",
|
||||
"params": {
|
||||
"component": "Arm",
|
||||
"path": "$OUT/arm.solidcraft"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.extract",
|
||||
"params": {
|
||||
"component": "Arm",
|
||||
"path": "$OUT/arm2.solidcraft"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "component.extract of a component whose body was moved in from the root",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); Arm's body came in by component.move_bodies, a feature outside it: its history can't move to a design of its own, so extract is refused",
|
||||
"outcome": "refused",
|
||||
"refusal": "moves bodies into or out of Arm"
|
||||
}
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.extract",
|
||||
"params": {
|
||||
"component": "Arm",
|
||||
"path": "$OUT/arm.solidcraft"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "an arm built in its component extracted to a design file, then that file inserted again 50 mm along y",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5), Arm's box built inside Arm; extract keeps Arm where it is (now linked to the file: centre (20,0,5)); the file inserted with translate (0,50,0) holds the same 40x10x10 bar: centre (20,50,5)",
|
||||
"body_count": 3,
|
||||
"volume_mm3": 12000.0,
|
||||
"results": [
|
||||
{
|
||||
"step": 8,
|
||||
"json": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 9,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
20.0,
|
||||
0.0,
|
||||
5.0
|
||||
],
|
||||
"volume_mm3": 4000.0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 10,
|
||||
"json": {
|
||||
"name": "Arm copy"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 11,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
20.0,
|
||||
50.0,
|
||||
5.0
|
||||
],
|
||||
"bbox": {
|
||||
"min": [
|
||||
0.0,
|
||||
45.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
40.0,
|
||||
55.0,
|
||||
10.0
|
||||
]
|
||||
},
|
||||
"volume_mm3": 4000.0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.activate",
|
||||
"params": {
|
||||
"component": "root"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.extract",
|
||||
"params": {
|
||||
"component": "Arm",
|
||||
"path": "$OUT/arm.solidcraft"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Arm:1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.insert_design",
|
||||
"params": {
|
||||
"path": "$OUT/arm.solidcraft",
|
||||
"name": "Arm copy",
|
||||
"translate": [
|
||||
0,
|
||||
50,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Arm copy:1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "component.from_bodies on two root bodies",
|
||||
"source": "analytic",
|
||||
"method": "boxes P 10x10x10 from (0,0,0) and Q 20x10x10 from (30,0,0): one component each, named after its body, in place: P:1 (5,5,5), Q:1 (40,5,5)",
|
||||
"body_count": 2,
|
||||
"volume_mm3": 3000.0,
|
||||
"results": [
|
||||
{
|
||||
"step": 4,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
5.0,
|
||||
5.0,
|
||||
5.0
|
||||
],
|
||||
"volume_mm3": 1000.0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 5,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
40.0,
|
||||
5.0,
|
||||
5.0
|
||||
],
|
||||
"volume_mm3": 2000.0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 10,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "P"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
30,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "Q"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.from_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"P",
|
||||
"Q"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "P:1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Q:1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "component.from_bodies naming a body that is not there",
|
||||
"source": "analytic",
|
||||
"method": "a design with one body P: from_bodies of 'Nope' is refused, naming it",
|
||||
"outcome": "refused",
|
||||
"refusal": "Nope"
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 10,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"operation": "new",
|
||||
"body_name": "P"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.from_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"Nope"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "a hand-written design (one 30x20x10 box) inserted 100 mm along x",
|
||||
"source": "analytic",
|
||||
"method": "plate.solidcraft in the case directory: a box 30x20x10 at the origin; inserted with translate (100,0,0): 6000 mm3, box (100,0,0)-(130,20,10), centre (115,10,5)",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 6000.0,
|
||||
"area_mm2": 2200.0,
|
||||
"bbox": {
|
||||
"min": [
|
||||
100,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
130,
|
||||
20,
|
||||
10
|
||||
]
|
||||
},
|
||||
"results": [
|
||||
{
|
||||
"step": 1,
|
||||
"json": {
|
||||
"bodies": [
|
||||
"Plate"
|
||||
],
|
||||
"name": "plate"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 2,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
115.0,
|
||||
10.0,
|
||||
5.0
|
||||
],
|
||||
"bbox": {
|
||||
"min": [
|
||||
100.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
130.0,
|
||||
20.0,
|
||||
10.0
|
||||
]
|
||||
},
|
||||
"volume_mm3": 6000.0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"format": "solidcraft/40",
|
||||
"name": "plate",
|
||||
"units": "mm",
|
||||
"params": [],
|
||||
"next_id": 2,
|
||||
"features": [
|
||||
{"id": 1, "name": "Box1", "type": "box", "suppressed": false, "operation": "new_body", "body_names": ["Plate"],
|
||||
"corner": [0.0, 0.0, 0.0], "length": "30", "width": "20", "height": "10"}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "component.insert_design",
|
||||
"params": {
|
||||
"path": "$CASE/plate.solidcraft",
|
||||
"translate": [
|
||||
100,
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "plate:1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "the hand-written design inserted twice, the second reusing the first's link",
|
||||
"source": "analytic",
|
||||
"method": "plate.solidcraft (box 30x20x10) at (0,0,0) and again with translate (0,50,0): 2 bodies, 12000 mm3, box (0,0,0)-(30,70,10)",
|
||||
"body_count": 2,
|
||||
"volume_mm3": 12000.0,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
30,
|
||||
70,
|
||||
10
|
||||
]
|
||||
},
|
||||
"center_of_mass": [
|
||||
15,
|
||||
35,
|
||||
5
|
||||
]
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"format": "solidcraft/40",
|
||||
"name": "plate",
|
||||
"units": "mm",
|
||||
"params": [],
|
||||
"next_id": 2,
|
||||
"features": [
|
||||
{"id": 1, "name": "Box1", "type": "box", "suppressed": false, "operation": "new_body", "body_names": ["Plate"],
|
||||
"corner": [0.0, 0.0, 0.0], "length": "30", "width": "20", "height": "10"}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "component.insert_design",
|
||||
"params": {
|
||||
"path": "$CASE/plate.solidcraft"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.insert_design",
|
||||
"params": {
|
||||
"path": "$CASE/plate.solidcraft",
|
||||
"reuse": true,
|
||||
"translate": [
|
||||
0,
|
||||
50,
|
||||
0
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "a root body moved into a component placed 100 mm along x",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); Holder (empty) moved by (100,0,0), then a box 10x10x10 from (0,20,0) moved into it: the body keeps its world place, centre (5,25,5)",
|
||||
"body_count": 3,
|
||||
"volume_mm3": 9000.0,
|
||||
"results": [
|
||||
{
|
||||
"step": 12,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
5.0,
|
||||
25.0,
|
||||
5.0
|
||||
],
|
||||
"volume_mm3": 1000.0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Holder",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.move",
|
||||
"params": {
|
||||
"occurrence": "Holder:1",
|
||||
"translate": [
|
||||
100,
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 10,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
20,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "Cube"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"Cube"
|
||||
],
|
||||
"component": "Holder"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Holder:1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "two bodies moved from the root into a component each",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); moving bodies into components keeps them where they are: Arm (20,0,5), Base (0,0,-5), 4000 mm3 each",
|
||||
"body_count": 2,
|
||||
"volume_mm3": 8000.0,
|
||||
"bbox": {
|
||||
"min": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"max": [
|
||||
40,
|
||||
10,
|
||||
10
|
||||
]
|
||||
},
|
||||
"results": [
|
||||
{
|
||||
"step": 8,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
20.0,
|
||||
0.0,
|
||||
5.0
|
||||
],
|
||||
"bbox": {
|
||||
"min": [
|
||||
0.0,
|
||||
-5.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
40.0,
|
||||
5.0,
|
||||
10.0
|
||||
]
|
||||
},
|
||||
"volume_mm3": 4000.0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 9,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
0.0,
|
||||
0.0,
|
||||
-5.0
|
||||
],
|
||||
"bbox": {
|
||||
"min": [
|
||||
-10.0,
|
||||
-10.0,
|
||||
-10.0
|
||||
],
|
||||
"max": [
|
||||
10.0,
|
||||
10.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"volume_mm3": 4000.0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Arm:1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Base:1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "component.paste_new in place of an arm turned 90 degrees, 20 mm up",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); hinge at 90 puts Arm at (0,20,5), box x -5..5, y 0..40; in_place puts the copy where it is in the world, moved (0,0,20): centres (0,0,-5), (0,20,5), (0,20,25): mean (0,13.333,8.333)",
|
||||
"body_count": 3,
|
||||
"volume_mm3": 12000.0,
|
||||
"center_of_mass": [
|
||||
0,
|
||||
13.333333,
|
||||
8.333333
|
||||
],
|
||||
"bbox": {
|
||||
"min": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"max": [
|
||||
10,
|
||||
40,
|
||||
30
|
||||
]
|
||||
}
|
||||
}
|
||||
+131
@@ -0,0 +1,131 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "joint.create",
|
||||
"params": {
|
||||
"type": "revolute",
|
||||
"name": "Hinge",
|
||||
"flip": true,
|
||||
"a": {
|
||||
"occurrence": "Base",
|
||||
"point": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"z": [
|
||||
0,
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
"b": {
|
||||
"occurrence": "Arm",
|
||||
"point": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"z": [
|
||||
0,
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
"quiet": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "joint.drive",
|
||||
"params": {
|
||||
"joint": "Hinge",
|
||||
"quiet": true,
|
||||
"value": 90
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.paste_new",
|
||||
"params": {
|
||||
"component": "Arm",
|
||||
"occurrence": "Arm:1",
|
||||
"in_place": true,
|
||||
"translate": [
|
||||
0,
|
||||
0,
|
||||
20
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "component.paste_new of the arm 30 mm along y",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); an independent copy of Arm moved by (0,30,0): centres (0,0,-5), (20,0,5), (20,30,5), 4000 each: total 12000, centre (13.333,10,1.667), box (-10,-10,-10)-(40,35,10)",
|
||||
"body_count": 3,
|
||||
"volume_mm3": 12000.0,
|
||||
"center_of_mass": [
|
||||
13.333333,
|
||||
10,
|
||||
1.666667
|
||||
],
|
||||
"bbox": {
|
||||
"min": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"max": [
|
||||
40,
|
||||
35,
|
||||
10
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.paste_new",
|
||||
"params": {
|
||||
"component": "Arm",
|
||||
"translate": [
|
||||
0,
|
||||
30,
|
||||
0
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "an automatic exploded view of scale 2",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); each occurrence moves scale \u00d7 (its centre - the mean of the centres): centres (0,0,-5) and (20,0,5), mean (10,0,0): Base by (-20,0,-10), Arm by (20,0,10); shown, Arm at (40,0,15)",
|
||||
"body_count": 2,
|
||||
"volume_mm3": 8000.0,
|
||||
"results": [
|
||||
{
|
||||
"step": 8,
|
||||
"json": {
|
||||
"moves": [
|
||||
{
|
||||
"translate": [
|
||||
-20.0,
|
||||
0.0,
|
||||
-10.0
|
||||
]
|
||||
},
|
||||
{
|
||||
"translate": [
|
||||
20.0,
|
||||
0.0,
|
||||
10.0
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 10,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
40.0,
|
||||
0.0,
|
||||
15.0
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "explode.create",
|
||||
"params": {
|
||||
"name": "Apart",
|
||||
"scale": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "explode.show",
|
||||
"params": {
|
||||
"view": "Apart"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Arm:1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "an exploded view moving the arm 30 mm up, shown",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); explode.show places Arm by (0,0,30): centre (20,0,35)",
|
||||
"body_count": 2,
|
||||
"volume_mm3": 8000.0,
|
||||
"results": [
|
||||
{
|
||||
"step": 8,
|
||||
"json": {
|
||||
"moves": [
|
||||
{
|
||||
"translate": [
|
||||
0.0,
|
||||
0.0,
|
||||
30.0
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 10,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
20.0,
|
||||
0.0,
|
||||
35.0
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "explode.create",
|
||||
"params": {
|
||||
"name": "Up",
|
||||
"moves": [
|
||||
{
|
||||
"occurrence": "Arm:1",
|
||||
"translate": [
|
||||
0,
|
||||
0,
|
||||
30
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "explode.show",
|
||||
"params": {
|
||||
"view": "Up"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Arm:1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "occurrence.copy in place of an arm turned 90 degrees, 20 mm up",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); hinge at 90 puts Arm at (0,20,5); in_place copies where it is in the world, translate in world axes: Arm:2 at (0,20,25)",
|
||||
"body_count": 3,
|
||||
"volume_mm3": 12000.0,
|
||||
"center_of_mass": [
|
||||
0,
|
||||
13.333333,
|
||||
8.333333
|
||||
],
|
||||
"results": [
|
||||
{
|
||||
"step": 11,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
0.0,
|
||||
20.0,
|
||||
25.0
|
||||
],
|
||||
"bbox": {
|
||||
"min": [
|
||||
-5.0,
|
||||
0.0,
|
||||
20.0
|
||||
],
|
||||
"max": [
|
||||
5.0,
|
||||
40.0,
|
||||
30.0
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "joint.create",
|
||||
"params": {
|
||||
"type": "revolute",
|
||||
"name": "Hinge",
|
||||
"flip": true,
|
||||
"a": {
|
||||
"occurrence": "Base",
|
||||
"point": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"z": [
|
||||
0,
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
"b": {
|
||||
"occurrence": "Arm",
|
||||
"point": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"z": [
|
||||
0,
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
"quiet": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "joint.drive",
|
||||
"params": {
|
||||
"joint": "Hinge",
|
||||
"quiet": true,
|
||||
"value": 90
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.copy",
|
||||
"params": {
|
||||
"occurrence": "Arm:1",
|
||||
"in_place": true,
|
||||
"translate": [
|
||||
0,
|
||||
0,
|
||||
20
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Arm:2"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "occurrence.copy of the arm 20 mm up",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); a second placement of Arm moved by (0,0,20): Arm:2 at (20,0,25); totals 12000, centre (13.333,0,8.333)",
|
||||
"body_count": 3,
|
||||
"volume_mm3": 12000.0,
|
||||
"center_of_mass": [
|
||||
13.333333,
|
||||
0,
|
||||
8.333333
|
||||
],
|
||||
"results": [
|
||||
{
|
||||
"step": 9,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
20.0,
|
||||
0.0,
|
||||
25.0
|
||||
],
|
||||
"bbox": {
|
||||
"min": [
|
||||
0.0,
|
||||
-5.0,
|
||||
20.0
|
||||
],
|
||||
"max": [
|
||||
40.0,
|
||||
5.0,
|
||||
30.0
|
||||
]
|
||||
},
|
||||
"volume_mm3": 4000.0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.copy",
|
||||
"params": {
|
||||
"component": "Arm",
|
||||
"translate": [
|
||||
0,
|
||||
0,
|
||||
20
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Arm:2"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "occurrence.drag of the grounded base",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); a grounded part is refused",
|
||||
"outcome": "refused",
|
||||
"refusal": "grounded"
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.drag",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"at": [
|
||||
0,
|
||||
0,
|
||||
-5
|
||||
],
|
||||
"point": [
|
||||
0,
|
||||
10,
|
||||
-5
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "occurrence.drag of the free arm from (20,0,5) to (20,10,5)",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); Arm moves by point - at = (0,10,0): centre (20,10,5), box (0,5,0)-(40,15,10)",
|
||||
"body_count": 2,
|
||||
"volume_mm3": 8000.0,
|
||||
"results": [
|
||||
{
|
||||
"step": 9,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
20.0,
|
||||
10.0,
|
||||
5.0
|
||||
],
|
||||
"bbox": {
|
||||
"min": [
|
||||
0.0,
|
||||
5.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
40.0,
|
||||
15.0,
|
||||
10.0
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.drag",
|
||||
"params": {
|
||||
"occurrence": "Arm:1",
|
||||
"at": [
|
||||
20,
|
||||
0,
|
||||
5
|
||||
],
|
||||
"point": [
|
||||
20,
|
||||
10,
|
||||
5
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Arm:1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "the arm reparented under a component placed 100 mm along x",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); Holder moved by (100,0,0); reparenting keeps Arm's world place: (20,0,5); and back to the root, still (20,0,5)",
|
||||
"body_count": 2,
|
||||
"volume_mm3": 8000.0,
|
||||
"results": [
|
||||
{
|
||||
"step": 11,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
20.0,
|
||||
0.0,
|
||||
5.0
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 13,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
20.0,
|
||||
0.0,
|
||||
5.0
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+120
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Holder",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.move",
|
||||
"params": {
|
||||
"occurrence": "Holder:1",
|
||||
"translate": [
|
||||
100,
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.reparent",
|
||||
"params": {
|
||||
"occurrence": "Arm:1",
|
||||
"parent": "Holder"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Arm:1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.reparent",
|
||||
"params": {
|
||||
"occurrence": "Arm:1",
|
||||
"parent": "root"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Arm:1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"sources": [],
|
||||
"what": "the arm reparented under a component turned 90 degrees about z",
|
||||
"source": "analytic",
|
||||
"method": "Base: box 20x20x10 from (-10,-10,-10), grounded; Arm: box 40x10x10 from (0,-5,0), centre (20,0,5); Holder turned 90 about z through (100,0,0); reparenting keeps Arm's world place: centre (20,0,5), box (0,-5,0)-(40,5,10)",
|
||||
"body_count": 2,
|
||||
"volume_mm3": 8000.0,
|
||||
"results": [
|
||||
{
|
||||
"step": 11,
|
||||
"json": {
|
||||
"total": {
|
||||
"center_of_mass": [
|
||||
20.0,
|
||||
0.0,
|
||||
5.0
|
||||
],
|
||||
"bbox": {
|
||||
"min": [
|
||||
0.0,
|
||||
-5.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
40.0,
|
||||
5.0,
|
||||
10.0
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+113
@@ -0,0 +1,113 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 20,
|
||||
"width": 20,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
-10,
|
||||
-10,
|
||||
-10
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "BaseBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.box",
|
||||
"params": {
|
||||
"length": 40,
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"corner": [
|
||||
0,
|
||||
-5,
|
||||
0
|
||||
],
|
||||
"operation": "new",
|
||||
"body_name": "ArmBox"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Base",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"BaseBox"
|
||||
],
|
||||
"component": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Arm",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.move_bodies",
|
||||
"params": {
|
||||
"bodies": [
|
||||
"ArmBox"
|
||||
],
|
||||
"component": "Arm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.ground",
|
||||
"params": {
|
||||
"occurrence": "Base:1",
|
||||
"grounded": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "component.create",
|
||||
"params": {
|
||||
"name": "Holder",
|
||||
"parent": "root",
|
||||
"activate": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.move",
|
||||
"params": {
|
||||
"occurrence": "Holder:1",
|
||||
"axis": [
|
||||
0,
|
||||
0,
|
||||
1
|
||||
],
|
||||
"angle": "90 deg",
|
||||
"origin": [
|
||||
100,
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.reparent",
|
||||
"params": {
|
||||
"occurrence": "Arm:1",
|
||||
"parent": "Holder"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "occurrence.properties",
|
||||
"params": {
|
||||
"occurrence": "Arm:1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user