-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathFMEDotNetTest.fmw
374 lines (345 loc) · 27.6 KB
/
FMEDotNetTest.fmw
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
#! <?xml version="1.0" encoding="UTF-8" ?>
#! <WORKSPACE
#
#
# Command-line to run this workspace:
#
#
# "C:\Program Files\FME\FME2017\fme.exe" "FMEDotNetTest.fmw"
#
#
#! FME_DOCUMENT_GUID="14ebd397-dd64-4a37-a08b-59bc4e0ddbb5"
#! LOG_MAX_RECORDED_FEATURES="200"
#! DOC_EXTENTS="2535.17 510.255"
#! LAST_SAVE_BUILD="FME(R) 2017.0.1.1 (20170512 - Build 17291 - WIN64)"
#! PYTHON_COMPATIBILITY="27"
#! PASSWORD=""
#! END_PYTHON=""
#! USE_MARKDOWN=""
#! WARN_INVALID_XFORM_PARAM="Yes"
#! CATEGORY=""
#! SHOW_ANNOTATIONS="true"
#! DESCRIPTION=""
#! FME_STROKE_MAX_DEVIATION="0"
#! MARKDOWN_DESCRIPTION=""
#! FME_SERVER_SERVICES=""
#! MARKDOWN_USAGE=""
#! TERMINATE_REJECTED="NO"
#! SOURCE_ROUTING_FILE=""
#! TITLE=""
#! WORKSPACE_VERSION="1"
#! VIEW_POSITION="-8450.08 4403.17"
#! BEGIN_TCL=""
#! BEGIN_PYTHON=""
#! MAX_LOG_FEATURES="200"
#! SHOW_INFO_NODES="true"
#! FME_DOCUMENT_PRIORGUID="37b6e082-ad55-4bc8-9cbc-23941e09cff9,05e7f720-df32-4738-a916-dfa1cfb206b0,8931e167-eadb-41d4-9ced-93f463b0f11c,0ee207eb-0347-4f1e-a732-df4d3369f850,e87c540a-e891-4c05-a068-45490599d029,c0e72e51-3d72-484d-936b-782a9f60dbd0,f519c495-e62f-4a85-8aa2-b3d36249ba17,029d7049-979d-4ee2-81e2-d29e8951f5ed,5aa30d6f-192d-4743-9f1a-c74046201e0c,e1b5c347-6498-4ad6-b98f-93015f937ef5,a5b1ddb2-81d0-4061-8667-c495c4a3d0b6,0b3b0069-ff11-4117-9690-f535b3b7be51,2072ee02-a066-4cfc-b394-6982f93b4152,b7b55595-53ba-4dd3-8709-30ee9b1e09c9,eeb0f183-c706-47fa-8a7b-45aec2651fc6,4fc866ab-918a-43f2-b437-542abc695b7c,80d7e690-02f0-44c9-8907-efea3387b7cb,0f1668a2-6971-45fe-8310-d24becf5b76d,d7e9c9e9-0ede-4c70-8573-d467cc6109ef,3f1aaa8b-b209-4026-9b5c-4fad89566d96,9a63881c-c501-4323-87d7-477d11c15daa,3cacda85-90ed-42c7-9732-1944eae4ba32,2ca47d93-728a-461d-b055-92ec613e8015,b5b9aec5-13d5-43cb-a4a9-f28e06312bfd,6259fa94-2036-4271-81cb-6a12ac38e3f3,d6377309-2a29-40cc-af90-469b3d86e036,9ca385f4-be3b-4703-b049-f8d85bcf1235,f4080396-0167-48a2-bd0e-33ceac7f53cf,7160a15f-a344-44bb-90d4-f08c6267ba15"
#! LOG_FILE=""
#! IGNORE_READER_FAILURE="No"
#! REDIRECT_TERMINATORS="NONE"
#! FME_IMPLICIT_CSMAP_REPROJECTION_MODE="Auto"
#! EXPLICIT_BOOKMARK_ORDER="false"
#! FME_BUILD_NUM="17291"
#! USAGE=""
#! MULTI_WRITER_DATASET_ORDER="BY_ID"
#! FME_GEOMETRY_HANDLING="Enhanced"
#! LAST_SAVE_DATE="2017-07-21T12:32:09"
#! ATTR_TYPE_ENCODING="SDF"
#! FME_REPROJECTION_ENGINE="FME"
#! HISTORY=""
#! SOURCE="NONE"
#! ZOOM_SCALE="100"
#! END_TCL=""
#! DESTINATION_ROUTING_FILE=""
#! DESTINATION="NONE"
#! DOC_TOP_LEFT="-8345.61 3775.04"
#! >
#! <DATASETS>
#! </DATASETS>
#! <DATA_TYPES>
#! </DATA_TYPES>
#! <GEOM_TYPES>
#! </GEOM_TYPES>
#! <FEATURE_TYPES>
#! </FEATURE_TYPES>
#! <FMESERVER>
#! </FMESERVER>
#! <GLOBAL_PARAMETERS>
#! </GLOBAL_PARAMETERS>
#! <COMMENTS>
#! </COMMENTS>
#! <CONSTANTS>
#! </CONSTANTS>
#! <BOOKMARKS>
#! </BOOKMARKS>
#! <TRANSFORMERS>
#! <TRANSFORMER
#! IDENTIFIER="2"
#! TYPE="Creator"
#! VERSION="5"
#! POSITION="-8345.61 4285.3"
#! BOUNDING_RECT="-8345.61 4285.3 -1 -1"
#! ORDER="5e+14"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! LAST_PARM_EDIT="16174"
#! >
#! <OUTPUT_FEAT NAME="CREATED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0" />
#! <XFORM_PARM PARM_NAME="TRANSFORMER_GROUP" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="Creator"/>
#! <XFORM_PARM PARM_NAME="PARAMETERS_GROUP" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="GEOMTYPE" PARM_VALUE="Geometry Object"/>
#! <XFORM_PARM PARM_NAME="GEOM" PARM_VALUE="<lt>?xml<space>version=<quote>1.0<quote><space>encoding=<quote>US_ASCII<quote><space>standalone=<quote>no<quote><space>?<gt><lt>geometry<space>dimension=<quote>2<quote><gt><lt>null<solidus><gt><lt><solidus>geometry<gt>"/>
#! <XFORM_PARM PARM_NAME="ATEND" PARM_VALUE="no"/>
#! <XFORM_PARM PARM_NAME="NUM" PARM_VALUE="1"/>
#! <XFORM_PARM PARM_NAME="CRE_ATTR" PARM_VALUE="_creation_instance"/>
#! <XFORM_PARM PARM_NAME="COORDS" PARM_VALUE="<Unused>"/>
#! <XFORM_PARM PARM_NAME="COORDSYS" PARM_VALUE=""/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="4"
#! TYPE="Inspector"
#! VERSION="3"
#! POSITION="-5810.44 4084.67"
#! BOUNDING_RECT="-5810.44 4084.67 -1 -1"
#! ORDER="5e+14"
#! PARMS_EDITED="false"
#! ENABLED="true"
#! LAST_PARM_EDIT="16174"
#! >
#! <XFORM_PARM PARM_NAME="VECTOR_GROUP" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="TRANSFORMER_GROUP" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="AREA_COLOR" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="RASTER_START_COL" PARM_VALUE="<Unused>"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="Inspector"/>
#! <XFORM_PARM PARM_NAME="RASTER_NUM_COLS" PARM_VALUE="<Unused>"/>
#! <XFORM_PARM PARM_NAME="THINNER_INTERVAL" PARM_VALUE="<Unused>"/>
#! <XFORM_PARM PARM_NAME="POINTCLOUD_GROUP" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="TACKATTRS" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="THINNER_TYPE_DISPLAY" PARM_VALUE="No Thinning"/>
#! <XFORM_PARM PARM_NAME="RASTER_NUM_ROWS" PARM_VALUE="<Unused>"/>
#! <XFORM_PARM PARM_NAME="RASTER_GROUP" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="RASTER_START_ROW" PARM_VALUE="<Unused>"/>
#! <XFORM_PARM PARM_NAME="PEN_COLOR" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="THINNER_MAX_NUM_POINTS" PARM_VALUE="<Unused>"/>
#! <XFORM_PARM PARM_NAME="RASTER_VISUALIZATION_OPTION" PARM_VALUE="No Reduction"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="3"
#! TYPE="DotNetCaller"
#! VERSION="0"
#! POSITION="-7719.83 4019.67"
#! BOUNDING_RECT="-7719.83 4019.67 -1 -1"
#! ORDER="5e+14"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! LAST_PARM_EDIT="16174"
#! >
#! <OUTPUT_FEAT NAME="OUTPUT"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0" />
#! <XFORM_PARM PARM_NAME="TRANSFORMER_GROUP" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="DotNetCaller"/>
#! <XFORM_PARM PARM_NAME="PARAMETERS_GROUP" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="DOTNET_ASSEMBLY_FILENAME_ATTR" PARM_VALUE="FMEDotNetCallerSample.dll"/>
#! <XFORM_PARM PARM_NAME="DOTNET_ASSEMBLY_FACTORY_PARAMS_ATTR" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="DOTNET_ASSEMBLY_FACTORY_NAME_ATTR" PARM_VALUE=""/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="7"
#! TYPE="DotNetCaller"
#! VERSION="0"
#! POSITION="-7121.95 3775.04"
#! BOUNDING_RECT="-7121.95 3775.04 -1 -1"
#! ORDER="5e+14"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! LAST_PARM_EDIT="16174"
#! >
#! <OUTPUT_FEAT NAME="OUTPUT"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0" />
#! <XFORM_PARM PARM_NAME="TRANSFORMER_GROUP" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="DotNetCaller_2"/>
#! <XFORM_PARM PARM_NAME="PARAMETERS_GROUP" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="DOTNET_ASSEMBLY_FILENAME_ATTR" PARM_VALUE="FMEDotNetCallerSample.dll"/>
#! <XFORM_PARM PARM_NAME="DOTNET_ASSEMBLY_FACTORY_PARAMS_ATTR" PARM_VALUE="param1 param2"/>
#! <XFORM_PARM PARM_NAME="DOTNET_ASSEMBLY_FACTORY_NAME_ATTR" PARM_VALUE="FMEDotNetCallerFactoryA"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="10"
#! TYPE="DotNetCaller"
#! VERSION="0"
#! POSITION="-6471.94 3956.29"
#! BOUNDING_RECT="-6471.94 3956.29 -1 -1"
#! ORDER="5e+14"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! LAST_PARM_EDIT="16174"
#! >
#! <OUTPUT_FEAT NAME="OUTPUT"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0" />
#! <XFORM_PARM PARM_NAME="TRANSFORMER_GROUP" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="DotNetCaller_3"/>
#! <XFORM_PARM PARM_NAME="PARAMETERS_GROUP" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="DOTNET_ASSEMBLY_FILENAME_ATTR" PARM_VALUE="FMEDotNetCallerSample.dll"/>
#! <XFORM_PARM PARM_NAME="DOTNET_ASSEMBLY_FACTORY_PARAMS_ATTR" PARM_VALUE="param3 param4"/>
#! <XFORM_PARM PARM_NAME="DOTNET_ASSEMBLY_FACTORY_NAME_ATTR" PARM_VALUE="FMEDotNetCallerFactoryB"/>
#! </TRANSFORMER>
#! </TRANSFORMERS>
#! <FEAT_LINKS>
#! <FEAT_LINK
#! IDENTIFIER="5"
#! SOURCE_NODE="2"
#! TARGET_NODE="3"
#! SOURCE_PORT_DESC="fo 0 CREATED"
#! TARGET_PORT_DESC="fi 0 "
#! ENABLED="true"
#! EXECUTION_IDX="0"
#! HIDDEN="false"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="8"
#! SOURCE_NODE="3"
#! TARGET_NODE="7"
#! SOURCE_PORT_DESC="fo 0 OUTPUT"
#! TARGET_PORT_DESC="fi 0 "
#! ENABLED="true"
#! EXECUTION_IDX="0"
#! HIDDEN="false"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="11"
#! SOURCE_NODE="7"
#! TARGET_NODE="10"
#! SOURCE_PORT_DESC="fo 0 OUTPUT"
#! TARGET_PORT_DESC="fi 0 "
#! ENABLED="true"
#! EXECUTION_IDX="0"
#! HIDDEN="false"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="12"
#! SOURCE_NODE="10"
#! TARGET_NODE="4"
#! SOURCE_PORT_DESC="fo 0 OUTPUT"
#! TARGET_PORT_DESC="fi 0 "
#! ENABLED="true"
#! EXECUTION_IDX="0"
#! HIDDEN="false"
#! EXTRA_POINTS=""
#! />
#! </FEAT_LINKS>
#! <BREAKPOINTS>
#! </BREAKPOINTS>
#! <ATTR_LINKS>
#! </ATTR_LINKS>
#! <SUBDOCUMENTS>
#! </SUBDOCUMENTS>
#! <LOOKUP_TABLES>
#! </LOOKUP_TABLES>
#! </WORKSPACE>
FME_PYTHON_VERSION 27
#! START_HEADER
#! START_WB_HEADER
READER_TYPE NULL
READER_KEYWORD NULL_SOURCE
NULL_SOURCE_DATASET null
WRITER_TYPE NULL
WRITER_KEYWORD NULL_DEST
NULL_DEST_DATASET null
#! END_WB_HEADER
#! START_WB_HEADER
#! END_WB_HEADER
#! END_HEADER
LOG_FILENAME "$(FME_MF_DIR)FMEDotNetTest.log"
LOG_APPEND NO
LOG_MAX_FEATURES 200
LOG_MAX_RECORDED_FEATURES 200
FME_REPROJECTION_ENGINE FME
FME_IMPLICIT_CSMAP_REPROJECTION_MODE Auto
FME_GEOMETRY_HANDLING Enhanced
FME_STROKE_MAX_DEVIATION 0
LOG_FILTER_MASK -1
# -------------------------------------------------------------------------
MULTI_READER_CONTINUE_ON_READER_FAILURE No
# -------------------------------------------------------------------------
MACRO WORKSPACE_NAME FMEDotNetTest
MACRO FME_VIEWER_APP fmedatainspector
# -------------------------------------------------------------------------
INCLUDE [ if {[info exists env(FME_TEMP)] && [file isdirectory $env(FME_TEMP)]} {set gVisualizerTemp $env(FME_TEMP)} elseif {[info exists env(TEMP)] && [file isdirectory $env(TEMP)]} {set gVisualizerTemp $env(TEMP)} elseif { $tcl_platform(platform) == "unix" } {set gVisualizerTemp "/tmp"} else {set gVisualizerTemp c:}; regsub -all {[ ,&]} {$(WORKSPACE_NAME)} {_} wsname; set gVisualizerTemp $gVisualizerTemp/${wsname}_[clock format [clock seconds] -format %H%M%S]; puts "MACRO WORKSPACE_TEMP_DIR $gVisualizerTemp";
MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/inspector.ffs
MACRO VISUALIZER_SCHEMA_FILE $(WORKSPACE_TEMP_DIR)/inspector.fsc
MACRO VISUALIZER_CREATE_SPATIAL_INDEX YES
DEFAULT_MACRO WB_CURRENT_CONTEXT
# -------------------------------------------------------------------------
Tcl2 proc Creator_CoordSysRemover {} { global FME_CoordSys; set FME_CoordSys {}; }
MACRO Creator_XML NOT_ACTIVATED
MACRO Creator_CLASSIC NOT_ACTIVATED
MACRO Creator_2D3D 2D_GEOMETRY
MACRO Creator_COORDS <Unused>
INCLUDE [ if { {Geometry Object} == {Geometry Object} } { puts {MACRO Creator_XML *} } ]
INCLUDE [ if { {Geometry Object} == {2D Coordinate List} } { puts {MACRO Creator_2D3D 2D_GEOMETRY}; puts {MACRO Creator_CLASSIC *} } ]
INCLUDE [ if { {Geometry Object} == {3D Coordinate List} } { puts {MACRO Creator_2D3D 3D_GEOMETRY}; puts {MACRO Creator_CLASSIC *} } ]
INCLUDE [ if { {Geometry Object} == {2D Min/Max Box} } { set comment { We need to turn the COORDS which are minX minY maxX maxY into a full polygon list of coordinates }; set splitCoords [split [string trim {<Unused>}]]; if { [llength $splitCoords] > 4} { set trimmedCoords {}; foreach item $splitCoords { if { $item != {} } {lappend trimmedCoords $item} }; set splitCoords $trimmedCoords; }; if { [llength $splitCoords] != 4 } { error {Creator: Coordinate list is expected to be a space delimited list of four numbers as 'minx miny maxx maxy' - `<Unused>' is invalid}; }; set minX [lindex $splitCoords 0]; set minY [lindex $splitCoords 1]; set maxX [lindex $splitCoords 2]; set maxY [lindex $splitCoords 3]; puts "MACRO Creator_COORDS $minX $minY $minX $maxY $maxX $maxY $maxX $minY $minX $minY"; puts {MACRO Creator_2D3D 2D_GEOMETRY}; puts {MACRO Creator_CLASSIC *} } ]
FACTORY_DEF $(Creator_XML) CreationFactory FACTORY_NAME Creator_XML_Creator CREATE_AT_END no OUTPUT FEATURE_TYPE _____CREATED______ @Geometry(FROM_ENCODED_STRING,<lt>?xml<space>version=<quote>1.0<quote><space>encoding=<quote>US_ASCII<quote><space>standalone=<quote>no<quote><space>?<gt><lt>geometry<space>dimension=<quote>2<quote><gt><lt>null<solidus><gt><lt><solidus>geometry<gt>)
FACTORY_DEF $(Creator_CLASSIC) CreationFactory FACTORY_NAME Creator_CLASSIC_Creator $(Creator_2D3D) $(Creator_COORDS) CREATE_AT_END no OUTPUT FEATURE_TYPE _____CREATED______
FACTORY_DEF * TeeFactory FACTORY_NAME Creator_Cloner INPUT FEATURE_TYPE _____CREATED______ NUMBER_OF_COPIES 1 COPY_NUMBER_ATTRIBUTE "_creation_instance" OUTPUT FEATURE_TYPE Creator_CREATED @Tcl2(Creator_CoordSysRemover) @CoordSys() fme_feature_type Creator
FACTORY_DEF * BranchingFactory FACTORY_NAME "Creator_CREATED Brancher -1 5" INPUT FEATURE_TYPE Creator_CREATED TARGET_FACTORY "$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET" OUTPUT PASSED FEATURE_TYPE * @RemoveAttributes("Creator_CREATED Brancher -1 5".BranchingFactory.Count)
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME "$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET" INPUT FEATURE_TYPE * OUTPUT FEATURE_TYPE *
# -------------------------------------------------------------------------
FACTORY_DEF * FMEDotNetWrapperFactory FACTORY_NAME DotNetCaller INPUT FEATURE_TYPE Creator_CREATED DOTNET_ASSEMBLY_FILENAME DotNetCaller DOTNET_ASSEMBLY_FILENAME "FMEDotNetCallerSample.dll" DOTNET_ASSEMBLY_FACTORY_NAME "" DOTNET_ASSEMBLY_FACTORY_PARAMS "" OUTPUT OUTPUT FEATURE_TYPE DotNetCaller_OUTPUT
# -------------------------------------------------------------------------
FACTORY_DEF * FMEDotNetWrapperFactory FACTORY_NAME DotNetCaller_2 INPUT FEATURE_TYPE DotNetCaller_OUTPUT DOTNET_ASSEMBLY_FILENAME DotNetCaller DOTNET_ASSEMBLY_FILENAME "FMEDotNetCallerSample.dll" DOTNET_ASSEMBLY_FACTORY_NAME "FMEDotNetCallerFactoryA" DOTNET_ASSEMBLY_FACTORY_PARAMS "param1 param2" OUTPUT OUTPUT FEATURE_TYPE DotNetCaller_2_OUTPUT
# -------------------------------------------------------------------------
FACTORY_DEF * FMEDotNetWrapperFactory FACTORY_NAME DotNetCaller_3 INPUT FEATURE_TYPE DotNetCaller_2_OUTPUT DOTNET_ASSEMBLY_FILENAME DotNetCaller DOTNET_ASSEMBLY_FILENAME "FMEDotNetCallerSample.dll" DOTNET_ASSEMBLY_FACTORY_NAME "FMEDotNetCallerFactoryB" DOTNET_ASSEMBLY_FACTORY_PARAMS "param3 param4" OUTPUT OUTPUT FEATURE_TYPE DotNetCaller_3_OUTPUT
# -------------------------------------------------------------------------
# Set the directive to add all the meta-attributes to the features.
# We do this so users see all possible information in the viewed
# features.
READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename
# Assumption is that the workspace temp dir has been already set and created. See controldefs.cpp - ControlDefs::writeVisualizerTempDir
DEFAULT_MACRO WORKSPACE_TEMP_DIR
INCLUDE [ set grpByAttrs {}; if { [string length $grpByAttrs] > 0 } { if { [string first "@EvaluateExpression" $grpByAttrs] == 0 } { puts "MACRO CATMAC _$grpByAttrs" ; } else { set catter "" ; set comma "" ; foreach attr $grpByAttrs { set catter "$catter$comma@Value(\"$attr\")" ; set comma ",_," ; } ; puts "MACRO CATMAC _@Concatenate($catter)" ; } } else { puts "MACRO CATMAC " ; }; set safeName "[regsub -all {[^a-zA-Z0-9]} {Inspector} _]_[expr round(rand() * 1000000)]_[clock clicks -milliseconds]"; puts "MACRO SAFE_FFS_NAME $safeName"; ]
# Make the temporary directory that the FFS files will live in.
FACTORY_DEF * CreationFactory FACTORY_NAME Inspector_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}")
FACTORY_DEF * TeeFactory FACTORY_NAME Inspector_DirCreatorCleanerUpper INPUT FEATURE_TYPE __nukeme__
# Send raster, point cloud and vector features down different paths to prepare
# them for viewing
FACTORY_DEF * TestFactory FACTORY_NAME Inspector_FeatureDirector INPUT FEATURE_TYPE DotNetCaller_3_OUTPUT TEST &fme_type == "fme_raster" OUTPUT FAILED FEATURE_TYPE Inspector___NotRasterFeatures___ OUTPUT PASSED FEATURE_TYPE Inspector___RasterFeatures___
FACTORY_DEF * TestFactory FACTORY_NAME Inspector___FeatureDirector1 INPUT FEATURE_TYPE Inspector___NotRasterFeatures___ TEST &fme_type == "fme_point_cloud" OUTPUT FAILED FEATURE_TYPE Inspector___VectorFeatures___ OUTPUT PASSED FEATURE_TYPE Inspector___PointCloudFeatures___
# Vector features simply may get their colors overridden
FACTORY_DEF * TeeFactory FACTORY_NAME Inspector_VectorSetterUpper INPUT FEATURE_TYPE Inspector___VectorFeatures___ OUTPUT FEATURE_TYPE __viewme__
# Point Cloud Features Might Need to be thinned
# Note that we don't call the ThinPointCloud function directly, but rather
# do it through TCL. This should allow this transformer to be used with a
# Desktop license, even though ThinPointCloud requires Professional.
Tcl2 proc Inspector_392f2c0e_1421_4dde_9e34_af8284d2c6c80_thinPointCloud {} { if {[string equal {NO_THINNING} {KEEPNPOINT}]} { FME_Execute ThinPointCloud NO_THINNING "\"<Unused>\""; } elseif {[string equal {NO_THINNING} {MAXNUMPOINTS}]} { FME_Execute ThinPointCloud NO_THINNING "\"<Unused>\""; } elseif {[string equal {NO_THINNING} {FIRSTNPOINTS}]} { FME_Execute ThinPointCloud NO_THINNING "\"<Unused>\""; } elseif {[string equal {NO_THINNING} {LASTNPOINTS}]} { FME_Execute ThinPointCloud NO_THINNING "\"<Unused>\""; }; }
FACTORY_DEF * TeeFactory FACTORY_NAME Inspector___PointCloudThinner INPUT FEATURE_TYPE Inspector___PointCloudFeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("Inspector_392f2c0e_1421_4dde_9e34_af8284d2c6c80_thinPointCloud")
Tcl2 proc Inspector_392f2c0e_1421_4dde_9e34_af8284d2c6c80_prepareRaster {subsetStartRow subsetNumRows subsetStartCol subsetNumCols} { set useDI [string equal -nocase {$(FME_VIEWER_APP)} {fmedatainspector}]; if {!$useDI} { FME_Execute ApplyRasterRotation BILINEAR; }; set doResample [string equal {NoReduction} {Resample}]; set doSubset [string equal {NoReduction} {Subset}]; set doBounds [string equal {NoReduction} {BoundingBoxOnly}]; if {$doBounds} { FME_Execute GeometryType fme_polygon; } elseif {$doResample || $doSubset} { set comment { First, we need to prefix all the attributes. This is done because we are going to call @RasterProperties, and we want to make sure it doesn't overwrite any existing attributes. }; set kAttrPrefix "."; set allNames [FME_AttributeNames]; foreach oldName $allNames { set newName $kAttrPrefix; append newName $oldName; FME_RenameAttribute $newName $oldName; }; FME_Execute RasterProperties RASTER; if {$doResample} { set oldNumCols [FME_GetAttribute _num_columns]; set oldNumRows [FME_GetAttribute _num_rows]; set oldSpacingX [FME_GetAttribute _spacing_x]; set oldSpacingY [FME_GetAttribute _spacing_y]; set kMinNumCells 32; set kMaxNumCells 512; set comment { We will only resample if both dimensions are greater than the minimum num cells, and at least one is greater than the maximum. }; if {$oldNumRows > $kMinNumCells && $oldNumCols > $kMinNumCells && ($oldNumRows > $kMaxNumCells || $oldNumCols > $kMaxNumCells)} { set newSpacingX 1.0; set newSpacingY 1.0; if {$oldNumRows > $oldNumCols} { set comment { If we have more rows than columns, we need to choose a spacing that reduces the number of rows to the maximum we've chosen. }; set newSpacingY [expr 1.0 * $oldNumRows * $oldSpacingY / $kMaxNumCells]; set newSpacingX [expr 1.0 * $newSpacingY / $oldSpacingY * $oldSpacingX]; set comment { Now we need to check if doing this will result in the columns going below the minimum. If so, choose the spacing such that we only go down to the minimum (and not past). }; set newNumCols [expr $oldNumCols * $oldSpacingX / $newSpacingX]; if {$newNumCols < $kMinNumCells} { set newSpacingX [expr 1.0 * $oldNumCols * $oldSpacingX / $kMinNumCells]; set newSpacingY [expr 1.0 * $newSpacingX / $oldSpacingX * $oldSpacingY]; }; } else { set comment { This is identical to the above case, except the roles of rows and cols are reversed. }; set newSpacingX [expr 1.0 * $oldNumCols * $oldSpacingX / $kMaxNumCells]; set newSpacingY [expr 1.0 * $newSpacingX / $oldSpacingX * $oldSpacingY]; set newNumRows [expr $oldNumRows * $oldSpacingY / $newSpacingY]; if {$newNumRows < $kMinNumCells} { set newSpacingY [expr 1.0 * $oldNumRows * $oldSpacingY / $kMinNumCells]; set newSpacingX [expr 1.0 * $newSpacingY / $oldSpacingY * $oldSpacingX]; }; }; FME_Execute ResampleRaster CELL_SIZE $newSpacingX $newSpacingY NearestNeighbor; }; } elseif {$doSubset} { set comment { Get the value of some strings that may be attributes or constants. Note that we pass in the attribute prefix we're using, because if one does turn out to be an attribute, it won't actually be the exact name in the string (since we renamed all our attributes above). }; set rasterNumRows [FME_GetAttribute _num_rows]; set rasterNumCols [FME_GetAttribute _num_columns]; set comment { Only do subsetting if the specified start position is actually within the raster. }; if {$subsetStartRow < $rasterNumRows && $subsetStartCol < $rasterNumCols} { set comment { Now bound the subset to the size of the raster, so that we don't create padding. }; if {[expr $subsetStartRow + $subsetNumRows] > $rasterNumRows} { set subsetNumRows [expr $rasterNumRows - $subsetStartRow]; }; if {[expr $subsetStartCol + $subsetNumCols] > $rasterNumCols} { set subsetNumCols [expr $rasterNumCols - $subsetStartCol]; }; FME_Execute SubsetRaster $subsetStartRow $subsetNumRows $subsetStartCol $subsetNumCols; }; }; set comment { Remove all the attributes added by @RasterProperties and remove the prefix from the real attributes. We assume they all start with an underscore. }; FME_Execute RemoveAttributes fme_regexp_match {^_}; foreach oldName $allNames { set newName $kAttrPrefix; append newName $oldName; FME_RenameAttribute $oldName $newName; }; }; }
FACTORY_DEF * TeeFactory FACTORY_NAME Inspector_RasterSetterUpper INPUT FEATURE_TYPE Inspector___RasterFeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("Inspector_392f2c0e_1421_4dde_9e34_af8284d2c6c80_prepareRaster {<Unused>} {<Unused>} {<Unused>} {<Unused>}")
# Now route all the features into the recorder, changing their
# feature type to the transformer name so that they view nicely
# Inspector_392f2c0e_1421_4dde_9e34_af8284d2c6c80_VIS_FEAT_TYPE changes the feature types
# of the features being visualized.
DEFAULT_MACRO Inspector_392f2c0e_1421_4dde_9e34_af8284d2c6c80_VIS_FEAT_TYPE Inspector$(CATMAC)
DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs
DEFAULT_MACRO VISUALIZER_CREATE_SPATIAL_INDEX NO
# [PR#45549] The Data Inspector will limit the maximum number of features
# it reads on WIN32, so we will correspondingly limit the number of
# features we record here using the MAX_FEATURES_TO_RECORD directive.
FACTORY_DEF * RecorderFactory FACTORY_NAME Inspector_Recorder INPUT FEATURE_TYPE __viewme__ _wb_termination_feature Yes @FeatureType(TERMINATOR_@Value(_wb_termination_xformer)) INPUT FEATURE_TYPE __viewme__ @FeatureType($(Inspector_392f2c0e_1421_4dde_9e34_af8284d2c6c80_VIS_FEAT_TYPE)) FEATURE_FILE "$(VISUALIZER_FEATURE_FILE)" CREATE_SPATIAL_INDEX "$(VISUALIZER_CREATE_SPATIAL_INDEX)" INSPECTOR "$(VISUALIZER_CREATE_SPATIAL_INDEX)" FSC_SCHEMA _creation_instance,varchar<openparen>255<closeparen> MODE RECORD STORE_SCANNED_METADATA RECORD_DIRECTLY_TO_DISK YES MAX_FEATURES_TO_RECORD WIN32 2000000
# -------------------------------------------------------------------------
FACTORY_DEF * RoutingFactory FACTORY_NAME "Destination Feature Type Routing Correlator" COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE * FEATURE_TYPE_ATTRIBUTE __wb_out_feat_type__ OUTPUT ROUTED FEATURE_TYPE * OUTPUT NOT_ROUTED FEATURE_TYPE __nuke_me__ @Tcl2("FME_StatMessage 818059 [FME_GetAttribute fme_template_feature_type] 818060 818061 fme_warn")
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME "Final Output Nuker" INPUT FEATURE_TYPE __nuke_me__
# -------------------------------------------------------------------------
FACTORY_DEF * CreationFactory CREATE_AT_END OUTPUT FEATURE_TYPE __NUKEME__ @TCL("if [file exists {$(WORKSPACE_TEMP_DIR)}] {set files [glob -nocomplain -directory {$(WORKSPACE_TEMP_DIR)} -tails *.ffs]; if {[llength $files] == 1} { set theFile {$(WORKSPACE_TEMP_DIR)/}; append theFile [lindex $files 0]; eval FME_Execute System \173\042$(FME_HOME_UNIX)/fmedatainspector\042 --visualizer --single-application --delete-on-close --no-source-prompt -f FFS $theFile & \175; } elseif { [llength $files] == 0 } { catch { file delete -force {$(WORKSPACE_TEMP_DIR)} }; } else { set filesNoExt {}; set lastfile {}; foreach {fileName} [lsort $files] { set fileNoExt [string trimright $fileName {.ffs}]; if [regexp {(.*)_[0-9]*$} $fileNoExt wholething fileNoExtBase] { if { $fileNoExtBase == $lastfile } { continue } }; set lastfile $fileNoExt; lappend filesNoExt $fileNoExt }; eval FME_Execute System \173\042$(FME_HOME_UNIX)/fmedatainspector\042 --visualizer --single-application --delete-on-close --no-source-prompt -d {$(WORKSPACE_TEMP_DIR)} -a ffs -f FFS $filesNoExt & \175; }; }; ")
FACTORY_DEF * TeeFactory INPUT FEATURE_TYPE __NUKEME__