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