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` - Width: `40 mm`
- Height: `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 ## DIN Rail

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

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

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