fix: simplify wire duct model asset

dev
Zhaowenlong 3 weeks ago
parent a225104a51
commit 711697b5fa

@ -19,7 +19,7 @@ The wire duct is a gray open duct for cabinet routing:
- Width: `40 mm`
- Height: `40 mm`
It includes a base plate, two side walls, comb-style side slots, and mounting hole markers.
It is generated as one FreeCAD tree object, `WireDuct_Body`, with the comb-style side slots and mounting holes cut into the body.
## DIN Rail

@ -113,60 +113,60 @@ def _create_wire_duct():
y0 = -width / 2.0
light_gray = (0.72, 0.74, 0.74)
dark_gray = (0.18, 0.2, 0.22)
objects = [
_box(doc, "WireDuct_BasePlate", length, width, wall, x0, y0, 0.0, light_gray),
_box(doc, "WireDuct_LeftWall", length, wall, height, x0, y0, 0.0, light_gray),
_box(doc, "WireDuct_RightWall", length, wall, height, x0, width / 2.0 - wall, 0.0, light_gray),
]
base = Part.makeBox(length, width, wall, App.Vector(x0, y0, 0.0))
left_wall = Part.makeBox(length, wall, height, App.Vector(x0, y0, 0.0))
right_wall = Part.makeBox(length, wall, height, App.Vector(x0, width / 2.0 - wall, 0.0))
body = base.fuse(left_wall).fuse(right_wall)
slot_count = 18
slot_pitch = length / slot_count
finger_width = slot_pitch * 0.45
for index in range(slot_count):
center_x = x0 + slot_pitch * (index + 0.5)
objects.append(
_box(
doc,
"WireDuct_LeftCombSlot_{0:02d}".format(index + 1),
body = body.cut(
Part.makeBox(
finger_width,
wall + 0.2,
wall + 0.4,
height - 8.0,
center_x - finger_width / 2.0,
y0 - 0.1,
8.0,
dark_gray,
App.Vector(center_x - finger_width / 2.0, y0 - 0.2, 8.0),
)
)
objects.append(
_box(
doc,
"WireDuct_RightCombSlot_{0:02d}".format(index + 1),
body = body.cut(
Part.makeBox(
finger_width,
wall + 0.2,
wall + 0.4,
height - 8.0,
center_x - finger_width / 2.0,
width / 2.0 - wall - 0.1,
8.0,
dark_gray,
App.Vector(center_x - finger_width / 2.0, width / 2.0 - wall - 0.2, 8.0),
)
)
for center_x in (-60.0, 0.0, 60.0):
objects.append(_cylinder_z(doc, "WireDuct_MountHole_{0:g}".format(center_x), 2.2, wall + 0.2, center_x, 0.0, 0.0, dark_gray))
body = body.cut(
Part.makeCylinder(
2.2,
wall + 0.4,
App.Vector(center_x, 0.0, -0.2),
App.Vector(0, 0, 1),
)
)
body_obj = doc.addObject("Part::Feature", "WireDuct_Body")
body_obj.Shape = body
_style(body_obj, light_gray, 0)
doc.recompute()
fcstd = OUT_DIR / "qet_wire_duct.FCStd"
step = OUT_DIR / "qet_wire_duct.step"
doc.saveAs(str(fcstd))
_export_step(objects, step)
_export_step([body_obj], step)
return {
"name": "wire_duct",
"fcstd": str(fcstd),
"step": str(step),
"dimensions_mm": {"length": length, "width": width, "height": height},
"objects": [obj.Name for obj in objects],
"objects": [body_obj.Name],
"object_count": 1,
}

@ -10,49 +10,9 @@
"height": 40.0
},
"objects": [
"WireDuct_BasePlate",
"WireDuct_LeftWall",
"WireDuct_RightWall",
"WireDuct_LeftCombSlot_01",
"WireDuct_RightCombSlot_01",
"WireDuct_LeftCombSlot_02",
"WireDuct_RightCombSlot_02",
"WireDuct_LeftCombSlot_03",
"WireDuct_RightCombSlot_03",
"WireDuct_LeftCombSlot_04",
"WireDuct_RightCombSlot_04",
"WireDuct_LeftCombSlot_05",
"WireDuct_RightCombSlot_05",
"WireDuct_LeftCombSlot_06",
"WireDuct_RightCombSlot_06",
"WireDuct_LeftCombSlot_07",
"WireDuct_RightCombSlot_07",
"WireDuct_LeftCombSlot_08",
"WireDuct_RightCombSlot_08",
"WireDuct_LeftCombSlot_09",
"WireDuct_RightCombSlot_09",
"WireDuct_LeftCombSlot_10",
"WireDuct_RightCombSlot_10",
"WireDuct_LeftCombSlot_11",
"WireDuct_RightCombSlot_11",
"WireDuct_LeftCombSlot_12",
"WireDuct_RightCombSlot_12",
"WireDuct_LeftCombSlot_13",
"WireDuct_RightCombSlot_13",
"WireDuct_LeftCombSlot_14",
"WireDuct_RightCombSlot_14",
"WireDuct_LeftCombSlot_15",
"WireDuct_RightCombSlot_15",
"WireDuct_LeftCombSlot_16",
"WireDuct_RightCombSlot_16",
"WireDuct_LeftCombSlot_17",
"WireDuct_RightCombSlot_17",
"WireDuct_LeftCombSlot_18",
"WireDuct_RightCombSlot_18",
"WireDuct_MountHole__60",
"WireDuct_MountHole_0",
"WireDuct_MountHole_60"
]
"WireDuct_Body"
],
"object_count": 1
},
{
"name": "din_rail",

@ -1,7 +1,7 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
FILE_NAME('Open CASCADE Shape Model','2026-05-26T19:26:07',(''),(''),
FILE_NAME('Open CASCADE Shape Model','2026-05-31T14:15:58',(''),(''),
'Open CASCADE STEP processor 7.8','FreeCAD','Unknown');
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
ENDSEC;
@ -247,8 +247,8 @@ SHAPE_REPRESENTATION_RELATIONSHIP() );
#226 = ITEM_DEFINED_TRANSFORMATION('','',#11,#15);
#227 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#228
);
#228 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('43','DINRail_CenterTop','',#5,#63
,$);
#228 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('1','DINRail_CenterTop','',#5,#63,
$);
#229 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#65));
#230 = SHAPE_DEFINITION_REPRESENTATION(#231,#237);
#231 = PRODUCT_DEFINITION_SHAPE('','',#232);
@ -424,8 +424,8 @@ SHAPE_REPRESENTATION_RELATIONSHIP() );
#395 = ITEM_DEFINED_TRANSFORMATION('','',#11,#19);
#396 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#397
);
#397 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('44','DINRail_LeftWeb','',#5,#232,
$);
#397 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('2','DINRail_LeftWeb','',#5,#232,$
);
#398 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#234));
#399 = SHAPE_DEFINITION_REPRESENTATION(#400,#406);
#400 = PRODUCT_DEFINITION_SHAPE('','',#401);
@ -601,8 +601,8 @@ SHAPE_REPRESENTATION_RELATIONSHIP() );
#564 = ITEM_DEFINED_TRANSFORMATION('','',#11,#23);
#565 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#566
);
#566 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('45','DINRail_RightWeb','',#5,#401
,$);
#566 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('3','DINRail_RightWeb','',#5,#401,
$);
#567 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#403));
#568 = SHAPE_DEFINITION_REPRESENTATION(#569,#575);
#569 = PRODUCT_DEFINITION_SHAPE('','',#570);
@ -778,7 +778,7 @@ SHAPE_REPRESENTATION_RELATIONSHIP() );
#733 = ITEM_DEFINED_TRANSFORMATION('','',#11,#27);
#734 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#735
);
#735 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('46','DINRail_LeftFlange','',#5,
#735 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('4','DINRail_LeftFlange','',#5,
#570,$);
#736 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#572));
#737 = SHAPE_DEFINITION_REPRESENTATION(#738,#744);
@ -955,7 +955,7 @@ SHAPE_REPRESENTATION_RELATIONSHIP() );
#902 = ITEM_DEFINED_TRANSFORMATION('','',#11,#31);
#903 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#904
);
#904 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('47','DINRail_RightFlange','',#5,
#904 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('5','DINRail_RightFlange','',#5,
#739,$);
#905 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#741));
#906 = SHAPE_DEFINITION_REPRESENTATION(#907,#913);
@ -1133,8 +1133,8 @@ SHAPE_REPRESENTATION_RELATIONSHIP() );
#1071 = ITEM_DEFINED_TRANSFORMATION('','',#11,#35);
#1072 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',
#1073);
#1073 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('48','DINRail_LeftReturnLip','',
#5,#908,$);
#1073 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('6','DINRail_LeftReturnLip','',#5
,#908,$);
#1074 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#910));
#1075 = SHAPE_DEFINITION_REPRESENTATION(#1076,#1082);
#1076 = PRODUCT_DEFINITION_SHAPE('','',#1077);
@ -1311,7 +1311,7 @@ SHAPE_REPRESENTATION_RELATIONSHIP() );
#1240 = ITEM_DEFINED_TRANSFORMATION('','',#11,#39);
#1241 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',
#1242);
#1242 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('49','DINRail_RightReturnLip','',
#1242 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('7','DINRail_RightReturnLip','',
#5,#1077,$);
#1243 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1079));
#1244 = SHAPE_DEFINITION_REPRESENTATION(#1245,#1251);
@ -1673,8 +1673,8 @@ SHAPE_REPRESENTATION_RELATIONSHIP() );
#1592 = ITEM_DEFINED_TRANSFORMATION('','',#11,#43);
#1593 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',
#1594);
#1594 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('50','DINRail_MountSlot__60','',
#5,#1246,$);
#1594 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('8','DINRail_MountSlot__60','',#5
,#1246,$);
#1595 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1248));
#1596 = SHAPE_DEFINITION_REPRESENTATION(#1597,#1603);
#1597 = PRODUCT_DEFINITION_SHAPE('','',#1598);
@ -2034,7 +2034,7 @@ SHAPE_REPRESENTATION_RELATIONSHIP() );
#1944 = ITEM_DEFINED_TRANSFORMATION('','',#11,#47);
#1945 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',
#1946);
#1946 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('51','DINRail_MountSlot_0','',#5,
#1946 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('9','DINRail_MountSlot_0','',#5,
#1598,$);
#1947 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1600));
#1948 = SHAPE_DEFINITION_REPRESENTATION(#1949,#1955);
@ -2396,7 +2396,7 @@ SHAPE_REPRESENTATION_RELATIONSHIP() );
#2296 = ITEM_DEFINED_TRANSFORMATION('','',#11,#51);
#2297 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',
#2298);
#2298 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('52','DINRail_MountSlot_60','',#5
#2298 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('10','DINRail_MountSlot_60','',#5
,#1950,$);
#2299 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1952));
ENDSEC;

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save