#!#! #! #! #!#!#! #!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #! #!#!#!#!#!#!#! #!#!#!#!#! #!#! #!#!#!#!#! #!#! #!#! #!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#! #!#! #!#! #!#! #!#!#!GUI IGNORE SourceDataset_SQLITE3FDO_1,SQLITE3FDO_IN_SEARCH_ENVELOPE_MINX_SQLITE3FDO_1,SQLITE3FDO_IN_SEARCH_ENVELOPE_MINY_SQLITE3FDO_1,SQLITE3FDO_IN_SEARCH_ENVELOPE_MAXX_SQLITE3FDO_1,SQLITE3FDO_IN_SEARCH_ENVELOPE_MAXY_SQLITE3FDO_1,SQLITE3FDO_IN_CLIP_TO_ENVELOPE_SQLITE3FDO_1,SEARCH_ENVELOPE_COORDINATE_SYSTEM_SQLITE3FDO_1,DestDataset_DGNV8_1,_SEED_DGNV8_1,_OUT_UNITS_DGNV8_1,_COMPUTE_SEED_DGNV8_1,_TYPE3_DGNV8_1,_ALLOW_FILL_DGNV8_1,_WRITE_TAGS_DGNV8_1,_CELLLIB_DGNV8_1,_MANGLE_DBCS_TEXT_DGNV8_1,_UOR_GLOBAL_ORIGIN_X_DGNV8_1,_UOR_GLOBAL_ORIGIN_Y_DGNV8_1,_UOR_GLOBAL_ORIGIN_Z_DGNV8_1,_MASTER_UNIT_NAME_DGNV8_1,_SUB_UNIT_NAME_DGNV8_1,_SUBS_PER_MASTER_DGNV8_1,_UORS_PER_SUB_DGNV8_1,_DEFAULT_CELL_NAME_DGNV8_1 DEFAULT_MACROsourcedataset_sqlite3fdo $(fme_mf_dir)test.db gui multifile sourceatataset_sqlite3fdo sqlite3_database_files(*。sl3; *。db)| * .sl3; *。db | sqlite3_database_files(*。sl3)| * .sl3 | sqlite3_database_files(*。db)| *。db | all_files(*。*)| *。*源sqlite3空间(fd0)dataset:default_macro destdataset_dgnv8 $(fme_mf_dir)test.dgn gui文件名destdataset_dgnv8 design_files(*。dgn)| * .dgn | all_files(*。*)| *。*目的地bentley microstation设计文件:default_macro _seed_dgnv8 $(fme_mf_dir)majorreads.dgn gui filename_existing _seed_dgnv8design_files(*。dgn)| * .dgn | all_files(*。*)| *。* v8种子文件:包括tcl proc __fme_expand macros {text {maxlevels 100}} {if {$ maxlevels <= 0} {return $ text;设置模式[加入{{\ $} {\([^()$] * \)}} {}]设置索引[Regexp -inline -all -indices $模式$ text]如果[llength $ indices] {foreach对[LEREVERSE $ INDICES] {Lassign $配对开始结束设置替换{}设置替换$ :: fme_macrovalues([字符串范围$ text [expr $ start + 2] [expr $端 - 1]]设置文本[string replace $文字$开始$结束$替换]} return [__fme_expandmacros $ text [expr $ maxlevels - 1]]} return $ text} proc __fme_expandenvvars {text {maxlevels 100}} {if {$ maxlevels <= 0} {return $ text;设置模式[加入{{\ $} {\ {[^ \ {} $] * \}} {}]设置索引[Regexp -inline -all -wices $ pattern $ text]如果[llength $ indices]{foreach pair [lasighte $ indices] {lassign $ biaptent结束设置替换{}设置替换$ :: env([字符串范围$ text [expr $ start + 2] [expr $端 - 1])设置文本[字符串 replace $text $start $end $replacement] } return [__FME_ExpandEnvVars $text [expr $maxlevels - 1]] } return $text } proc __FME_EvalAndEncodeMacro {macroName} { set macroVal {} catch { set macroVal [__FME_ExpandMacros $::FME_MacroValues($macroName)] } catch { set macroVal [__FME_ExpandEnvVars $macroVal] } return [FME_EncodeText $macroVal] } END_INCLUDE INCLUDE [ puts "MACRO SourceDataset_SQLITE3FDO__FMEENCODED__ [__FME_EvalAndEncodeMacro SourceDataset_SQLITE3FDO]" ; ] INCLUDE [ puts "MACRO DestDataset_DGNV8__FMEENCODED__ [__FME_EvalAndEncodeMacro DestDataset_DGNV8]" ; ] INCLUDE [ puts "MACRO _SEED_DGNV8__FMEENCODED__ [__FME_EvalAndEncodeMacro _SEED_DGNV8]" ; ] INCLUDE [ if {{$(SourceDataset_SQLITE3FDO)} == {}} { puts_real {Parameter 'SourceDataset_SQLITE3FDO' must be given a value.}; exit 1; }; ] INCLUDE [ if {{$(DestDataset_DGNV8)} == {}} { puts_real {Parameter 'DestDataset_DGNV8' must be given a value.}; exit 1; }; ] INCLUDE [ if {{$(_SEED_DGNV8)} == {}} { puts_real {Parameter '_SEED_DGNV8' must be given a value.}; exit 1; }; ] #! START_HEADER #! START_WB_HEADER READER_TYPE SQLITE3FDO READER_KEYWORD SQLITE3FDO_1 READER_GEN_DIRECTIVES DUMMY,YES,USE_SEARCH_ENVELOPE,NO,SQLITE3FDO_EXPOSE_FORMAT_ATTRS,,_MERGE_SCHEMAS,YES,SEARCH_ENVELOPE_MAXY,0,REMOVE_SCHEMA_QUALIFIER,YES,SEARCH_ENVELOPE_MAXX,0,SEARCH_ENVELOPE_MINX,0,TABLELIST,Roads,CLIP_TO_ENVELOPE,NO,SEARCH_ENVELOPE_MINY,0 WRITER_TYPE DGNV8 WRITER_KEYWORD DGNV8_1 #! END_WB_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "SQLITE3FDO_1" #! END_WB_HEADER #! START_SOURCE_HEADER SQLITE3FDO SQLITE3FDO_1 # ===================================================================== # The following GUI line prompts for a file to be used as the source # SQLite3 file. The user input is stored in a macro, which is then # used to define the dataset to be read. # The dataset this mapping file was generated from was: #! END_SOURCE_HEADER #! START_WB_HEADER DEFAULT_MACRO SourceDataset INCLUDE [ if {{$(SourceDataset)} != ""} { \ puts {DEFAULT_MACRO SourceDataset_SQLITE3FDO_1 $(SourceDataset)} \ } ] #! END_WB_HEADER #! START_SOURCE_HEADER SQLITE3FDO SQLITE3FDO_1 DEFAULT_MACRO SourceDataset_SQLITE3FDO_1 $(SourceDataset_SQLITE3FDO) GUI MULTIFILE SourceDataset_SQLITE3FDO_1 SQLite3_Database_Files(*.sl3;*.db)|*.sl3;*.db|SQLite3_Database_Files(*.sl3)|*.sl3|SQLite3_Database_Files(*.db)|*.db|All_files(*.*)|*.* Source SQLite3 Spatial (FD0) Dataset: # Include this file in source setting section to add external search envelope processing # Zero as a default means we don't do any search -- this makes workbench happier # =========================================================================== DEFAULT_MACRO SQLITE3FDO_IN_SEARCH_ENVELOPE_MINX_SQLITE3FDO_1 0 SQLITE3FDO_1_SEARCH_ENVELOPE "$(SQLITE3FDO_IN_SEARCH_ENVELOPE_MINX_SQLITE3FDO_1)" GUI OPTIONAL FLOAT SQLITE3FDO_IN_SEARCH_ENVELOPE_MINX_SQLITE3FDO_1 Minimum X: # =========================================================================== DEFAULT_MACRO SQLITE3FDO_IN_SEARCH_ENVELOPE_MINY_SQLITE3FDO_1 0 SQLITE3FDO_1_SEARCH_ENVELOPE "$(SQLITE3FDO_IN_SEARCH_ENVELOPE_MINY_SQLITE3FDO_1)" GUI OPTIONAL FLOAT SQLITE3FDO_IN_SEARCH_ENVELOPE_MINY_SQLITE3FDO_1 Minimum Y: # =========================================================================== DEFAULT_MACRO SQLITE3FDO_IN_SEARCH_ENVELOPE_MAXX_SQLITE3FDO_1 0 SQLITE3FDO_1_SEARCH_ENVELOPE "$(SQLITE3FDO_IN_SEARCH_ENVELOPE_MAXX_SQLITE3FDO_1)" GUI OPTIONAL FLOAT SQLITE3FDO_IN_SEARCH_ENVELOPE_MAXX_SQLITE3FDO_1 Maximum X: # =========================================================================== DEFAULT_MACRO SQLITE3FDO_IN_SEARCH_ENVELOPE_MAXY_SQLITE3FDO_1 0 SQLITE3FDO_1_SEARCH_ENVELOPE "$(SQLITE3FDO_IN_SEARCH_ENVELOPE_MAXY_SQLITE3FDO_1)" GUI OPTIONAL FLOAT SQLITE3FDO_IN_SEARCH_ENVELOPE_MAXY_SQLITE3FDO_1 Maximum Y: # =========================================================================== # BUG18999: We now have a soft clip to fall back on like native spatial index # thus we are reintroducing the clip to envelop as an option for users. # Defualt to soft clip as per the existing database readers we are emulating DEFAULT_MACRO SQLITE3FDO_IN_CLIP_TO_ENVELOPE_SQLITE3FDO_1 NO SQLITE3FDO_1_CLIP_TO_ENVELOPE "$(SQLITE3FDO_IN_CLIP_TO_ENVELOPE_SQLITE3FDO_1)" GUI OPTIONAL CHECKBOX SQLITE3FDO_IN_CLIP_TO_ENVELOPE_SQLITE3FDO_1 YES%NO Clip to Search Envelope # PR:31021 # Include this file in workbench source preamble section to enable the ability # to specify a coordinate system for search envelope processing # =========================================================================== DEFAULT_MACRO SEARCH_ENVELOPE_COORDINATE_SYSTEM_SQLITE3FDO_1 GUI OPTIONAL COORDSYS SEARCH_ENVELOPE_COORDINATE_SYSTEM_SQLITE3FDO_1 Search Envelope Coordinate System: SQLITE3FDO_1_SEARCH_ENVELOPE_COORDINATE_SYSTEM "$(SEARCH_ENVELOPE_COORDINATE_SYSTEM_SQLITE3FDO_1)" # =========================================================================== SQLITE3FDO_1_DATASET "$(SourceDataset_SQLITE3FDO_1)" #! END_SOURCE_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "DGNV8_1" #! END_WB_HEADER #! START_DEST_HEADER DGNV8 DGNV8_1 # ============================================================================ # The following GUI lines prompt for a design file to be used as the # the destination of the data, and a seed file to be used as the base # for the created design file. # Commented out prompts are also provided to define cell library # file, which might be needed if any cells are to be placed in the # created dataset. In such a case, they should be uncommented. #! END_DEST_HEADER #! START_WB_HEADER DEFAULT_MACRO DestDataset INCLUDE [ if {"$(DestDataset)" != ""} { \ puts {DEFAULT_MACRO DestDataset_DGNV8_1 $(DestDataset)} \ } ] #! END_WB_HEADER #! START_DEST_HEADER DGNV8 DGNV8_1 DEFAULT_MACRO DestDataset_DGNV8_1 $(DestDataset_DGNV8) GUI FILENAME DestDataset_DGNV8_1 Design_Files(*.dgn)|*.dgn|All_files(*.*)|*.* Destination Bentley MicroStation Design File: DEFAULT_MACRO _SEED_DGNV8_1 $(_SEED_DGNV8) GUI FILENAME_MUSTEXIST _SEED_DGNV8_1 Design_Files(*.dgn)|*.dgn|All_files(*.*)|*.* V8 Seed File: DGNV8_1_SEED_FILE "$(_SEED_DGNV8_1)" # ============================================================================ # The following line controls how all the FME coordinates written to the # design file will be interpreted. # Valid values IGDS_MASTER_UNITS -- FME coordinates are treated as Master Units # IGDS_SUB_UNITS -- FME coordinates are treated as Sub Units # IGDS_UORS -- FME coordinates are treated as UORs DEFAULT_MACRO _OUT_UNITS_DGNV8_1 IGDS_MASTER_UNITS GUI CHOICE _OUT_UNITS_DGNV8_1 IGDS_MASTER_UNITS%IGDS_SUB_UNITS%IGDS_UORS Output Units: DGNV8_1_UNITS $(_OUT_UNITS_DGNV8_1) # ============================================================================ # If this is set to YES, then the input data will be analyzed and # optimal seed file settings will be computed for the output design file DEFAULT_MACRO _COMPUTE_SEED_DGNV8_1 no GUI CHOICE _COMPUTE_SEED_DGNV8_1 yes%no Compute Optimal Seed File Parameters: DGNV8_1_COMPUTE_SEED_FILE_PARMS $(_COMPUTE_SEED_DGNV8_1) # ============================================================================ # And set whether or not we allow type 3 elements to be created for 2 point # lines. DEFAULT_MACRO _TYPE3_DGNV8_1 yes GUI CHOICE _TYPE3_DGNV8_1 yes%no Type 3 Elements: DGNV8_1_CREATE_LINE_ELEMENTS $(_TYPE3_DGNV8_1) # ============================================================================ # And set whether or not we allow area filling # lines. DEFAULT_MACRO _ALLOW_FILL_DGNV8_1 yes GUI CHOICE _ALLOW_FILL_DGNV8_1 yes%no Allow Area Color Fills: DGNV8_1_ALLOW_FILL $(_ALLOW_FILL_DGNV8_1) # ============================================================================ # Allow writing tags DEFAULT_MACRO _WRITE_TAGS_DGNV8_1 no GUI CHOICE _WRITE_TAGS_DGNV8_1 yes%no Write tags: DGNV8_1_WRITE_TAGS $(_WRITE_TAGS_DGNV8_1) # ============================================================================ # These settings override the global offset and unit information # contained in the seed file. By default they are set to blank # which means the seed file settings will be used. #GUI OPTIONAL FLOAT _UOR_GLOBAL_ORIGIN_X UOR X Global Origin: DEFAULT_MACRO _UOR_GLOBAL_ORIGIN_X_DGNV8_1 DGNV8_1_UOR_GLOBAL_ORIGIN_X $(_UOR_GLOBAL_ORIGIN_X_DGNV8_1) #GUI OPTIONAL FLOAT _UOR_GLOBAL_ORIGIN_Y UOR Y Global Origin: DEFAULT_MACRO _UOR_GLOBAL_ORIGIN_Y_DGNV8_1 DGNV8_1_UOR_GLOBAL_ORIGIN_Y $(_UOR_GLOBAL_ORIGIN_Y_DGNV8_1) #GUI OPTIONAL FLOAT _UOR_GLOBAL_ORIGIN_Z UOR Z Global Origin: DEFAULT_MACRO _UOR_GLOBAL_ORIGIN_Z_DGNV8_1 DGNV8_1_UOR_GLOBAL_ORIGIN_Z $(_UOR_GLOBAL_ORIGIN_Z_DGNV8_1) #GUI OPTIONAL TEXT _MASTER_UNIT_NAME Master Unit Name: DEFAULT_MACRO _MASTER_UNIT_NAME_DGNV8_1 DGNV8_1_MASTER_UNIT_NAME $(_MASTER_UNIT_NAME_DGNV8_1) #GUI OPTIONAL TEXT _SUB_UNIT_NAME Sub Unit Name: DEFAULT_MACRO _SUB_UNIT_NAME_DGNV8_1 DGNV8_1_SUB_UNIT_NAME $(_SUB_UNIT_NAME_DGNV8_1) #GUI OPTIONAL INTEGER _SUBS_PER_MASTER Subs per Master: DEFAULT_MACRO _SUBS_PER_MASTER_DGNV8_1 DGNV8_1_SUBS_PER_MASTER $(_SUBS_PER_MASTER_DGNV8_1) #GUI OPTIONAL INTEGER _UORS_PER_SUB UOR per Sub: DEFAULT_MACRO _UORS_PER_SUB_DGNV8_1 DGNV8_1_UORS_PER_SUB $(_UORS_PER_SUB_DGNV8_1) DEFAULT_MACRO _CELLLIB_DGNV8_1 $(FME_HOME)design/default_v8.cel GUI OPTIONAL MULTIFILE _CELLLIB_DGNV8_1 Cell_Library_Files(*.cel)|*.cel|All_files(*.*)|*.* Cell Library File: DGNV8_1_CELL_LIBRARY "$(_CELLLIB_DGNV8_1)" DEFAULT_MACRO _MANGLE_DBCS_TEXT_DGNV8_1 NO GUI OPTIONAL CHOICE _MANGLE_DBCS_TEXT_DGNV8_1 YES%NO Mangle DBCS Text: DGNV8_1_MANGLE_DBCS_TEXT $(_MANGLE_DBCS_TEXT_DGNV8_1) # ============================================================================ # These settings override the global offset and unit information # contained in the seed file. By default they are set to blank # which means the seed file settings will be used. GUI OPTIONAL FLOAT _UOR_GLOBAL_ORIGIN_X_DGNV8_1 UOR X Global Origin: GUI OPTIONAL FLOAT _UOR_GLOBAL_ORIGIN_Y_DGNV8_1 UOR Y Global Origin: GUI OPTIONAL FLOAT _UOR_GLOBAL_ORIGIN_Z_DGNV8_1 UOR Z Global Origin: GUI OPTIONAL TEXT _MASTER_UNIT_NAME_DGNV8_1 Master Unit Name: GUI OPTIONAL TEXT _SUB_UNIT_NAME_DGNV8_1 Sub Unit Name: GUI OPTIONAL INTEGER _SUBS_PER_MASTER_DGNV8_1 Subs per Master: GUI OPTIONAL INTEGER _UORS_PER_SUB_DGNV8_1 UOR per Sub: #Allow user to specify a default cell to use when a cell is not in cell lib. DEFAULT_MACRO _DEFAULT_CELL_NAME_DGNV8_1 GUI OPTIONAL TEXT _DEFAULT_CELL_NAME_DGNV8_1 Default Cell Name: DGNV8_1_DEFAULT_CELL_NAME $(_DEFAULT_CELL_NAME_DGNV8_1) DGNV8_1_DATASET "$(DestDataset_DGNV8_1)" #! END_DEST_HEADER #! END_HEADER LOG_FILENAME "$(FME_MF_DIR)SqliteToDGN.log" LOG_APPEND NO LOG_MAX_FEATURES 200 LOG_MAX_RECORDED_FEATURES 200 FME_REPROJECTION_ENGINE FME FME_GEOMETRY_HANDLING Enhanced FME_STROKE_MAX_DEVIATION 0 LOG_FILTER_MASK -1 DEFAULT_MACRO DATASET_KEYWORD_SQLITE3FDO_1 SQLITE3FDO_1 DEFAULT_MACRO DATASET_KEYWORD_DGNV8_1 DGNV8_1 # ------------------------------------------------------------------------- SQLITE3FDO_1_READER_META_ATTRIBUTES fme_feature_type # ------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE No # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME SqliteToDGN MACRO FME_VIEWER_APP fmeview # ------------------------------------------------------------------------- INCLUDE [ if {[info exists 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_CREATE_SPATIAL_INDEX YES # ------------------------------------------------------------------------- SQLITE3FDO_1_DEF Roads PRIMARYINDEX int32 igds_packed blob # ------------------------------------------------------------------------- Lookup ___KnownFeatureTypes___ Roads yes "" no # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME "Unexpected Input Remover" INPUT FEATURE_TYPE * TEST @Lookup(___KnownFeatureTypes___,@FeatureType()) == yes OUTPUT PASSED FEATURE_TYPE * # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "Source -> Generic" INPUT FEATURE_TYPE * OUTPUT FEATURE_TYPE * @Transform(SQLITE3FDO,FME_GENERIC,PRESERVE_GEOMETRY) DEFAULT_MACRO WB_CURRENT_CONTEXT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME FMEFunctionCaller INPUT FEATURE_TYPE Roads OUTPUT FEATURE_TYPE FMEFunctionCaller_OUTPUT @SupplyAttributes(igds_packed) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "FMEFunctionCaller_OUTPUT -> Roads Correlator" INPUT FEATURE_TYPE FMEFunctionCaller_OUTPUT OUTPUT FEATURE_TYPE __GO_TO_FINAL_OUTPUT_ROUTER__ @Transform(FME_GENERIC,DGNV8) @SupplyAttributes(__wb_out_feat_type__,Roads) # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME "Final Output Feature Type Router" INPUT FEATURE_TYPE * TEST @Value(__wb_out_feat_type__) != "" OUTPUT PASSED FEATURE_TYPE * @FeatureType(@Value(__wb_out_feat_type__)) OUTPUT FAILED FEATURE_TYPE __nuke_me__ @Tcl2("FME_StatMessage 818059 {@Value(fme_template_feature_type)} 818060 818061 fme_warn") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "Final Output Nuker" INPUT FEATURE_TYPE __nuke_me__ # ------------------------------------------------------------------------- DGNV8_1_DEF Roads igds_level "" igds_level_comment "" igds_level_color "" igds_level_style "" igds_level_weight ""