Abel,
> The solution I adopted is quit simple but require something like 12
> ExpressionEvaluator: I used geodetic method. I’ll try to put it in FMEPedia.
There is a simpler method, see the attached workbench.
- Calculate length of the arc
- Divide that by two
- Use the DistanceSnipper to shorten the arc by that distance. The
endpoint of the arc is now logically the point on the centre of the
original arc.
- ArcStroker to make it possible to grab the coordinate with a
CoordinateFetcher.
Hope this helps.
--
Hans van der Maarel
Red Geographics
Zevenbergsepoort 44b www.redgeographics.com
4791 AE Klundert [EMAIL PROTECTED]
The Netherlands phone: +31-168-401035
For insights into what's up at Safe Software and what's on the development
horizon, visit Safe's blog at spatial-etl.blogspot.com.
Safe Software has also made slides available that outline enhancements planned
for FME 2007. The slides are from the "Road Ahead" presentation given on Day 2
of the FME Worldwide Users Conference. To view these slides, visit
www.safe.com/2006uc.
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/fme/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/fme/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:[EMAIL PROTECTED]
mailto:[EMAIL PROTECTED]
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
#! <?xml version="1.0" encoding="iso-8859-1" ?>
#! <WORKSPACE
#
#
# Commandline to run this workspace:
#
#
# fme.exe centerpoint_of_arc.fmw
#
#
#! MAX_LOG_FEATURES="200"
#! SOURCE="NONE"
#! END_TCL=""
#! DESTINATION="NONE"
#! SHOW_BOOKMARKS="true"
#! GRID_VISIBLE="false"
#! GRID_HEIGHT="50"
#! SHOW_INFO_NODES="true"
#! BEGIN_PYTHON=""
#! BEGIN_TCL=""
#! VIEW_POSITION="400 0"
#! ZOOM_SCALE="100"
#! PASSWORD=""
#! VIEW_PAGE_BREAKS="false"
#! FME_CACHED_OBJECTS_HINT="250000"
#! SHOW_ANNOTATIONS="true"
#! LOG_MAX_RECORDED_FEATURES="200"
#! END_PYTHON=""
#! FME_REPROJECTION_ENGINE="FME"
#! FME_BUILD_NUM="4282"
#! GRID_SNAPTO="false"
#! GRID_WIDTH="50"
#! SOURCE_ROUTING_DIR=""
#! LOG_FILE=""
#! DESTINATION_ROUTING_DIR=""
#! WORKSPACE_VERSION="1"
#! TITLE=""
#! IGNORE_READER_FAILURE="No"
#! ATTR_TYPE_ENCODING="SDF"
#! >
#! <DATASETS>
#! </DATASETS>
#! <DATA_TYPES>
#! </DATA_TYPES>
#! <GEOM_TYPES>
#! </GEOM_TYPES>
#! <FEATURE_TYPES>
#! </FEATURE_TYPES>
#! <GLOBAL_PARAMETERS>
#! </GLOBAL_PARAMETERS>
#! <COMMENTS>
#! </COMMENTS>
#! <CONSTANTS>
#! </CONSTANTS>
#! <BOOKMARKS>
#! </BOOKMARKS>
#! <TRANSFORMERS>
#! <TRANSFORMER
#! IDENTIFIER="0"
#! TYPE="Creator"
#! VERSION="2"
#! POSITION="218 -925"
#! ORDER="8"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <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="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>arc<gt><lt>centerCoord<space>x=<quote>0<quote><space>y=<quote>0<quote><solidus><gt><lt>primRadius<gt>10<lt><solidus>primRadius<gt><lt>secRadius<gt>5<lt><solidus>secRadius<gt><lt>rotation<gt>49<lt><solidus>rotation<gt><lt>startAngle<gt>14<lt><solidus>startAngle<gt><lt>sweepAngle<gt>177<lt><solidus>sweepAngle<gt><lt><solidus>arc<gt><lt><solidus>geometry<gt>"/>
#! <XFORM_PARM PARM_NAME="ATEND" PARM_VALUE="no"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="CREATOR"/>
#! <XFORM_PARM PARM_NAME="NUM" PARM_VALUE="1"/>
#! <XFORM_PARM PARM_NAME="CRE_ATTR" PARM_VALUE="_creation_instance"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="1"
#! TYPE="LengthCalculator"
#! VERSION="0"
#! POSITION="768 -936"
#! ORDER="9"
#! PARMS_EDITED="false"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="OUTPUT"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_length" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false"
FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="LEN_ATTR" PARM_VALUE="_length"/>
#! <XFORM_PARM PARM_NAME="DIM" PARM_VALUE="2"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="LENGTHCALCULATOR"/>
#! <XFORM_PARM PARM_NAME="MULT" PARM_VALUE="1"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="3"
#! TYPE="DistanceSnipper"
#! VERSION="1"
#! POSITION="1816 -1060"
#! ORDER="10"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="OUTPUT"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_result" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_length" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false"
FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="SNIPMODE" PARM_VALUE="DISTANCE"/>
#! <XFORM_PARM PARM_NAME="ENDLOCATIONATTR" PARM_VALUE="@Value(_result)"/>
#! <XFORM_PARM PARM_NAME="MEASUREMENTTYPE" PARM_VALUE="2D"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="DISTANCESNIPPER"/>
#! <XFORM_PARM PARM_NAME="STARTLOCATIONATTR" PARM_VALUE="0"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="4"
#! TYPE="ExpressionEvaluator"
#! VERSION="1"
#! POSITION="1259 -995"
#! ORDER="11"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="OUTPUT"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_result" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_length" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false"
FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="EXPRESSION" PARM_VALUE="@Value(_length)/2"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="EXPRESSIONEVALUATOR"/>
#! <XFORM_PARM PARM_NAME="VAL_ATTR" PARM_VALUE="_result"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="7"
#! TYPE="ArcStroker"
#! VERSION="0"
#! POSITION="2375 -1127"
#! ORDER="12"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="STROKED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_result" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_length" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false"
FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="ARCSTROKER"/>
#! <XFORM_PARM PARM_NAME="NUM" PARM_VALUE="1"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="9"
#! TYPE="Visualizer"
#! VERSION="1"
#! POSITION="759 -1709"
#! ORDER="13"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <XFORM_PARM PARM_NAME="TACKATTRS" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="AREA_COLOR" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="original_arc"/>
#! <XFORM_PARM PARM_NAME="PEN_COLOR" PARM_VALUE=""/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="11"
#! TYPE="CoordinateFetcher"
#! VERSION="1"
#! POSITION="2951 -1183"
#! ORDER="14"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="OUTPUT"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_x" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_y" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_z" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_result" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_length" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false"
FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="Z_DEFAULT" PARM_VALUE="-9999"/>
#! <XFORM_PARM PARM_NAME="IND" PARM_VALUE="-1"/>
#! <XFORM_PARM PARM_NAME="Z_ATTR" PARM_VALUE="_z"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="COORDINATEFETCHER"/>
#! <XFORM_PARM PARM_NAME="Y_ATTR" PARM_VALUE="_y"/>
#! <XFORM_PARM PARM_NAME="X_ATTR" PARM_VALUE="_x"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="13"
#! TYPE="2DPointReplacer"
#! VERSION="1"
#! POSITION="3556 -1280"
#! ORDER="15"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="POINT"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_x" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_y" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_z" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_result" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_length" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false"
FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="YVALATTR" PARM_VALUE="@Value(_y)"/>
#! <XFORM_PARM PARM_NAME="XVALATTR" PARM_VALUE="@Value(_x)"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="2DPOINTREPLACER"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="15"
#! TYPE="Visualizer"
#! VERSION="1"
#! POSITION="4378 -1305"
#! ORDER="16"
#! PARMS_EDITED="false"
#! ENABLED="true"
#! >
#! <XFORM_PARM PARM_NAME="TACKATTRS" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="AREA_COLOR" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="2DPOINTREPLACER_POINT"/>
#! <XFORM_PARM PARM_NAME="PEN_COLOR" PARM_VALUE=""/>
#! </TRANSFORMER>
#! </TRANSFORMERS>
#! <FEAT_LINKS>
#! <FEAT_LINK
#! IDENTIFIER="2"
#! SOURCE_NODE="0"
#! TARGET_NODE="1"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="5"
#! SOURCE_NODE="1"
#! TARGET_NODE="4"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="6"
#! SOURCE_NODE="4"
#! TARGET_NODE="3"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="8"
#! SOURCE_NODE="3"
#! TARGET_NODE="7"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="10"
#! SOURCE_NODE="0"
#! TARGET_NODE="9"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="14"
#! SOURCE_NODE="11"
#! TARGET_NODE="13"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="16"
#! SOURCE_NODE="13"
#! TARGET_NODE="15"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="18"
#! SOURCE_NODE="7"
#! TARGET_NODE="11"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! </FEAT_LINKS>
#! <ATTR_LINKS>
#! </ATTR_LINKS>
#! <SUBDOCUMENTS>
#! </SUBDOCUMENTS>
#! <LOOKUP_TABLES>
#! </LOOKUP_TABLES>
#! </WORKSPACE>
#!
#! 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
#! END_HEADER
LOG_FILENAME "$(FME_MF_DIR)centerpoint_of_arc.log"
LOG_APPEND NO
LOG_MAX_FEATURES 200
LOG_MAX_RECORDED_FEATURES 200
FME_CACHED_OBJECTS_HINT 250000
FME_REPROJECTION_ENGINE FME
# -------------------------------------------------------------------------
MULTI_READER_CONTINUE_ON_READER_FAILURE No
# -------------------------------------------------------------------------
MACRO WORKSPACE_NAME centerpoint_of_arc
DEFAULT_MACRO WB_CURRENT_CONTEXT
# -------------------------------------------------------------------------
FACTORY_DEF * CreationFactory FACTORY_NAME CREATOR CREATE_AT_END no
OUTPUT FEATURE_TYPE _____CREATED______
@SupplyAttributes(fme_type,fme_no_geom)
@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>arc<gt><lt>centerCoord<space>x=<quote>0<quote><space>y=<quote>0<quote><solidus><gt><lt>primRadius<gt>10<lt><solidus>primRadius<gt><lt>secRadius<gt>5<lt><solidus>secRadius<gt><lt>rotation<gt>49<lt><solidus>rotation<gt><lt>startAngle<gt>14<lt><solidus>startAngle<gt><lt>sweepAngle<gt>177<lt><solidus>sweepAngle<gt><lt><solidus>arc<gt><lt><solidus>geometry<gt>)
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
FACTORY_DEF * TeeFactory FACTORY_NAME "CREATOR CREATED Splitter" INPUT
FEATURE_TYPE CREATOR_CREATED OUTPUT FEATURE_TYPE CREATOR_CREATED_0 OUTPUT
FEATURE_TYPE CREATOR_CREATED_1
# -------------------------------------------------------------------------
# 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
# First, set up the temporary directory that will be used for
# the recordings we will be viewing (these three lines do this)
# They assume that the WORKSPACE_NAME macro has already been set
DEFAULT_MACRO WORKSPACE_TEMP_DIR
INCLUDE [ if {[string length {$(WORKSPACE_TEMP_DIR)}] < 2} { if
{[info exists env(TEMP)]} {set gVisualizerTemp $env(TEMP)}
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"; } ;
if { [string length {}] > 0 } { set catter "" ; set
comma "" ; foreach attr "" { set catter
"$catter$comma&$attr" ; set comma ",_," ; } ;
puts "MACRO CATMAC [EMAIL PROTECTED]($catter)" ; } else {
puts "MACRO CATMAC " ; }; set safeName "[regsub
-all {[^a-zA-Z0-9]} {original_arc} _]_[expr round(rand() * 1000000)]_[clock
clicks]"; puts "MACRO SAFE_FFS_NAME $safeName"; ]
# Make the temporary directory that the FFS files will live in.
FACTORY_DEF * CreationFactory FACTORY_NAME original_arc_DirCreator
OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir
{$(WORKSPACE_TEMP_DIR)}}")
FACTORY_DEF * TeeFactory FACTORY_NAME original_arc_DirCreatorCleanerUpper
INPUT FEATURE_TYPE __nukeme__
# Now route all the features into the recorder, changing their
# feature type to the transformer name so that they view nicely
FACTORY_DEF * TeeFactory FACTORY_NAME original_arc_SetterUpper INPUT
FEATURE_TYPE CREATOR_CREATED_1 OUTPUT FEATURE_TYPE __viewme__
FACTORY_DEF * RecorderFactory FACTORY_NAME original_arc_Recorder INPUT
FEATURE_TYPE __viewme__ @FeatureType(original_arc$(CATMAC)) FEATURE_FILE
"$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs" MODE RECORD_PASS_THROUGH
FACTORY_DEF * CreationFactory FACTORY_NAME original_arc_Trigger
CREATE_AT_END OUTPUT FEATURE_TYPE __nukeme__ @TCL("lappend
gVisualizerFilesToView $(SAFE_FFS_NAME)")
FACTORY_DEF * TeeFactory FACTORY_NAME original_arc_CleanerUpper INPUT
FEATURE_TYPE __nukeme__
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME LENGTHCALCULATOR INPUT
FEATURE_TYPE CREATOR_CREATED_0 OUTPUT FEATURE_TYPE LENGTHCALCULATOR_OUTPUT
_length @Length(2,1)
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME EXPRESSIONEVALUATOR INPUT
FEATURE_TYPE LENGTHCALCULATOR_OUTPUT OUTPUT FEATURE_TYPE
EXPRESSIONEVALUATOR_OUTPUT _result @Evaluate("@Value(_length)/2")
# -------------------------------------------------------------------------
# The Snipper takes the constant "end" to mean the last vertex of the line,
# but Workbench won't let us put an alpha string into the "last vertex"
textfield.
# We'll interpret an ending vertex of -1 as being the same as "end".
Tcl2 proc DISTANCESNIPPER_fixIndex {numIndex} { if {$numIndex < 0} {
return "end"; } else { return $numIndex; } }
FACTORY_DEF * TeeFactory FACTORY_NAME DISTANCESNIPPER INPUT FEATURE_TYPE
EXPRESSIONEVALUATOR_OUTPUT OUTPUT FEATURE_TYPE DISTANCESNIPPER_OUTPUT
@Snip(@Tcl2("DISTANCESNIPPER_fixIndex 0"),@Tcl2("DISTANCESNIPPER_fixIndex
@Value(_result)"),DISTANCE,2D)
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME ARCSTROKER_Splitter INPUT
FEATURE_TYPE DISTANCESNIPPER_OUTPUT OUTPUT FEATURE_TYPE ___TOSTROKE___
FACTORY_DEF * TeeFactory FACTORY_NAME ARCSTROKER_ArcStroker INPUT
FEATURE_TYPE ___TOSTROKE___ fme_type fme_arc OUTPUT FEATURE_TYPE
ARCSTROKER_STROKED
@Arc(&fme_primary_axis,&fme_secondary_axis,1,&fme_rotation,&fme_start_angle,&fme_sweep_angle)
@SupplyAttributes(fme_type,fme_line)
FACTORY_DEF * TeeFactory FACTORY_NAME ARCSTROKER_EllipseStroker INPUT
FEATURE_TYPE ___TOSTROKE___ fme_type fme_ellipse OUTPUT FEATURE_TYPE *
@Arc(&fme_primary_axis,&fme_secondary_axis,1,&fme_rotation)
@SupplyAttributes(fme_type,fme_area)
FACTORY_DEF * TeeFactory FACTORY_NAME ARCSTROKER_EverythingElse INPUT
FEATURE_TYPE ___TOSTROKE___ OUTPUT FEATURE_TYPE ARCSTROKER_STROKED
# -------------------------------------------------------------------------
FACTORY_DEF * TestFactory FACTORY_NAME COORDINATEFETCHER INPUT
FEATURE_TYPE ARCSTROKER_STROKED TEST @Dimension() == 2 OUTPUT PASSED
FEATURE_TYPE COORDINATEFETCHER_OUTPUT _x
@Coordinate(x,-1,FLATTEN_AGGREGATE) _y
@Coordinate(y,-1,FLATTEN_AGGREGATE) @SupplyAttributes(_z,-9999)
OUTPUT FAILED FEATURE_TYPE COORDINATEFETCHER_OUTPUT _x
@Coordinate(x,-1,FLATTEN_AGGREGATE) _y
@Coordinate(y,-1,FLATTEN_AGGREGATE) _z
@Coordinate(z,-1,FLATTEN_AGGREGATE)
# -------------------------------------------------------------------------
FACTORY_DEF * TestFactory FACTORY_NAME 2DPOINTREPLACER INPUT
FEATURE_TYPE COORDINATEFETCHER_OUTPUT TEST &fme_type = fme_text OUTPUT
PASSED FEATURE_TYPE 2DPOINTREPLACER_POINT @XValue("@Value(_x)",RESET)
@YValue("@Value(_y)") @Dimension(2) OUTPUT FAILED FEATURE_TYPE
2DPOINTREPLACER_POINT @XValue("@Value(_x)",RESET)
@YValue("@Value(_y)") @Dimension(2) @GeometryType(fme_point)
@SupplyAttributes(fme_type,fme_point)
# -------------------------------------------------------------------------
# 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
# First, set up the temporary directory that will be used for
# the recordings we will be viewing (these three lines do this)
# They assume that the WORKSPACE_NAME macro has already been set
DEFAULT_MACRO WORKSPACE_TEMP_DIR
INCLUDE [ if {[string length {$(WORKSPACE_TEMP_DIR)}] < 2} { if
{[info exists env(TEMP)]} {set gVisualizerTemp $env(TEMP)}
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"; } ;
if { [string length {}] > 0 } { set catter "" ; set
comma "" ; foreach attr "" { set catter
"$catter$comma&$attr" ; set comma ",_," ; } ;
puts "MACRO CATMAC [EMAIL PROTECTED]($catter)" ; } else {
puts "MACRO CATMAC " ; }; set safeName "[regsub
-all {[^a-zA-Z0-9]} {2DPOINTREPLACER_POINT} _]_[expr round(rand() *
1000000)]_[clock clicks]"; puts "MACRO SAFE_FFS_NAME $safeName";
]
# Make the temporary directory that the FFS files will live in.
FACTORY_DEF * CreationFactory FACTORY_NAME
2DPOINTREPLACER_POINT_DirCreator OUTPUT FEATURE_TYPE __nukeme__
@Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}")
FACTORY_DEF * TeeFactory FACTORY_NAME
2DPOINTREPLACER_POINT_DirCreatorCleanerUpper INPUT FEATURE_TYPE __nukeme__
# Now route all the features into the recorder, changing their
# feature type to the transformer name so that they view nicely
FACTORY_DEF * TeeFactory FACTORY_NAME 2DPOINTREPLACER_POINT_SetterUpper
INPUT FEATURE_TYPE 2DPOINTREPLACER_POINT OUTPUT FEATURE_TYPE __viewme__
FACTORY_DEF * RecorderFactory FACTORY_NAME 2DPOINTREPLACER_POINT_Recorder
INPUT FEATURE_TYPE __viewme__ @FeatureType(2DPOINTREPLACER_POINT$(CATMAC))
FEATURE_FILE "$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs" MODE
RECORD_PASS_THROUGH
FACTORY_DEF * CreationFactory FACTORY_NAME 2DPOINTREPLACER_POINT_Trigger
CREATE_AT_END OUTPUT FEATURE_TYPE __nukeme__ @TCL("lappend
gVisualizerFilesToView $(SAFE_FFS_NAME)")
FACTORY_DEF * TeeFactory FACTORY_NAME 2DPOINTREPLACER_POINT_CleanerUpper
INPUT FEATURE_TYPE __nukeme__
# -------------------------------------------------------------------------
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__))
# -------------------------------------------------------------------------
DEFAULT_MACRO WORKSPACE_TEMP_DIR
INCLUDE [ if {{$(WORKSPACE_TEMP_DIR)} == {}} { puts {MACRO
__WB_ENABLE_VISUALIZER__ no} } else { puts {MACRO __WB_ENABLE_VISUALIZER__ *} }
]
FACTORY_DEF $(__WB_ENABLE_VISUALIZER__) CreationFactory CREATE_AT_END
OUTPUT FEATURE_TYPE __NUKEME__ @TCL("eval FME_Execute System \173fmeview
/ownffs {$(WORKSPACE_TEMP_DIR)} $gVisualizerFilesToView & }")
FACTORY_DEF * TeeFactory INPUT FEATURE_TYPE __NUKEME__