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()