Writing Special Values (Python)¶
Writing Special Values (Python)¶
1ot = impact.gui.output_toolbox
2
3folderName = "2. Personal work"
4customerCode = "DEFAULT"
5
6def OutputNativeValue(values, name):
7 v = values.load(name)
8
9 if is_empty(v):
10 ot.add(name + ": <EMPTY>")
11 elif VarType(v) == 7: # Date
12 ot.add(name + ": VarType=" + VarType(v) + ", Value=" + str(v) + ", Year=" + Year(v) + ", MonthName=" + MonthName(Month(v)) + ", Day=" + Day(v))
13 else:
14 ot.add(name + ": VarType=" + VarType(v) + ", Value=" + v)
15
16db = impact.active_database
17folder = None
18try:
19 folder = db.projects.find(folderName)
20except Exception as exc:
21 impact.gui.output_toolbox.add(f"Failed to create object via db.projects.find(): {exc}")
22
23ot.add("Located folder '" + folder.folder_name + "'")
24d = db.create_item(ipDrawingType.dtProject, "")
25
26if not d.isNone():
27
28 ot.add("Created new project")
29
30 d.customer = db.customers.find_by_code(customerCode)
31
32 ot.add("Set project customer")
33 dbValues = d.database_values
34 us = impact.creator.unit_settings
35
36 # override creation dates using VBScript date types
37 dbValues.save("D_CREDATE", DateSerial(2008, 1, 31))
38 dbValues.save("D_CRETIME", TimeSerial(11, 10, 30))
39
40 ot.add("D_CREDATE: " + dbValues.load("D_CREDATE"))
41 ot.add("D_CRETIME: " + dbValues.load("D_CRETIME"))
42
43 # override modification dates using strings
44 dbValues.save("D_MODDATE", "31/01/2008")
45 dbValues.save("D_MODTIME", "11:10:30")
46
47 # output date/time using current Windows locale
48 ot.add("Date/Time using current Windows locale")
49 ot.add("D_MODDATE: " + dbValues.load("D_MODDATE"))
50 ot.add("D_MODTIME: " + dbValues.load("D_MODTIME"))
51
52 # load date/time using a specific locale
53 us.locale = "en-US"
54 us.distance_type = ipDistanceFormat.dfInches
55
56 dbValues.unit_settings = us
57
58 ot.add("Date/Time using en-US locale")
59 ot.add("D_MODDATE: " + dbValues.load("D_MODDATE"))
60 ot.add("D_MODTIME: " + dbValues.load("D_MODTIME"))
61
62 # overide impact.creator, modifier and version
63 d.database_values.save("D_CREATOR", db.users.item("SUPPORT").key)
64 d.database_values.save("D_MODBY", db.users.item("DESIGNER").key)
65 d.database_values.save("D_VERSION", 10)
66 a = d.active_layer
67 dbValuesL = a.database_values
68
69 # assign values using strings
70 dbValuesL.save("LENGTH", "100.00mm")
71 dbValuesL.save("WIDTH", "1in")
72
73 # assign values using variant (native types)
74 dbValuesL.save("HEIGHT", 25.4) # mm
75 dbValuesL.save("GLUED", True)
76 dbValuesL.save("OU_ANGLE", 90) # degrees
77 dbValuesL.save("OU_REAL", 99999.5555)
78 dbValuesL.save("OU_INT", 100000)
79
80 # load values as strings using current Windows locale formatting
81 ot.add("load using current users formatting and Windows locale")
82 ot.add("LENGTH: " + dbValuesL.load("LENGTH"))
83 ot.add("WIDTH: " + dbValuesL.load("WIDTH"))
84 ot.add("HEIGHT: " + dbValuesL.load("HEIGHT"))
85 ot.add("GLUED: " + dbValuesL.load("GLUED"))
86 ot.add("OU_ANGLE: " + dbValuesL.load("OU_ANGLE"))
87 ot.add("OU_REAL: " + dbValuesL.load("OU_REAL"))
88 ot.add("OU_INT: " + dbValuesL.load("OU_INT"))
89
90 # load same values using specific formatting and locale
91 us.locale = "de-DE"
92 us.distance_type = ipDistanceFormat.dfMetres
93 us.distance_decimals = 4
94 us.angle_type = ipAngleFormat.afRadians
95 us.double_decimals = 4
96
97 dbValuesL.unit_settings = us
98
99 ot.add("load using IUnitSettings and Locale (de-DE)")
100 ot.add("LENGTH: " + dbValuesL.load("LENGTH"))
101 ot.add("WIDTH: " + dbValuesL.load("WIDTH"))
102 ot.add("HEIGHT: " + dbValuesL.load("HEIGHT"))
103 ot.add("GLUED: " + dbValuesL.load("GLUED"))
104 ot.add("OU_ANGLE: " + dbValuesL.load("OU_ANGLE"))
105 ot.add("OU_REAL: " + dbValuesL.load("OU_REAL"))
106 ot.add("OU_INT: " + dbValuesL.load("OU_INT"))
107
108 # load values using variants (native data types)
109 dbValuesL.unit_settings = None
110 dbValues.values_as_variants = True
111 dbValuesL.values_as_variants = True
112
113 ot.add("load using native types (Impacts internal impact.units: mm, deg etc regardless of locale)")
114 OutputNativeValue(dbValues, "D_NAME")
115 OutputNativeValue(dbValues, "D_MODDATE")
116 OutputNativeValue(dbValues, "D_MODTIME")
117
118 OutputNativeValue(dbValuesL, "LENGTH")
119 OutputNativeValue(dbValuesL, "WIDTH")
120 OutputNativeValue(dbValuesL, "HEIGHT")
121 OutputNativeValue(dbValuesL, "GLUED")
122 OutputNativeValue(dbValuesL, "OU_ANGLE")
123 OutputNativeValue(dbValuesL, "OU_REAL")
124 OutputNativeValue(dbValuesL, "OU_INT")
125 us = impact.creator.unit_settings
126
127 us.distance_type = ipDistanceFormat.dfInches
128 us.angle_type = ipAngleFormat.afGradients
129
130 dbValuesL.unit_settings = us
131
132 # we want distances returned as inches, angles as gradients
133 ot.add("load using native types (specific impact.units: inches, gradients")
134 OutputNativeValue(dbValuesL, "LENGTH")
135 OutputNativeValue(dbValuesL, "OU_ANGLE")
136
137 # assign values using native types using inches and gradients
138 dbValuesL.save("LENGTH", 6) # inches
139 dbValuesL.save("OU_ANGLE", 200) # gradients ~ 180deg
140
141 ot.add("load using native types (specific impact.units: inches, gradients")
142 OutputNativeValue(dbValuesL, "LENGTH")
143 OutputNativeValue(dbValuesL, "OU_ANGLE")
144
145 us.distance_type = ipDistanceFormat.dfMillimetres
146 us.angle_type = ipAngleFormat.afDegrees
147
148 ot.add("load again using native types (specific impact.units: mm, degrees")
149 OutputNativeValue(dbValuesL, "LENGTH")
150 OutputNativeValue(dbValuesL, "OU_ANGLE")
151
152 dbValuesL.values_as_variants = False
153 dbValuesL.unit_settings = None
154
155 # assign date/time using current locale to layer values
156 dbValuesL.save("OU_SCOCRE", "31/1/2009")
157 dbValuesL.save("OU_SCOTIM", "22:57:20.000")
158
159 ot.add("OU_SCOCRE: " + dbValuesL.load("OU_SCOCRE"))
160 ot.add("OU_SCOTIM: " + dbValuesL.load("OU_SCOTIM"))
161
162 # assign date using a built in VBScript date values to layer values
163 dbValuesL.save("OU_SCOCRE", DateSerial(2009, 1, 31))
164 dbValuesL.save("OU_SCOTIM", TimeSerial(23, 51, 20))
165
166 ot.add("OU_SCOCRE: " + dbValuesL.load("OU_SCOCRE"))
167 ot.add("OU_SCOTIM: " + dbValuesL.load("OU_SCOTIM"))
168
169 if d.save_as("", "DB Date Test", "", folder, True):
170
171 ot.add("Successfully saved new project")
172 di = d.database_item
173
174 if di.close_and_release():
175
176 ot.add("Successfully closed and released")
177
178 # check saved values
179 ot.add("D_CREATED: " + di.created_date_time)
180 ot.add("D_MODIFIED: " + di.modified_date_time)
181 ot.add("D_CREATOR: " + di.created_by.full_name)
182 ot.add("D_MODBY: " + di.modified_by.full_name)
183 ot.add("D_VERSION: " + di.version)
184
185 # can also retrieve values directly
186 # set dv = di.values
187
188 # ot.add "D_CREDATE: " + dv.load("D_CREDATE")
189 # ot.add "D_CRETIME: " + dv.load("D_CRETIME")
190 # ot.add "D_MODDATE: " + dv.load("D_CREDATE")
191 # ot.add "D_MODTIME: " + dv.load("D_CRETIME")
192
193 # check saved layer values
194 ot.add("Layer Count: " + di.layers.count)
195 l = None
196 try:
197 l = di.layers.item(1)
198 except Exception as exc:
199 pass
200 impact.gui.output_toolbox.add(f"Failed to create object via di.layers.item(): {exc}")
201
202 ot.add("Layer: " + l.name + " (" + l.type + ")")
203
204 ot.add("OU_SCOCRE: " + l.values.load("OU_SCOCRE"))
205 ot.add("OU_SCOTIM: " + l.values.load("OU_SCOTIM"))
206
207 else:
208
209 ot.add("Unable to close and release project")
210
211 else:
212
213 ot.add("Unable to save new project")
214
215else:
216
217 ot.add("Unable to create new project")
218
219ot.clear()