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 os
31import sys
32
33from pathlib import Path
34
35import mtk.MTKCore as mtk
36
37sys.path.append(os.path.abspath(os.path.dirname(Path(__file__).resolve()) + "/../../"))
38sys.path.append(os.path.abspath(os.path.dirname(Path(__file__).resolve()) + "/../../helpers/"))
39
40import LicenseHelper
41
42import mtk_license as license
43
44
45class DrawingElementVisitor(mtk.Drawing_ElementVoidVisitor):
46 def __init__(self):
47 super().__init__()
48 self.myCurveSetCounter = 0
49 self.myHatchCounter = 0
50 self.myTextCounter = 0
51
52 def VisitCurveSet(self, theElement: mtk.Drawing_CurveSet):
53 print (f"------- CurveSet <{self.myCurveSetCounter}>")
54 print (f"--------- number of curves: {theElement.NumberOfCurves()}")
55 self.myCurveSetCounter += 1
56
57 def VisitHatch(self, theElement: mtk.Drawing_Hatch):
58 print (f"------- Hatch <{self.myHatchCounter}>")
59 print (f"--------- number of contours: {theElement.NumberOfContours()}")
60 aNumberOfCurves = 0
61 for i in range (theElement.NumberOfContours()):
62 aNumberOfCurves += theElement.Contour (i).NumberOfCurves()
63 print (f"--------- number of curves: {aNumberOfCurves}")
64 print (f"--------- pattern: {self.PatternToString (theElement.Pattern())}")
65 print (f"--------- angle: {theElement.Angle()}")
66 print (f"--------- scale: {theElement.Scale()}")
67 self.myHatchCounter += 1
68
69 def VisitText(self, theElement: mtk.Drawing_Text):
70 print (f"------- Text <{self.myTextCounter}>")
71 print (f"--------- text: \"{theElement.GetText()}\"")
72 print (f"--------- origin: {self.PointToString(theElement.TextOrigin())}")
73 print (f"--------- rotation: {theElement.TextProperties().Rotation()}")
74 print (f"--------- font size: {theElement.FontSize()}")
75 self.myTextCounter += 1
76
77 def PointToString(self, thePoint: mtk.Geom_Point2d):
78 return f"({thePoint.X()}; {thePoint.Y()})"
79
80 def PatternToString(self, thePattern):
81 aMap = {
82 mtk.Drawing_Hatch.PatternType_Solid: "Solid",
83 mtk.Drawing_Hatch.PatternType_ANSI_31: "ANSI 31",
84 mtk.Drawing_Hatch.PatternType_ANSI_32: "ANSI 32",
85 mtk.Drawing_Hatch.PatternType_ANSI_33: "ANSI 33",
86 mtk.Drawing_Hatch.PatternType_ANSI_34: "ANSI 34",
87 mtk.Drawing_Hatch.PatternType_ANSI_35: "ANSI 35",
88 mtk.Drawing_Hatch.PatternType_ANSI_36: "ANSI 36",
89 mtk.Drawing_Hatch.PatternType_ANSI_37: "ANSI 37",
90 mtk.Drawing_Hatch.PatternType_ANSI_38: "ANSI 38",
91 mtk.Drawing_Hatch.PatternType_ISO_02: "ISO 02",
92 mtk.Drawing_Hatch.PatternType_ISO_03: "ISO 03",
93 mtk.Drawing_Hatch.PatternType_ISO_04: "ISO 04",
94 mtk.Drawing_Hatch.PatternType_ISO_05: "ISO 05",
95 mtk.Drawing_Hatch.PatternType_ISO_06: "ISO 06",
96 mtk.Drawing_Hatch.PatternType_ISO_07: "ISO 07",
97 mtk.Drawing_Hatch.PatternType_ISO_08: "ISO 08",
98 mtk.Drawing_Hatch.PatternType_ISO_09: "ISO 09",
99 mtk.Drawing_Hatch.PatternType_ISO_10: "ISO 10",
100 mtk.Drawing_Hatch.PatternType_ISO_11: "ISO 11",
101 mtk.Drawing_Hatch.PatternType_ISO_12: "ISO 12",
102 mtk.Drawing_Hatch.PatternType_ISO_13: "ISO 13",
103 mtk.Drawing_Hatch.PatternType_ISO_14: "ISO 14",
104 mtk.Drawing_Hatch.PatternType_ISO_15: "ISO 15"
105 }
106 if thePattern in aMap: return aMap[thePattern]
107 else: return "Other"
108
109
110def ExploreSheet(theSheet: mtk.Drawing_Sheet):
111 aViewIt = mtk.Drawing_Sheet_ViewIterator(theSheet)
112 aViewCounter = 0
113 while aViewIt.HasNext():
114 aView = aViewIt.Next()
115 print (f"---- View <{aViewCounter}>")
116 aVisitor = DrawingElementVisitor()
117 aView.Accept(aVisitor)
118 aViewCounter += 1
119
120
121def ExploreDrawing(theDrawing: mtk.Drawing_Drawing):
122 aSheetIt = mtk.Drawing_Drawing_SheetIterator(theDrawing)
123 aSheetCounter = 0
124 while (aSheetIt.HasNext()):
125 aSheet = aSheetIt.Next()
126 print (f"-- Sheet <{aSheetCounter}>")
127 ExploreSheet(aSheet)
128 aSheetCounter += 1
129
130def main(theSource: str):
131 aKey = license.Value()
132
133 if not LicenseHelper.SetupRuntimeKey() :
134 return 1
135
136 try:
137 mtk.LicenseManager.Activate(aKey)
138 except mtk.LicenseError as anException:
139 mtk.LicenseManager.Deactivate()
140 print("Failed to activate Manufacturing Toolkit license: " + anException.what())
141 return 1
142
143
144 aReaderParameters = mtk.ModelData_ModelReaderParameters()
145 aReaderParameters.SetReadDrawing(True)
146 aReader = mtk.ModelData_ModelReader()
147 aReader.SetParameters(aReaderParameters)
148
149 aModel = mtk.ModelData_Model()
150
151 if not aReader.Read (mtk.UTF16String(theSource), aModel):
152 mtk.LicenseManager.Deactivate()
153 print(f"Failed to read the file {theSource}")
154 return 1
155
156 aDrawing = aModel.Drawing()
157 if not aDrawing:
158 mtk.LicenseManager.Deactivate()
159 print("The model doesn't contain a drawing")
160 return 1
161
162 print(f"Drawing \"{aModel.Name()}\":")
163 ExploreDrawing (aDrawing)
164
165 mtk.LicenseManager.Deactivate()
166
167 return 0
168
169if __name__ == "__main__":
170 if len(sys.argv) != 2:
171 print("Usage: <input_file>, where:")
172 print(" <input_file> is a name of the file to be read")
173 sys.exit()
174
175 aSource = os.path.abspath(sys.argv[1])
176
177 sys.exit(main(aSource))