#!#! #! #!#! #!#! #!#! #!#! #!#! #!#! #!

Merge the lists to the original polygon feature.

Join On: SURFACE_GEOMETRY_ID

Process Duplicate Suppliers: Yes

" POSITION="3581.29 -1481.47" TOP_LEFT="3581.29 -1481.47" BOTTOM_RIGHT="3580.29 -1480.47" BOUNDING_RECT="3581.29 -1481.47 -1 -1" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="29">
#!

Create a 3D Rectangle Polygon (5 coordinates)

" POSITION="3.97879 -473.339" TOP_LEFT="3.97879 -473.339" BOTTOM_RIGHT="2.97879 -472.339" BOUNDING_RECT="3.97879 -473.339 -1 -1" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="2">
#!

New Attribute

Attribute Value

SURFACE_GEOMETRY_ID

10

TEXTURE_COORDINATES

0.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0 0.0 0.0

" POSITION="3.97879 -920.717" TOP_LEFT="3.97879 -920.717" BOTTOM_RIGHT="753.979 -970.717" BOUNDING_RECT="3.97879 -920.717 750 50" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="5">
#!

Type: Whole Area
Source Measure List Attribute of Line or Area: _u{}
Destination Measure Name: fme_texture_coordinate_u

" POSITION="4772.39 -955.799" TOP_LEFT="4772.39 -955.799" BOTTOM_RIGHT="5522.39 -1005.8" BOUNDING_RECT="4772.39 -955.799 750 50" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="33">
#!

Type: Whole Area
Source Measure List Attribute of Line or Area: _v{}
Destination Measure Name: fme_texture_coordinate_v

" POSITION="4772.39 -655.799" TOP_LEFT="4772.39 -655.799" BOTTOM_RIGHT="5522.39 -705.799" BOUNDING_RECT="4772.39 -655.799 750 50" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="35">
#!

Use Existinig Texture Coordinates: Yes

Texture Mapping Type: Surface Normal (default)

" POSITION="4855.78 102.448" TOP_LEFT="4855.78 102.448" BOTTOM_RIGHT="4854.78 103.448" BOUNDING_RECT="4855.78 102.448 -1 -1" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="51">
#!

Attribute to Split: TEXTURE_COORDINATES
Delimiter or Format String: <space>
List Name: _coords

" POSITION="2021.37 -890.173" TOP_LEFT="2021.37 -890.173" BOTTOM_RIGHT="2771.37 -940.173" BOUNDING_RECT="2021.37 -890.173 750 50" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="7">
#!

List Attribute: _coords{}
Element Index Attribute: _element_index

" POSITION="433.378 -1311.22" TOP_LEFT="433.378 -1311.22" BOTTOM_RIGHT="1183.38 -1361.22" BOUNDING_RECT="433.378 -1311.22 750 50" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="16">
#!

TEST @Evaluate(@Value(_element_index)%2) = 0

" POSITION="263.649 -1559.6" TOP_LEFT="263.649 -1559.6" BOTTOM_RIGHT="1013.65 -1609.6" BOUNDING_RECT="263.649 -1559.6 750 50" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="19">
#!

Group By: SURFACE_GEOMETRY_ID
Input is Ordered by Group: Yes
Attributes to Concatenate: _coords
Separator Character: ,

" POSITION="2054.75 -1166.8" TOP_LEFT="2054.75 -1166.8" BOTTOM_RIGHT="2804.75 -1216.8" BOUNDING_RECT="2054.75 -1166.8 750 50" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="18">
#!

Group By: SURFACE_GEOMETRY_ID
Input is Ordered by Group: Yes
Attributes to Concatenate: _coords
Separator Character: ,

" POSITION="1749.68 -1977.73" TOP_LEFT="1749.68 -1977.73" BOTTOM_RIGHT="2499.68 -2027.73" BOUNDING_RECT="1749.68 -1977.73 750 50" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="21">
#!
#! #!#! #!


" TOP_LEFT="1346.37 -770.592" BOTTOM_RIGHT="3119.57 -2272.73" BOUNDING_RECT="1346.37 -770.592 1773.2 1502.14" STICKY="true" COLOUR="0.329412,0.666667,0" CONTENTS="64 18 21 12 22 16 10 20 26 19 28 25 24 17 7 65 23 61 ">
#!
#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!0.01.00.01.01.00.01.00.00.0">#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#! #!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#! #!#! #!#! #!#!
fme_python_version 35#!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 null_dest_dataset null#!end_wb_header#!start_wb_header#!end_wb_header#!END_HEADER LOG_FILENAME "$(FME_MF_DIR)texture-coordinate-mapping-example.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 texture-coordinate-mapping-example MACRO FME_VIEWER_APP fmedatainspector # ---------------------------------------------------------------------------------------------------------------包括[if {If infor Envist(fme_temp)] && [file isDirectory $ env(fme__temp)]}} {set gvisualizertemp $ envy(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 includs [if {if {{几何对象} == {几何对象}}} {puts {macro creator_xml *}}]}]puts {macro creator_classic *}}] includs [if {{几何对象} == {3D坐标列表}}}} {puts {macro creator_2d3d 3d_geometry};puts {macro creator_classic *}}] include [if {{几何对象} == {2d min/max box}}} {set remplort {我们需要将coords转换为minx max x Maxx maxy,变成完整的坐标列表};set splitcoords [split [String Trim { }]]; 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' - ` ' 是无效的};};设置minx [lindex $ splitcoords 0];设置miny [lindex $ splitcoords 1];设置maxx [lindex $ splitcoords 2];设置Maxy [Lindex $ splitcoords 3];puts“ Macro Creator_coords $ minx $ miny $ minx $ maxy $ maxx $ maxy $ maxx $ maxx $ miny $ minx $ miny”;put {macro creator_2d3d 2d_geometry};puts {macro creator_classic *}}] factric_def $(creator_xml)creationfactory farticor_name creator_xml_creator create_at_end no oppution_type_type _____created _____created ______ @geometry(@geometry) XML 版本= 1.0 编码= US_ASCII 独立= ? 几何学 多边形 线 协调 x = 0 y = 0 z = 0 协调 x = 5 y = 0 z = 0.5 协调 x = 5 y = 4 z = 0.5 协调 x = 0 y = 4 z = 0 协调 x = 0 y = 0 z = 0 线 多边形 几何学 ) 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 OUTPUT FEATURE_TYPE Creator_CREATED @Tcl2(Creator_CoordSysRemover) @CoordSys() fme_feature_type Creator FACTORY_DEF * BranchingFactory FACTORY_NAME“ creator_created brancher -1 6”输入feature_type creator_created target_factory” $(wb_current_context)_creator_branch_target“输出”传递features_type * @removeattributes(“ creator_created brancher -1 6”.branchingfactory.count.count。--------------------------------------------------------------------------------------------------- include [if {[String Length {RGB24}]> 0 && [字符串等于{ } { }] && [字符串等于{ } { }]} {puts {macro band_color_entry band_color_model rgb_3byte};put {Macro Palette_color_entry};put {Macro Palette_key_entry};} elseif {[String等于{RGB24} { }] && [字符串长度{ }]> 0 && [字符串长度{ }]> 0} {puts {macro band_color_entry};put {Macro Palette_color_entry Palette_color_model };put {Macro Palette_key_entry Palette_key_type };} else {puts_real {rasterrgbcreator(rasterrgbcreator):必须为频段或调色板指定值。另一个的条目必须为空白。};出口1;} ] FACTORY_DEF * CreationFactory FACTORY_NAME RasterRGBCreator_Creator OUTPUT FEATURE_TYPE _____CREATED_RASTER__RGB__ FACTORY_DEF * RasterCreationFactory FACTORY_NAME RasterRGBCreator INPUT FEATURE_TYPE _____CREATED_RASTER__RGB__ WIDTH 128 HEIGHT 128 GENERAL_CELL_TYPE Color CREATE_PALETTE No $(BAND_COLOR_ENTRY) $(PALETTE_COLOR_ENTRY) $(PALETTE_KEY_ENTRY) X_CELL_ORIGIN 0.5 Y_CELL_ORIGIN 0.5 X_SPACING 1.0 Y_SPACING 1.0 X_UPPER_LEFT_COORD 0.0 Y_UPPER_LEFT_COORD 0.0nodata_color_value min_color_value 0.333333,0.666667,0 max_color_value 1,1,1 nodata_alpha_value 旋转0.0 min_alpha_value max_alpha_value RASTER_TYPE Checkerboard OUTPUT CREATED FEATURE_TYPE RasterRGBCreator_CREATED @SupplyAttributes(fme_basename,RasterRGBCreator,fme_feature_type,RasterRGBCreator) FACTORY_DEF * BranchingFactory FACTORY_NAME "RasterRGBCreator_CREATED Brancher -1 57" INPUT FEATURE_TYPE RasterRGBCreator_CREATED TARGET_FACTORY "$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET" OUTPUT PASSED FEATURE_TYPE * @RemoveAttributes("RasterRGBCreator_CREATED Brancher -1 57“ .BranchingFactory.Count)#---------------------------------------------------------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET" INPUT FEATURE_TYPE * OUTPUT FEATURE_TYPE * #----------------------------------------------------------------------------------------------------------- FACTORY_DEF * AttrSetFactory FACTORY_NAME AttributeCreator INPUT FEATURE_TYPE Creator_CREATED MULTI_FEATURE_MODE NO NULL_ATTR_MODE NO_OP ATTRSET_CREATE_DIRECTIVES _PROPAGATE_MISSING_FDIV ATTR_ACTION "" "SURFACE_GEOMETRY_ID" "SET_TO" "10" ATTR_ACTION“”Xture_coordinates“” set_to“” 0.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0 0.0 0.0" OUTPUT OUTPUT FEATURE_TYPE AttributeCreator_OUTPUT FACTORY_DEF * TeeFactory FACTORY_NAME "AttributeCreator OUTPUT Splitter" INPUT FEATURE_TYPE AttributeCreator_OUTPUT OUTPUT FEATURE_TYPE AttributeCreator_OUTPUT_0_lQ+3mj5tm0E= OUTPUT FEATURE_TYPE AttributeCreator_OUTPUT_1_Et/p63Aqn4M= # ------------------------------------------------------------------------------------------------------------ factric_def * teefactory farticor_name geometryremover输入feature_type attributecreator_output_1_et/p63aqn4m = output utput feature_type geometryremover_output @removegegeegepte---------------------------------------------- Tcl2 set AttributeSplitter_699f1fdf_293b_4871_b4fc_82406e882adc4_splitDelim [fme_decodeText { }];if { [regexp {^([1-9][0-9]*s)+$} [set AttributeSplitter_699f1fdf_293b_4871_b4fc_82406e882adc4_splitDelim]] } { set AttributeSplitter_699f1fdf_293b_4871_b4fc_82406e882adc4_splitWidths [split [regsub -all {s$} { } {}] S];proc attributesplitter_dosplit {} {global attribtersplitter_699f1fdf_293b_4871_b4fc_82406e8882adc4_splitwidths;设置源[fme_getAttribute [fme_decodeText {texture_coordinates}]];设置attrnum 0;设置ListName [fme_decodeText {_coords}];设置attrpos 0;设置keepemenT emptyparts [string均等{no} {no}];foreach width [set attribtersplitter_699f1fdf_293b_4871_b4fc_82406e8882adc4_splitwidths] {set end endpos [expr $ attrpos + $ width -1];设置位[字符串范围$ source $ attrpos $ endpos];设置零件[字符串Trim $ bit]; if { $keepEmptyParts || $part != \"\" } { FME_SetAttribute "$listName{$attrNum}" $part; incr attrNum; }; incr attrPos $width; }; }; } else { proc AttributeSplitter_doSplit {} { global AttributeSplitter_699f1fdf_293b_4871_b4fc_82406e882adc4_splitDelim; set delim [set AttributeSplitter_699f1fdf_293b_4871_b4fc_82406e882adc4_splitDelim]; set delimLength [string length $delim]; set source [FME_GetAttribute [FME_DecodeText {TEXTURE_COORDINATES}]]; set keepEmptyParts [string equal {No} {No}]; set bits {}; set startIndex 0; set nextIndex [string first $delim $source $startIndex]; while {$nextIndex >= 0} { lappend bits [string range $source $startIndex [expr $nextIndex-1]]; set startIndex [expr $nextIndex + $delimLength]; set nextIndex [string first $delim $source $startIndex]; }; lappend bits [string range $source $startIndex end]; set listName [FME_DecodeText {_coords}]; set attrNum 0; foreach bit $bits { set trimmedPart [string trim $bit]; if { $keepEmptyParts || $trimmedPart != \"\" } { FME_SetAttribute "$listName{$attrNum}" $trimmedPart; incr attrNum; }; } } } FACTORY_DEF * TeeFactory FACTORY_NAME AttributeSplitter INPUT FEATURE_TYPE GeometryRemover_OUTPUT OUTPUT FEATURE_TYPE AttributeSplitter_OUTPUT @Tcl2(AttributeSplitter_doSplit) # ------------------------------------------------------------------------- FACTORY_DEF * ElementFactory FACTORY_NAME ListExploder INPUT FEATURE_TYPE AttributeSplitter_OUTPUT LIST_NAME "_coords{}" ELEMENT_NUMBER_FIELD "_element_index" CLONE_GEOMETRY ATTR_ACCUM_MODE "HANDLE_CONFLICT" ATTR_CONFLICT_RES "INCOMING_IF_CONFLICT" INCOMING_PREFIX " “输出元素feature_type listexploder_elements @removeattributes(elementfactory.basecloned)输出 @removeattributes(elementFactory.basecloned)fme_revection_code_code_parameter_list_list default_macro _wb_bypass_termination no factory_def * teefactory factory_name listexploder_ INPUT FEATURE_TYPE ListExploder_ 输出失败feature_type * @abort(编码,ListExploder 输出 A 拒绝 特征。 继续 如果 特征 拒绝 改变 工作区 范围 拒绝 特征 处理 继续 翻译 )#---------------------------------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME Tester INPUT FEATURE_TYPE ListExploder_ELEMENTS TEST @EvaluateExpression(FDIV,STRING_ENCODED, 评价 价值 _element_index %2 ,tester)= 0编码的boolean_operator或输出传递的功能_type tester_pass uptud fable fable demut_type tester_failed#-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- DEFAULT_MACRO Aggregator_2_BREAK_ATTR INCLUDE [if {"Yes" == "Yes"} {puts {MACRO Aggregator_2_BREAK_ATTR BREAK_BEFORE_FIELD_CHANGE SURFACE_GEOMETRY_ID} }] FACTORY_DEF {*} AggregateFactory FACTORY_NAME Aggregator_2 INPUT FEATURE_TYPE Tester_FAILED MODE ONE_LEVEL GROUP_BY SURFACE_GEOMETRY_ID $(Aggregator_2_BREAK_ATTR) REMOVE_GEOMETRY NO ACCUMULATE_ATTRIBUTES None LIST_ATTRS_TO_INCLUDE { } list_attrs_to_include_mode Concatenate_fields _COORDS分离器 PRODUCE_MULTIS YES OUTPUT AGGREGATE FEATURE_TYPE Aggregator_2_AGGREGATE # ------------------------------------------------------------------------- Tcl2 set AttributeSplitter_3_01190f9a_d2b2_471c_8d1a_e0534ed22a364_splitDelim [FME_DecodeText { }];if { [regexp {^([1-9][0-9]*s)+$} [set AttributeSplitter_3_01190f9a_d2b2_471c_8d1a_e0534ed22a364_splitDelim]] } { set AttributeSplitter_3_01190f9a_d2b2_471c_8d1a_e0534ed22a364_splitWidths [split [regsub -all {s$} { } {}] S];proc attributesplitter_3_dosplit {} {global attributesplitter_3_01190f9a_d2b2_471c_471c_8d1a_e0534ed2a364_splitwidths;设置源[fme_getAttribute [fme_decodeText {_coords}]];设置attrnum 0;set listName [fme_decodeText {_v}];设置attrpos 0;设置keepemenT emptyparts [string均等{no} {no}];foreach width [set attributesplitter_3_01190f9a_d2b2_471c_8d1a_e0534ed22a364_splitwidths] {set endpos [expr $ attrpos + $ width -1];设置位[字符串范围$ source $ attrpos $ endpos];设置零件[字符串Trim $ bit]; if { $keepEmptyParts || $part != \"\" } { FME_SetAttribute "$listName{$attrNum}" $part; incr attrNum; }; incr attrPos $width; }; }; } else { proc AttributeSplitter_3_doSplit {} { global AttributeSplitter_3_01190f9a_d2b2_471c_8d1a_e0534ed22a364_splitDelim; set delim [set AttributeSplitter_3_01190f9a_d2b2_471c_8d1a_e0534ed22a364_splitDelim]; set delimLength [string length $delim]; set source [FME_GetAttribute [FME_DecodeText {_coords}]]; set keepEmptyParts [string equal {No} {No}]; set bits {}; set startIndex 0; set nextIndex [string first $delim $source $startIndex]; while {$nextIndex >= 0} { lappend bits [string range $source $startIndex [expr $nextIndex-1]]; set startIndex [expr $nextIndex + $delimLength]; set nextIndex [string first $delim $source $startIndex]; }; lappend bits [string range $source $startIndex end]; set listName [FME_DecodeText {_v}]; set attrNum 0; foreach bit $bits { set trimmedPart [string trim $bit]; if { $keepEmptyParts || $trimmedPart != \"\" } { FME_SetAttribute "$listName{$attrNum}" $trimmedPart; incr attrNum; }; } } } FACTORY_DEF * TeeFactory FACTORY_NAME AttributeSplitter_3 INPUT FEATURE_TYPE Aggregator_2_AGGREGATE OUTPUT FEATURE_TYPE AttributeSplitter_3_OUTPUT @Tcl2(AttributeSplitter_3_doSplit) # ------------------------------------------------------------------------- DEFAULT_MACRO Aggregator_BREAK_ATTR INCLUDE [if {"Yes" == "Yes"} {puts {MACRO Aggregator_BREAK_ATTR BREAK_BEFORE_FIELD_CHANGE SURFACE_GEOMETRY_ID} }] FACTORY_DEF {*} AggregateFactory FACTORY_NAME Aggregator INPUT FEATURE_TYPE Tester_PASSED MODE ONE_LEVEL GROUP_BY SURFACE_GEOMETRY_ID $(Aggregator_BREAK_ATTR) REMOVE_GEOMETRY NO ACCUMULATE_ATTRIBUTES None LIST_ATTRS_TO_INCLUDE { } list_attrs_to_include_mode Concatenate_fields _COORDS分离器 produc_multis是输出汇总功能_type gentregator_aggregate#------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Tcl2 set AttributeSplitter_2_5684a57a_e3f0_4d0d_a75a_165ca884b4194_splitDelim [FME_DecodeText { }];if { [regexp {^([1-9][0-9]*s)+$} [set AttributeSplitter_2_5684a57a_e3f0_4d0d_a75a_165ca884b4194_splitDelim]] } { set AttributeSplitter_2_5684a57a_e3f0_4d0d_a75a_165ca884b4194_splitWidths [split [regsub -all {s$} { } {}] S];proc attributesplitter_2_dosplit {} {global attributesplitter_2_5684A57A_E3F0_4D0D0D_A75A_165CA884B4194_SPLITWIDTHS;设置源[fme_getAttribute [fme_decodeText {_coords}]];设置attrnum 0;设置ListName [FME_DECODETEXT {_U}];设置attrpos 0;设置keepemenT emptyparts [string均等{no} {no}];foreach width [set attributesplitter_2_5684a57a_e3f0_4d0d0d_a75a_165a_165ca884b4194_splitwidths] {set set endpos [expr $ attrpos + attrpos + $ width -1];设置位[字符串范围$ source $ attrpos $ endpos];设置零件[字符串Trim $ bit]; if { $keepEmptyParts || $part != \"\" } { FME_SetAttribute "$listName{$attrNum}" $part; incr attrNum; }; incr attrPos $width; }; }; } else { proc AttributeSplitter_2_doSplit {} { global AttributeSplitter_2_5684a57a_e3f0_4d0d_a75a_165ca884b4194_splitDelim; set delim [set AttributeSplitter_2_5684a57a_e3f0_4d0d_a75a_165ca884b4194_splitDelim]; set delimLength [string length $delim]; set source [FME_GetAttribute [FME_DecodeText {_coords}]]; set keepEmptyParts [string equal {No} {No}]; set bits {}; set startIndex 0; set nextIndex [string first $delim $source $startIndex]; while {$nextIndex >= 0} { lappend bits [string range $source $startIndex [expr $nextIndex-1]]; set startIndex [expr $nextIndex + $delimLength]; set nextIndex [string first $delim $source $startIndex]; }; lappend bits [string range $source $startIndex end]; set listName [FME_DecodeText {_u}]; set attrNum 0; foreach bit $bits { set trimmedPart [string trim $bit]; if { $keepEmptyParts || $trimmedPart != \"\" } { FME_SetAttribute "$listName{$attrNum}" $trimmedPart; incr attrNum; }; } } } FACTORY_DEF * TeeFactory FACTORY_NAME AttributeSplitter_2 INPUT FEATURE_TYPE Aggregator_AGGREGATE OUTPUT FEATURE_TYPE AttributeSplitter_2_OUTPUT @Tcl2(AttributeSplitter_2_doSplit) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME AttributeSplitter_3_OUTPUT_-__FeatureMerger_SUPPLIER INPUT FEATURE_TYPE AttributeSplitter_3_OUTPUT INPUT FEATURE_TYPE AttributeSplitter_2_OUTPUT OUTPUT FEATURE_TYPE AttributeSplitter_3_OUTPUT_-__FeatureMerger_SUPPLIER_Output # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME AttributeCreator_OUTPUT_-__AttributeCreator_OUTPUT_-__FeatureMerger_REQUESTOR INPUT FEATURE_TYPE AttributeCreator_OUTPUT_0_lQ+3mj5tm0E= OUTPUT FEATURE_TYPE AttributeCreator_OUTPUT_-__AttributeCreator_OUTPUT_-__FeatureMerger_REQUESTOR_Output # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME AttributeCreator_OUTPUT_-__FeatureMerger_REQUESTOR INPUT FEATURE_TYPE AttributeCreator_OUTPUT_-__AttributeCreator_OUTPUT_-__FeatureMerger_REQUESTOR_Output OUTPUT FEATURE_TYPE AttributeCreator_OUTPUT_-__FeatureMerger_REQUESTOR_Output # ------------------------------------------------------------------------- INCLUDE [if { {ATTRIBUTES} == {ATTRIBUTES} } { puts "MACRO FeatureMerger_REFERENCE_INFO ATTRIBUTES"; } elseif { {ATTRIBUTES} == {GEOM_BUILD} && {POLYGONS} == {POLYGONS}} { puts "MACRO FeatureMerger_REFERENCE_INFO GEOM_BUILD_POLYS"; } elseif { {ATTRIBUTES} == {GEOM_BUILD} && {POLYGONS} == {AGGREGATES}} { puts "MACRO FeatureMerger_REFERENCE_INFO GEOM_BUILD_AGGREGATES"; } elseif { {ATTRIBUTES} == {GEOM_BUILD} && {POLYGONS} == {LINESFROMPOINTS}} { puts "MACRO FeatureMerger_REFERENCE_INFO GEOM_BUILD_LINES_FROM_POINTS"; } elseif { {ATTRIBUTES} == {GEOM_AND_ATTRS} && {POLYGONS} == {POLYGONS}} { puts "MACRO FeatureMerger_REFERENCE_INFO GEOM_AND_ATTR_BUILD_POLYS"; } elseif { {ATTRIBUTES} == {GEOM_AND_ATTRS} && {POLYGONS} == {AGGREGATES}} { puts "MACRO FeatureMerger_REFERENCE_INFO GEOM_AND_ATTR_BUILD_AGGREGATES"; } elseif { {ATTRIBUTES} == {GEOM_AND_ATTRS} && {POLYGONS} == {LINESFROMPOINTS}} { puts "MACRO FeatureMerger_REFERENCE_INFO GEOM_AND_ATTR_BUILD_LINES_FROM_POINTS"; } elseif { {ATTRIBUTES} == {GEOM_BUILD} } { puts "MACRO FeatureMerger_REFERENCE_INFO GEOM_BUILD_AGGREGATES"; } elseif { {ATTRIBUTES} == {GEOM_AND_ATTRS} } { puts "MACRO FeatureMerger_REFERENCE_INFO GEOM_AND_ATTR_BUILD_AGGREGATES"; } else {}; ] FACTORY_DEF {*} ReferenceFactory FACTORY_NAME FeatureMerger INPUT REFERENCER FEATURE_TYPE AttributeCreator_OUTPUT_-__FeatureMerger_REQUESTOR_Output INPUT REFERENCEE FEATURE_TYPE AttributeSplitter_3_OUTPUT_-__FeatureMerger_SUPPLIER_Output CONNECT_Z_MODE FIRST_WINS REFERENCE_INFO $(FeatureMerger_REFERENCE_INFO) REFERENCE_TABLE @EvaluateExpression(FDIV,STRING_ENCODED, 价值 SURFACE_GEOMETRY_ID ,featuremerger)@evaluateExpression(fdiv,string_encoded, 价值 SURFACE_GEOMETRY_ID ,farmauremerger)auto attr_accum_mode“ handle_conflict” attr_conflict_res_ress“ requestor_if_conflict” ignore_nulls“ no” no handle_null_missing_keys_keys_like_like_like_like_fme2013 nolist_attrs_attrs_trs_ttrs_ttrtrs_to_include { } list_attrs_to_include_mode MERGE_ATTRIBUTES是manage_fme_type yes模式完成process_duplicate_reference_reference yes referencees_first no recult_invalid_geom是输出完成功能_type farmation_type farmaturemerger_merged uptuct recupted recupted recunt_type faremun_type farterulemerger_ default_macro _wb_bypass_termination no factory_def * teefactory factory_name farmemerger_ 输入feature_type featuremerger_ 输出失败feature_type * @abort(编码,featuremerger 输出 A 拒绝 特征。 继续 如果 特征 拒绝 改变 工作区 范围 拒绝 特征 处理 继续 翻译 )#-------------------------------------------------------------------------------------------------------------- include [if {({区域} == {point})}} {puts {macro MeaduresEtter_Setter_setMeasuresfunc @geometry(set_measures,set_measures,观点,” “,fme_texture_coortion_u)};} elseif {({artion} == {line})}}} {puts {macro MeneseresEtter_setter_setter_setter_setter_setter_setmeasefunc @geometry(set_measures,line,line,_U {}arc})}} {puts {macro MeneseresEtter_setmeasuresfunc @geometry(set_measures,arc,arc,'' “,” “,fme_texture_coortion_u)};} elseif {({artion} == {afore})}}} {puts {macro Meneetter_setter_setter_setter_setter_setter_setter_measuresfunc @geometry(set_measures,afrea,aint,_u {}vertex})}} {puts {macro MeaduresEtter_setmeasuresfunc @geometry(set_measures,vertex,'' “,” “,fme_texture_coortion_u)};} elseif {({afore} == {all})}}} {puts {macro Menesereset_setter_setter_settermeasuresfunc @geometry(set_measures,set_measures,all,all,all,all,'' ",fme_texture_coordinate_u)}; } ] FACTORY_DEF * TeeFactory FACTORY_NAME MeasureSetter INPUT FEATURE_TYPE FeatureMerger_MERGED OUTPUT FEATURE_TYPE ___TOREJECTOR___ @RenameAttributes(FME_STRICT,___fme_rejection_code___,fme_rejection_code) $(MeasureSetter_setMeasuresFunc) FACTORY_DEF * TestFactory FACTORY_NAME MeasureSetter_Rejector INPUT FEATURE_TYPE ___TOREJECTOR___ TEST @Value(fme_rejection_code) != ""输出传递的功能_type measuretter_ @RemoveAttributes(___fme_rejection_code___) OUTPUT FAILED FEATURE_TYPE MeasureSetter_OUTPUT @RenameAttributes(FME_STRICT,fme_rejection_code,___fme_rejection_code___) DEFAULT_MACRO _WB_BYPASS_TERMINATION No FACTORY_DEF * TeeFactory FACTORY_NAME MeasureSetter_ 输入feature_type measuretter_ 输出失败的feature_type * @abort(编码,MeasuesEtter 输出 A 拒绝 特征。 继续 如果 特征 拒绝 改变 工作区 范围 拒绝 特征 处理 继续 翻译 )#---------------------------------------------------------------------------------------------------------------- include [if {({aind} == {point})}} {puts {macro MeaduresEtter_setmeaset_setmeasuresfunc @geometry(set_measures,set_measures,观点,” ",fme_texture_coordinate_v)}; } elseif { ({AREA} == {LINE}) } { puts {MACRO MeasureSetter_2_setMeasuresFunc @Geometry(SET_MEASURES,LINE,_v{},fme_texture_coordinate_v)}; } elseif { ({AREA} == {ARC}) } { puts {MACRO MeasureSetter_2_setMeasuresFunc @Geometry(SET_MEASURES,ARC," “,” “,fme_texture_coortion_v)};} elseif {({afore} == {afore})}} {puts {macro MeneseresEtter_ster_setter_setter_setmeasuresfunc @geometry(set_measures(set_measures,aint,aint,aind,_v {}},_v {},fme_texture_coortion_coordion_coordion_ver_veardiard_v)};vertex})}} {puts {macro MeaduresEtter_2_setmeasuresfunc @geometry(set_measures,vertex,'' “,” “,fme_texture_coortion_v)};} elseif {({afore} == {all})}} {puts {macro MeneseresEtter_2_setmeasuresfunc @geometry(set_measures,set_measures,all,all,all,all,all,'' ",fme_texture_coordinate_v)}; } ] FACTORY_DEF * TeeFactory FACTORY_NAME MeasureSetter_2 INPUT FEATURE_TYPE MeasureSetter_OUTPUT OUTPUT FEATURE_TYPE ___TOREJECTOR___ @RenameAttributes(FME_STRICT,___fme_rejection_code___,fme_rejection_code) $(MeasureSetter_2_setMeasuresFunc) FACTORY_DEF * TestFactory FACTORY_NAME MeasureSetter_2_Rejector INPUT FEATURE_TYPE ___TOREJECTOR___ TEST @Value(fme_rejection_code) != ""输出传递的功能_type measuretter_2_ @RemoveAttributes(___fme_rejection_code___) OUTPUT FAILED FEATURE_TYPE MeasureSetter_2_OUTPUT @RenameAttributes(FME_STRICT,fme_rejection_code,___fme_rejection_code___) DEFAULT_MACRO _WB_BYPASS_TERMINATION No FACTORY_DEF * TeeFactory FACTORY_NAME MeasureSetter_2_ 输入feature_type measuretter_2_ 输出失败feature_type * @abort(编码,measoresetter_2 输出 A 拒绝 特征。 继续 如果 特征 拒绝 改变 工作区 范围 拒绝 特征 处理 继续 翻译 )#----------------------------------------------------------------------------------------------------------------- include [if {{auto} == {custom}}} {puts {macro厚度_tolerance'' “};} elseif {{auto} == {nighore}} {puts {macro厚度_tolerance“ -2”};} else {puts {macro厚度_tolerance“ -1”};}; if {auto} == {}} {puts {macro angular_tolerance' "}; } elseif { {AUTO} == {IGNORE} } { puts {MACRO ANGULAR_TOLERANCE " -2"}; } else { puts {MACRO ANGULAR_TOLERANCE " -1"}; }; ] FACTORY_DEF * TeeFactory FACTORY_NAME FaceReplacer_FaceCreator INPUT FEATURE_TYPE MeasureSetter_2_OUTPUTOUTPUT FEATURE_TYPE ___TOREJECTOR___ @RenameAttributes(FME_STRICT,___fme_rejection_code___,fme_rejection_code) @GeometryType(fme_face, $(THICKNESS_TOLERANCE), $(ANGULAR_TOLERANCE)) FACTORY_DEF * TestFactory FACTORY_NAME FaceReplacer_Rejector INPUT FEATURE_TYPE ___TOREJECTOR___ TEST @Value(fme_rejection_code) != "" OUTPUT PASSED FEATURE_TYPE FaceReplacer_ @RemoveAttributes(___fme_rejection_code___) OUTPUT FAILED FEATURE_TYPE FaceReplacer_OUTPUT @RenameAttributes(FME_STRICT,fme_rejection_code,___fme_rejection_code___) DEFAULT_MACRO _WB_BYPASS_TERMINATION No FACTORY_DEF * TeeFactory FACTORY_NAME FaceReplacer_ 输入feature_type faceReplacer_ 输出失败的feature_type * @abort(编码,位置安装程序 输出 A 拒绝 特征。 继续 如果 特征 拒绝 改变 工作区 范围 拒绝 特征 处理 继续 翻译 )#---------------------------------------------------------------------------------------------------- INCLUDE [ set listOrSingle {@Value(___myNewAppearance)};将“ Macro List_or_single $ listorsingle”放置;]包括[if {(“两个” ==“两个”)}} {puts“ macro Exply_ids $(list_or_single)$(list_or_single)”;} elseif {(“两个” ==“ front”)}} {puts“ macro Expack_ids $(list_or_single)fme_do_do_not_set”;} else {put“ Macro Exply_ids fme_do_do_not_set $(list_or_single)”;} ] FACTORY_DEF * SortFactory FACTORY_NAME AppearanceSetter_HOLDER INPUT FEATURE_TYPE AppearanceSetter__DUMMY__ FACTORY_DEF * CreationFactory FACTORY_NAME AppearanceSetter_ColorStyle_Creator CREATE_AT_END NO OUTPUT FEATURE_TYPE AppearanceSetter_____CREATED_COLORSTYLE______ FACTORY_DEF * TeeFactory FACTORY_NAME AppearanceSetter_Apply_ColorStyle INPUT FEATURE_TYPE AppearanceSetter_____CREATED_COLORSTYLE______ OUTPUT FEATURE_TYPE AppearanceSetter_____OVERWRITE_APPEARANCE______ fme_appearance_style_name "" fme_appearance_style_diffuse_color "" fme_appearance_style_ambient_color "" fme_appearance_style_specular_color "" fme_appearance_style_emissive_color "" fme_appearance_style_alpha "" fme_appearance_style_shininess"" fme_texture_style_u_offset "" fme_texture_style_v_offset "" fme_texture_style_center_u "" fme_texture_style_center_v "" fme_texture_style_u_scaling_factor "" fme_texture_style_v_scaling_factor "" fme_texture_style_u_shearing_factor "" fme_texture_style_v_shearing_factor ""fme_texture_style_rotation_angle“” __fme_temp_overwrite_appearance_info是的,#我们将在这里说“前面”,因为我们想要的只是属性后退。FACTORY_DEF * SharedObjectFactory FACTORY_NAME AppearanceSetter_AddRefs INPUT DEFINITION_FRONT FEATURE_TYPE AppearanceSetter_____OVERWRITE_APPEARANCE______ INPUT DEFINITION_FRONT FEATURE_TYPE RasterRGBCreator_CREATED INPUT REFERENCER FEATURE_TYPE FaceReplacer_OUTPUT MODE ADD SHARED_OBJECT_TYPE APPEARANCE ADD_AS_ATTR_FRONT ___myNewAppearance RECURSIVE NO OUTPUT INVALID_GEOMETRY FEATURE_TYPE AppearanceSetter_OUTPUT OUTPUT SUCCESSFUL FEATURE_TYPE AppearanceSetter___touOriginOffsetRejector___ OUTPUT EXTRA_DEFINITION FEATURE_TYPE AppearanceSetter_ fme_rectiond_code extra_appearance_feature输出invalid_definition feature_type empercancesetter_ fme_rejection_code INVALID_APPEARANCE_GEOMETRY_TYPE FACTORY_DEF * TestFactory FACTORY_NAME AppearanceSetter_uOriginOffsetRejector INPUT FEATURE_TYPE AppearanceSetter___touOriginOffsetRejector___ TEST "0.0" TYPE NUM ENCODED OUTPUT FAILED FEATURE_TYPE AppearanceSetter_ fme_rejection_code "INVALID_PARAMETER_U_ORIGIN_OFFSET" OUTPUT PASSED FEATURE_TYPE AppearanceSetter___tovOriginOffsetRejector___ FACTORY_DEF * TestFactory FACTORY_NAME AppearanceSetter_vOriginOffsetRejector INPUT FEATURE_TYPE AppearanceSetter___tovOriginOffsetRejector___ TEST "0.0" TYPE NUM ENCODED OUTPUT FAILED FEATURE_TYPE AppearanceSetter_ fme_rejection_code "INVALID_PARAMETER_V_ORIGIN_OFFSET" OUTPUT PASSED FEATURE_TYPE AppearanceSetter___toTextureuRepeatFactorRejector___ FACTORY_DEF * TestFactory FACTORY_NAME AppearanceSetter__textureuRepeatFactorRejector__ INPUT FEATURE_TYPE AppearanceSetter___toTextureuRepeatFactorRejector___ TEST "1.0" TYPE NUM ENCODED OUTPUT FAILED FEATURE_TYPE AppearanceSetter_ fme_rejection_code "INVALID_PARAMETER_TEXTURE_U_REPEAT_FACTOR" OUTPUT PASSED FEATURE_TYPE AppearanceSetter___toTexturevRepeatFactorRejector___ FACTORY_DEF * TestFactory FACTORY_NAME AppearanceSetter__texturevRepeatFactorRejector__ INPUT FEATURE_TYPE AppearanceSetter___toTexturevRepeatFactorRejector___ TEST "1.0" TYPE NUM ENCODED OUTPUT FAILED FEATURE_TYPE AppearanceSetter_ fme_rejection_code "INVALID_PARAMETER_TEXTURE_V_REPEAT_FACTOR" OUTPUT PASSED FEATURE_TYPE AppearanceSetter___TaggedGeoms___ FACTORY_DEF * GQueryFactory FACTORY_NAME AppearanceSetter_GQuery INPUT FEATURE_TYPE AppearanceSetter___TaggedGeoms___ GQUERY "@EvaluateExpression(FDIV,STRING_ENCODED,for 地理 几何学 在哪里 地理 数数 父::几何 = 0 返回 数字 地理 fme_id ,AppearanceSetter)" ROUTE_UNMATCHED_FEATURES YES ACTION SET_APPEARANCE PARAMETER $(APPEARANCE_IDS) NO SURFACE_NORMAL "1.0" "1.0" "0.0" "0.0" Yes CREATE OUTPUT RESULT FEATURE_TYPE AppearanceSetter_OUTPUT @RemoveAttributes(fme_regexp_match,^___myNewAppearance.*$) OUTPUT UNTOUCHED FEATURE_TYPE AppearanceSetter_ @removeattributes(fme_regexp_match,^___ mynewappearance。 输入feature_type出现_ 输出失败的feature_type * @abort(编码,出现 输出 A 拒绝 特征。 继续 如果 特征 拒绝 改变 工作区 范围 拒绝 特征 处理 继续 翻译 )#---------------------------------------------------------------------------------------------------- # 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 AppearanceSetter_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_ad7bf09e_d5d3_4b4e_92ce_6308fc9739504_thinPointCloud {} { if {[string equal {NO_THINNING} {KEEPNPOINT}]} { FME_Execute ThinPointCloud NO_THINNING "\" \ ";} elseif {[string等于{no_thinning} {maxNumpoints}]}} {fme_execute thinpointCloud no_thinning“ \” \ ";} elseif {[string等于{no_thinning} {firstNPoints}]}} {fme_execute thinpointcloud no_thinning“ \” \ ";} elseif {[string等于{no_thinning} {lastnpoints}]}} {fme_execute thinpointcloud no_thinning“ \” \ ";};} FACTORY_DEF * TeeFactory FACTORY_NAMEspector___PointCloudThinner INPUT FEATURE_TYPE Inspector___PointCloudFeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("Inspector_ad7bf09e_d5d3_4b4e_92ce_6308fc9739504_thinPointCloud") Tcl2 proc Inspector_ad7bf09e_d5d3_4b4e_92ce_6308fc9739504_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_ad7bf09e_d5d3_4b4e_92ce_6308fc9739504_prepareRaster { } { } { } { }") # Now route all the features into the recorder, changing their # feature type to the transformer name so that they view nicely # Inspector_ad7bf09e_d5d3_4b4e_92ce_6308fc9739504_VIS_FEAT_TYPE changes the feature types # of the features being visualized. DEFAULT_MACRO Inspector_ad7bf09e_d5d3_4b4e_92ce_6308fc9739504_VIS_FEAT_TYPE Inspector$(CATMAC) DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(workspace_temp_dir)/$(亚搏在线safe_ffs_name).ffs default_macro tunailizer_create_create_spatial_index no#[pr#45549]数据检查器将限制win32上读取的最大功能##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_ad7bf09e_d5d3_4b4e_92ce_6308fc9739504_VIS_FEAT_TYPE)) FEATURE_FILE "$(VISUalizer_feature_file)“ create_spatial_index” $(tunailizer_create_spatial_index)“ Inspector” $(tunailizer_create_spatial_index)“ fsc_schema surface_geometry_id,varcharchar 255 ,texture_coordinates,varchar 255 ,_ coords,varchar 255 模式记录store_scanned_metadata record_directly_to_disk是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__输出路由功能_type *输出not_routed feature_type __nuke_me__ @tcl2(“ fme_statmessage 818059 [fme_getAttribute fme_ttribute fme_template_feature_type] 818060 818060 818061 FME_WARN----------------------------------------------- FACTORY_DEF * TeeFactoryFACTORY_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 -nocompontain -directory {$(workspace_temp_dir)} -tails *.ffs];如果{[lllength $ files]== 1} {set thefile {$(workspace_temp_dir)/};附加thefile [lindex $ files 0];eval fme_execute系统\ 173 \ 042 $(fme_home_unix)/fmedatainspector \ 042 - visualizer-single-application -delete-on-close-no-no-no-no-no-source-prompt-f ff ff ffs $ thefile&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__