1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30import io
31import math
32
33import manufacturingtoolkit.CadExMTK as mtk
34
35import MTKConverter_PartProcessor as part_proc
36import MTKConverter_MachiningProcessor as mach_proc
37import MTKConverter_MoldingProcessor as mold_proc
38import MTKConverter_SheetMetalProcessor as sm_proc
39import MTKConverter_WallThicknessProcessor as wt_proc
40
41class Pair:
42 def __init__(self, theFirst: float, theSecond: float):
43 self.First = theFirst
44 self.Second = theSecond
45
46 def __repr__(self):
47 return f"Pair({self.First}, {self.Second})"
48
49 def __str__(self):
50 return f"{self.First:.2f} x {self.Second:.2f}"
51
52class Dimension:
53 def __init__(self, theX: float, theY: float, theZ: float):
54 self.X = theX
55 self.Y = theY
56 self.Z = theZ
57
58 def __repr__(self):
59 return f"Dimension({self.X}, {self.Y}, {self.Z})"
60
61 def __str__(self):
62 return f"{self.X:.2f} x {self.Y:.2f} x {self.Z:.2f}"
63
64class Direction:
65 def __init__(self, theX: float, theY: float, theZ: float):
66 self.X = theX
67 self.Y = theY
68 self.Z = theZ
69
70 def __repr__(self):
71 return f"Direction({self.X}, {self.Y}, {self.Z})"
72
73 def __str__(self):
74 return f"({self.X:.2f}, {self.Y:.2f}, {self.Z:.2f})"
75
76class Point:
77 def __init__(self, theX: float, theY: float, theZ: float):
78 self.X = theX
79 self.Y = theY
80 self.Z = theZ
81
82 def __repr__(self):
83 return f"Point({self.X}, {self.Y}, {self.Z})"
84
85 def __str__(self):
86 return f"({self.X:.2f}, {self.Y:.2f}, {self.Z:.2f})"
87
88class JSONWriter:
89 def __init__(self, theFile: io.TextIOBase, theStartNestingLevel = 0):
90 self.__myStream = theFile
91 self.__myNestingLevel = theStartNestingLevel
92 self.__myPrevNestingLevel = theStartNestingLevel - 1
93 self.__myIsInit = False
94
95 def OpenSection(self, theName = ""):
96 self.__DoOpenSection (theName, '{')
97
98 def OpenArraySection (self, theName: str):
99 self.__DoOpenSection(theName, '[')
100
101 def CloseSection(self):
102 self.__DoCloseSection('}')
103
104 def CloseArraySection(self):
105 self.__DoCloseSection(']')
106
107 def WriteData(self, theParamName: str, theValue):
108 aValueStr = str(theValue)
109 if type(theValue) is float:
110 aValueStr = f"{theValue:.2f}"
111 self.__Stream().write("\"" + theParamName + "\": \"" + aValueStr + "\"")
112
113 def WriteRawData(self, theRawData: str):
114 self.__PrepareStream()
115 self.__myStream.write(theRawData)
116
117 def WriteEmptyArray (self, theParamName: str):
118 self.__Stream().write("\"" + theParamName + "\": []")
119
120 def NestingLevel(self):
121 return self.__myNestingLevel
122
123 def __DoOpenSection(self, theName: str, theOpenBracketSymbol: str):
124 aStream = self.__Stream()
125 if theName:
126 aStream.write("\"" + theName + "\": ")
127 aStream.write(theOpenBracketSymbol)
128 self.__myNestingLevel += 1
129
130 def __DoCloseSection (self, theCloseBracketSymbol: str):
131 self.__myNestingLevel -= 1
132 self.__Stream().write(theCloseBracketSymbol)
133
134 def __PrepareStream(self):
135 if self.__myNestingLevel == self.__myPrevNestingLevel:
136 self.__myStream.write(",")
137 self.__myPrevNestingLevel = self.__myNestingLevel
138 if self.__myIsInit:
139 self.__myStream.write('\n')
140 self.__myIsInit = True
141
142 def __Stream(self):
143 self.__PrepareStream()
144 for i in range(self.__myNestingLevel):
145 self.__myStream.write(" ")
146 return self.__myStream
147
148class FeatureGroupManager:
149 def __init__(self):
150 self.__myGroups = []
151
152 def AddGroupData (self,
153 theGroupName: str,
154 theGroupColor: str,
155 theFeatureData: str,
156 theFeatureNb: int):
157
158 aRes = -1
159 for i in range(len(self.__myGroups)):
160 aGroup = self.__myGroups[i]
161 if aGroup.myName == theGroupName:
162 aRes = i
163 break
164
165 if aRes == -1:
166 self.__myGroups.append(self.FeatureGroup(theGroupName, theGroupColor))
167 aRes = len(self.__myGroups) - 1
168
169
170 aGroup = self.__myGroups[aRes]
171 aGroup.myFeatureData.append(theFeatureData)
172 aGroup.myFeatureCount += theFeatureNb
173
174 def TotalFeatureCount(self):
175 aTotalFeatureCount = 0
176 for aGroup in self.__myGroups:
177 aTotalFeatureCount += aGroup.myFeatureCount
178 return aTotalFeatureCount
179
180 def Write(self, theWriter: JSONWriter):
181 for aGroup in self.__myGroups:
182 theWriter.OpenSection()
183 theWriter.WriteData("name", aGroup.myName)
184 theWriter.WriteData("color", aGroup.myColor)
185 theWriter.WriteData("totalGroupFeatureCount", aGroup.myFeatureCount)
186
187 aFeatureData = aGroup.myFeatureData
188 if aFeatureData:
189 aHasParams = "parameters" in aFeatureData[0]
190 if aHasParams:
191 theWriter.WriteData ("subGroupCount", len(aFeatureData))
192 theWriter.OpenArraySection ("subGroups")
193 for j in aFeatureData:
194 theWriter.WriteRawData(j)
195 theWriter.CloseArraySection()
196 else:
197 theWriter.OpenArraySection("features")
198 for j in aFeatureData:
199 theWriter.WriteRawData(j)
200 theWriter.CloseArraySection()
201
202 theWriter.CloseSection()
203
204 class FeatureGroup:
205 def __init__(self, theName: str, theColor: str):
206 self.myName = theName
207 self.myColor = theColor
208 self.myFeatureData = []
209 self.myFeatureCount = 0
210
211class OrderedFeatureList:
212 def __init__(self):
213 self.__myList = []
214
215 def Append(self, theFeature: mtk.MTKBase_Feature, theShapeIDs):
216 anInsertIndex = 0
217 for i in self.__myList:
218 aRes = OrderedFeatureList.__CompareFeatures(theFeature, i.Feature)
219 if aRes == 0:
220 i.Count += 1
221 i.ShapeIDs.append(theShapeIDs)
222 anInsertIndex = -1
223 break
224 elif aRes < 0:
225 break
226
227 anInsertIndex += 1
228
229 if anInsertIndex >= 0:
230 self.__myList.insert(anInsertIndex, self.FeatureData(theFeature, theShapeIDs))
231
232 def Size(self):
233 return len(self.__myList)
234
235 def GetFeature(self, theIndex: int):
236 return self.__GetFeatureData(theIndex).Feature
237
238 def GetFeatureCount(self, theIndex: int):
239 return self.__GetFeatureData(theIndex).Count
240
241 def GetFeatureShapeIDs(self, theIndex: int):
242 return self.__GetFeatureData(theIndex).ShapeIDs
243
244 def __GetFeatureData(self, theIndex: int):
245 return self.__myList[theIndex]
246
247 @staticmethod
248 def __CompareFeatures(theA: mtk.MTKBase_Feature, theB: mtk.MTKBase_Feature):
249 aComparator = mtk.MTKBase_FeatureComparator()
250 anALessThanB = aComparator(theA, theB)
251 if anALessThanB:
252 return -1
253
254 aBLessThanA = aComparator(theB, theA)
255 if aBLessThanA:
256 return 1
257
258 return 0
259
260 class FeatureData:
261 def __init__(self, theFeature: mtk.MTKBase_Feature, theShapeIDs):
262 self.Feature = theFeature
263 self.Count = 1
264 self.ShapeIDs = []
265 self.ShapeIDs.append(theShapeIDs)
266
267class MTKConverter_Report:
268 def __init__(self):
269 self.__myData = []
270
271 def AddData(self, theData: part_proc.MTKConverter_ProcessData):
272 self.__myData.append(theData)
273
274 def WriteToJSON(self, thePath: str):
275 aFile = open(thePath, "w", encoding="utf-8")
276 if not aFile:
277 return False
278
279 aWriter = JSONWriter(aFile)
280 aWriter.OpenSection()
281 aWriter.WriteData("version", "1")
282
283 if not self.__myData:
284 aWriter.WriteData("error", "The model doesn't contain any parts.")
285 else:
286 aWriter.OpenArraySection("parts")
287 for aProcessData in self.__myData:
288 aWriter.OpenSection()
289 MTKConverter_Report.__WritePartProcessData(aWriter, aProcessData)
290 aWriter.CloseSection()
291 aWriter.CloseArraySection()
292 aWriter.CloseSection()
293
294 aFile.close()
295 return True
296
297 @staticmethod
298 def __WriteParameter(theWriter: JSONWriter, theParamName: str, theParamUnits: str, theParamValue):
299 theWriter.OpenSection()
300 theWriter.WriteData("name", theParamName)
301 theWriter.WriteData("units", theParamUnits)
302 theWriter.WriteData("value", theParamValue)
303 theWriter.CloseSection()
304
305 @staticmethod
306 def __WriteShapeIDs(theWriter: JSONWriter, theVector, theWriteFeatureSection: bool):
307 if not theVector:
308 return
309
310 if theWriteFeatureSection:
311 theWriter.OpenArraySection("features")
312
313 for aShapeIDVector in theVector:
314 theWriter.OpenSection()
315 theWriter.WriteData("shapeIDCount", len(aShapeIDVector))
316 if not aShapeIDVector:
317 theWriter.WriteEmptyArray("shapeIDs")
318 else:
319 theWriter.OpenArraySection("shapeIDs")
320 for aShapeID in aShapeIDVector:
321 theWriter.OpenSection()
322 theWriter.WriteData("id", aShapeID)
323 theWriter.CloseSection()
324 theWriter.CloseArraySection()
325 theWriter.CloseSection()
326
327 if theWriteFeatureSection:
328 theWriter.CloseArraySection()
329
330 @staticmethod
331 def __DoWriteFeatureDataToString (theFunc, theParamCount: int, theVector):
332 aStream = io.StringIO()
333 aWriter = JSONWriter(aStream, 7)
334
335 aWriter.OpenSection()
336 aWriter.WriteData("parametersCount", theParamCount)
337 aWriter.OpenArraySection("parameters")
338 theFunc(aWriter)
339 aWriter.CloseArraySection()
340 MTKConverter_Report.__WriteShapeIDs(aWriter, theVector, True)
341 aWriter.CloseSection()
342
343 aRes = aStream.getvalue()
344 aStream.close()
345 return aRes
346
347 @staticmethod
348 def __WriteFeatureDataToString0(theVector):
349 aStream = io.StringIO()
350 aWriter = JSONWriter(aStream, 6)
351
352 MTKConverter_Report.__WriteShapeIDs(aWriter, theVector, False)
353
354 aRes = aStream.getvalue()
355 aStream.close()
356 return aRes
357
358 @staticmethod
359 def __WriteFeatureDataToString1(theParamName: str, theParamUnits: str, theParamValue, theVector):
360 def WriteParams (theWriter: JSONWriter):
361 MTKConverter_Report.__WriteParameter(theWriter, theParamName, theParamUnits, theParamValue)
362 return MTKConverter_Report.__DoWriteFeatureDataToString(WriteParams, 1, theVector)
363
364 @staticmethod
365 def __WriteFeatureDataToString2(theParamName1: str, theParamUnits1: str, theParamValue1,
366 theParamName2: str, theParamUnits2: str, theParamValue2,
367 theVector):
368 def WriteParams (theWriter: JSONWriter):
369 MTKConverter_Report.__WriteParameter(theWriter, theParamName1, theParamUnits1, theParamValue1)
370 MTKConverter_Report.__WriteParameter(theWriter, theParamName2, theParamUnits2, theParamValue2)
371 return MTKConverter_Report.__DoWriteFeatureDataToString (WriteParams, 2, theVector)
372
373 @staticmethod
374 def __WriteFeatureDataToString3(theParamName1: str, theParamUnits1: str, theParamValue1,
375 theParamName2: str, theParamUnits2: str, theParamValue2,
376 theParamName3: str, theParamUnits3: str, theParamValue3,
377 theVector):
378 def WriteParams (theWriter: JSONWriter):
379 MTKConverter_Report.__WriteParameter(theWriter, theParamName1, theParamUnits1, theParamValue1)
380 MTKConverter_Report.__WriteParameter(theWriter, theParamName2, theParamUnits2, theParamValue2)
381 MTKConverter_Report.__WriteParameter(theWriter, theParamName3, theParamUnits3, theParamValue3)
382 return MTKConverter_Report.__DoWriteFeatureDataToString (WriteParams, 3, theVector)
383
384 @staticmethod
385 def __WriteFeatureDataToString4(theParamName1: str, theParamUnits1: str, theParamValue1,
386 theParamName2: str, theParamUnits2: str, theParamValue2,
387 theParamName3: str, theParamUnits3: str, theParamValue3,
388 theParamName4: str, theParamUnits4: str, theParamValue4,
389 theVector):
390 def WriteParams (theWriter: JSONWriter):
391 MTKConverter_Report.__WriteParameter(theWriter, theParamName1, theParamUnits1, theParamValue1)
392 MTKConverter_Report.__WriteParameter(theWriter, theParamName2, theParamUnits2, theParamValue2)
393 MTKConverter_Report.__WriteParameter(theWriter, theParamName3, theParamUnits3, theParamValue3)
394 MTKConverter_Report.__WriteParameter(theWriter, theParamName4, theParamUnits4, theParamValue4)
395 return MTKConverter_Report.__DoWriteFeatureDataToString (WriteParams, 4, theVector)
396
397 @staticmethod
398 def __WriteFeatureDataToString6(theParamName1: str, theParamUnits1: str, theParamValue1,
399 theParamName2: str, theParamUnits2: str, theParamValue2,
400 theParamName3: str, theParamUnits3: str, theParamValue3,
401 theParamName4: str, theParamUnits4: str, theParamValue4,
402 theParamName5: str, theParamUnits5: str, theParamValue5,
403 theParamName6: str, theParamUnits6: str, theParamValue6,
404 theVector):
405 def WriteParams (theWriter: JSONWriter):
406 MTKConverter_Report.__WriteParameter(theWriter, theParamName1, theParamUnits1, theParamValue1)
407 MTKConverter_Report.__WriteParameter(theWriter, theParamName2, theParamUnits2, theParamValue2)
408 MTKConverter_Report.__WriteParameter(theWriter, theParamName3, theParamUnits3, theParamValue3)
409 MTKConverter_Report.__WriteParameter(theWriter, theParamName4, theParamUnits4, theParamValue4)
410 MTKConverter_Report.__WriteParameter(theWriter, theParamName5, theParamUnits5, theParamValue5)
411 MTKConverter_Report.__WriteParameter(theWriter, theParamName6, theParamUnits6, theParamValue6)
412 return MTKConverter_Report.__DoWriteFeatureDataToString (WriteParams, 6, theVector)
413
414 @staticmethod
415 def __MachiningFaceTypeToString(theType):
416 aFaceTypeMap = {
417 mtk.Machining_FT_FlatFaceMilled: "Flat Face Milled Face(s)",
418 mtk.Machining_FT_FlatSideMilled: "Flat Side Milled Face(s)",
419 mtk.Machining_FT_CurvedMilled: "Curved Milled Face(s)",
420 mtk.Machining_FT_CircularMilled: "Circular Milled Face(s)",
421 mtk.Machining_FT_ConvexProfileEdgeMilling: "Convex Profile Edge Milling Face(s)",
422 mtk.Machining_FT_ConcaveFilletEdgeMilling: "Concave Fillet Edge Milling Face(s)",
423 mtk.Machining_FT_FlatMilled: "Flat Milled Face(s)",
424 mtk.Machining_FT_TurnDiameter: "Turn Diameter Face(s)",
425 mtk.Machining_FT_TurnForm: "Turn Form Face(s)",
426 mtk.Machining_FT_TurnFace: "Turn Face Face(s)",
427 }
428
429 if theType in aFaceTypeMap:
430 return aFaceTypeMap[theType]
431 else:
432 return "Face(s)"
433
434 @staticmethod
435 def __MachiningFaceColor(theType):
436 aFaceTypeMap = {
437 mtk.Machining_FT_FlatFaceMilled: "(115, 251, 253)",
438 mtk.Machining_FT_FlatSideMilled: "(0, 35, 245)",
439 mtk.Machining_FT_CurvedMilled: "(22, 65, 124)",
440 mtk.Machining_FT_CircularMilled: "(255, 254, 145)",
441 mtk.Machining_FT_ConvexProfileEdgeMilling: "(240, 155, 89)",
442 mtk.Machining_FT_ConcaveFilletEdgeMilling: "(129, 127, 38)",
443 mtk.Machining_FT_FlatMilled: "(115, 43, 245)",
444 mtk.Machining_FT_TurnDiameter: "(88, 19, 94)",
445 mtk.Machining_FT_TurnForm: "(161, 251, 142)",
446 mtk.Machining_FT_TurnFace: "(239, 136, 190)",
447 }
448
449 if theType in aFaceTypeMap:
450 return aFaceTypeMap[theType]
451 else:
452 return "(0, 0, 0)"
453
454 @staticmethod
455 def __MachiningHoleTypeToString(theType):
456 aHoleTypeMap = {
457 mtk.Machining_HT_Through: "Through Hole(s)",
458 mtk.Machining_HT_FlatBottom: "Flat Bottom Hole(s)",
459 mtk.Machining_HT_Blind: "Blind Hole(s)",
460 mtk.Machining_HT_Partial: "Partial Hole(s)"
461 }
462
463 if theType in aHoleTypeMap:
464 return aHoleTypeMap[theType]
465 else:
466 return "Hole(s)"
467
468 @staticmethod
469 def __MachiningHoleColor(theType):
470 aHoleTypeMap = {
471 mtk.Machining_HT_Through: "(240, 135, 132)",
472 mtk.Machining_HT_FlatBottom: "(235, 51, 36)",
473 mtk.Machining_HT_Blind: "(142, 64, 58)",
474 mtk.Machining_HT_Partial: "(58, 6, 3)"
475 }
476
477 if theType in aHoleTypeMap:
478 return aHoleTypeMap[theType]
479 else:
480 return "(0, 0, 0)"
481
482 @staticmethod
483 def __MachiningThreadedHoleColor(theType):
484 aHoleTypeMap = {
485 mtk.Machining_HT_Through: "(35, 160, 207)",
486 mtk.Machining_HT_FlatBottom: "(35, 76, 111)",
487 mtk.Machining_HT_Blind: "(192, 89, 133)",
488 mtk.Machining_HT_Partial: "(108, 31, 78)"
489 }
490
491 if theType in aHoleTypeMap:
492 return aHoleTypeMap[theType]
493 else:
494 return "(0, 0, 0)"
495
496 @staticmethod
497 def __MachiningPocketTypeToString(theType):
498 aPocketTypeMap = {
499 mtk.Machining_PT_Closed: "Closed Pocket(s)",
500 mtk.Machining_PT_Open: "Open Pocket(s)",
501 mtk.Machining_PT_Through: "Through Pocket(s)"
502 }
503
504 if theType in aPocketTypeMap:
505 return aPocketTypeMap[theType]
506 else:
507 return "Pocket(s)"
508
509 @staticmethod
510 def __MachiningPocketColor(theType):
511 aPocketTypeMap = {
512 mtk.Machining_PT_Closed: "(81, 20, 0)",
513 mtk.Machining_PT_Open: "(189, 103, 37)",
514 mtk.Machining_PT_Through: "(255, 217, 188)"
515 }
516
517 if theType in aPocketTypeMap:
518 return aPocketTypeMap[theType]
519 else:
520 return "(0, 0, 0)"
521
522 @staticmethod
523 def __HemTypeToString(theType):
524 aHemTypeMap = {
525 mtk.SheetMetal_HBT_Flattened: "Flattened Hem Bend(s)",
526 mtk.SheetMetal_HBT_Open: "Open Hem Bend(s)",
527 mtk.SheetMetal_HBT_Teardrop: "Teardrop Hem Bend(s)",
528 mtk.SheetMetal_HBT_Rope: "Rope Hem Bend(s)",
529 mtk.SheetMetal_HBT_Rolled: "Rolled Hem Bend(s)"
530 }
531
532 if theType in aHemTypeMap:
533 return aHemTypeMap[theType]
534 else:
535 return "Hem Bend(s)"
536
537 @staticmethod
538 def __MachiningTurningGrooveTypeToString(theType):
539 aTurningGrooveTypeMap = {
540 mtk.Machining_TGT_OuterDiameter: "Outer Diameter Groove(s)",
541 mtk.Machining_TGT_InnerDiameter: "Inner Diameter Groove(s)",
542 mtk.Machining_TGT_EndFace: "End Face Groove(s)"
543 }
544
545 if theType in aTurningGrooveTypeMap:
546 return aTurningGrooveTypeMap[theType]
547 else:
548 return "Turning Groove(s)"
549
550 @staticmethod
551 def __MachiningTurningGrooveColor(theType):
552 aTurningGrooveTypeMap = {
553 mtk.Machining_TGT_OuterDiameter: "(175, 49, 37)",
554 mtk.Machining_TGT_InnerDiameter: "(234, 255, 53)",
555 mtk.Machining_TGT_EndFace: "(144, 66, 159)"
556 }
557
558 if theType in aTurningGrooveTypeMap:
559 return aTurningGrooveTypeMap[theType]
560 else:
561 return "(0, 0, 0)"
562
563 @staticmethod
564 def __BendName(theBend: mtk.SheetMetal_Bend):
565 if mtk.SheetMetal_HemBend.CompareType(theBend):
566 aHemBend = mtk.SheetMetal_HemBend.Cast(theBend)
567 return MTKConverter_Report.__HemTypeToString(aHemBend.Type())
568 elif mtk.SheetMetal_CurvedBend.CompareType(theBend):
569 return "Curved Bend(s)"
570 return "Bend(s)"
571
572 @staticmethod
573 def __BendColor(theBend: mtk.SheetMetal_Bend):
574 if mtk.SheetMetal_HemBend.CompareType(theBend):
575 aHemBend = mtk.SheetMetal_HemBend.Cast(theBend)
576 aType = aHemBend.Type()
577
578 aHemTypeMap = {
579 mtk.SheetMetal_HBT_Flattened: "(22, 65, 124)",
580 mtk.SheetMetal_HBT_Open: "(42, 85, 144)",
581 mtk.SheetMetal_HBT_Teardrop: "(62, 105, 164)",
582 mtk.SheetMetal_HBT_Rope: "(82, 125, 184)",
583 mtk.SheetMetal_HBT_Rolled: "(102, 145, 204)"
584 }
585
586 if aType in aHemTypeMap:
587 return aHemTypeMap[aType]
588 else:
589 return "(0, 0, 0)"
590 elif mtk.SheetMetal_CurvedBend.CompareType(theBend):
591 return "(255, 254, 145)"
592 return "(0, 35, 245)"
593
594 @staticmethod
595 def __SheetMetalHoleName(theHole: mtk.SheetMetal_Hole):
596 if mtk.SheetMetal_ComplexHole.CompareType(theHole):
597 return "Complex Hole(s)"
598 return "Hole(s)"
599
600 @staticmethod
601 def __SheetMetalHoleColor(theHole: mtk.SheetMetal_Hole):
602 if mtk.SheetMetal_ComplexHole.CompareType(theHole):
603 return "(115, 43, 245)"
604 return "(129, 127, 38)"
605
606 @staticmethod
607 def __SmallDistanceIssueName(theIssue: mtk.DFMSheetMetal_SmallDistanceBetweenFeaturesIssue):
608 if mtk.DFMSheetMetal_SmallDistanceBetweenBendAndLouverIssue.CompareType(theIssue):
609 return "Small Distance Between Bend And Louver Issue(s)"
610 elif mtk.DFMSheetMetal_SmallDistanceBetweenExtrudedHoleAndBendIssue.CompareType(theIssue):
611 return "Small Distance Between Extruded Hole And Bend Issue(s)"
612 elif mtk.DFMSheetMetal_SmallDistanceBetweenExtrudedHoleAndEdgeIssue.CompareType(theIssue):
613 return "Small Distance Between Extruded Hole And Edge Issue(s)"
614 elif mtk.DFMSheetMetal_SmallDistanceBetweenExtrudedHolesIssue.CompareType(theIssue):
615 return "Small Distance Between Extruded Holes Issue(s)"
616 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndBendIssue.CompareType(theIssue):
617 return "Small Distance Between Hole And Bend Issue(s)"
618 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndCutoutIssue.CompareType(theIssue):
619 return "Small Distance Between Hole And Cutout Issue(s)"
620 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndEdgeIssue.CompareType(theIssue):
621 return "Small Distance Between Hole And Edge Issue(s)"
622 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndLouverIssue.CompareType(theIssue):
623 return "Small Distance Between Hole And Louver Issue(s)"
624 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndNotchIssue.CompareType(theIssue):
625 return "Small Distance Between Hole And Notch Issue(s)"
626 elif mtk.DFMSheetMetal_SmallDistanceBetweenHolesIssue.CompareType(theIssue):
627 return "Small Distance Between Holes Issue(s)"
628 elif mtk.DFMSheetMetal_SmallDistanceBetweenNotchAndBendIssue.CompareType(theIssue):
629 return "Small Distance Between Notch And Bend Issue(s)"
630 elif mtk.DFMSheetMetal_SmallDistanceBetweenNotchesIssue.CompareType(theIssue):
631 return "Small Distance Between Notches Issue(s)"
632 elif mtk.DFMSheetMetal_SmallDistanceBetweenTabsIssue.CompareType(theIssue):
633 return "Small Distance Between Tabs Issue(s)"
634 return "Small Distance Between Feature(s)"
635
636 @staticmethod
637 def __SmallDistanceIssueColor(theIssue: mtk.DFMSheetMetal_SmallDistanceBetweenFeaturesIssue):
638 if mtk.DFMSheetMetal_SmallDistanceBetweenBendAndLouverIssue.CompareType(theIssue):
639 return "(195, 56, 19)"
640 elif mtk.DFMSheetMetal_SmallDistanceBetweenExtrudedHoleAndBendIssue.CompareType(theIssue):
641 return "(212, 75, 90)"
642 elif mtk.DFMSheetMetal_SmallDistanceBetweenExtrudedHoleAndEdgeIssue.CompareType(theIssue):
643 return "(198, 75, 105)"
644 elif mtk.DFMSheetMetal_SmallDistanceBetweenExtrudedHolesIssue.CompareType(theIssue):
645 return "(170, 65, 120)"
646 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndBendIssue.CompareType(theIssue):
647 return "(239, 136, 190)"
648 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndCutoutIssue.CompareType(theIssue):
649 return "(127, 130, 187)"
650 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndEdgeIssue.CompareType(theIssue):
651 return "(240, 135, 132)"
652 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndLouverIssue.CompareType(theIssue):
653 return "(15, 5, 129)"
654 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndNotchIssue.CompareType(theIssue):
655 return "(235, 51, 36)"
656 elif mtk.DFMSheetMetal_SmallDistanceBetweenHolesIssue.CompareType(theIssue):
657 return "(142, 64, 58)"
658 elif mtk.DFMSheetMetal_SmallDistanceBetweenNotchAndBendIssue.CompareType(theIssue):
659 return "(58, 6, 3)"
660 elif mtk.DFMSheetMetal_SmallDistanceBetweenNotchesIssue.CompareType(theIssue):
661 return "(0, 215, 3)"
662 elif mtk.DFMSheetMetal_SmallDistanceBetweenTabsIssue.CompareType(theIssue):
663 return "(157, 160, 207)"
664 return "(0, 0, 0)"
665
666 @staticmethod
667 def __AddShapeFeature(theManager: FeatureGroupManager, theFeature: mtk.MTKBase_ShapeFeature, theCount: int, theShapeIdVector):
668 aFeature = theFeature
669
670 if mtk.Machining_TurningFace.CompareType(aFeature):
671 aTurningFace = mtk.Machining_TurningFace.Cast(aFeature)
672 aType = aTurningFace.Type()
673 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString1("Radius", "mm", aTurningFace.Radius(), theShapeIdVector)
674 theManager.AddGroupData(MTKConverter_Report.__MachiningFaceTypeToString(aType),
675 MTKConverter_Report.__MachiningFaceColor(aType),
676 aFeatureData, theCount)
677 elif mtk.Machining_Face.CompareType(aFeature):
678 aFace = mtk.Machining_Face.Cast(aFeature)
679 aType = aFace.Type()
680 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString0(theShapeIdVector)
681 theManager.AddGroupData(MTKConverter_Report.__MachiningFaceTypeToString(aType),
682 MTKConverter_Report.__MachiningFaceColor(aType),
683 aFeatureData, theCount)
684 elif mtk.Machining_Countersink.CompareType(aFeature):
685 aCountersink = mtk.Machining_Countersink.Cast(aFeature)
686 anAxis = aCountersink.Axis().Axis()
687 aDirection = Direction(anAxis.X(), anAxis.Y(), anAxis.Z())
688 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
689 "Radius", "mm", aCountersink.Radius(),
690 "Depth", "mm", aCountersink.Depth(),
691 "Axis", "", aDirection,
692 theShapeIdVector)
693 theManager.AddGroupData("Countersink(s)", "(55, 125, 34)", aFeatureData, theCount)
694 elif mtk.Machining_ThreadedHole.CompareType(aFeature):
695 aThreadedHole = mtk.Machining_ThreadedHole.Cast(aFeature)
696 anAxis = aThreadedHole.Axis().Axis()
697 aDirection = Direction(anAxis.X(), anAxis.Y(), anAxis.Z())
698 aType = aThreadedHole.Type()
699 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString6(
700 "Minor radius", "mm", aThreadedHole.MinorRadius(),
701 "Major radius", "mm", aThreadedHole.MajorRadius(),
702 "Thread length", "mm", aThreadedHole.ThreadLength(),
703 "Pitch", "mm", aThreadedHole.Pitch(),
704 "Depth", "mm", aThreadedHole.Depth(),
705 "Axis", "", aDirection,
706 theShapeIdVector)
707 theManager.AddGroupData("Threaded " + MTKConverter_Report.__MachiningHoleTypeToString(aType),
708 MTKConverter_Report.__MachiningThreadedHoleColor(aType),
709 aFeatureData, theCount)
710 elif mtk.Machining_Hole.CompareType(aFeature):
711 aHole = mtk.Machining_Hole.Cast(aFeature)
712 anAxis = aHole.Axis().Axis()
713 aDirection = Direction(anAxis.X(), anAxis.Y(), anAxis.Z())
714 aType = aHole.Type()
715 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
716 "Radius", "mm", aHole.Radius(),
717 "Depth", "mm", aHole.Depth(),
718 "Axis", "", aDirection,
719 theShapeIdVector)
720 theManager.AddGroupData(MTKConverter_Report.__MachiningHoleTypeToString(aType),
721 MTKConverter_Report.__MachiningHoleColor(aType),
722 aFeatureData, theCount)
723 elif mtk.Machining_SteppedHole.CompareType(aFeature):
724 aSteppedHole = mtk.Machining_SteppedHole.Cast(aFeature)
725 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString1(
726 "Depth", "mm", aSteppedHole.Depth(),
727 theShapeIdVector)
728 theManager.AddGroupData("Stepped Hole(s)", "(204, 0, 125)", aFeatureData, theCount)
729 elif mtk.Machining_Pocket.CompareType(aFeature):
730 aPocket = mtk.Machining_Pocket.Cast(aFeature)
731 anAxis = aPocket.Axis().Direction()
732 aDirection = Direction(anAxis.X(), anAxis.Y(), anAxis.Z())
733 aType = aPocket.Type()
734 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString4(
735 "Length", "mm", aPocket.Length(),
736 "Width", "mm", aPocket.Width(),
737 "Depth", "mm", aPocket.Depth(),
738 "Axis", "", aDirection,
739 theShapeIdVector)
740 theManager.AddGroupData(MTKConverter_Report.__MachiningPocketTypeToString(aType),
741 MTKConverter_Report.__MachiningPocketColor(aType),
742 aFeatureData, theCount)
743 elif mtk.Machining_TurningGroove.CompareType(aFeature):
744 aTurningGroove = mtk.Machining_TurningGroove.Cast(aFeature)
745 aType = aTurningGroove.Type()
746 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
747 "Radius", "mm", aTurningGroove.Radius(),
748 "Depth", "mm", aTurningGroove.Depth(),
749 "Width", "mm", aTurningGroove.Width(),
750 theShapeIdVector)
751 theManager.AddGroupData(MTKConverter_Report.__MachiningTurningGrooveTypeToString(aType),
752 MTKConverter_Report.__MachiningTurningGrooveColor(aType),
753 aFeatureData, theCount)
754 elif mtk.Machining_Bore.CompareType(aFeature):
755 aBore = mtk.Machining_Bore.Cast(aFeature)
756 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
757 "Radius", "mm", aBore.Radius(),
758 "Depth", "mm", aBore.Depth(),
759 theShapeIdVector)
760 theManager.AddGroupData("Bore(s)", "(127, 130, 187)", aFeatureData, theCount)
761
762
763 elif mtk.Molding_ScrewBoss.CompareType(aFeature):
764 aScrewBoss = mtk.Molding_ScrewBoss.Cast(aFeature)
765 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
766 "Outer Radius", "mm", aScrewBoss.OuterRadius(),
767 "Inner Radius", "mm", aScrewBoss.InnerRadius(),
768 "Draft Angle", "deg", aScrewBoss.DraftAngle() * 180 / math.pi,
769 theShapeIdVector)
770 theManager.AddGroupData("Screw Boss(es)", "(12, 32, 63)", aFeatureData, theCount)
771 elif mtk.MTKBase_Boss.CompareType(aFeature):
772 aBoss = mtk.MTKBase_Boss.Cast(aFeature)
773 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
774 "Length", "mm", aBoss.Length(),
775 "Width", "mm", aBoss.Width(),
776 "Height", "mm", aBoss.Height(),
777 theShapeIdVector)
778 theManager.AddGroupData ("Boss(es)", "(56, 72, 13)", aFeatureData, theCount)
779 elif mtk.Molding_Rib.CompareType(aFeature):
780 aRib = mtk.Molding_Rib.Cast(aFeature)
781 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString4(
782 "Length", "mm", aRib.Length(),
783 "Height", "mm", aRib.Height(),
784 "Thickness", "mm", aRib.Thickness(),
785 "Draft Angle", "deg", aRib.DraftAngle() * 180 / math.pi,
786 theShapeIdVector)
787 theManager.AddGroupData("Rib(s)", "(34, 51, 127)", aFeatureData, theCount)
788
789
790 elif mtk.SheetMetal_FormingFeature.CompareType(aFeature):
791 aFormingFeature = mtk.SheetMetal_FormingFeature.Cast(aFeature)
792 anAxis = aFormingFeature.Axis().Direction()
793 aDirection = Direction(anAxis.X(), anAxis.Y(), anAxis.Z())
794 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
795 "Depth", "mm", aFormingFeature.Depth(),
796 "Length", "mm", aFormingFeature.Length(),
797 "Axis", "", aDirection,
798 theShapeIdVector)
799 theManager.AddGroupData("Forming Feature(s)", "(235, 211, 253)", aFeatureData, theCount)
800 elif mtk.SheetMetal_Bead.CompareType(aFeature):
801 aBead = mtk.SheetMetal_Bead.Cast(aFeature)
802 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString1("Depth", "mm", aBead.Depth(), theShapeIdVector)
803 theManager.AddGroupData("Bead(s)", "(115, 251, 253)", aFeatureData, theCount)
804 elif mtk.SheetMetal_Bend.CompareType(aFeature):
805 aBend = mtk.SheetMetal_Bend.Cast(aFeature)
806 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString4(
807 "Radius", "mm", aBend.Radius(),
808 "Angle", "deg", aBend.Angle() * 180 / math.pi,
809 "Length", "mm", aBend.Length(),
810 "Width", "mm", aBend.Width(),
811 theShapeIdVector)
812 theManager.AddGroupData(MTKConverter_Report.__BendName(aBend), MTKConverter_Report.__BendColor(aBend),
813 aFeatureData, theCount)
814 elif mtk.SheetMetal_Bridge.CompareType(aFeature):
815 aBridge = mtk.SheetMetal_Bridge.Cast(aFeature)
816 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
817 "Length", "mm", aBridge.Length(),
818 "Depth", "mm", aBridge.Depth(),
819 theShapeIdVector)
820 theManager.AddGroupData("Bridge(s)", "(240, 155, 89)", aFeatureData, theCount)
821 elif mtk.SheetMetal_Hole.CompareType(aFeature):
822 aHole = mtk.SheetMetal_Hole.Cast(aFeature)
823 anAxis = aHole.Axis().Axis()
824 aDirection = Direction(anAxis.X(), anAxis.Y(), anAxis.Z())
825 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
826 "Radius", "mm", aHole.Radius(),
827 "Depth", "mm", aHole.Depth(),
828 "Axis", "", aDirection,
829 theShapeIdVector)
830 theManager.AddGroupData (MTKConverter_Report.__SheetMetalHoleName(aHole),
831 MTKConverter_Report.__SheetMetalHoleColor(aHole),
832 aFeatureData, theCount)
833 elif mtk.SheetMetal_Cutout.CompareType(aFeature):
834 aCutout = mtk.SheetMetal_Cutout.Cast(aFeature)
835 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString1("Perimeter", "mm", aCutout.Perimeter(), theShapeIdVector)
836 theManager.AddGroupData ("Cutout(s)", "(88, 19, 94)", aFeatureData, theCount)
837 elif mtk.SheetMetal_Louver.CompareType(aFeature):
838 aLouver = mtk.SheetMetal_Louver.Cast(aFeature)
839 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString1(
840 "Depth", "mm", aLouver.Depth(),
841 theShapeIdVector)
842 theManager.AddGroupData("Louver(s)", "(161, 251, 142)", aFeatureData, theCount)
843 elif mtk.SheetMetal_Notch.CompareType(aFeature):
844 aNotch = mtk.SheetMetal_Notch.Cast(aFeature)
845 if mtk.SheetMetal_StraightNotch.CompareType(aNotch):
846 aStraightNotch = mtk.SheetMetal_StraightNotch.Cast(aNotch)
847 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
848 "Length", "mm", aNotch.Length(),
849 "Width", "mm", aNotch.Width(),
850 "Corner Fillet Radius", "mm", aStraightNotch.CornerFilletRadius(),
851 theShapeIdVector)
852 theManager.AddGroupData ("Straight Notch(es)", "(240, 135, 132)", aFeatureData, theCount)
853 elif mtk.SheetMetal_VNotch.CompareType(aNotch):
854 aVNotch = mtk.SheetMetal_VNotch.Cast(aNotch)
855 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
856 "Length", "mm", aNotch.Length(),
857 "Width", "mm", aNotch.Width(),
858 "Angle", "deg", aVNotch.Angle() * 180 / math.pi,
859 theShapeIdVector)
860 theManager.AddGroupData ("V Notch(es)", "(235, 51, 36)", aFeatureData, theCount)
861 else:
862 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
863 "Length", "mm", aNotch.Length(),
864 "Width", "mm", aNotch.Width(),
865 theShapeIdVector)
866 theManager.AddGroupData("Notch(es)", "(239, 136, 190)", aFeatureData, theCount)
867 elif mtk.SheetMetal_Tab.CompareType(aFeature):
868 aTab = mtk.SheetMetal_Tab.Cast(aFeature)
869 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
870 "Length", "mm", aTab.Length(),
871 "Width", "mm", aTab.Width(),
872 theShapeIdVector)
873 theManager.AddGroupData("Tab(s)", "(127, 130, 187)", aFeatureData, theCount)
874
875 @staticmethod
876 def __AddDrillingIssue(theManager: FeatureGroupManager, theIssue: mtk.DFMMachining_DrillingIssue, theCount: int, theShapeIdVector):
877 if mtk.DFMMachining_SmallDiameterHoleIssue.CompareType(theIssue):
878 aSmallHoleIssue = mtk.DFMMachining_SmallDiameterHoleIssue.Cast(theIssue)
879 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
880 "Expected Minimum Diameter", "mm", aSmallHoleIssue.ExpectedMinDiameter(),
881 "Actual Diameter", "mm", aSmallHoleIssue.ActualDiameter(),
882 theShapeIdVector)
883 theManager.AddGroupData("Small Diameter Hole(s)", "(115, 251, 253)", aFeatureData, theCount)
884 elif mtk.DFMMachining_DeepHoleIssue.CompareType(theIssue):
885 aDeepHoleIssue = mtk.DFMMachining_DeepHoleIssue.Cast(theIssue)
886 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
887 "Expected Maximum Depth", "mm", aDeepHoleIssue.ExpectedMaxDepth(),
888 "Actual Depth", "mm", aDeepHoleIssue.ActualDepth(), theShapeIdVector)
889 theManager.AddGroupData("Deep Hole(s)", "(0, 35, 245)", aFeatureData, theCount)
890 elif mtk.DFMMachining_NonStandardDiameterHoleIssue.CompareType(theIssue):
891 aNSDiameterHoleIssue = mtk.DFMMachining_NonStandardDiameterHoleIssue.Cast(theIssue)
892 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
893 "Nearest Standard Diameter", "mm", aNSDiameterHoleIssue.NearestStandardDiameter(),
894 "Actual Diameter", "mm", aNSDiameterHoleIssue.ActualDiameter(),
895 theShapeIdVector)
896 theManager.AddGroupData("Non Standard Diameter Hole(s)", "(22, 65, 124)", aFeatureData, theCount)
897 elif mtk.DFMMachining_NonStandardDrillPointAngleBlindHoleIssue.CompareType(theIssue):
898 aNSDrillPointAngleBlindHoleIssue = mtk.DFMMachining_NonStandardDrillPointAngleBlindHoleIssue.Cast(theIssue)
899 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
900 "Nearest Standard Angle", "deg", aNSDrillPointAngleBlindHoleIssue.NearestStandardAngle() * 180 / math.pi,
901 "Actual Angle", "deg", aNSDrillPointAngleBlindHoleIssue.ActualAngle() * 180 / math.pi,
902 theShapeIdVector)
903 theManager.AddGroupData("Non Standard Drill Point Angle Blind Hole(s)", "(88, 13, 78)", aFeatureData, theCount)
904 elif mtk.DFMMachining_PartialHoleIssue.CompareType(theIssue):
905 aPartialHoleIssue = mtk.DFMMachining_PartialHoleIssue.Cast(theIssue)
906 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
907 "Expected Minimum Material Percent", "%", aPartialHoleIssue.ExpectedMinMaterialPercent() * 100,
908 "Actual Material Percent", "%", aPartialHoleIssue.ActualMaterialPercent() * 100,
909 theShapeIdVector)
910 theManager.AddGroupData("Partial Hole(s)", "(255, 254, 145)", aFeatureData, theCount)
911 elif mtk.DFMMachining_FlatBottomHoleIssue.CompareType(theIssue):
912 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString0(theShapeIdVector)
913 theManager.AddGroupData("Flat Bottom Hole(s)", "(240, 155, 89)", aFeatureData, theCount)
914 elif mtk.DFMMachining_NonPerpendicularHoleIssue.CompareType(theIssue):
915 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString0(theShapeIdVector)
916 theManager.AddGroupData("Non Perpendicular Hole(s)", "(129, 127, 38)", aFeatureData, theCount)
917 elif mtk.DFMMachining_IntersectingCavityHoleIssue.Cast(theIssue):
918 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString0(theShapeIdVector)
919 theManager.AddGroupData("Intersecting Cavity Hole(s)", "(115, 43, 245)", aFeatureData, theCount)
920 elif mtk.DFMMachining_SmallDistanceBetweenThreadedHoleAndEdgeIssue.CompareType(theIssue):
921 anIssue = mtk.DFMMachining_SmallDistanceBetweenThreadedHoleAndEdgeIssue.Cast(theIssue)
922 aTHole = mtk.Machining_ThreadedHole.Cast(anIssue.Hole());
923 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString4(
924 "Expected Minimum Distance", "mm", anIssue.ExpectedMinDistance(),
925 "Actual Distance", "mm", anIssue.ActualDistance(),
926 "Actual Diameter", "mm", aTHole.MajorRadius() * 2,
927 "Expected Minimum Distance To Diameter Ratio", "mm", anIssue.ExpectedMinDistanceToDiameterRatio(),
928 theShapeIdVector)
929 theManager.AddGroupData("Small Distance Between Threaded Hole And Edge(s)", "(142, 65, 213)", aFeatureData, theCount)
930
931 @staticmethod
932 def __AddMillingIssue(theManager: FeatureGroupManager, theIssue: mtk.DFMMachining_MillingIssue, theCount: int, theShapeIdVector):
933 if mtk.DFMMachining_NonStandardRadiusMilledPartFloorFilletIssue.CompareType(theIssue):
934 aFloorRadiusIssue = mtk.DFMMachining_NonStandardRadiusMilledPartFloorFilletIssue.Cast(theIssue)
935 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
936 "Nearest Standard Radius", "mm", aFloorRadiusIssue.NearestStandardRadius(),
937 "Actual Radius", "mm", aFloorRadiusIssue.ActualRadius(),
938 theShapeIdVector)
939 theManager.AddGroupData("Non Standard Radius Milled Part Floor Fillet Issue(s)", "(0, 215, 3)", aFeatureData, theCount)
940 elif mtk.DFMMachining_DeepPocketIssue.CompareType(theIssue):
941 aDeepPocketIssue = mtk.DFMMachining_DeepPocketIssue.Cast(theIssue)
942 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
943 "Expected Maximum Depth", "mm", aDeepPocketIssue.ExpectedMaxDepth(),
944 "Actual Depth", "mm", aDeepPocketIssue.ActualDepth(),
945 theShapeIdVector)
946 theManager.AddGroupData("Deep Pocket Issue(s)", "(190, 10, 100)", aFeatureData, theCount)
947 elif mtk.DFMMachining_HighBossIssue.CompareType(theIssue):
948 aHighBossIssue = mtk.DFMMachining_HighBossIssue.Cast(theIssue)
949 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
950 "Expected Maximum Height", "mm", aHighBossIssue.ExpectedMaxHeight(),
951 "Actual Height", "mm", aHighBossIssue.ActualHeight(),
952 theShapeIdVector)
953 theManager.AddGroupData("High Boss Issue(s)", "(180, 100, 50)", aFeatureData, theCount)
954 elif mtk.DFMMachining_LargeMilledPartIssue.CompareType(theIssue):
955 aLMPIssue = mtk.DFMMachining_LargeMilledPartIssue.Cast(theIssue)
956 anExpectedSize = aLMPIssue.ExpectedMaxMilledPartSize()
957 anActualSize = aLMPIssue.ActualMilledPartSize()
958 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
959 "Expected Maximum Size (LxWxH)", "mm",
960 Dimension(anExpectedSize.Length(), anExpectedSize.Width(), anExpectedSize.Height()),
961 "Actual Size (LxWxH)", "mm",
962 Dimension(anActualSize.Length(), anActualSize.Width(), anActualSize.Height()),
963 theShapeIdVector)
964 theManager.AddGroupData("Large Milled Part(s)", "(17, 37, 205)", aFeatureData, theCount)
965 elif mtk.DFMMachining_SmallRadiusMilledPartInternalCornerIssue.CompareType(theIssue):
966 aMSICRIssue = mtk.DFMMachining_SmallRadiusMilledPartInternalCornerIssue.Cast(theIssue)
967 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
968 "Expected Minimum Radius", "mm", aMSICRIssue.ExpectedMinRadius(),
969 "Actual Radius", "mm", aMSICRIssue.ActualRadius(),
970 theShapeIdVector)
971 theManager.AddGroupData("Small Radius Milled Part Internal Corner(s)", "(10, 10, 200)", aFeatureData, theCount)
972 elif mtk.DFMMachining_NonPerpendicularMilledPartShapeIssue.CompareType(theIssue):
973 aNPMPSIssue = mtk.DFMMachining_NonPerpendicularMilledPartShapeIssue.Cast(theIssue)
974 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString1(
975 "Actual Angle", "deg", aNPMPSIssue.ActualAngle() * 180 / math.pi,
976 theShapeIdVector)
977 theManager.AddGroupData("Non Perpendicular Milled Part Shape(s)", "(129, 227, 138)", aFeatureData, theCount)
978 elif mtk.DFMMachining_MilledPartExternalEdgeFilletIssue.CompareType(theIssue):
979 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString0(theShapeIdVector)
980 theManager.AddGroupData("Milled Part External Edge Fillet(s)", "(201, 227, 13)", aFeatureData, theCount)
981 elif mtk.DFMMachining_InconsistentRadiusMilledPartFloorFilletIssue.CompareType(theIssue):
982 anInconsistentRadiusIssue = mtk.DFMMachining_InconsistentRadiusMilledPartFloorFilletIssue.Cast(theIssue)
983 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
984 "Expected Radius", "mm", anInconsistentRadiusIssue.ExpectedRadius(),
985 "Actual Radius", "mm", anInconsistentRadiusIssue.ActualRadius(),
986 theShapeIdVector)
987 theManager.AddGroupData("Inconsistent Radius Milled Part Floor Fillet Issue(s)", "(180, 15, 190)", aFeatureData, theCount)
988 elif mtk.DFMMachining_NarrowRegionInPocketIssue.CompareType(theIssue):
989 aNarrowRegionIssue = mtk.DFMMachining_NarrowRegionInPocketIssue.Cast(theIssue)
990 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
991 "Expected Minimum Region Size", "mm", aNarrowRegionIssue.ExpectedMinRegionSize(),
992 "Actual Region Size", "mm", aNarrowRegionIssue.ActualRegionSize(),
993 theShapeIdVector)
994 theManager.AddGroupData("Narrow Region In Pocket Issue(s)", "(70, 150, 150)", aFeatureData, theCount)
995 elif mtk.DFMMachining_LargeDifferenceRegionsSizeInPocketIssue.CompareType(theIssue):
996 aLargeRatioIssue = mtk.DFMMachining_LargeDifferenceRegionsSizeInPocketIssue.Cast(theIssue)
997 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
998 "Expected Regions Maximum To Minimum Size Ratio", "", aLargeRatioIssue.ExpectedMaxRegionsMaxToMinSizeRatio(),
999 "Actual Regions Maximum To Minimum Size Ratio", "", aLargeRatioIssue.ActualMaxRegionsMaxToMinSizeRatio(),
1000 theShapeIdVector)
1001 theManager.AddGroupData("Large Difference Regions Size In Pocket Issue(s)", "(100, 150, 150)", aFeatureData, theCount)
1002 elif mtk.DFMMachining_SmallWallThicknessIssue.CompareType(theIssue):
1003 aSWTIssue = mtk.DFMMachining_SmallWallThicknessIssue.Cast(theIssue)
1004 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1005 "Expected Minimum Thickness", "mm", aSWTIssue.ExpectedMinThickness(),
1006 "Actual Thickness", "mm", aSWTIssue.ActualThickness(),
1007 theShapeIdVector)
1008 theManager.AddGroupData("Small Wall Thickness Issue(s)", "(64, 224, 208)", aFeatureData, theCount)
1009
1010 @staticmethod
1011 def __AddTurningIssue(theManager: FeatureGroupManager, theIssue: mtk.DFMBase_Issue, theCount: int, theShapeIdVector):
1012 if mtk.DFMMachining_LargeTurnedPartIssue.CompareType(theIssue):
1013 aLTSIssue = mtk.DFMMachining_LargeTurnedPartIssue.Cast(theIssue)
1014 anExpectedSize = aLTSIssue.ExpectedMaxTurnedPartSize()
1015 anActualSize = aLTSIssue.ActualTurnedPartSize()
1016 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1017 "Expected Maximum Size (LxR)", "mm", Pair(anExpectedSize.Length(), anExpectedSize.Radius()),
1018 "Actual Size (LxR)", "mm", Pair(anActualSize.Length(), anActualSize.Radius()),
1019 theShapeIdVector)
1020 theManager.AddGroupData("Large Turned Part(s)", "(195, 195, 195)", aFeatureData, theCount)
1021 elif mtk.DFMMachining_LongSlenderTurnedPartIssue.CompareType(theIssue):
1022 aLSTIssue = mtk.DFMMachining_LongSlenderTurnedPartIssue.Cast(theIssue)
1023 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
1024 "Expected Maximum Length", "mm", aLSTIssue.ExpectedMaxLength(),
1025 "Actual Length", "mm", aLSTIssue.ActualLength(),
1026 "Actual Minimum Diameter", "mm", aLSTIssue.ActualMinDiameter(),
1027 theShapeIdVector)
1028 theManager.AddGroupData("Long-Slender Turned Part(s)", "(195, 195, 195)", aFeatureData, theCount)
1029 elif mtk.DFMMachining_SmallDepthBlindBoredHoleReliefIssue.CompareType(theIssue):
1030 aBBHRIssue = mtk.DFMMachining_SmallDepthBlindBoredHoleReliefIssue.Cast(theIssue)
1031 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
1032 "Expected Minimum Relief Depth", "mm", aBBHRIssue.ExpectedMinReliefDepth(),
1033 "Actual Relief Depth", "mm", aBBHRIssue.ActualReliefDepth(),
1034 "Actual Diameter", "mm", aBBHRIssue.ActualDiameter(),
1035 theShapeIdVector)
1036 theManager.AddGroupData("Small Depth Blind Bored Hole Relief(s)", "(88, 19, 94)", aFeatureData, theCount)
1037 elif mtk.DFMMachining_DeepBoredHoleIssue.CompareType(theIssue):
1038 aISBHIssue = mtk.DFMMachining_DeepBoredHoleIssue.Cast(theIssue)
1039 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
1040 "Expected Maximum Depth", "mm", aISBHIssue.ExpectedMaxDepth(),
1041 "Actual Depth", "mm", aISBHIssue.ActualDepth(),
1042 "Actual Diameter", "mm", aISBHIssue.ActualDiameter(),
1043 theShapeIdVector)
1044 theManager.AddGroupData("Deep Bored Hole(s)", "(161, 251, 142)", aFeatureData, theCount)
1045 elif mtk.DFMMachining_IrregularTurnedPartOuterDiameterProfileReliefIssue.CompareType(theIssue):
1046 aODPRIssue = mtk.DFMMachining_IrregularTurnedPartOuterDiameterProfileReliefIssue.Cast(theIssue)
1047 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1048 "Expected Maximum Face Incline Angle", "deg", aODPRIssue.ExpectedMaxFaceInclineAngle() * 180 / math.pi,
1049 "Actual Face Incline Angle", "deg", aODPRIssue.ActualFaceInclineAngle() * 180 / math.pi,
1050 theShapeIdVector)
1051 theManager.AddGroupData("Irregular Turned Part Outer Diameter Profile Relief(s)", "(239, 136, 190)", aFeatureData, theCount)
1052 elif mtk.DFMMachining_SmallRadiusTurnedPartInternalCornerIssue.CompareType(theIssue):
1053 aTSICRIssue = mtk.DFMMachining_SmallRadiusTurnedPartInternalCornerIssue.Cast(theIssue)
1054 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1055 "Expected Minimum Radius", "mm", aTSICRIssue.ExpectedMinRadius(),
1056 "Actual Radius", "mm", aTSICRIssue.ActualRadius(),
1057 theShapeIdVector)
1058 theManager.AddGroupData("Small Radius Turned Part Internal Corner(s)", "(127, 130, 187)", aFeatureData, theCount)
1059 elif mtk.DFMMachining_SquareEndKeywayIssue.CompareType(theIssue):
1060 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString0(theShapeIdVector)
1061 theManager.AddGroupData("Square End Keyway(s)", "(157, 160, 207)", aFeatureData, theCount)
1062 elif mtk.DFMMachining_NonSymmetricalAxialSlotIssue.CompareType(theIssue):
1063 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString0(theShapeIdVector)
1064 theManager.AddGroupData("Non Symmetrical Axial Slot(s)", "(130, 170, 200)", aFeatureData, theCount)
1065
1066 @staticmethod
1067 def __AddMoldingIssue(theManager: FeatureGroupManager, theIssue: mtk.DFMBase_Issue, theCount: int, theShapeIdVector):
1068 if mtk.DFMMolding_HighRibIssue.CompareType(theIssue):
1069 aHRIssue = mtk.DFMMolding_HighRibIssue.Cast(theIssue)
1070 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1071 "Expected Maximum Height", "mm", aHRIssue.ExpectedMaxHeight(),
1072 "Actual Height", "mm", aHRIssue.ActualHeight(),
1073 theShapeIdVector)
1074 theManager.AddGroupData("High Rib(s)", "(284, 36, 12)", aFeatureData, theCount)
1075 elif mtk.DFMMolding_HighScrewBossIssue.CompareType(theIssue):
1076 aHSBIssue = mtk.DFMMolding_HighScrewBossIssue.Cast(theIssue)
1077 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1078 "Expected Maximum Height", "mm", aHSBIssue.ExpectedMaxHeight(),
1079 "Actual Height", "mm", aHSBIssue.ActualHeight(),
1080 theShapeIdVector)
1081 theManager.AddGroupData("High Screw Boss(es)", "(16, 75, 95)", aFeatureData, theCount)
1082 elif mtk.DFMMolding_IrregularCoreDepthScrewBossIssue.CompareType(theIssue):
1083 aICDSBIssue = mtk.DFMMolding_IrregularCoreDepthScrewBossIssue.Cast(theIssue)
1084 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1085 "Actual Height", "mm", aICDSBIssue.ActualHeight(),
1086 "Actual Core Depth", "mm", aICDSBIssue.ActualCoreDepth(),
1087 theShapeIdVector)
1088 theManager.AddGroupData("Irregular Core Depth Screw Boss(es)", "(56, 176, 95)", aFeatureData, theCount)
1089 elif mtk.DFMMolding_IrregularCoreDiameterScrewBossIssue.CompareType(theIssue):
1090 aICDSBIssue = mtk.DFMMolding_IrregularCoreDiameterScrewBossIssue.Cast(theIssue)
1091 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
1092 "Expected Minimum Outer Diameter", "mm", aICDSBIssue.ExpectedMinCoreDiameter(),
1093 "Expected Maximum Outer Diameter", "mm", aICDSBIssue.ExpectedMaxCoreDiameter(),
1094 "actual core diameter", "mm", aICDSBIssue.ActualCoreDiameter(),
1095 theShapeIdVector)
1096 theManager.AddGroupData("Irregular Core Diameter Screw Boss(es)", "(195, 195, 195)", aFeatureData, theCount)
1097 elif mtk.DFMMolding_IrregularThicknessRibIssue.CompareType(theIssue):
1098 aITRIssue = mtk.DFMMolding_IrregularThicknessRibIssue.Cast(theIssue)
1099 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
1100 "Expected Minimum Thickness", "mm", aITRIssue.ExpectedMinThickness(),
1101 "Expected Maximum Thickness", "mm", aITRIssue.ExpectedMaxThickness(),
1102 "Actual Thickness", "mm", aITRIssue.ActualThickness(),
1103 theShapeIdVector)
1104 theManager.AddGroupData("Irregular Thickness Rib(s)", "(68, 114, 250)", aFeatureData, theCount)
1105 elif mtk.DFMMolding_IrregularWallThicknessIssue.CompareType(theIssue):
1106 aIWTIssue = mtk.DFMMolding_IrregularWallThicknessIssue.Cast(theIssue)
1107 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
1108 "Expected Maximum Wall Thickness", "mm", aIWTIssue.ExpectedMaxThickness(),
1109 "Expected Minimum Wall Thickness", "mm", aIWTIssue.ExpectedMinThickness(),
1110 "Actual Wall Thickness", "mm", aIWTIssue.ActualThickness(),
1111 theShapeIdVector)
1112 theManager.AddGroupData ("Irregular Wall(s)", "(23, 11, 19)", aFeatureData, theCount)
1113 elif mtk.DFMMolding_IrregularWallThicknessScrewBossIssue.CompareType(theIssue):
1114 aIWTSBIssue = mtk.DFMMolding_IrregularWallThicknessScrewBossIssue.Cast(theIssue)
1115 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
1116 "Expected Maximum Thickness", "mm", aIWTSBIssue.ExpectedMaxThickness(),
1117 "Expected Minimum Thickness", "mm", aIWTSBIssue.ExpectedMinThickness(),
1118 "Actual Thickness", "mm", aIWTSBIssue.ActualThickness(),
1119 theShapeIdVector)
1120 theManager.AddGroupData("Irregular Wall Thickness Screw Boss(es)", "(13, 12, 245)", aFeatureData, theCount)
1121 elif mtk.DFMMolding_LargeWallThicknessIssue.CompareType(theIssue):
1122 aLWTIssue = mtk.DFMMolding_LargeWallThicknessIssue.Cast(theIssue)
1123 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1124 "Expected Maximum Wall Thickness", "mm", aLWTIssue.ExpectedMaxThickness(),
1125 "Actual Wall Thickness", "mm", aLWTIssue.ActualThickness(),
1126 theShapeIdVector)
1127 theManager.AddGroupData ("Large Wall(s)", "(101, 22, 129)", aFeatureData, theCount)
1128 elif mtk.DFMMolding_SmallBaseRadiusRibIssue.CompareType(theIssue):
1129 aSBRRIssue = mtk.DFMMolding_SmallBaseRadiusRibIssue.Cast(theIssue)
1130 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1131 "Expected Minimum Base Radius", "mm", aSBRRIssue.ExpectedMinBaseRadius(),
1132 "Actual Base Radius", "mm", aSBRRIssue.ActualBaseRadius(),
1133 theShapeIdVector)
1134 theManager.AddGroupData ("Small Base Radius Rib(s)", "(13, 12, 90)", aFeatureData, theCount)
1135 elif mtk.DFMMolding_SmallBaseRadiusScrewBossIssue.CompareType(theIssue):
1136 aSBRSBIssue = mtk.DFMMolding_SmallBaseRadiusScrewBossIssue.Cast(theIssue)
1137 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1138 "Expected Minimum Base Radius", "mm", aSBRSBIssue.ExpectedMinBaseRadius(),
1139 "Actual Base Radius", "mm", aSBRSBIssue.ActualBaseRadius(),
1140 theShapeIdVector)
1141 theManager.AddGroupData ("Small Base Radius Screw Boss(es)", "(56, 18, 23)", aFeatureData, theCount)
1142 elif mtk.DFMMolding_SmallDraftAngleRibIssue.CompareType(theIssue):
1143 aSDARIssue = mtk.DFMMolding_SmallDraftAngleRibIssue.Cast(theIssue)
1144 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1145 "Expected Minimum Draft Angle", "deg", aSDARIssue.ExpectedMinDraftAngle() * 180. / math.pi,
1146 "Actual Draft Angle", "deg", aSDARIssue.ActualDraftAngle() * 180. / math.pi,
1147 theShapeIdVector)
1148 theManager.AddGroupData("Small Draft Angle Rib(s)", "(189, 200, 13)", aFeatureData, theCount)
1149 elif mtk.DFMMolding_SmallDistanceBetweenRibsIssue.CompareType(theIssue):
1150 aSDBRIssue = mtk.DFMMolding_SmallDistanceBetweenRibsIssue.Cast(theIssue)
1151 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1152 "Expected Minimum Distance", "mm", aSDBRIssue.ExpectedMinDistanceBetweenRibs(),
1153 "Actual Distance", "mm", aSDBRIssue.ActualDistanceBetweenRibs(),
1154 theShapeIdVector)
1155 theManager.AddGroupData("Small Distance Between Ribs Issue(s)", "(11, 90, 111)", aFeatureData, theCount)
1156 elif mtk.DFMMolding_SmallDraftAngleScrewBossIssue.CompareType(theIssue):
1157 aSDASBIssue = mtk.DFMMolding_SmallDraftAngleScrewBossIssue.Cast(theIssue)
1158 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1159 "Expected Minimum Draft Angle", "deg", aSDASBIssue.ExpectedMinDraftAngle() * 180. / math.pi,
1160 "Actual Draft Angle", "deg", aSDASBIssue.ActualDraftAngle() * 180. / math.pi,
1161 theShapeIdVector)
1162 theManager.AddGroupData("Small Draft Angle Screw Boss(es)", "(27, 101, 27)", aFeatureData, theCount)
1163 elif mtk.DFMMolding_SmallHoleBaseRadiusScrewBossIssue.CompareType(theIssue):
1164 aSHBRSBIssue = mtk.DFMMolding_SmallHoleBaseRadiusScrewBossIssue.Cast(theIssue)
1165 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1166 "Expected Minimum Hole Base Radius", "mm", aSHBRSBIssue.ExpectedMinHoleBaseRadius(),
1167 "Actual Hole Base Radius", "mm", aSHBRSBIssue.ActualHoleBaseRadius(),
1168 theShapeIdVector)
1169 theManager.AddGroupData("Small Hole Base Radius Screw Boss(es)", "(98, 8, 2)", aFeatureData, theCount)
1170 elif mtk.DFMMolding_SmallDraftAngleWallIssue.CompareType(theIssue):
1171 aSDAWIssue = mtk.DFMMolding_SmallDraftAngleWallIssue.Cast(theIssue)
1172 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1173 "Expected Minimum Draft Angle", "deg", aSDAWIssue.ExpectedMinDraftAngle() * 180. / math.pi,
1174 "Actual Draft Angle", "deg", aSDAWIssue.ActualDraftAngle() * 180. / math.pi,
1175 theShapeIdVector)
1176 theManager.AddGroupData("Small Draft Angle Wall(s)", "(101, 67, 33)", aFeatureData, theCount)
1177 elif mtk.DFMMolding_NonChamferedScrewBossIssue.CompareType(theIssue):
1178 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString0(theShapeIdVector)
1179 theManager.AddGroupData("Non Chamfered Screw Boss(es)", "(38, 38, 10)", aFeatureData, theCount)
1180 elif mtk.DFMMolding_SmallWallThicknessIssue.CompareType(theIssue):
1181 aSWTIssue = mtk.DFMMolding_SmallWallThicknessIssue.Cast(theIssue)
1182 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1183 "Expected Minimum Wall Thickness", "mm", aSWTIssue.ExpectedMinThickness(),
1184 "Actual Wall Thickness", "mm", aSWTIssue.ActualThickness(),
1185 theShapeIdVector)
1186 theManager.AddGroupData ("Small Wall(s)", "(14, 209, 199)", aFeatureData, theCount)
1187 elif mtk.DFMMolding_SmallDistanceBetweenBossesIssue.CompareType(theIssue):
1188 aSDBBIssue = mtk.DFMMolding_SmallDistanceBetweenBossesIssue.Cast(theIssue)
1189 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1190 "Expected Minimum Distance Between Bosses", "mm", aSDBBIssue.ExpectedMinDistanceBetweenBosses(),
1191 "Actual Distance Between Bosses", "mm", aSDBBIssue.ActualDistanceBetweenBosses(),
1192 theShapeIdVector)
1193 theManager.AddGroupData ("Small Distance Between Bosses Issue(s)", "(255, 102, 0)", aFeatureData, theCount)
1194
1195 @staticmethod
1196 def __AddSheetMetalIssue(theManager: FeatureGroupManager, theIssue: mtk.DFMBase_Issue, theCount: int, theShapeIdVector):
1197 if mtk.DFMSheetMetal_FlatPatternInterferenceIssue.CompareType(theIssue):
1198 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString0(theShapeIdVector)
1199 theManager.AddGroupData("Flat Pattern Interference(s)", "(115, 251, 253)", aFeatureData, theCount)
1200 elif mtk.DFMSheetMetal_IrregularCornerFilletRadiusNotchIssue.CompareType(theIssue):
1201 aICFRNIssue = mtk.DFMSheetMetal_IrregularCornerFilletRadiusNotchIssue.Cast(theIssue)
1202 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1203 "Expected Corner Fillet Radius", "mm", aICFRNIssue.ExpectedCornerFilletRadius(),
1204 "Actual Corner Fillet Radius", "mm", aICFRNIssue.ActualCornerFilletRadius(),
1205 theShapeIdVector)
1206 theManager.AddGroupData("Irregular Corner Fillet Radius Notch(es)", "(239, 136, 190)", aFeatureData, theCount)
1207 elif mtk.DFMSheetMetal_IrregularDepthExtrudedHoleIssue.CompareType(theIssue):
1208 aIDEHIssue = mtk.DFMSheetMetal_IrregularDepthExtrudedHoleIssue.Cast(theIssue)
1209 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
1210 "Expected Minimum Extruded Height", "mm", aIDEHIssue.ExpectedMinExtrudedHeight(),
1211 "Expected Maximum Extruded Height", "mm", aIDEHIssue.ExpectedMaxExtrudedHeight(),
1212 "Actual Extruded Height", "mm", aIDEHIssue.ActualExtrudedHeight(),
1213 theShapeIdVector)
1214 theManager.AddGroupData("Irregular Depth Extruded Hole(s)", "(50, 120, 210)", aFeatureData, theCount)
1215 elif mtk.DFMSheetMetal_IrregularRadiusOpenHemBendIssue.CompareType(theIssue):
1216 aIROHBIssue = mtk.DFMSheetMetal_IrregularRadiusOpenHemBendIssue.Cast(theIssue)
1217 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1218 "Expected Radius", "mm", aIROHBIssue.ExpectedRadius(),
1219 "Actual Radius", "mm", aIROHBIssue.ActualRadius(),
1220 theShapeIdVector)
1221 theManager.AddGroupData("Irregular Radius Open Hem Bend(s)", "(188, 121, 11)", aFeatureData, theCount)
1222 elif mtk.DFMSheetMetal_InconsistentRadiusBendIssue.CompareType(theIssue):
1223 aIRBIssue = mtk.DFMSheetMetal_InconsistentRadiusBendIssue.Cast(theIssue)
1224 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1225 "Expected Radius", "mm", aIRBIssue.ExpectedRadius(),
1226 "Actual Radius", "mm", aIRBIssue.ActualRadius(),
1227 theShapeIdVector)
1228 theManager.AddGroupData("Inconsistent Radius Bend(s)", "(0, 35, 245)", aFeatureData, theCount)
1229 elif mtk.DFMSheetMetal_IrregularSizeBendReliefIssue.CompareType(theIssue):
1230 aISBRIssue = mtk.DFMSheetMetal_IrregularSizeBendReliefIssue.Cast(theIssue)
1231 anExpectedRelief = aISBRIssue.ExpectedMinBendRelief()
1232 aFirstActualRelief = aISBRIssue.FirstActualRelief()
1233 aSecondActualRelief = aISBRIssue.SecondActualRelief()
1234 aFeatureData = ""
1235 if (not aFirstActualRelief.IsNull()) and (not aSecondActualRelief.IsNull()):
1236 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString3(
1237 "Expected Minimum Relief Size (LxW)", "mm", Pair(anExpectedRelief.Length(), anExpectedRelief.Width()),
1238 "First Actual Relief Size (LxW)", "mm", Pair(aFirstActualRelief.Length(), aFirstActualRelief.Width()),
1239 "Second Actual Relief Size (LxW)", "mm", Pair(aSecondActualRelief.Length(), aSecondActualRelief.Width()),
1240 theShapeIdVector)
1241 elif aFirstActualRelief.IsNull():
1242 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1243 "Expected Minimum Relief Size (LxW)", "mm", Pair(anExpectedRelief.Length(), anExpectedRelief.Width()),
1244 "Actual Relief Size (LxW)", "mm", Pair(aSecondActualRelief.Length(), aSecondActualRelief.Width()),
1245 theShapeIdVector)
1246 else:
1247 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1248 "Expected Minimum Relief Size (LxW)", "mm", Pair(anExpectedRelief.Length(), anExpectedRelief.Width()),
1249 "Actual Relief Size (LxW)", "mm", Pair(aFirstActualRelief.Length(), aFirstActualRelief.Width()),
1250 theShapeIdVector)
1251 theManager.AddGroupData("Irregular Size Bend Relief(s)", "(22, 65, 124)", aFeatureData, theCount)
1252 elif mtk.DFMSheetMetal_IrregularSizeNotchIssue.CompareType(theIssue):
1253 aISNIssue = mtk.DFMSheetMetal_IrregularSizeNotchIssue.Cast(theIssue)
1254 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1255 "Expected Size (LxW)", "mm", Pair(aISNIssue.ExpectedLength(), aISNIssue.ExpectedWidth()),
1256 "Actual Size (LxW)", "mm", Pair(aISNIssue.ActualLength(), aISNIssue.ActualWidth()),
1257 theShapeIdVector)
1258 theManager.AddGroupData("Irregular Size Notch(s)", "(255, 254, 145)", aFeatureData, theCount)
1259 elif mtk.DFMSheetMetal_IrregularSizeTabIssue.CompareType(theIssue):
1260 aISTIssue = mtk.DFMSheetMetal_IrregularSizeTabIssue.Cast(theIssue)
1261 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1262 "Expected Size (LxW)", "mm", Pair(aISTIssue.ExpectedLength(), aISTIssue.ExpectedWidth()),
1263 "Actual Size (LxW)", "mm", Pair(aISTIssue.ActualLength(), aISTIssue.ActualWidth()),
1264 theShapeIdVector)
1265 theManager.AddGroupData("Irregular Size Tab(s)", "(240, 155, 89)", aFeatureData, theCount)
1266 elif mtk.DFMSheetMetal_LargeDepthBeadIssue.CompareType(theIssue):
1267 aLDBIssue = mtk.DFMSheetMetal_LargeDepthBeadIssue.Cast(theIssue)
1268 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1269 "Expected Maximum Depth", "mm", aLDBIssue.ExpectedMaxDepth(),
1270 "Actual Depth", "mm", aLDBIssue.ActualDepth(),
1271 theShapeIdVector)
1272 theManager.AddGroupData("Large Depth Bead(s)", "(129, 127, 38)", aFeatureData, theCount)
1273 elif mtk.DFMSheetMetal_SmallDepthLouverIssue.CompareType(theIssue):
1274 aSDLIssue = mtk.DFMSheetMetal_SmallDepthLouverIssue.Cast(theIssue)
1275 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1276 "Expected Minimum Depth", "mm", aSDLIssue.ExpectedMinDepth(),
1277 "Actual Depth", "mm", aSDLIssue.ActualDepth(),
1278 theShapeIdVector)
1279 theManager.AddGroupData("Small Depth Louver(s)", "(190, 127, 58)", aFeatureData, theCount)
1280 elif mtk.DFMSheetMetal_NonStandardSheetSizeIssue.CompareType(theIssue):
1281 aNSSSIssue = mtk.DFMSheetMetal_NonStandardSheetSizeIssue.Cast(theIssue)
1282 aNesrestStandardSize = aNSSSIssue.NearestStandardSheetSize()
1283 anActualSize = aNSSSIssue.ActualSheetSize()
1284 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1285 "Nearest Standard Size (LxW)", "mm", Pair(aNesrestStandardSize.Length(), aNesrestStandardSize.Width()),
1286 "Actual Size (LxW)", "mm", Pair(anActualSize.Length(), anActualSize.Width()),
1287 theShapeIdVector)
1288 theManager.AddGroupData("Non Standard Sheet Size(s)", "(0, 0, 0)", aFeatureData, theCount)
1289 elif mtk.DFMSheetMetal_NonStandardSheetThicknessIssue.CompareType(theIssue):
1290 aNSSTIssue = mtk.DFMSheetMetal_NonStandardSheetThicknessIssue.Cast(theIssue)
1291 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1292 "Nearest Standard Thickness", "mm", aNSSTIssue.NearestStandardSheetThickness(),
1293 "Actual Thickness", "mm", aNSSTIssue.ActualSheetThickness(),
1294 theShapeIdVector)
1295 theManager.AddGroupData("Non Standard Sheet Thickness(s)", "(0, 0, 0)", aFeatureData, theCount)
1296 elif mtk.DFMSheetMetal_SmallDiameterHoleIssue.CompareType(theIssue):
1297 aSDHIssue = mtk.DFMSheetMetal_SmallDiameterHoleIssue.Cast(theIssue)
1298 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1299 "Expected Minimum Diameter", "mm", aSDHIssue.ExpectedMinDiameter(),
1300 "Actual Diameter", "mm", aSDHIssue.ActualDiameter(),
1301 theShapeIdVector)
1302 theManager.AddGroupData("Small Diameter Hole(s)", "(115, 43, 245)", aFeatureData, theCount)
1303 elif mtk.DFMSheetMetal_SmallLengthFlangeIssue.CompareType(theIssue):
1304 aSLFIssue = mtk.DFMSheetMetal_SmallLengthFlangeIssue.Cast(theIssue)
1305 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1306 "Expected Minimum Length", "mm", aSLFIssue.ExpectedMinLength(),
1307 "Actual Length", "mm", aSLFIssue.ActualLength(),
1308 theShapeIdVector)
1309 theManager.AddGroupData("Small Length Flange(s)", "(88, 19, 94)", aFeatureData, theCount)
1310 elif mtk.DFMSheetMetal_SmallLengthHemBendFlangeIssue.CompareType(theIssue):
1311 aSLHBFIssue = mtk.DFMSheetMetal_SmallLengthHemBendFlangeIssue.Cast(theIssue)
1312 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1313 "Expected Minimum Length", "mm", aSLHBFIssue.ExpectedMinLength(),
1314 "Actual Length", "mm", aSLHBFIssue.ActualLength(),
1315 theShapeIdVector)
1316 theManager.AddGroupData("Small Length Hem Bend Flange(s)", "(70, 139, 51)", aFeatureData, theCount)
1317 elif mtk.DFMSheetMetal_SmallRadiusBendIssue.CompareType(theIssue):
1318 aSRBIssue = mtk.DFMSheetMetal_SmallRadiusBendIssue.Cast(theIssue)
1319 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1320 "Expected Minimum Radius", "mm", aSRBIssue.ExpectedMinRadius(),
1321 "Actual Radius", "mm", aSRBIssue.ActualRadius(),
1322 theShapeIdVector)
1323 theManager.AddGroupData("Small Radius Bend(s)", "(161, 251, 142)", aFeatureData, theCount)
1324 elif mtk.DFMSheetMetal_SmallDistanceBetweenFeaturesIssue.CompareType(theIssue):
1325 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenFeaturesIssue.Cast(theIssue)
1326 aFeatureData = MTKConverter_Report.__WriteFeatureDataToString2(
1327 "Expected Minimum Distance", "mm", aSDIssue.ExpectedMinDistanceBetweenFeatures(),
1328 "Actual Distance", "mm", aSDIssue.ActualDistanceBetweenFeatures(),
1329 theShapeIdVector)
1330 theManager.AddGroupData(MTKConverter_Report.__SmallDistanceIssueName(aSDIssue),
1331 MTKConverter_Report.__SmallDistanceIssueColor(aSDIssue),
1332 aFeatureData, theCount)
1333
1334 @staticmethod
1335 def __GetShapesId(theShape: mtk.ModelData_Shape, theType):
1336 aShapeIdVector = []
1337 aShapeIt = mtk.ModelData_ShapeIterator(theShape, theType)
1338 for aShape in aShapeIt:
1339 aShapeIdVector.append(aShape.Id())
1340 return aShapeIdVector
1341
1342 @staticmethod
1343 def __AddShapesId(theShape: mtk.ModelData_Shape, theType, theShapesIdVec):
1344 aShapeIt = mtk.ModelData_ShapeIterator(theShape, theType)
1345 for aShape in aShapeIt:
1346 theShapesIdVec.append(aShape.Id())
1347
1348 @staticmethod
1349 def __SortFeatures(theFeatures: mtk.MTKBase_FeatureList, theOrderedFeatureList: OrderedFeatureList):
1350 for aFeature in theFeatures:
1351
1352 if mtk.MTKBase_ShapeFeature.CompareType(aFeature):
1353 aShapeFeature = mtk.MTKBase_ShapeFeature.Cast(aFeature)
1354 aShapeType = mtk.ShapeType_Face
1355 if (mtk.SheetMetal_Cutout.CompareType(aFeature)
1356 or (mtk.SheetMetal_Hole.CompareType(aFeature) and not mtk.SheetMetal_ComplexHole.CompareType(aFeature))
1357 or mtk.SheetMetal_Notch.CompareType(aFeature) or mtk.SheetMetal_Tab.CompareType(aFeature)):
1358 aShapeType = mtk.ShapeType_Edge
1359 aShapeIdVector = MTKConverter_Report.__GetShapesId(aShapeFeature.Shape(), aShapeType)
1360 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1361 elif mtk.Machining_SteppedHole.CompareType(aFeature):
1362 aCompositeIdVector = []
1363 aSteppedHole = mtk.Machining_SteppedHole.Cast(aFeature);
1364 for aHole in aSteppedHole.FeatureList():
1365 aHoleShape = mtk.Machining_Hole.Cast(aHole).Shape()
1366 aShapeIdVector = MTKConverter_Report.__GetShapesId(aHoleShape, mtk.ShapeType_Face)
1367 aCompositeIdVector += aShapeIdVector
1368 theOrderedFeatureList.Append(aFeature, aCompositeIdVector)
1369 elif mtk.MTKBase_CompositeFeature.CompareType(aFeature):
1370 aCompositeFeature = mtk.MTKBase_CompositeFeature.Cast(aFeature)
1371 MTKConverter_Report.__SortFeatures(aCompositeFeature.FeatureList(), theOrderedFeatureList)
1372 continue
1373
1374
1375 elif mtk.DFMMachining_SmallDistanceBetweenThreadedHoleAndEdgeIssue.CompareType(aFeature):
1376 anIssue = mtk.DFMMachining_SmallDistanceBetweenThreadedHoleAndEdgeIssue.Cast(aFeature)
1377 aShapeIdVector = []
1378 MTKConverter_Report.__AddShapesId(anIssue.Hole().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1379 MTKConverter_Report.__AddShapesId(anIssue.Edge(), mtk.ShapeType_Edge, aShapeIdVector)
1380 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1381 elif mtk.DFMMachining_DrillingIssue.CompareType(aFeature):
1382 anIssue = mtk.DFMMachining_DrillingIssue.Cast(aFeature)
1383 aShapeIdVector = MTKConverter_Report.__GetShapesId(anIssue.Hole().Shape(), mtk.ShapeType_Face)
1384 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1385
1386
1387 elif mtk.DFMMachining_NonStandardRadiusMilledPartFloorFilletIssue.CompareType(aFeature):
1388 aNSRMPFFIssue = mtk.DFMMachining_NonStandardRadiusMilledPartFloorFilletIssue.Cast(aFeature)
1389 aShapeIdVector = MTKConverter_Report.__GetShapesId(aNSRMPFFIssue.FloorFillet(), mtk.ShapeType_Face)
1390 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1391 elif mtk.DFMMachining_DeepPocketIssue.CompareType(aFeature):
1392 aDCIssue = mtk.DFMMachining_DeepPocketIssue.Cast(aFeature)
1393 aShapeIdVector = MTKConverter_Report.__GetShapesId(aDCIssue.Pocket().Shape(), mtk.ShapeType_Face)
1394 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1395 elif mtk.DFMMachining_HighBossIssue.CompareType(aFeature):
1396 aHBIssue = mtk.DFMMachining_HighBossIssue.Cast(aFeature)
1397 aShapeIdVector = MTKConverter_Report.__GetShapesId(aHBIssue.Boss().Shape(), mtk.ShapeType_Face)
1398 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1399 elif mtk.DFMMachining_LargeMilledPartIssue.CompareType(aFeature):
1400 aShapeIdVector = []
1401 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1402 elif mtk.DFMMachining_SmallRadiusMilledPartInternalCornerIssue.CompareType(aFeature):
1403 aMSICRIssue = mtk.DFMMachining_SmallRadiusMilledPartInternalCornerIssue.Cast(aFeature)
1404 aShapeIdVector = MTKConverter_Report.__GetShapesId(aMSICRIssue.Shape(), mtk.ShapeType_Face)
1405 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1406 elif mtk.DFMMachining_NonPerpendicularMilledPartShapeIssue.CompareType(aFeature):
1407 aNPMPSIssue = mtk.DFMMachining_NonPerpendicularMilledPartShapeIssue.Cast(aFeature)
1408 aShapeIdVector = MTKConverter_Report.__GetShapesId(aNPMPSIssue.Shape(), mtk.ShapeType_Face)
1409 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1410 elif mtk.DFMMachining_MilledPartExternalEdgeFilletIssue.CompareType(aFeature):
1411 aMPEEFIssue = mtk.DFMMachining_MilledPartExternalEdgeFilletIssue.Cast(aFeature)
1412 aShapeIdVector = MTKConverter_Report.__GetShapesId(aMPEEFIssue.Fillet(), mtk.ShapeType_Face)
1413 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1414 elif mtk.DFMMachining_InconsistentRadiusMilledPartFloorFilletIssue.CompareType(aFeature):
1415 aIRMPFFIssue = mtk.DFMMachining_InconsistentRadiusMilledPartFloorFilletIssue.Cast(aFeature)
1416 aShapeIdVector = MTKConverter_Report.__GetShapesId(aIRMPFFIssue.FloorFillet(), mtk.ShapeType_Face)
1417 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1418 elif mtk.DFMMachining_NarrowRegionInPocketIssue.CompareType(aFeature):
1419 aNRIPIssue = mtk.DFMMachining_NarrowRegionInPocketIssue.Cast(aFeature)
1420 aShapeIdVector = []
1421 MTKConverter_Report.__AddShapesId(aNRIPIssue.InnerFeature(), mtk.ShapeType_Face, aShapeIdVector)
1422 MTKConverter_Report.__AddShapesId(aNRIPIssue.NarrowRegionSidewall(), mtk.ShapeType_Face, aShapeIdVector)
1423 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1424 elif mtk.DFMMachining_LargeDifferenceRegionsSizeInPocketIssue.CompareType(aFeature):
1425 aLDRSIPIssue = mtk.DFMMachining_LargeDifferenceRegionsSizeInPocketIssue.Cast(aFeature)
1426 aShapeIdVector = []
1427 MTKConverter_Report.__AddShapesId(aLDRSIPIssue.InnerFeature(), mtk.ShapeType_Face, aShapeIdVector)
1428 MTKConverter_Report.__AddShapesId(aLDRSIPIssue.MinRegionPocketSidewall(), mtk.ShapeType_Face, aShapeIdVector)
1429 MTKConverter_Report.__AddShapesId(aLDRSIPIssue.MaxRegionPocketSidewall(), mtk.ShapeType_Face, aShapeIdVector)
1430 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1431 elif mtk.DFMMachining_SmallWallThicknessIssue.CompareType(aFeature):
1432 aSWTIssue = mtk.DFMMachining_SmallWallThicknessIssue.Cast(aFeature)
1433 aShapeIdVector = MTKConverter_Report.__GetShapesId(aSWTIssue.Shape(), mtk.ShapeType_Face)
1434 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1435
1436
1437 elif mtk.DFMMachining_SmallDepthBlindBoredHoleReliefIssue.CompareType(aFeature):
1438 aBBHRIssue = mtk.DFMMachining_SmallDepthBlindBoredHoleReliefIssue.Cast(aFeature)
1439 aShapeIdVector = MTKConverter_Report.__GetShapesId(aBBHRIssue.BlindBoredHole(), mtk.ShapeType_Face)
1440 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1441 elif mtk.DFMMachining_DeepBoredHoleIssue.CompareType(aFeature):
1442 aISBHIssue = mtk.DFMMachining_DeepBoredHoleIssue.Cast(aFeature)
1443 aShapeIdVector = MTKConverter_Report.__GetShapesId(aISBHIssue.Shape(), mtk.ShapeType_Face)
1444 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1445 elif mtk.DFMMachining_IrregularTurnedPartOuterDiameterProfileReliefIssue.CompareType(aFeature):
1446 aODPRIssue = mtk.DFMMachining_IrregularTurnedPartOuterDiameterProfileReliefIssue.Cast(aFeature)
1447 aShapeIdVector = MTKConverter_Report.__GetShapesId(aODPRIssue.Face(), mtk.ShapeType_Face)
1448 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1449 elif mtk.DFMMachining_SmallRadiusTurnedPartInternalCornerIssue.CompareType(aFeature):
1450 aTSICRIssue = mtk.DFMMachining_SmallRadiusTurnedPartInternalCornerIssue.Cast(aFeature)
1451 aShapeIdVector = MTKConverter_Report.__GetShapesId(aTSICRIssue.Shape(), mtk.ShapeType_Face)
1452 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1453 elif mtk.DFMMachining_SquareEndKeywayIssue.CompareType(aFeature):
1454 aSEKIssue = mtk.DFMMachining_SquareEndKeywayIssue.Cast(aFeature)
1455 aShapeIdVector = MTKConverter_Report.__GetShapesId(aSEKIssue.Keyway().Shape(), mtk.ShapeType_Face)
1456 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1457 elif mtk.DFMMachining_NonSymmetricalAxialSlotIssue.CompareType(aFeature):
1458 aNSASIssue = mtk.DFMMachining_NonSymmetricalAxialSlotIssue.Cast(aFeature)
1459 aShapeIdVector = MTKConverter_Report.__GetShapesId(aNSASIssue.AxialSlot().Shape(), mtk.ShapeType_Face)
1460 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1461 elif mtk.DFMMachining_LargeTurnedPartIssue.CompareType(aFeature):
1462 aShapeIdVector = []
1463 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1464 elif mtk.DFMMachining_LongSlenderTurnedPartIssue.CompareType(aFeature):
1465 aShapeIdVector = []
1466 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1467
1468
1469 elif mtk.DFMMolding_IrregularCoreDepthScrewBossIssue.CompareType(aFeature):
1470 aICDSBIssue = mtk.DFMMolding_IrregularCoreDepthScrewBossIssue.Cast(aFeature)
1471 aShapeIdVector = MTKConverter_Report.__GetShapesId(aICDSBIssue.ScrewBoss().Shape(), mtk.ShapeType_Face)
1472 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1473 elif mtk.DFMMolding_IrregularCoreDiameterScrewBossIssue.CompareType(aFeature):
1474 aICDSBIssue = mtk.DFMMolding_IrregularCoreDiameterScrewBossIssue.Cast(aFeature)
1475 aShapeIdVector = MTKConverter_Report.__GetShapesId(aICDSBIssue.ScrewBoss().Shape(), mtk.ShapeType_Face)
1476 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1477 elif mtk.DFMMolding_IrregularThicknessRibIssue.CompareType(aFeature):
1478 aITRIssue = mtk.DFMMolding_IrregularThicknessRibIssue.Cast(aFeature)
1479 aShapeIdVector = MTKConverter_Report.__GetShapesId(aITRIssue.Rib().Shape(), mtk.ShapeType_Face)
1480 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1481 elif mtk.DFMMolding_IrregularWallThicknessIssue.CompareType(aFeature):
1482 aIWTIssue = mtk.DFMMolding_IrregularWallThicknessIssue.Cast(aFeature)
1483 aShapeIdVector = MTKConverter_Report.__GetShapesId(aIWTIssue.Shape(), mtk.ShapeType_Face)
1484 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1485 elif mtk.DFMMolding_IrregularWallThicknessScrewBossIssue.CompareType(aFeature):
1486 aIWTSBIssue = mtk.DFMMolding_IrregularWallThicknessScrewBossIssue.Cast(aFeature)
1487 aShapeIdVector = MTKConverter_Report.__GetShapesId(aIWTSBIssue.ScrewBoss().Shape(), mtk.ShapeType_Face)
1488 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1489 elif mtk.DFMMolding_SmallBaseRadiusRibIssue.CompareType(aFeature):
1490 aSBRRIssue = mtk.DFMMolding_SmallBaseRadiusRibIssue.Cast(aFeature)
1491 aShapeIdVector = MTKConverter_Report.__GetShapesId(aSBRRIssue.Rib().Shape(), mtk.ShapeType_Face)
1492 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1493 elif mtk.DFMMolding_SmallBaseRadiusScrewBossIssue.CompareType(aFeature):
1494 aSBRSBIssue = mtk.DFMMolding_SmallBaseRadiusScrewBossIssue.Cast(aFeature)
1495 aShapeIdVector = MTKConverter_Report.__GetShapesId(aSBRSBIssue.ScrewBoss().Shape(), mtk.ShapeType_Face)
1496 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1497 elif mtk.DFMMolding_LargeWallThicknessIssue.CompareType(aFeature):
1498 aLWTssue = mtk.DFMMolding_LargeWallThicknessIssue.Cast(aFeature)
1499 aShapeIdVector = MTKConverter_Report.__GetShapesId(aLWTssue.Shape(), mtk.ShapeType_Face)
1500 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1501 elif mtk.DFMMolding_HighScrewBossIssue.CompareType(aFeature):
1502 aHRIssue = mtk.DFMMolding_HighScrewBossIssue.Cast(aFeature)
1503 aShapeIdVector = MTKConverter_Report.__GetShapesId(aHRIssue.ScrewBoss().Shape(), mtk.ShapeType_Face)
1504 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1505 elif mtk.DFMMolding_HighRibIssue.CompareType(aFeature):
1506 aHRIssue = mtk.DFMMolding_HighRibIssue.Cast(aFeature)
1507 aShapeIdVector = MTKConverter_Report.__GetShapesId(aHRIssue.Rib().Shape(), mtk.ShapeType_Face)
1508 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1509 elif mtk.DFMMolding_SmallDraftAngleRibIssue.CompareType(aFeature):
1510 aSMARIssue = mtk.DFMMolding_SmallDraftAngleRibIssue.Cast(aFeature)
1511 aShapeIdVector = MTKConverter_Report.__GetShapesId(aSMARIssue.Rib().Shape(), mtk.ShapeType_Face)
1512 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1513 elif mtk.DFMMolding_SmallDraftAngleScrewBossIssue.CompareType(aFeature):
1514 aSDASBIssue = mtk.DFMMolding_SmallDraftAngleScrewBossIssue.Cast(aFeature)
1515 aShapeIdVector = MTKConverter_Report.__GetShapesId(aSDASBIssue.ScrewBoss().Shape(), mtk.ShapeType_Face)
1516 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1517 elif mtk.DFMMolding_SmallDistanceBetweenRibsIssue.CompareType(aFeature):
1518 aSDBRIssue = mtk.DFMMolding_SmallDistanceBetweenRibsIssue.Cast(aFeature)
1519 aShapeIdVector = []
1520 MTKConverter_Report.__AddShapesId(aSDBRIssue.FirstRib().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1521 MTKConverter_Report.__AddShapesId(aSDBRIssue.SecondRib().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1522 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1523 elif mtk.DFMMolding_SmallHoleBaseRadiusScrewBossIssue.CompareType(aFeature):
1524 aSHBRSBIssue = mtk.DFMMolding_SmallHoleBaseRadiusScrewBossIssue.Cast(aFeature)
1525 aShapeIdVector = MTKConverter_Report.__GetShapesId(aSHBRSBIssue.ScrewBoss().Shape(), mtk.ShapeType_Face)
1526 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1527 elif mtk.DFMMolding_SmallDraftAngleWallIssue.CompareType(aFeature):
1528 aSDAWIssue = mtk.DFMMolding_SmallDraftAngleWallIssue.Cast(aFeature)
1529 aShapeIdVector = MTKConverter_Report.__GetShapesId(aSDAWIssue.Shape(), mtk.ShapeType_Face)
1530 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1531 elif mtk.DFMMolding_NonChamferedScrewBossIssue.CompareType(aFeature):
1532 aWTCSBIssue = mtk.DFMMolding_NonChamferedScrewBossIssue.Cast(aFeature)
1533 aShapeIdVector = MTKConverter_Report.__GetShapesId(aWTCSBIssue.ScrewBoss().Shape(), mtk.ShapeType_Face)
1534 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1535 elif mtk.DFMMolding_SmallWallThicknessIssue.CompareType(aFeature):
1536 aSWTssue = mtk.DFMMolding_SmallWallThicknessIssue.Cast(aFeature)
1537 aShapeIdVector = MTKConverter_Report.__GetShapesId(aSWTssue.Shape(), mtk.ShapeType_Face)
1538 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1539 elif mtk.DFMMolding_SmallDistanceBetweenBossesIssue.CompareType(aFeature):
1540 aSDBBIssue = mtk.DFMMolding_SmallDistanceBetweenBossesIssue.Cast(aFeature)
1541 aShapeIdVector = []
1542 MTKConverter_Report.__AddShapesId(aSDBBIssue.FirstBoss().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1543 MTKConverter_Report.__AddShapesId(aSDBBIssue.SecondBoss().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1544 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1545
1546
1547 elif mtk.DFMSheetMetal_FlatPatternInterferenceIssue.CompareType(aFeature):
1548 aFPIIssue = mtk.DFMSheetMetal_FlatPatternInterferenceIssue.Cast(aFeature)
1549 aShapeIdVector = [aFPIIssue.FirstFace().Id(), aFPIIssue.SecondFace().Id()]
1550 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1551 elif mtk.DFMSheetMetal_IrregularCornerFilletRadiusNotchIssue.CompareType(aFeature):
1552 aICFRNIssue = mtk.DFMSheetMetal_IrregularCornerFilletRadiusNotchIssue.Cast(aFeature)
1553 aShapeIdVector = MTKConverter_Report.__GetShapesId(aICFRNIssue.Notch().Shape(), mtk.ShapeType_Edge)
1554 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1555 elif mtk.DFMSheetMetal_IrregularDepthExtrudedHoleIssue.CompareType(aFeature):
1556 aIDEHIssue = mtk.DFMSheetMetal_IrregularDepthExtrudedHoleIssue.Cast(aFeature)
1557 aShapeIdVector = MTKConverter_Report.__GetShapesId(aIDEHIssue.Hole().Shape(), mtk.ShapeType_Face)
1558 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1559 elif mtk.DFMSheetMetal_IrregularRadiusOpenHemBendIssue.CompareType(aFeature):
1560 aIROHBIssue = mtk.DFMSheetMetal_IrregularRadiusOpenHemBendIssue.Cast(aFeature)
1561 aShapeIdVector = MTKConverter_Report.__GetShapesId(aIROHBIssue.Bend().Shape(), mtk.ShapeType_Face)
1562 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1563 elif mtk.DFMSheetMetal_InconsistentRadiusBendIssue.CompareType(aFeature):
1564 aIRBIssue = mtk.DFMSheetMetal_InconsistentRadiusBendIssue.Cast(aFeature)
1565 aShapeIdVector = MTKConverter_Report.__GetShapesId(aIRBIssue.Bend().Shape(), mtk.ShapeType_Face)
1566 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1567 elif mtk.DFMSheetMetal_IrregularSizeBendReliefIssue.CompareType(aFeature):
1568 aISBRIssue = mtk.DFMSheetMetal_IrregularSizeBendReliefIssue.Cast(aFeature)
1569 aFirstActualRelief = aISBRIssue.FirstActualRelief()
1570 aSecondActualRelief = aISBRIssue.SecondActualRelief()
1571 aShapeIdVector = []
1572 MTKConverter_Report.__AddShapesId(aISBRIssue.Bend().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1573 if not aFirstActualRelief.IsNull():
1574 MTKConverter_Report.__AddShapesId(aFirstActualRelief.Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1575 if not aSecondActualRelief.IsNull():
1576 MTKConverter_Report.__AddShapesId(aSecondActualRelief.Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1577 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1578 elif mtk.DFMSheetMetal_IrregularSizeNotchIssue.CompareType(aFeature):
1579 aISNIssue = mtk.DFMSheetMetal_IrregularSizeNotchIssue.Cast(aFeature)
1580 aShapeIdVector = MTKConverter_Report.__GetShapesId(aISNIssue.Notch().Shape(), mtk.ShapeType_Edge)
1581 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1582 elif mtk.DFMSheetMetal_IrregularSizeTabIssue.CompareType(aFeature):
1583 aISTIssue = mtk.DFMSheetMetal_IrregularSizeTabIssue.Cast(aFeature)
1584 aShapeIdVector = MTKConverter_Report.__GetShapesId(aISTIssue.Tab().Shape(), mtk.ShapeType_Edge)
1585 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1586 elif mtk.DFMSheetMetal_LargeDepthBeadIssue.CompareType(aFeature):
1587 aLDBIssue = mtk.DFMSheetMetal_LargeDepthBeadIssue.Cast(aFeature)
1588 aShapeIdVector = MTKConverter_Report.__GetShapesId(aLDBIssue.Bead().Shape(), mtk.ShapeType_Face)
1589 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1590 elif mtk.DFMSheetMetal_SmallDepthLouverIssue.CompareType(aFeature):
1591 aSDLIssue = mtk.DFMSheetMetal_SmallDepthLouverIssue.Cast(aFeature)
1592 aShapeIdVector = MTKConverter_Report.__GetShapesId(aSDLIssue.Louver().Shape(), mtk.ShapeType_Face)
1593 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1594 elif mtk.DFMSheetMetal_NonStandardSheetSizeIssue.CompareType(aFeature):
1595 aShapeIdVector = []
1596 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1597 elif mtk.DFMSheetMetal_NonStandardSheetThicknessIssue.CompareType(aFeature):
1598 aShapeIdVector = []
1599 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1600 elif mtk.DFMSheetMetal_SmallDiameterHoleIssue.CompareType(aFeature):
1601 aSDHIssue = mtk.DFMSheetMetal_SmallDiameterHoleIssue.Cast(aFeature)
1602 aShapeIdVector = MTKConverter_Report.__GetShapesId(aSDHIssue.Hole().Shape(), mtk.ShapeType_Edge)
1603 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1604 elif mtk.DFMSheetMetal_SmallLengthFlangeIssue.CompareType(aFeature):
1605 aSLFIssue = mtk.DFMSheetMetal_SmallLengthFlangeIssue.Cast(aFeature)
1606 aFlange = aSLFIssue.Flange().FeatureList()
1607 aShapeIdVector = []
1608 for aFlangeFace in aFlange:
1609 if mtk.MTKBase_ShapeFeature.CompareType(aFlangeFace):
1610 aShapeFeature = mtk.MTKBase_ShapeFeature.Cast(aFlangeFace)
1611 MTKConverter_Report.__AddShapesId(aShapeFeature.Shape(), mtk.ShapeType_Face, aShapeIdVector)
1612 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1613 elif mtk.DFMSheetMetal_SmallLengthHemBendFlangeIssue.CompareType(aFeature):
1614 aSLHBFIssue = mtk.DFMSheetMetal_SmallLengthHemBendFlangeIssue.Cast(aFeature)
1615 aFlange = aSLHBFIssue.Flange().FeatureList()
1616 aShapeIdVector = []
1617 for aFlangeFace in aFlange:
1618 if mtk.MTKBase_ShapeFeature.CompareType(aFlangeFace):
1619 aShapeFeature = mtk.MTKBase_ShapeFeature.Cast(aFlangeFace)
1620 MTKConverter_Report.__AddShapesId(aShapeFeature.Shape(), mtk.ShapeType_Face, aShapeIdVector)
1621 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1622 elif mtk.DFMSheetMetal_SmallRadiusBendIssue.CompareType(aFeature):
1623 aSRBIssue = mtk.DFMSheetMetal_SmallRadiusBendIssue.Cast(aFeature)
1624 aShapeIdVector = MTKConverter_Report.__GetShapesId(aSRBIssue.Bend().Shape(), mtk.ShapeType_Face)
1625 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1626 elif mtk.DFMSheetMetal_SmallDistanceBetweenBendAndLouverIssue.CompareType(aFeature):
1627 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenBendAndLouverIssue.Cast(aFeature)
1628 aShapeIdVector = []
1629 MTKConverter_Report.__AddShapesId(aSDIssue.Bend().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1630 MTKConverter_Report.__AddShapesId(aSDIssue.Louver().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1631 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1632 elif mtk.DFMSheetMetal_SmallDistanceBetweenExtrudedHoleAndBendIssue.CompareType(aFeature):
1633 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenExtrudedHoleAndBendIssue.Cast(aFeature)
1634 aShapeIdVector = []
1635 MTKConverter_Report.__AddShapesId(aSDIssue.Hole().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1636 MTKConverter_Report.__AddShapesId(aSDIssue.Bend().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1637 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1638 elif mtk.DFMSheetMetal_SmallDistanceBetweenExtrudedHoleAndEdgeIssue.CompareType(aFeature):
1639 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenExtrudedHoleAndEdgeIssue.Cast(aFeature)
1640 aShapeIdVector = []
1641 MTKConverter_Report.__AddShapesId(aSDIssue.Hole().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1642 aShapeIdVector.append(aSDIssue.Edge().Id())
1643 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1644 elif mtk.DFMSheetMetal_SmallDistanceBetweenExtrudedHolesIssue.CompareType(aFeature):
1645 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenExtrudedHolesIssue.Cast(aFeature)
1646 aShapeIdVector = []
1647 MTKConverter_Report.__AddShapesId(aSDIssue.FirstHole().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1648 MTKConverter_Report.__AddShapesId(aSDIssue.SecondHole().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1649 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1650 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndBendIssue.CompareType(aFeature):
1651 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndBendIssue.Cast(aFeature)
1652 aShapeIdVector = []
1653 MTKConverter_Report.__AddShapesId(aSDIssue.Hole().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1654 MTKConverter_Report.__AddShapesId(aSDIssue.Bend().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1655 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1656 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndCutoutIssue.CompareType(aFeature):
1657 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndCutoutIssue.Cast(aFeature)
1658 aShapeIdVector = []
1659 MTKConverter_Report.__AddShapesId(aSDIssue.Hole().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1660 MTKConverter_Report.__AddShapesId(aSDIssue.Cutout().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1661 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1662 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndEdgeIssue.CompareType(aFeature):
1663 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndEdgeIssue.Cast(aFeature)
1664 aShapeIdVector = []
1665 MTKConverter_Report.__AddShapesId(aSDIssue.Hole().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1666 aShapeIdVector.append(aSDIssue.Edge().Id())
1667 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1668 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndLouverIssue.CompareType(aFeature):
1669 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndNotchIssue.Cast(aFeature)
1670 aShapeIdVector = []
1671 MTKConverter_Report.__AddShapesId(aSDIssue.Hole().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1672 MTKConverter_Report.__AddShapesId(aSDIssue.Louver().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1673 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1674 elif mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndNotchIssue.CompareType(aFeature):
1675 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenHoleAndNotchIssue.Cast(aFeature)
1676 aShapeIdVector = []
1677 MTKConverter_Report.__AddShapesId(aSDIssue.Hole().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1678 MTKConverter_Report.__AddShapesId(aSDIssue.Notch().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1679 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1680 elif mtk.DFMSheetMetal_SmallDistanceBetweenHolesIssue.CompareType(aFeature):
1681 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenHolesIssue.Cast(aFeature)
1682 aShapeIdVector = []
1683 MTKConverter_Report.__AddShapesId(aSDIssue.FirstHole().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1684 MTKConverter_Report.__AddShapesId(aSDIssue.SecondHole().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1685 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1686 elif mtk.DFMSheetMetal_SmallDistanceBetweenNotchAndBendIssue.CompareType(aFeature):
1687 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenNotchAndBendIssue.Cast(aFeature)
1688 aShapeIdVector = []
1689 MTKConverter_Report.__AddShapesId(aSDIssue.Notch().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1690 MTKConverter_Report.__AddShapesId(aSDIssue.Bend().Shape(), mtk.ShapeType_Face, aShapeIdVector)
1691 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1692 elif mtk.DFMSheetMetal_SmallDistanceBetweenNotchesIssue.CompareType(aFeature):
1693 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenNotchesIssue.Cast(aFeature)
1694 aShapeIdVector = []
1695 MTKConverter_Report.__AddShapesId(aSDIssue.FirstNotch().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1696 MTKConverter_Report.__AddShapesId(aSDIssue.SecondNotch().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1697 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1698 elif mtk.DFMSheetMetal_SmallDistanceBetweenTabsIssue.CompareType(aFeature):
1699 aSDIssue = mtk.DFMSheetMetal_SmallDistanceBetweenTabsIssue.Cast(aFeature)
1700 aShapeIdVector = []
1701 MTKConverter_Report.__AddShapesId(aSDIssue.FirstTab().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1702 MTKConverter_Report.__AddShapesId(aSDIssue.SecondTab().Shape(), mtk.ShapeType_Edge, aShapeIdVector)
1703 theOrderedFeatureList.Append(aFeature, aShapeIdVector)
1704
1705 @staticmethod
1706 def __WriteFeatures(theWriter: JSONWriter, theGroupName: str, theSubgroupName: str,
1707 theFeatures: mtk.MTKBase_FeatureList, theMessageForEmptyList: str):
1708 theWriter.OpenSection(theSubgroupName)
1709 theWriter.WriteData("name", theGroupName)
1710
1711 if theFeatures.IsEmpty():
1712 theWriter.WriteData("message", theMessageForEmptyList)
1713 else:
1714 aSortedFeatures = OrderedFeatureList()
1715 MTKConverter_Report.__SortFeatures(theFeatures, aSortedFeatures)
1716
1717 aFGManager = FeatureGroupManager()
1718 for i in range(aSortedFeatures.Size()):
1719 aFeature = aSortedFeatures.GetFeature(i)
1720 aCount = aSortedFeatures.GetFeatureCount(i)
1721 aShapeIDVec = aSortedFeatures.GetFeatureShapeIDs(i)
1722
1723 if mtk.MTKBase_ShapeFeature.CompareType(aFeature) or mtk.Machining_SteppedHole.CompareType(aFeature):
1724 MTKConverter_Report.__AddShapeFeature(aFGManager, mtk.MTKBase_ShapeFeature.Cast(aFeature),
1725 aCount, aShapeIDVec)
1726 elif mtk.DFMMachining_DrillingIssue.CompareType(aFeature):
1727 MTKConverter_Report.__AddDrillingIssue(aFGManager, mtk.DFMMachining_DrillingIssue.Cast(aFeature),
1728 aCount, aShapeIDVec)
1729 elif mtk.DFMMachining_MillingIssue.CompareType(aFeature):
1730 MTKConverter_Report.__AddMillingIssue(aFGManager, mtk.DFMMachining_MillingIssue.Cast(aFeature),
1731 aCount, aShapeIDVec)
1732 elif (mtk.DFMSheetMetal_BendIssue.CompareType(aFeature)
1733 or mtk.DFMSheetMetal_FlatPatternInterferenceIssue.CompareType(aFeature)
1734 or mtk.DFMSheetMetal_HoleIssue.CompareType(aFeature)
1735 or mtk.DFMSheetMetal_IrregularCornerFilletRadiusNotchIssue.CompareType(aFeature)
1736 or mtk.DFMSheetMetal_IrregularDepthExtrudedHoleIssue.CompareType(aFeature)
1737 or mtk.DFMSheetMetal_IrregularSizeNotchIssue.CompareType(aFeature)
1738 or mtk.DFMSheetMetal_IrregularSizeTabIssue.CompareType(aFeature)
1739 or mtk.DFMSheetMetal_LargeDepthBeadIssue.CompareType(aFeature)
1740 or mtk.DFMSheetMetal_SmallDepthLouverIssue.CompareType(aFeature)
1741 or mtk.DFMSheetMetal_NonStandardSheetSizeIssue.CompareType(aFeature)
1742 or mtk.DFMSheetMetal_NonStandardSheetThicknessIssue.CompareType(aFeature)
1743 or mtk.DFMSheetMetal_SmallDistanceBetweenFeaturesIssue.CompareType(aFeature)):
1744 MTKConverter_Report.__AddSheetMetalIssue(aFGManager, mtk.DFMBase_Issue.Cast(aFeature),
1745 aCount, aShapeIDVec)
1746 elif (mtk.DFMMolding_IrregularCoreDiameterScrewBossIssue.CompareType(aFeature)
1747 or mtk.DFMMolding_IrregularCoreDepthScrewBossIssue.CompareType(aFeature)
1748 or mtk.DFMMolding_IrregularThicknessRibIssue.CompareType(aFeature)
1749 or mtk.DFMMolding_IrregularWallThicknessIssue.CompareType(aFeature)
1750 or mtk.DFMMolding_IrregularWallThicknessScrewBossIssue.CompareType(aFeature)
1751 or mtk.DFMMolding_SmallBaseRadiusRibIssue.CompareType(aFeature)
1752 or mtk.DFMMolding_SmallBaseRadiusScrewBossIssue.CompareType(aFeature)
1753 or mtk.DFMMolding_LargeWallThicknessIssue.CompareType(aFeature)
1754 or mtk.DFMMolding_HighRibIssue.CompareType(aFeature)
1755 or mtk.DFMMolding_HighScrewBossIssue.CompareType(aFeature)
1756 or mtk.DFMMolding_SmallDraftAngleRibIssue.CompareType(aFeature)
1757 or mtk.DFMMolding_SmallDraftAngleScrewBossIssue.CompareType(aFeature)
1758 or mtk.DFMMolding_SmallDistanceBetweenRibsIssue.CompareType(aFeature)
1759 or mtk.DFMMolding_SmallHoleBaseRadiusScrewBossIssue.CompareType(aFeature)
1760 or mtk.DFMMolding_SmallDraftAngleWallIssue.CompareType(aFeature)
1761 or mtk.DFMMolding_NonChamferedScrewBossIssue.CompareType(aFeature)
1762 or mtk.DFMMolding_SmallWallThicknessIssue.CompareType(aFeature)
1763 or mtk.DFMMolding_SmallDistanceBetweenBossesIssue.CompareType(aFeature)):
1764 MTKConverter_Report.__AddMoldingIssue(aFGManager, mtk.DFMBase_Issue.Cast(aFeature),
1765 aCount, aShapeIDVec)
1766 elif mtk.DFMBase_Issue.CompareType(aFeature):
1767 MTKConverter_Report.__AddTurningIssue(aFGManager, mtk.DFMBase_Issue.Cast(aFeature),
1768 aCount, aShapeIDVec)
1769
1770 theWriter.WriteData("totalFeatureCount", aFGManager.TotalFeatureCount())
1771 theWriter.OpenArraySection("featureGroups")
1772 aFGManager.Write(theWriter)
1773 theWriter.CloseArraySection()
1774
1775 theWriter.CloseSection()
1776
1777 return True
1778
1779 @staticmethod
1780 def __MachiningProcessName(theOperation):
1781 aProcessMap = {
1782 mtk.Machining_OT_Milling: "CNC Machining Milling",
1783 mtk.Machining_OT_LatheMilling: "CNC Machining Lathe+Milling"
1784 }
1785
1786 if theOperation in aProcessMap:
1787 return aProcessMap[theOperation]
1788 else:
1789 return "CNC Machining"
1790
1791 @staticmethod
1792 def __HasShapes(thePart: mtk.ModelData_Part, theType):
1793 aBodyList = thePart.Bodies()
1794 for aBody in aBodyList:
1795 aShapeIt = mtk.ModelData_ShapeIterator(aBody, theType)
1796 if aShapeIt.HasNext():
1797 return True
1798 return False
1799
1800 @staticmethod
1801 def __WriteThicknessNode(theWriter: JSONWriter, theParamName: str, theParamValue: int,
1802 thePoints: wt_proc.PointPair, theNodeName: str):
1803 aFirstPoint = thePoints.First
1804 aSecondPoint = thePoints.Second
1805 theWriter.OpenSection(theNodeName)
1806 theWriter.WriteData("name", theParamName)
1807 theWriter.WriteData("units", "mm")
1808 theWriter.WriteData("value", theParamValue)
1809 theWriter.WriteData("firstPoint", Point(aFirstPoint.X(), aFirstPoint.Y(), aFirstPoint.Z()))
1810 theWriter.WriteData("secondPoint", Point(aSecondPoint.X(), aSecondPoint.Y(), aSecondPoint.Z()))
1811 theWriter.CloseSection()
1812
1813 @staticmethod
1814 def __WriteUnfoldedPartFeatures(theWriter: JSONWriter, theData: sm_proc.MTKConverter_UnfoldedPartData):
1815 theWriter.OpenSection("featureRecognitionUnfolded")
1816 theWriter.WriteData("name", "Feature Recognition")
1817
1818 if theData.myIsInit:
1819 aStream = io.StringIO()
1820 aWriter = JSONWriter(aStream, 4)
1821
1822 aWriter.WriteData("parametersCount", 3)
1823 aWriter.OpenArraySection("parameters")
1824 MTKConverter_Report.__WriteParameter(aWriter, "Length", "mm", theData.myLength)
1825 MTKConverter_Report.__WriteParameter(aWriter, "Width", "mm", theData.myWidth)
1826 MTKConverter_Report.__WriteParameter(aWriter, "Thickness", "mm", theData.myThickness)
1827 MTKConverter_Report.__WriteParameter(aWriter, "Perimeter", "mm", theData.myPerimeter)
1828 aWriter.CloseArraySection()
1829
1830 theWriter.WriteRawData(aStream.getvalue())
1831 aStream.close()
1832 else:
1833 theWriter.WriteData("message", "Unfolded part wasn't generated.")
1834
1835 theWriter.CloseSection()
1836
1837 @staticmethod
1838 def __WritePartProcessData(theWriter: JSONWriter, theProcessData):
1839 aRes = False
1840 theWriter.WriteData("partId", theProcessData.myPart.Uuid())
1841
1842 anErrorMsg = "An error occurred while processing the part."
1843 if type(theProcessData) is mach_proc.MTKConverter_MachiningData:
1844 theWriter.WriteData("process", MTKConverter_Report.__MachiningProcessName(theProcessData.myOperation))
1845 if not theProcessData.myFeatureList.IsEmpty():
1846 MTKConverter_Report.__WriteFeatures(theWriter, "Feature Recognition", "featureRecognition",
1847 theProcessData.myFeatureList, "")
1848 MTKConverter_Report.__WriteFeatures(theWriter, "Design for Manufacturing", "dfm", theProcessData.myIssueList,
1849 "Part contains no DFM improvement suggestions.")
1850 aRes = True
1851 elif not MTKConverter_Report.__HasShapes(theProcessData.myPart, mtk.ShapeType_Solid):
1852 anErrorMsg = "The part can't be analyzed due to lack of: BRep representation or solids in BRep representation."
1853 elif type(theProcessData) is mold_proc.MTKConverter_MoldingData:
1854 theWriter.WriteData("process", "Molding Analysis")
1855 if not theProcessData.myFeatureList.IsEmpty():
1856 MTKConverter_Report.__WriteFeatures(theWriter, "Feature Recognition", "featureRecognition",
1857 theProcessData.myFeatureList, "")
1858 MTKConverter_Report.__WriteFeatures(theWriter, "Design for Manufacturing", "dfm", theProcessData.myIssueList,
1859 "Part contains no DFM improvement suggestions.")
1860 aRes = True
1861 elif not MTKConverter_Report.__HasShapes(theProcessData.myPart, mtk.ShapeType_Solid):
1862 anErrorMsg = "The part can't be analyzed due to lack of: BRep representation or solids in BRep representation."
1863 elif type(theProcessData) is sm_proc.MTKConverter_SheetMetalData:
1864 theWriter.WriteData("process", "Sheet Metal")
1865 if theProcessData.myIsSheetMetalPart:
1866 MTKConverter_Report.__WriteFeatures(theWriter, "Feature Recognition", "featureRecognition",
1867 theProcessData.myFeatureList, "Part contains no features.")
1868 MTKConverter_Report.__WriteFeatures(theWriter, "Design for Manufacturing", "dfm", theProcessData.myIssueList,
1869 "Part contains no DFM improvement suggestions.")
1870
1871 anUnfoldedPartData = theProcessData.myUnfoldedPartData
1872 MTKConverter_Report.__WriteUnfoldedPartFeatures(theWriter, anUnfoldedPartData)
1873 if anUnfoldedPartData.myIsInit:
1874 MTKConverter_Report.__WriteFeatures(theWriter, "Design for Manufacturing", "dfmUnfolded",
1875 anUnfoldedPartData.myIssueList,
1876 "Unfolded part contains no DFM improvement suggestions.")
1877 aRes = True
1878 elif (not MTKConverter_Report.__HasShapes(theProcessData.myPart, mtk.ShapeType_Solid)
1879 and (not MTKConverter_Report.__HasShapes (theProcessData.myPart, mtk.ShapeType_Shell))):
1880 anErrorMsg = "The part can't be analyzed due to lack of: BRep representation, solids and shells in BRep representation."
1881 else:
1882 anErrorMsg = "The part wasn't recognized as a sheet metal part."
1883 elif type(theProcessData) is wt_proc.MTKConverter_WallThicknessData:
1884 theWriter.WriteData("process", "Wall Thickness Analysis")
1885 if theProcessData.myIsInit:
1886 MTKConverter_Report.__WriteThicknessNode (theWriter, "Minimum Thickness", theProcessData.myMinThickness,
1887 theProcessData.myMinThicknessPoints, "minThickness")
1888 MTKConverter_Report.__WriteThicknessNode (theWriter, "Maximum Thickness", theProcessData.myMaxThickness,
1889 theProcessData.myMaxThicknessPoints, "maxThickness")
1890 aRes = True
1891 elif not MTKConverter_Report.__HasShapes (theProcessData.myPart.Bodies(), cadex.ModelData_ST_Solid):
1892 anErrorMsg = "The part can't be analyzed due to lack of: BRep representation, solids in BRep representation."
1893 else:
1894 anErrorMsg = "Unrecognized process"
1895
1896 if not aRes:
1897 theWriter.WriteData("error", anErrorMsg)
1898