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;lt&gt;?xml&lt;space&gt;version=&lt;quote&gt;1.0&lt;quote&gt;&lt;space&gt;encoding=&lt;quote&gt;US_ASCII&lt;quote&gt;&lt;space&gt;standalone=&lt;quote&gt;no&lt;quote&gt;&lt;space&gt;?&lt;gt&gt;&lt;lt&gt;geometry&lt;space&gt;dimension=&lt;quote&gt;2&lt;quote&gt;&lt;gt&gt;&lt;lt&gt;arc&lt;gt&gt;&lt;lt&gt;centerCoord&lt;space&gt;x=&lt;quote&gt;0&lt;quote&gt;&lt;space&gt;y=&lt;quote&gt;0&lt;quote&gt;&lt;solidus&gt;&lt;gt&gt;&lt;lt&gt;primRadius&lt;gt&gt;10&lt;lt&gt;&lt;solidus&gt;primRadius&lt;gt&gt;&lt;lt&gt;secRadius&lt;gt&gt;5&lt;lt&gt;&lt;solidus&gt;secRadius&lt;gt&gt;&lt;lt&gt;rotation&lt;gt&gt;49&lt;lt&gt;&lt;solidus&gt;rotation&lt;gt&gt;&lt;lt&gt;startAngle&lt;gt&gt;14&lt;lt&gt;&lt;solidus&gt;startAngle&lt;gt&gt;&lt;lt&gt;sweepAngle&lt;gt&gt;177&lt;lt&gt;&lt;solidus&gt;sweepAngle&lt;gt&gt;&lt;lt&gt;&lt;solidus&gt;arc&lt;gt&gt;&lt;lt&gt;&lt;solidus&gt;geometry&lt;gt&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__

Reply via email to