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