#! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! FME_PYTHON_VERSION 27 GUI IGNORE SourceDataset_CITYGML_1,CITYGML_IN_USE_CITYGML_SCHEMA_FILES_CITYGML_1,CITYGML_IN_ADE_XSD_DOC_CITYGML_1,CITYGML_IN_SKIP_SCHEMA_LOCATION_IN_DATASET_CITYGML_1,CITYGML_IN_SRS_AXIS_ORDER_CITYGML_1,CITYGML_IN_TEXTURE_COORDINATES_ORDER_FIX_CITYGML_1,CITYGML_IN_SEARCH_ENVELOPE_MINX_CITYGML_1,CITYGML_IN_SEARCH_ENVELOPE_MINY_CITYGML_1,CITYGML_IN_SEARCH_ENVELOPE_MAXX_CITYGML_1,CITYGML_IN_SEARCH_ENVELOPE_MAXY_CITYGML_1,CITYGML_IN_CLIP_TO_ENVELOPE_CITYGML_1,SEARCH_ENVELOPE_COORDINATE_SYSTEM_CITYGML_1,SourceDataset_CITYGML_2,CITYGML_IN_USE_CITYGML_SCHEMA_FILES_CITYGML_2,CITYGML_IN_ADE_XSD_DOC_CITYGML_2,CITYGML_IN_SKIP_SCHEMA_LOCATION_IN_DATASET_CITYGML_2,CITYGML_IN_SRS_AXIS_ORDER_CITYGML_2,CITYGML_IN_TEXTURE_COORDINATES_ORDER_FIX_CITYGML_2,CITYGML_IN_EXPOSE_ATTRS_GROUP_CITYGML_2,CITYGML_IN_SEARCH_ENVELOPE_MINX_CITYGML_2,CITYGML_IN_SEARCH_ENVELOPE_MINY_CITYGML_2,CITYGML_IN_SEARCH_ENVELOPE_MAXX_CITYGML_2,CITYGML_IN_SEARCH_ENVELOPE_MAXY_CITYGML_2,CITYGML_IN_CLIP_TO_ENVELOPE_CITYGML_2,CITYGML_IN_NETWORK_AUTHENTICATION_CITYGML_2,SEARCH_ENVELOPE_COORDINATE_SYSTEM_CITYGML_2,DestDataset_DIRECTX_1,DIRECTX_OUT_FILE_TYPE_DIRECTX_1,DIRECTX_OUT_LHCS_CONVERSION_DIRECTX_1,DestDataset_ESRISHAPE_1,ESRISHAPE_OUT_ENCODING_ESRISHAPE_1,ESRISHAPE_OUT_WRITE_SPATIAL_INDEX_ESRISHAPE_1,ESRISHAPE_OUT_COMPRESSED_SHAPE_FILE_ESRISHAPE_1,ESRISHAPE_OUT_DIMENSION_GROUP_ESRISHAPE_1,ESRISHAPE_OUT_SHAPE_WRT_ADV_PARM_GROUP_ESRISHAPE_1,ESRISHAPE_OUT_STRICT_COMPATIBILITY_ESRISHAPE_1,ESRISHAPE_OUT_PRESERVE_RING_VERTEX_ORDER_ESRISHAPE_1,_MEASURES_AS_Z_ESRISHAPE_1 DEFAULT_MACRO SourceDataset_CITYGML C:\citygml\Frankfurt_Street_Setting_LOD3\Frankfurt_Street_Setting_LOD3.xml GUI MULTIFILE SourceDataset_CITYGML CityGML_Files(*.gml;*.xml;*.gz)|*.gml;*.xml;*.gz|CityGML_Files(*.gml)|*.gml|CityGML_Files(*.xml)|*.xml|Compressed_CityGML_Files(*.gz)|*.gz|All_Files|* Source CityGML File(s): DEFAULT_MACRO ADE_SPEC GUI OPTIONAL MULTIFILE ADE_SPEC ADE_Schema_Files(*.xsd)|*.xsd|All_Files(*.*)|*.* Additional ADE Schema File(s): DEFAULT_MACRO DestDataset_DIRECTX C:\Users\Administrator\AppData\Local\Microsoft\Windows\INetCache\Content.Outlook\70RBBHN1\out GUI DIRNAME DestDataset_DIRECTX Destination DirectX Directory: DEFAULT_MACRO DestDataset_ESRISHAPE C:\Users\Administrator\AppData\Local\Microsoft\Windows\INetCache\Content.Outlook\70RBBHN1\out GUI DIRNAME DestDataset_ESRISHAPE Destination Esri Shapefile Folder: INCLUDE [ if {{$(SourceDataset_CITYGML)} == {}} { puts_real {Parameter 'SourceDataset_CITYGML' must be given a value.}; exit 1; }; ] INCLUDE [ if {{$(DestDataset_DIRECTX)} == {}} { puts_real {Parameter 'DestDataset_DIRECTX' must be given a value.}; exit 1; }; ] INCLUDE [ if {{$(DestDataset_ESRISHAPE)} == {}} { puts_real {Parameter 'DestDataset_ESRISHAPE' must be given a value.}; exit 1; }; ] #! START_HEADER #! WORKSPACE_VERSION 1 # ============================================================================ # # This mapping file was generated by FME Workbench # on 05/18/10 16:03:19 for translation between CITYGML and DIRECTX # # This workspace was generated with FME build 6219 # # You may edit this mapping file to customize its operation. Comments are # placed throughout to assist you. # # Modification History: # # Name Date Description # ================= ======== ============================================= # # # ============================================================================ # ============================================================================ # The following line defines the title presented to the user when this # mapping file is run through the FME GUI. You may modify this # if a more meaningful title would be appropriate. GUI TITLE CITYGML to DIRECTX Translation # ============================================================================ # The following line names the log file to which useful statistics about # the translation will be written. This line can be uncommented and # updated if you do wish to keep these statistics. # LOG_FILENAME translation.log # LOG_APPEND NO # ============================================================================ # The following line instructs the FME to log any features that do not # match any of the source feature patterns listed further down in # this file. If you are modifying this mapping file, this will be # useful to describe to you exactly which features you are losing # during translation, if the statistics indicate that features are # not being correlated or grouped. Uncorrelated features do not # match any source specification, ungrouped features do not have # any corresponding _DEF line. FME_DEBUG UNGROUPED UNCORRELATED # ============================================================================ # The following two lines define the type of reader and writer to be # used for this translation. If you want to translate your data # back into its original format, you may make a copy of this file # and switch the reader and writer types. If you rerun the FME, you # will get your original data back again (together with any modifications # you made in the meantime). Note that several formats are NOT # bi-directional (for example, GIF can only be used as a WRITER) # so a reverse translation may not always be possible. #! START_WB_HEADER READER_TYPE MULTI_READER MULTI_READER_TYPE{0} NULL MULTI_READER_FORMAT{0} CITYGML MULTI_READER_KEYWORD{0} CITYGML_1 MULTI_READER_GEN_DIRECTIVES{0} APPEARANCES,YES,MATERIAL_FEATURES,No,FME_GEOMETRY_HANDLING,Enhanced MULTI_READER_TYPE{1} NULL MULTI_READER_FORMAT{1} NULL MULTI_READER_KEYWORD{1} NULL_1 MULTI_READER_GEN_DIRECTIVES{1} _MERGE_SCHEMAS,YES MULTI_READER_TYPE{2} CITYGML MULTI_READER_KEYWORD{2} CITYGML_2 MULTI_READER_GEN_DIRECTIVES{2} CLIP_TO_ENVELOPE,NO,GENERIC_ATTRS_AS_FEATURES,No,DYNAMIC_WORKFLOW,yes,TEXTURE_COORDINATES_ORDER_FIX,No,USE_CITYGML_SCHEMA_FILES,Yes,SRS_AXIS_ORDER,,ADE_XSD_DOC,,MATERIAL_FEATURES,No,ONLY_FEATURE_TYPES_IN_DATASET,NO,SKIP_SCHEMA_LOCATION_IN_DATASET,No,_MERGE_SCHEMAS,YES,SEARCH_ENVELOPE_MINY,0,USE_SEARCH_ENVELOPE,NO,SEARCH_ENVELOPE_MINX,0,EXPOSE_ATTRS_GROUP,,GENERIC_ATTRS_AS_SCHEMA_ATTRS,Yes,SEARCH_ENVELOPE_MAXX,0,CITYGML_EXPOSE_FORMAT_ATTRS,,VERSION,2.0,SEARCH_ENVELOPE_MAXY,0 WRITER_TYPE MULTI_WRITER MULTI_WRITER_DATASET_ORDER BY_ID MULTI_WRITER_FIRST_WRITER_ID 0 MULTI_WRITER_TYPE{0} MULTI_WRITER MULTI_WRITER_KEYWORD{0} DIRECTX_1_FANOUT DIRECTX_1_FANOUT_TYPE{*} DIRECTX DIRECTX_1_FANOUT_KEYWORD{*} DIRECTX_1 DIRECTX_1_FANOUT_DATASET_ORDER BY_INPUT MULTI_WRITER_TYPE{1} ESRISHAPE MULTI_WRITER_KEYWORD{1} ESRISHAPE_1 #! END_WB_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "CITYGML_1" #! END_WB_HEADER #! START_SOURCE_HEADER CITYGML CITYGML_1 # 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_CITYGML_1 $(SourceDataset)} \ } ] #! END_WB_HEADER #! START_SOURCE_HEADER CITYGML CITYGML_1 DEFAULT_MACRO SourceDataset_CITYGML_1 C:\Users\Administrator\AppData\Local\Microsoft\Windows\INetCache\Content.Outlook\70RBBHN1\Sample1_KMZ.kmz GUI MULTIFILE SourceDataset_CITYGML_1 CityGML_Files(*.gml;*.xml;*.gz)|*.gml;*.xml;*.gz|CityGML_Files(*.gml)|*.gml|CityGML_Files(*.xml)|*.xml|Compressed_CityGML_Files(*.gz)|*.gz|All_Files|*.* Source CityGML File(s): # ============================================================================ # ============================================================================ DEFAULT_MACRO CITYGML_IN_USE_CITYGML_SCHEMA_FILES_CITYGML_1 Yes CITYGML_1_USE_CITYGML_SCHEMA_FILES "$(CITYGML_IN_USE_CITYGML_SCHEMA_FILES_CITYGML_1)" GUI LOOKUP_CHOICE CITYGML_IN_USE_CITYGML_SCHEMA_FILES_CITYGML_1 "\"Yes (Recommended)\",Yes"%"\"No (Deprecated - Backward-compatible)\",No" Reader Driven by CityGML Schema: # ============================================================================ # The ADE_XSD_DOC keyword overwrites the location of the XML Schema document that # is specified in the xsi:schemaLocation of the XML dataset. DEFAULT_MACRO CITYGML_IN_ADE_XSD_DOC_CITYGML_1 $(ADE_SPEC) CITYGML_1_ADE_XSD_DOC "$(CITYGML_IN_ADE_XSD_DOC_CITYGML_1)" GUI OPTIONAL MULTIFILE CITYGML_IN_ADE_XSD_DOC_CITYGML_1 ADE_Schema_Files(*.xsd)|*.xsd|All_Files(*.*)|*.* Additional ADE Schema File(s): # ============================================================================ # The ADE_XSD_DOC keyword overwrites the location of the XML Schema document that # is specified in the xsi:schemaLocation of the XML dataset. DEFAULT_MACRO CITYGML_IN_SKIP_SCHEMA_LOCATION_IN_DATASET_CITYGML_1 No CITYGML_1_SKIP_SCHEMA_LOCATION_IN_DATASET "$(CITYGML_IN_SKIP_SCHEMA_LOCATION_IN_DATASET_CITYGML_1)" GUI CHOICE CITYGML_IN_SKIP_SCHEMA_LOCATION_IN_DATASET_CITYGML_1 Yes%No Ignore xsi:schemaLocation in Dataset: # ============================================================================ # ============================================================================ DEFAULT_MACRO CITYGML_IN_ONLY_FEATURE_TYPES_IN_DATASET_CITYGML_1 YES CITYGML_1_ONLY_FEATURE_TYPES_IN_DATASET "$(CITYGML_IN_ONLY_FEATURE_TYPES_IN_DATASET_CITYGML_1)" # ============================================================================ # Allow the user to choose if GenericAttribute should be included as Feature types DEFAULT_MACRO CITYGML_IN_GENERIC_ATTRS_AS_FEATURES_CITYGML_1 No CITYGML_1_GENERIC_ATTRS_AS_FEATURES "$(CITYGML_IN_GENERIC_ATTRS_AS_FEATURES_CITYGML_1)" # ============================================================================ # Allow the user to choose if X3DMaterials and ParameterizedTextures should be included as Feature types # The default is No. DEFAULT_MACRO CITYGML_IN_MATERIAL_FEATURES_CITYGML_1 No CITYGML_1_MATERIAL_FEATURES "$(CITYGML_IN_MATERIAL_FEATURES_CITYGML_1)" # ============================================================================ DEFAULT_MACRO CITYGML_IN_GENERIC_ATTRS_AS_SCHEMA_ATTRS_CITYGML_1 Yes CITYGML_1_GENERIC_ATTRS_AS_SCHEMA_ATTRS "$(CITYGML_IN_GENERIC_ATTRS_AS_SCHEMA_ATTRS_CITYGML_1)" # ============================================================================ # ============================================================================ DEFAULT_MACRO CITYGML_IN_SRS_AXIS_ORDER_CITYGML_1 1,2,3 CITYGML_1_SRS_AXIS_ORDER "$(CITYGML_IN_SRS_AXIS_ORDER_CITYGML_1)" GUI OPTIONAL CHOICE CITYGML_IN_SRS_AXIS_ORDER_CITYGML_1 1,2%2,1%1,2,3%2,1,3 GML SRS Axis Order: # ============================================================================ DEFAULT_MACRO CITYGML_IN_TEXTURE_COORDINATES_ORDER_FIX_CITYGML_1 No CITYGML_1_TEXTURE_COORDINATES_ORDER_FIX "$(CITYGML_IN_TEXTURE_COORDINATES_ORDER_FIX_CITYGML_1)" GUI LOOKUP_CHOICE CITYGML_IN_TEXTURE_COORDINATES_ORDER_FIX_CITYGML_1 "\"No (Recommended)\",No"%"\"Yes (Deprecated - Backward-compatible)\",Yes" Texture Coordinate Order to follow SRS Axis Order: # 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 CITYGML_IN_SEARCH_ENVELOPE_MINX_CITYGML_1 0 CITYGML_1_SEARCH_ENVELOPE "$(CITYGML_IN_SEARCH_ENVELOPE_MINX_CITYGML_1)" GUI OPTIONAL FLOAT CITYGML_IN_SEARCH_ENVELOPE_MINX_CITYGML_1 Minimum X: # =========================================================================== DEFAULT_MACRO CITYGML_IN_SEARCH_ENVELOPE_MINY_CITYGML_1 0 CITYGML_1_SEARCH_ENVELOPE "$(CITYGML_IN_SEARCH_ENVELOPE_MINY_CITYGML_1)" GUI OPTIONAL FLOAT CITYGML_IN_SEARCH_ENVELOPE_MINY_CITYGML_1 Minimum Y: # =========================================================================== DEFAULT_MACRO CITYGML_IN_SEARCH_ENVELOPE_MAXX_CITYGML_1 0 CITYGML_1_SEARCH_ENVELOPE "$(CITYGML_IN_SEARCH_ENVELOPE_MAXX_CITYGML_1)" GUI OPTIONAL FLOAT CITYGML_IN_SEARCH_ENVELOPE_MAXX_CITYGML_1 Maximum X: # =========================================================================== DEFAULT_MACRO CITYGML_IN_SEARCH_ENVELOPE_MAXY_CITYGML_1 0 CITYGML_1_SEARCH_ENVELOPE "$(CITYGML_IN_SEARCH_ENVELOPE_MAXY_CITYGML_1)" GUI OPTIONAL FLOAT CITYGML_IN_SEARCH_ENVELOPE_MAXY_CITYGML_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 CITYGML_IN_CLIP_TO_ENVELOPE_CITYGML_1 NO CITYGML_1_CLIP_TO_ENVELOPE "$(CITYGML_IN_CLIP_TO_ENVELOPE_CITYGML_1)" GUI OPTIONAL CHECKBOX CITYGML_IN_CLIP_TO_ENVELOPE_CITYGML_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_CITYGML_1 GUI OPTIONAL COORDSYS SEARCH_ENVELOPE_COORDINATE_SYSTEM_CITYGML_1 Search Envelope Coordinate System: CITYGML_1_SEARCH_ENVELOPE_COORDINATE_SYSTEM "$(SEARCH_ENVELOPE_COORDINATE_SYSTEM_CITYGML_1)" # =========================================================================== CITYGML_1_DATASET "$(SourceDataset_CITYGML_1)" CITYGML_1_GENERATE_FME_BUILD_NUM 13528 #! END_SOURCE_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "NULL_1" #! END_WB_HEADER #! START_SOURCE_HEADER NULL NULL_1 # ============================================================================ # Just fake out a macro; it's not used #! END_SOURCE_HEADER #! START_WB_HEADER DEFAULT_MACRO SourceDataset INCLUDE [ if {{$(SourceDataset)} != ""} { \ puts {DEFAULT_MACRO SourceDataset_NULL_1 $(SourceDataset)} \ } ] #! END_WB_HEADER #! START_SOURCE_HEADER NULL NULL_1 DEFAULT_MACRO SourceDataset_NULL_1 NULL NULL_1_DATASET "$(SourceDataset_NULL_1)" NULL_1_GENERATE_FME_BUILD_NUM 13528 #! END_SOURCE_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "CITYGML_2" #! END_WB_HEADER #! START_SOURCE_HEADER CITYGML CITYGML_2 CITYGML_2_DYNAMIC_WORKFLOW YES # 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_CITYGML_2 $(SourceDataset)} \ } ] #! END_WB_HEADER #! START_SOURCE_HEADER CITYGML CITYGML_2 DEFAULT_MACRO SourceDataset_CITYGML_2 $(SourceDataset_CITYGML) GUI MULTIFILE SourceDataset_CITYGML_2 CityGML_Files(*.gml;*.xml;*.gz)|*.gml;*.xml;*.gz|CityGML_Files(*.gml)|*.gml|CityGML_Files(*.xml)|*.xml|Compressed_CityGML_Files(*.gz)|*.gz|All_Files|* Source CityGML File(s): # ============================================================================ # ============================================================================ DEFAULT_MACRO CITYGML_IN_USE_CITYGML_SCHEMA_FILES_CITYGML_2 Yes CITYGML_2_USE_CITYGML_SCHEMA_FILES "$(CITYGML_IN_USE_CITYGML_SCHEMA_FILES_CITYGML_2)" GUI LOOKUP_CHOICE CITYGML_IN_USE_CITYGML_SCHEMA_FILES_CITYGML_2 "\"Yes (Recommended)\",Yes"%"\"No (Deprecated - Backward-compatible)\",No" Reader Driven by CityGML Schema: # ============================================================================ # The ADE_XSD_DOC keyword overwrites the location of the XML Schema document that # is specified in the xsi:schemaLocation of the XML dataset. DEFAULT_MACRO CITYGML_IN_ADE_XSD_DOC_CITYGML_2 CITYGML_2_ADE_XSD_DOC "$(CITYGML_IN_ADE_XSD_DOC_CITYGML_2)" GUI OPTIONAL MULTIFILE CITYGML_IN_ADE_XSD_DOC_CITYGML_2 ADE_Schema_Files(*.xsd)|*.xsd|All_Files(*)|* Additional ADE Schema File(s): # ============================================================================ # The ADE_XSD_DOC keyword overwrites the location of the XML Schema document that # is specified in the xsi:schemaLocation of the XML dataset. DEFAULT_MACRO CITYGML_IN_SKIP_SCHEMA_LOCATION_IN_DATASET_CITYGML_2 No CITYGML_2_SKIP_SCHEMA_LOCATION_IN_DATASET "$(CITYGML_IN_SKIP_SCHEMA_LOCATION_IN_DATASET_CITYGML_2)" GUI CHOICE CITYGML_IN_SKIP_SCHEMA_LOCATION_IN_DATASET_CITYGML_2 Yes%No Ignore xsi:schemaLocation in Dataset: # ============================================================================ # ============================================================================ # ============================================================================ DEFAULT_MACRO CITYGML_IN_ONLY_FEATURE_TYPES_IN_DATASET_CITYGML_2 NO CITYGML_2_ONLY_FEATURE_TYPES_IN_DATASET "$(CITYGML_IN_ONLY_FEATURE_TYPES_IN_DATASET_CITYGML_2)" # ============================================================================ # Allow the user to choose if GenericAttribute should be included as Feature types DEFAULT_MACRO CITYGML_IN_GENERIC_ATTRS_AS_FEATURES_CITYGML_2 No CITYGML_2_GENERIC_ATTRS_AS_FEATURES "$(CITYGML_IN_GENERIC_ATTRS_AS_FEATURES_CITYGML_2)" # ============================================================================ # Allow the user to choose if X3DMaterials and ParameterizedTextures should be included as Feature types # The default is No. DEFAULT_MACRO CITYGML_IN_MATERIAL_FEATURES_CITYGML_2 No CITYGML_2_MATERIAL_FEATURES "$(CITYGML_IN_MATERIAL_FEATURES_CITYGML_2)" # ============================================================================ DEFAULT_MACRO CITYGML_IN_GENERIC_ATTRS_AS_SCHEMA_ATTRS_CITYGML_2 Yes CITYGML_2_GENERIC_ATTRS_AS_SCHEMA_ATTRS "$(CITYGML_IN_GENERIC_ATTRS_AS_SCHEMA_ATTRS_CITYGML_2)" # ============================================================================ # ============================================================================ DEFAULT_MACRO CITYGML_IN_SRS_AXIS_ORDER_CITYGML_2 CITYGML_2_SRS_AXIS_ORDER "$(CITYGML_IN_SRS_AXIS_ORDER_CITYGML_2)" GUI OPTIONAL CHOICE CITYGML_IN_SRS_AXIS_ORDER_CITYGML_2 1,2%2,1%1,2,3%2,1,3 GML SRS Axis Order: # ============================================================================ DEFAULT_MACRO CITYGML_IN_TEXTURE_COORDINATES_ORDER_FIX_CITYGML_2 No CITYGML_2_TEXTURE_COORDINATES_ORDER_FIX "$(CITYGML_IN_TEXTURE_COORDINATES_ORDER_FIX_CITYGML_2)" GUI LOOKUP_CHOICE CITYGML_IN_TEXTURE_COORDINATES_ORDER_FIX_CITYGML_2 "\"No (Recommended)\",No"%"\"Yes (Deprecated - Backward-compatible)\",Yes" Texture Coordinate Order to follow SRS Axis Order: DEFAULT_MACRO CITYGML_IN_EXPOSE_ATTRS_GROUP_CITYGML_2 CITYGML_2_EXPOSE_ATTRS_GROUP "$(CITYGML_IN_EXPOSE_ATTRS_GROUP_CITYGML_2)" GUI OPTIONAL DISCLOSUREGROUP CITYGML_IN_EXPOSE_ATTRS_GROUP_CITYGML_2 CITYGML_EXPOSE_FORMAT_ATTRS Schema Attributes # 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 CITYGML_IN_SEARCH_ENVELOPE_MINX_CITYGML_2 0 CITYGML_2_SEARCH_ENVELOPE "$(CITYGML_IN_SEARCH_ENVELOPE_MINX_CITYGML_2)" GUI OPTIONAL FLOAT CITYGML_IN_SEARCH_ENVELOPE_MINX_CITYGML_2 Minimum X: # =========================================================================== DEFAULT_MACRO CITYGML_IN_SEARCH_ENVELOPE_MINY_CITYGML_2 0 CITYGML_2_SEARCH_ENVELOPE "$(CITYGML_IN_SEARCH_ENVELOPE_MINY_CITYGML_2)" GUI OPTIONAL FLOAT CITYGML_IN_SEARCH_ENVELOPE_MINY_CITYGML_2 Minimum Y: # =========================================================================== DEFAULT_MACRO CITYGML_IN_SEARCH_ENVELOPE_MAXX_CITYGML_2 0 CITYGML_2_SEARCH_ENVELOPE "$(CITYGML_IN_SEARCH_ENVELOPE_MAXX_CITYGML_2)" GUI OPTIONAL FLOAT CITYGML_IN_SEARCH_ENVELOPE_MAXX_CITYGML_2 Maximum X: # =========================================================================== DEFAULT_MACRO CITYGML_IN_SEARCH_ENVELOPE_MAXY_CITYGML_2 0 CITYGML_2_SEARCH_ENVELOPE "$(CITYGML_IN_SEARCH_ENVELOPE_MAXY_CITYGML_2)" GUI OPTIONAL FLOAT CITYGML_IN_SEARCH_ENVELOPE_MAXY_CITYGML_2 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 CITYGML_IN_CLIP_TO_ENVELOPE_CITYGML_2 NO CITYGML_2_CLIP_TO_ENVELOPE "$(CITYGML_IN_CLIP_TO_ENVELOPE_CITYGML_2)" GUI OPTIONAL CHECKBOX CITYGML_IN_CLIP_TO_ENVELOPE_CITYGML_2 YES%NO Clip to Search Envelope # =========================================================================== DEFAULT_MACRO CITYGML_IN_NETWORK_AUTHENTICATION_CITYGML_2 CITYGML_2_NETWORK_AUTHENTICATION "$(CITYGML_IN_NETWORK_AUTHENTICATION_CITYGML_2)" GUI OPTIONAL AUTHENTICATOR CITYGML_IN_NETWORK_AUTHENTICATION_CITYGML_2 CONTAINER%GROUP%CONTAINER_TITLE%"Network Authentication"%PROMPT_TYPE%NETWORK Network Authentication # =========================================================================== DEFAULT_MACRO CITYGML_IN_ATTRIBUTE_READING_CITYGML_2 ALL CITYGML_2_ATTRIBUTE_READING "$(CITYGML_IN_ATTRIBUTE_READING_CITYGML_2)" # 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_CITYGML_2 GUI OPTIONAL COORDSYS SEARCH_ENVELOPE_COORDINATE_SYSTEM_CITYGML_2 Search Envelope Coordinate System: CITYGML_2_SEARCH_ENVELOPE_COORDINATE_SYSTEM "$(SEARCH_ENVELOPE_COORDINATE_SYSTEM_CITYGML_2)" # =========================================================================== CITYGML_2_DATASET "$(SourceDataset_CITYGML_2)" CITYGML_2_GENERATE_FME_BUILD_NUM 16167 #! END_SOURCE_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "DIRECTX_1" #! END_WB_HEADER #! START_DEST_HEADER DIRECTX DIRECTX_1 # ============================================================================ # The following GUI line prompts for a directory to be used as the # the destination for the DirectX files. #! END_DEST_HEADER #! START_WB_HEADER DEFAULT_MACRO DestDataset INCLUDE [ if {"$(DestDataset)" != ""} { \ puts {DEFAULT_MACRO DestDataset_DIRECTX_1 $(DestDataset)} \ } ] #! END_WB_HEADER #! START_DEST_HEADER DIRECTX DIRECTX_1 DEFAULT_MACRO DestDataset_DIRECTX_1 $(DestDataset_DIRECTX) GUI DIRNAME DestDataset_DIRECTX_1 Destination DirectX Directory: DEFAULT_MACRO DIRECTX_OUT_FILE_TYPE_DIRECTX_1 Compressed DIRECTX_1_FILE_TYPE "$(DIRECTX_OUT_FILE_TYPE_DIRECTX_1)" GUI CHOICE DIRECTX_OUT_FILE_TYPE_DIRECTX_1 Text%Binary%Compressed Output File Type: DEFAULT_MACRO DIRECTX_OUT_LHCS_CONVERSION_DIRECTX_1 SWAP_YZ DIRECTX_1_LHCS_CONVERSION "$(DIRECTX_OUT_LHCS_CONVERSION_DIRECTX_1)" GUI LOOKUP_CHOICE DIRECTX_OUT_LHCS_CONVERSION_DIRECTX_1 "\"Swap Y and Z\",SWAP_YZ"%"\"Flip Z\",FLIP_Z" Conversion to LHCS Method: DIRECTX_1_DATASET "$(DestDataset_DIRECTX_1)" DIRECTX_1_GENERATE_FME_BUILD_NUM 6220 #! END_DEST_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "ESRISHAPE_1" #! END_WB_HEADER #! START_DEST_HEADER ESRISHAPE ESRISHAPE_1 # ============================================================================ # The following GUI line prompts for a folder to be used as the # the destination for the Esri Shapefiles. # The user input is stored in a macro, which is then used to define # the dataset to be written. #! END_DEST_HEADER #! START_WB_HEADER DEFAULT_MACRO DestDataset INCLUDE [ if {"$(DestDataset)" != ""} { \ puts {DEFAULT_MACRO DestDataset_ESRISHAPE_1 $(DestDataset)} \ } ] #! END_WB_HEADER #! START_DEST_HEADER ESRISHAPE ESRISHAPE_1 DEFAULT_MACRO DestDataset_ESRISHAPE_1 $(DestDataset_ESRISHAPE) GUI DIRNAME DestDataset_ESRISHAPE_1 Destination Esri Shapefile Folder: ESRISHAPE_1_COORDINATE_SYSTEM_GRANULARITY FEATURE_TYPE # ============================================================================ # Determines whether the attribute names should be uppercased, or whether they # should stay as specified in the shapefile. The default will be Yes for # backwards compatibility. Once the mapping file/workspace has been generated, # the value for this keyword should not be changed. DEFAULT_MACRO ESRISHAPE_OUT_UPPER_CASE_ATTR_NAMES_ESRISHAPE_1 No ESRISHAPE_1_UPPER_CASE_ATTR_NAMES "$(ESRISHAPE_OUT_UPPER_CASE_ATTR_NAMES_ESRISHAPE_1)" # ============================================================================ # The following keyword allows the user to choose what encoding to # use for outputting the shapefile # BUG31194: For backwards compatibility and not outputting a .cpg file # we have chosen to make the writer default encoding system (ANSI) DEFAULT_MACRO ESRISHAPE_OUT_ENCODING_ESRISHAPE_1 SYSTEM ESRISHAPE_1_ENCODING "$(ESRISHAPE_OUT_ENCODING_ESRISHAPE_1)" GUI OPTIONAL ENCODING ESRISHAPE_OUT_ENCODING_ESRISHAPE_1 ANSI%SYSTEM%BIG5%EUC%HKBIG5%ISO%OEM%SJIS%UTF-8%CP437%CP708%CP720%CP737%CP775%CP850%CP852%CP855%CP857%CP860%CP861%CP862%CP863%CP864%CP865%CP866%CP869%CP874%CP932%CP936%CP950%CP1250%CP1251%CP1252%CP1253%CP1254%CP1255%CP1256%CP1257%CP1258%ISO8859-1%ISO8859-2%ISO8859-3%ISO8859-4%ISO8859-5%ISO8859-6%ISO8859-7%ISO8859-8%ISO8859-9%ISO-8859-11%ISO8859-13%ISO8859-15%WINDOWS-874 Character Encoding: # ============================================================================ # PR2557: Specifies whether or not the reader will generate spatial index files DEFAULT_MACRO ESRISHAPE_OUT_WRITE_SPATIAL_INDEX_ESRISHAPE_1 No ESRISHAPE_1_WRITE_SPATIAL_INDEX "$(ESRISHAPE_OUT_WRITE_SPATIAL_INDEX_ESRISHAPE_1)" GUI OPTIONAL CHECKBOX ESRISHAPE_OUT_WRITE_SPATIAL_INDEX_ESRISHAPE_1 Yes%No Write Spatial Index DEFAULT_MACRO ESRISHAPE_OUT_COMPRESSED_SHAPE_FILE_ESRISHAPE_1 No ESRISHAPE_1_COMPRESSED_SHAPE_FILE "$(ESRISHAPE_OUT_COMPRESSED_SHAPE_FILE_ESRISHAPE_1)" GUI OPTIONAL CHECKBOX ESRISHAPE_OUT_COMPRESSED_SHAPE_FILE_ESRISHAPE_1 Yes%No Create Compressed Shapefile (.shz) DEFAULT_MACRO ESRISHAPE_OUT_DIMENSION_GROUP_ESRISHAPE_1 GUI OPTIONAL DISCLOSUREGROUP ESRISHAPE_OUT_DIMENSION_GROUP_ESRISHAPE_1 DIMENSION Dimension Settings DEFAULT_MACRO ESRISHAPE_OUT_DIMENSION_ESRISHAPE_1 auto ESRISHAPE_1_DIMENSION "$(ESRISHAPE_OUT_DIMENSION_ESRISHAPE_1)" DEFAULT_MACRO ESRISHAPE_OUT_SHAPE_WRT_ADV_PARM_GROUP_ESRISHAPE_1 GUI OPTIONAL DISCLOSUREGROUP ESRISHAPE_OUT_SHAPE_WRT_ADV_PARM_GROUP_ESRISHAPE_1 STRICT_COMPATIBILITY%PRESERVE_RING_VERTEX_ORDER Advanced # ============================================================================ # BUG31474: Add an Strict compatibility flag to prevent some apps from # crashing when record lengths are too long. By default, we want to write # compatible files going forward. DEFAULT_MACRO ESRISHAPE_OUT_STRICT_COMPATIBILITY_ESRISHAPE_1 Yes ESRISHAPE_1_STRICT_COMPATIBILITY "$(ESRISHAPE_OUT_STRICT_COMPATIBILITY_ESRISHAPE_1)" GUI OPTIONAL CHECKBOX ESRISHAPE_OUT_STRICT_COMPATIBILITY_ESRISHAPE_1 Yes%No Strict Compatibility # ============================================================ # BUG39095: Add an option to preserve input ring vertex order. DEFAULT_MACRO ESRISHAPE_OUT_PRESERVE_RING_VERTEX_ORDER_ESRISHAPE_1 No ESRISHAPE_1_PRESERVE_RING_VERTEX_ORDER "$(ESRISHAPE_OUT_PRESERVE_RING_VERTEX_ORDER_ESRISHAPE_1)" GUI OPTIONAL CHECKBOX ESRISHAPE_OUT_PRESERVE_RING_VERTEX_ORDER_ESRISHAPE_1 Yes%No Preserve Ring Vertex Order # ============================================================================ # Opt in for destination dataset type vs format type validation DEFAULT_MACRO ESRISHAPE_OUT_DESTINATION_DATASETTYPE_VALIDATION_ESRISHAPE_1 Yes ESRISHAPE_1_DESTINATION_DATASETTYPE_VALIDATION "$(ESRISHAPE_OUT_DESTINATION_DATASETTYPE_VALIDATION_ESRISHAPE_1)" # ============================================================================ # The following GUI line sets whether measure values in the shapefiles should # be treated as elevations. DEFAULT_MACRO _MEASURES_AS_Z_ESRISHAPE_1 no GUI CHOICE _MEASURES_AS_Z_ESRISHAPE_1 yes%no Treat Measures as Elevation: ESRISHAPE_1_MEASURES_AS_Z $(_MEASURES_AS_Z_ESRISHAPE_1) ESRISHAPE_1_ENCODING $(ESRISHAPE_OUT_ENCODING_ESRISHAPE_1) ESRISHAPE_1_DATASET "$(DestDataset_ESRISHAPE_1)" ESRISHAPE_1_GENERATE_FME_BUILD_NUM 16167 #! END_DEST_HEADER #! START_WB_HEADER DIRECTX_1_DATASET{*} "$(DestDataset_DIRECTX_1)" DIRECTX_1_FANOUT_EXPRESSION @EvaluateExpression(FDIV,STRING_ENCODED,Valuefme_basename,DIRECTX_1) #! END_WB_HEADER #! END_HEADER LOG_FILENAME "$(FME_MF_DIR)CityGMLToDirectX_v3.log" LOG_APPEND NO LOG_MAX_FEATURES 200 LOG_MAX_RECORDED_FEATURES 200 FME_REPROJECTION_ENGINE FME FME_IMPLICIT_CSMAP_REPROJECTION_MODE Datum FME_GEOMETRY_HANDLING Enhanced FME_STROKE_MAX_DEVIATION 0 LOG_FILTER_MASK -1 DEFAULT_MACRO DATASET_KEYWORD_CITYGML_1 CITYGML_1 DEFAULT_MACRO DATASET_KEYWORD_NULL_1 NULL_1 DEFAULT_MACRO DATASET_KEYWORD_CITYGML_2 CITYGML_2 DEFAULT_MACRO DATASET_KEYWORD_DIRECTX_1 DIRECTX_1 DEFAULT_MACRO DATASET_KEYWORD_ESRISHAPE_1 ESRISHAPE_1 # ------------------------------------------------------------------------- CITYGML_1_READER_META_ATTRIBUTES fme_feature_type # ------------------------------------------------------------------------- NULL_1_READER_META_ATTRIBUTES fme_feature_type # ------------------------------------------------------------------------- CITYGML_2_READER_META_ATTRIBUTES fme_basename fme_feature_type # ------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE No # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME CityGMLToDirectX_v3 MACRO FME_VIEWER_APP fmedatainspector # ------------------------------------------------------------------------- CITYGML_2_DEF IntBuildingInstallation citygml_target_uri xml_buffer citygml_feature_role xml_buffer citygml_feature_role_attr_name xml_buffer citygml_feature_role_attr_val xml_buffer gml_description xml_buffer gml_name xml_buffer citygml_creationDate xml_date citygml_terminationDate xml_date externalReference{}.externalObject.name xml_xml externalReference{}.externalObject.uri xml_xml externalReference{}.informationSystem xml_xml citygml_generalizes_to{}.xlink_href xml_buffer citygml_appearance{}.xlink_href xml_buffer citygml_class xml_buffer citygml_function{} xml_buffer citygml_usage{} xml_buffer citygml_level_of_detail{} xml_buffer citygml_city_object_member{}.xlink_href xml_buffer citygml_measured_height xml_real64 citygml_interior_furniture{}.xlink_href xml_buffer citygml_year_of_construction xml_buffer citygml_outer_building_installation{}.xlink_href xml_buffer citygml_opening{}.xlink_href xml_buffer citygml_storeys_below_ground xml_uint64 citygml_storey_heights_above_ground xml_buffer citygml_storey_heights_above_ground_units xml_buffer citygml_storey_heights_below_ground_units xml_buffer citygml_roof_type xml_buffer gml_feature_member{}.xlink_href xml_buffer citygml_address xml_xml citygml_bounded_by{}.xlink_href xml_buffer citygml_measured_height_units xml_buffer citygml_interior_room{}.xlink_href xml_buffer citygml_appearance_member{}.xlink_href xml_buffer citygml_room_installation{}.xlink_href xml_buffer citygml_relief_component{}.xlink_href xml_buffer citygml_storeys_above_ground xml_uint64 citygml_consists_of_building_part{}.xlink_href xml_buffer citygml_year_of_demolition xml_buffer citygml_storey_heights_below_ground xml_buffer citygml_address{}.xlink_href xml_buffer citygml_interior_building_installation{}.xlink_href xml_buffer # ------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME "Router and Unexpected Input Remover" COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE * ROUTE CITYGML CITYGML_2::IntBuildingInstallation multi_reader_keyword,$(DATASET_KEYWORD_CITYGML_2) TO FME_GENERIC ::IntBuildingInstallation ALIAS_GEOMETRY MERGE_INPUT Yes OUTPUT ROUTED FEATURE_TYPE * CITYGML_2_MERGE_DEF CITYGML_2::IntBuildingInstallation GLOB * # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "IntBuildingInstallation (CITYGML_2) Splitter" INPUT FEATURE_TYPE IntBuildingInstallation OUTPUT FEATURE_TYPE IntBuildingInstallation_CITYGML_2 DEFAULT_MACRO WB_CURRENT_CONTEXT # ------------------------------------------------------------------------- MACRO Counter_2_COUNT_DOMAIN agg_id INCLUDE [if {{Global} == {Local}} { puts {MACRO Counter_2_COUNT_DOMAIN Counter_2_agg_id}; }; FACTORY_DEF * TeeFactory FACTORY_NAME Counter_2 INPUT FEATURE_TYPE IntBuildingInstallation_CITYGML_2 OUTPUT FEATURE_TYPE Counter_2_OUTPUT "_agg_id" @Count($(Counter_2_COUNT_DOMAIN),"0") # ------------------------------------------------------------------------- # Expose all attributes. This ensures that if you expose fme_dataset, you will get it. READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename FACTORY_DEF * TeeFactory FACTORY_NAME AttributeExposer INPUT FEATURE_TYPE Counter_2_OUTPUT OUTPUT FEATURE_TYPE AttributeExposer_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME FeatureTypeExtractor INPUT FEATURE_TYPE AttributeExposer_OUTPUT OUTPUT FEATURE_TYPE FeatureTypeExtractor_OUTPUT @SupplyAttributes(feature_type,&fme_feature_type) # ------------------------------------------------------------------------- MACRO OUTPUT_AREA_FTYPE not_selected MACRO OUTPUT_AREA_FTYPE GeometryFilter_2_AREA MACRO OUTPUT_SURFACE_FTYPE not_selected MACRO OUTPUT_SURFACE_FTYPE GeometryFilter_2_SURFACE MACRO OUTPUT_SOLID_FTYPE not_selected MACRO OUTPUT_SOLID_FTYPE GeometryFilter_2_SOLID MACRO OUTPUT_COLLECTION_FTYPE not_selected MACRO OUTPUT_COLLECTION_FTYPE GeometryFilter_2_COLLECTION MACRO OUTPUT_NULL_FTYPE not_selected MACRO OUTPUT_NULL_FTYPE GeometryFilter_2_NULL MACRO OUTPUT_INSTANCE_FTYPE not_selected Lookup GeometryFilter_2_RouterTable "" "not_selected" fme_area $(OUTPUT_AREA_FTYPE) fme_surface $(OUTPUT_SURFACE_FTYPE) fme_solid $(OUTPUT_SOLID_FTYPE) fme_collection $(OUTPUT_COLLECTION_FTYPE) fme_no_geom $(OUTPUT_NULL_FTYPE) MACRO COLLECTION_HANDLING NOT_THIS_TIME MACRO INSTANCE_FILTERING * INCLUDE [ if 0 { puts "MACRO COLLECTION_HANDLING *"; if { puts "MACRO INSTANCE_FILTERING NOT_THIS_TIME"; }; }; if {{$(OUTPUT_INSTANCE_FTYPE)} == "not_selected"} { puts "MACRO INSTANCE_FILTERING NOT_THIS_TIME"; }; ] FACTORY_DEF * TeeFactory FACTORY_NAME GeometryFilter_2_InputPassThrough INPUT FEATURE_TYPE FeatureTypeExtractor_OUTPUT OUTPUT FEATURE_TYPE GeometryFilter_2___Input___ @Geometry(FIX_FMETYPE_FMEGEOMETRY) FACTORY_DEF $(INSTANCE_FILTERING) TestFactory FACTORY_NAME GeometryFilter_2_InstanceTest INPUT FEATURE_TYPE GeometryFilter_2___Input___ TEST @Geometry(IS_GEOMETRY_INSTANCE) == 1 OUTPUT PASSED FEATURE_TYPE $(OUTPUT_INSTANCE_FTYPE) OUTPUT FAILED FEATURE_TYPE GeometryFilter_2___Input___ FACTORY_DEF $(COLLECTION_HANDLING) TestFactory FACTORY_NAME GeometryFilter_2_CollectionTest INPUT FEATURE_TYPE GeometryFilter_2___Input___ TEST &fme_type == "fme_collection" OUTPUT FAILED FEATURE_TYPE GeometryFilter_2___Not_Collection___ OUTPUT PASSED FEATURE_TYPE GeometryFilter_2___Collection___ FACTORY_DEF $(COLLECTION_HANDLING) DeaggregateFactory FACTORY_NAME GeometryFilter_2_Deagg INPUT FEATURE_TYPE GeometryFilter_2___Collection___ HOMOGENIZE_COLLECTIONS YES RECURSIVE YES SET_FME_TYPE YES INSTANTIATE_GEOMETRY_INSTANCES_NEW OUTPUT POINT FEATURE_TYPE GeometryFilter_2___HomogeneousAggregate___ OUTPUT LINE FEATURE_TYPE GeometryFilter_2___HomogeneousAggregate___ OUTPUT POLYGON FEATURE_TYPE GeometryFilter_2___HomogeneousAggregate___ OUTPUT DONUT FEATURE_TYPE GeometryFilter_2___HomogeneousAggregate___ OUTPUT AGGREGATE FEATURE_TYPE GeometryFilter_2___HomogeneousAggregate___ FACTORY_DEF * TeeFactory FACTORY_NAME GeometryFilter_2_RouterPrepper INPUT FEATURE_TYPE GeometryFilter_2___HomogeneousAggregate___ INPUT FEATURE_TYPE GeometryFilter_2___Not_Collection___ INPUT FEATURE_TYPE GeometryFilter_2___Input___ OUTPUT FEATURE_TYPE GeometryFilter_2___Prepped___ GeometryFilter_2_9d92d870_9c2a_4fc9_a106_ede18e9846d10_targetFeatureType @Lookup(GeometryFilter_2_RouterTable,&fme_type) FACTORY_DEF * TestFactory FACTORY_NAME GeometryFilter_2_Router INPUT FEATURE_TYPE GeometryFilter_2___Prepped___ TEST @Value(GeometryFilter_2_9d92d870_9c2a_4fc9_a106_ede18e9846d10_targetFeatureType) != "not_selected" OUTPUT PASSED FEATURE_TYPE * @FeatureType(@Value(GeometryFilter_2_9d92d870_9c2a_4fc9_a106_ede18e9846d10_targetFeatureType)) @RemoveAttributes(GeometryFilter_2_9d92d870_9c2a_4fc9_a106_ede18e9846d10_targetFeatureType) OUTPUT FAILED FEATURE_TYPE GeometryFilter_2_ @RemoveAttributes(GeometryFilter_2_9d92d870_9c2a_4fc9_a106_ede18e9846d10_targetFeatureType) FACTORY_DEF * TeeFactory FACTORY_NAME "GeometryFilter_2 Transformer Output Nuker" INPUT FEATURE_TYPE GeometryFilter_2_ # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME GeometryRemover INPUT FEATURE_TYPE GeometryFilter_2_COLLECTION OUTPUT FEATURE_TYPE GeometryRemover_OUTPUT @RemoveGeometry() # ------------------------------------------------------------------------- INCLUDE [ if { ({fme_composite_surface} == {fme_point}) } { puts {MACRO GeometryCoercer_2_func @GeometryType(fme_point)}; } elseif { ({fme_composite_surface} == {fme_line}) } { puts {MACRO GeometryCoercer_2_func @GeometryType(fme_line)}; } elseif { ({fme_composite_surface} == {fme_polygon}) } { if { ({} == {Yes}) } { puts {MACRO GeometryCoercer_2_func @GeometryType(fme_polygon, CHECK_Z_IN_DUPLICATE_POINTS_REMOVAL)}; } else { puts {MACRO GeometryCoercer_2_func @GeometryType(fme_polygon)}; } } elseif { ({fme_composite_surface} == {fme_arc}) } { puts {MACRO GeometryCoercer_2_func @GeometryType(fme_arc,@Value(fme_rotation),@Value(fme_primary_axis),@Value(fme_secondary_axis),@Value(fme_start_angle),@Value(fme_sweep_angle))}; } elseif { ({fme_composite_surface} == {fme_ellipse}) } { puts {MACRO GeometryCoercer_2_func @GeometryType(fme_ellipse,@Value(fme_primary_axis),@Value(fme_secondary_axis),@Value(fme_rotation),LEFT_HAND_RULE)}; } elseif { ({fme_composite_surface} == {fme_text}) } { puts {MACRO GeometryCoercer_2_func @GeometryType(fme_text,@Value(fme_text_string),@Value(fme_text_size),@Value(fme_rotation))}; } elseif { ({fme_composite_surface} == {fme_composite_surface}) } { puts {MACRO GeometryCoercer_2_func @GeometryType(fme_composite_surface)}; } elseif { ({fme_composite_surface} == {fme_brep_solid}) } { puts {MACRO GeometryCoercer_2_func @GeometryType(fme_brep_solid)}; } elseif { ({fme_composite_surface} == {fme_point_cloud}) } { puts {MACRO GeometryCoercer_2_func @GeometryType(fme_point_cloud)}; } ] FACTORY_DEF * TeeFactory FACTORY_NAME GeometryCoercer_2_Renamer INPUT FEATURE_TYPE GeometryFilter_2_SOLID OUTPUT FEATURE_TYPE GeometryCoercer_2_COERCED $(GeometryCoercer_2_func) # ------------------------------------------------------------------------- Lookup FeatureTypeFilter_Lut CityModel ok Building ok Address ok BuildingFurniture ok BuildingInstallation ok BuildingPart ok CeilingSurface ok ClosureSurface ok Door ok FloorSurface ok IntBuildingInstallation ok InteriorWallSurface ok RoofSurface ok Room ok WallSurface ok Window ok CityFurniture ok GenericCityObject ok GroundSurface ok LandUse ok PlantCover ok SolitaryVegetationObject ok TransportationComplex ok TrafficArea ok AuxiliaryTrafficArea ok Railway ok Road ok Square ok Track ok WaterBody ok WaterGroundSurface ok WaterSurface ok ReliefFeature ok BreaklineRelief ok TINRelief ok MassPointRelief ok RasterRelief ok GeoreferencedTexture ok NoiseCityFurnitureSegment ok NoiseRailwaySegment ok NoiseRoadSegment ok "" notok ENCODED FACTORY_DEF * TestFactory FACTORY_NAME FeatureTypeFilter INPUT FEATURE_TYPE GeometryFilter_2_NULL INPUT FEATURE_TYPE GeometryFilter_2_SURFACE INPUT FEATURE_TYPE GeometryRemover_OUTPUT INPUT FEATURE_TYPE GeometryFilter_2_AREA INPUT FEATURE_TYPE GeometryCoercer_2_COERCED TEST @Lookup(FeatureTypeFilter_Lut,fme_feature_type,ENCODED_ATTR) == "ok" OUTPUT PASSED FEATURE_TYPE * @FeatureType(FeatureTypeFilter_&fme_feature_type) OUTPUT FAILED FEATURE_TYPE FeatureTypeFilter_ FACTORY_DEF * TestFactory FACTORY_NAME FeatureTypeFilter_BlankFilter INPUT FEATURE_TYPE FeatureTypeFilter_ TEST @Value(fme_feature_type) == "" OUTPUT PASSED FEATURE_TYPE FeatureTypeFilter_ OUTPUT FAILED FEATURE_TYPE FeatureTypeFilter_ FACTORY_DEF * TeeFactory FACTORY_NAME "FeatureTypeFilter CityModel Transformer Output Nuker" INPUT FEATURE_TYPE FeatureTypeFilter_CityModel FACTORY_DEF * TeeFactory FACTORY_NAME "FeatureTypeFilter SolitaryVegetationObject Transformer Output Nuker" INPUT FEATURE_TYPE FeatureTypeFilter_SolitaryVegetationObject FACTORY_DEF * TeeFactory FACTORY_NAME "FeatureTypeFilter TransportationComplex Transformer Output Nuker" INPUT FEATURE_TYPE FeatureTypeFilter_TransportationComplex FACTORY_DEF * TeeFactory FACTORY_NAME "FeatureTypeFilter WaterBody Transformer Output Nuker" INPUT FEATURE_TYPE FeatureTypeFilter_WaterBody FACTORY_DEF * TeeFactory FACTORY_NAME "FeatureTypeFilter ReliefFeature Transformer Output Nuker" INPUT FEATURE_TYPE FeatureTypeFilter_ReliefFeature FACTORY_DEF * TeeFactory FACTORY_NAME "FeatureTypeFilter GeoreferencedTexture Transformer Output Nuker" INPUT FEATURE_TYPE FeatureTypeFilter_GeoreferencedTexture FACTORY_DEF * TeeFactory FACTORY_NAME "FeatureTypeFilter NoiseCityFurnitureSegment Transformer Output Nuker" INPUT FEATURE_TYPE FeatureTypeFilter_NoiseCityFurnitureSegment FACTORY_DEF * TeeFactory FACTORY_NAME "FeatureTypeFilter NoiseRailwaySegment Transformer Output Nuker" INPUT FEATURE_TYPE FeatureTypeFilter_NoiseRailwaySegment FACTORY_DEF * TeeFactory FACTORY_NAME "FeatureTypeFilter NoiseRoadSegment Transformer Output Nuker" INPUT FEATURE_TYPE FeatureTypeFilter_NoiseRoadSegment FACTORY_DEF * TeeFactory FACTORY_NAME "FeatureTypeFilter Transformer Output Nuker" INPUT FEATURE_TYPE FeatureTypeFilter_ # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME Cloner_6_CheckCopies INPUT FEATURE_TYPE FeatureTypeFilter_RasterRelief INPUT FEATURE_TYPE FeatureTypeFilter_MassPointRelief INPUT FEATURE_TYPE FeatureTypeFilter_TINRelief INPUT FEATURE_TYPE FeatureTypeFilter_BreaklineRelief TEST "1" TYPE INT ENCODED OUTPUT PASSED FEATURE_TYPE __toOutput__ FACTORY_DEF * TeeFactory FACTORY_NAME Cloner_6_Cloner INPUT FEATURE_TYPE __toOutput__ NUMBER_OF_COPIES "1" COPY_NUMBER_ATTRIBUTE _copynum OUTPUT FEATURE_TYPE Cloner_6_COPY # ------------------------------------------------------------------------- Tcl2 proc StringConcatenator_3_2a8e11a6_d0d3_4356_a828_4f9e187e1a0f0_doSetAttr {attrText} { FME_SetAttribute [FME_DecodeText {Model}] [FME_DecodeText $attrText] } FACTORY_DEF * TeeFactory FACTORY_NAME StringConcatenator_3 INPUT FEATURE_TYPE Cloner_6_COPY OUTPUT FEATURE_TYPE StringConcatenator_3_OUTPUT @Tcl2("StringConcatenator_3_2a8e11a6_d0d3_4356_a828_4f9e187e1a0f0_doSetAttr {@EvaluateExpression(FDIV,STRING_ENCODED,Valuegml_id_lodValuecitygml_level_of_detail,StringConcatenator_3)} ") # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME Cloner_5_CheckCopies INPUT FEATURE_TYPE FeatureTypeFilter_ INPUT FEATURE_TYPE FeatureTypeFilter_WaterSurface INPUT FEATURE_TYPE FeatureTypeFilter_WaterGroundSurface INPUT FEATURE_TYPE FeatureTypeFilter_Track INPUT FEATURE_TYPE FeatureTypeFilter_Square INPUT FEATURE_TYPE FeatureTypeFilter_Road INPUT FEATURE_TYPE FeatureTypeFilter_Railway INPUT FEATURE_TYPE FeatureTypeFilter_AuxiliaryTrafficArea INPUT FEATURE_TYPE FeatureTypeFilter_TrafficArea INPUT FEATURE_TYPE FeatureTypeFilter_PlantCover INPUT FEATURE_TYPE FeatureTypeFilter_LandUse INPUT FEATURE_TYPE FeatureTypeFilter_GroundSurface INPUT FEATURE_TYPE FeatureTypeFilter_GenericCityObject INPUT FEATURE_TYPE FeatureTypeFilter_CityFurniture TEST "1" TYPE INT ENCODED OUTPUT PASSED FEATURE_TYPE __toOutput__ FACTORY_DEF * TeeFactory FACTORY_NAME Cloner_5_Cloner INPUT FEATURE_TYPE __toOutput__ NUMBER_OF_COPIES "1" COPY_NUMBER_ATTRIBUTE _copynum OUTPUT FEATURE_TYPE Cloner_5_COPY # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME AttributeRenamer_4 INPUT FEATURE_TYPE FeatureTypeFilter_Window INPUT FEATURE_TYPE FeatureTypeFilter_WallSurface INPUT FEATURE_TYPE FeatureTypeFilter_Room INPUT FEATURE_TYPE FeatureTypeFilter_RoofSurface INPUT FEATURE_TYPE FeatureTypeFilter_InteriorWallSurface INPUT FEATURE_TYPE FeatureTypeFilter_IntBuildingInstallation INPUT FEATURE_TYPE FeatureTypeFilter_FloorSurface INPUT FEATURE_TYPE FeatureTypeFilter_Door INPUT FEATURE_TYPE FeatureTypeFilter_ClosureSurface INPUT FEATURE_TYPE FeatureTypeFilter_CeilingSurface INPUT FEATURE_TYPE FeatureTypeFilter_BuildingPart INPUT FEATURE_TYPE FeatureTypeFilter_BuildingInstallation INPUT FEATURE_TYPE FeatureTypeFilter_BuildingFurniture OUTPUT FEATURE_TYPE AttributeRenamer_4_OUTPUT @RenameAttributes(ATTR_LIST_DEF_VAL, citygml_feature_role,o_citygml_feature_role,,feature_type,o_feature_type,,gml_description,o_gml_description,,gml_name,o_gml_name,) # ------------------------------------------------------------------------- FACTORY_DEF {*} ReferenceFactory FACTORY_NAME FeatureMerger INPUT REFERENCER FEATURE_TYPE FeatureTypeFilter_Building INPUT REFERENCEE FEATURE_TYPE FeatureTypeFilter_Address REFERENCE_INFO ATTRIBUTES REFERENCEE_FIELDS "gml_parent_id" REFERENCER_FIELDS "gml_id" MERGE_ATTRIBUTES Yes MANAGE_FME_TYPE Yes PROCESS_DUPLICATE_REFERENCEES No BUILD_INCOMPLETE_REFERENCERS No OUTPUT COMPLETE FEATURE_TYPE FeatureMerger_COMPLETE OUTPUT INCOMPLETE FEATURE_TYPE FeatureMerger_INCOMPLETE # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME AttributeRenamer INPUT FEATURE_TYPE FeatureMerger_INCOMPLETE INPUT FEATURE_TYPE FeatureMerger_COMPLETE OUTPUT FEATURE_TYPE AttributeRenamer_OUTPUT @RenameAttributes(Building_ID,gml_id) FACTORY_DEF * TeeFactory FACTORY_NAME "AttributeRenamer OUTPUT Splitter" INPUT FEATURE_TYPE AttributeRenamer_OUTPUT OUTPUT FEATURE_TYPE AttributeRenamer_OUTPUT_0_JV5u6+unT2I= OUTPUT FEATURE_TYPE AttributeRenamer_OUTPUT_1_zxgSiKgnAxI= # ------------------------------------------------------------------------- FACTORY_DEF {*} ReferenceFactory FACTORY_NAME FeatureMerger_2 INPUT REFERENCER FEATURE_TYPE AttributeRenamer_4_OUTPUT INPUT REFERENCEE FEATURE_TYPE AttributeRenamer_OUTPUT_0_JV5u6+unT2I= REFERENCE_INFO ATTRIBUTES REFERENCEE_FIELDS "Building_ID" REFERENCER_FIELDS "gml_parent_id" MERGE_ATTRIBUTES Yes MANAGE_FME_TYPE Yes PROCESS_DUPLICATE_REFERENCEES No BUILD_INCOMPLETE_REFERENCERS No OUTPUT COMPLETE FEATURE_TYPE FeatureMerger_2_COMPLETE OUTPUT INCOMPLETE FEATURE_TYPE FeatureMerger_2_INCOMPLETE FACTORY_DEF * TeeFactory FACTORY_NAME "FeatureMerger_2 COMPLETE Splitter" INPUT FEATURE_TYPE FeatureMerger_2_COMPLETE OUTPUT FEATURE_TYPE FeatureMerger_2_COMPLETE_0_bubrw+X/K38= OUTPUT FEATURE_TYPE FeatureMerger_2_COMPLETE_1_JmoUraR8nAk= # ------------------------------------------------------------------------- FACTORY_DEF {*} ReferenceFactory FACTORY_NAME FeatureMerger_3 INPUT REFERENCER FEATURE_TYPE FeatureMerger_2_INCOMPLETE INPUT REFERENCEE FEATURE_TYPE FeatureMerger_2_COMPLETE_0_bubrw+X/K38= REFERENCE_INFO ATTRIBUTES REFERENCEE_FIELDS "gml_id" REFERENCER_FIELDS "gml_parent_id" MERGE_ATTRIBUTES Yes MANAGE_FME_TYPE Yes PROCESS_DUPLICATE_REFERENCEES No BUILD_INCOMPLETE_REFERENCERS No OUTPUT COMPLETE FEATURE_TYPE FeatureMerger_3_COMPLETE OUTPUT INCOMPLETE FEATURE_TYPE FeatureMerger_3_INCOMPLETE FACTORY_DEF * TeeFactory FACTORY_NAME "FeatureMerger_3 COMPLETE Splitter" INPUT FEATURE_TYPE FeatureMerger_3_COMPLETE OUTPUT FEATURE_TYPE FeatureMerger_3_COMPLETE_0_AQ/C8zpP1FY= OUTPUT FEATURE_TYPE FeatureMerger_3_COMPLETE_1_w43yjSlnSN0= # ------------------------------------------------------------------------- FACTORY_DEF {*} ReferenceFactory FACTORY_NAME FeatureMerger_4 INPUT REFERENCER FEATURE_TYPE FeatureMerger_3_INCOMPLETE INPUT REFERENCEE FEATURE_TYPE FeatureMerger_3_COMPLETE_0_AQ/C8zpP1FY= REFERENCE_INFO ATTRIBUTES REFERENCEE_FIELDS "gml_id" REFERENCER_FIELDS "gml_parent_id" MERGE_ATTRIBUTES Yes MANAGE_FME_TYPE Yes PROCESS_DUPLICATE_REFERENCEES No BUILD_INCOMPLETE_REFERENCERS No OUTPUT COMPLETE FEATURE_TYPE FeatureMerger_4_COMPLETE OUTPUT INCOMPLETE FEATURE_TYPE FeatureMerger_4_INCOMPLETE # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME AttributeRenamer_5 INPUT FEATURE_TYPE FeatureMerger_4_INCOMPLETE OUTPUT FEATURE_TYPE AttributeRenamer_5_OUTPUT @RenameAttributes(ATTR_LIST_DEF_VAL, o_citygml_feature_role,citygml_feature_role,,o_feature_type,feature_type,,o_gml_description,gml_description,,o_gml_name,gml_name,) # ------------------------------------------------------------------------- FACTORY_DEF * ElementFactory FACTORY_NAME ListExploder_6 INPUT FEATURE_TYPE Cloner_5_COPY INPUT FEATURE_TYPE AttributeRenamer_5_OUTPUT LIST_NAME citygml_level_of_detail{} ELEMENT_NUMBER_FIELD _element_index CLONE_GEOMETRY MODE LEAN OUTPUT ELEMENT FEATURE_TYPE ListExploder_6_OUTPUT # ------------------------------------------------------------------------- Tcl2 proc StringConcatenator_8_f53ecab3_29e9_4c0b_82ba_6bd30e8bb3b30_doSetAttr {attrText} { FME_SetAttribute [FME_DecodeText {Model}] [FME_DecodeText $attrText] } FACTORY_DEF * TeeFactory FACTORY_NAME StringConcatenator_8 INPUT FEATURE_TYPE ListExploder_6_OUTPUT OUTPUT FEATURE_TYPE StringConcatenator_8_OUTPUT @Tcl2("StringConcatenator_8_f53ecab3_29e9_4c0b_82ba_6bd30e8bb3b30_doSetAttr {@EvaluateExpression(FDIV,STRING_ENCODED,Valuegml_id_lodValuecitygml_level_of_detail,StringConcatenator_8)} ") # ------------------------------------------------------------------------- FACTORY_DEF * ElementFactory FACTORY_NAME ListExploder INPUT FEATURE_TYPE AttributeRenamer_OUTPUT_1_zxgSiKgnAxI= INPUT FEATURE_TYPE FeatureMerger_2_COMPLETE_1_JmoUraR8nAk= INPUT FEATURE_TYPE FeatureMerger_3_COMPLETE_1_w43yjSlnSN0= INPUT FEATURE_TYPE FeatureMerger_4_COMPLETE LIST_NAME citygml_level_of_detail{} ELEMENT_NUMBER_FIELD _lod_index CLONE_GEOMETRY MODE LEAN OUTPUT ELEMENT FEATURE_TYPE ListExploder_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF {*} AttrSetFactory FACTORY_NAME AttributeCreator INPUT FEATURE_TYPE ListExploder_OUTPUT MULTI_FEATURE_MODE NO NULL_ATTR_MODE NO_OP ATTRSET_CREATE_DIRECTIVES _PROPAGATE_MISSING_FDIV ATTR_ACTION { "" "Model" "SET_TO" "ValueBuilding_ID_Value_lod_index" } OUTPUT OUTPUT FEATURE_TYPE AttributeCreator_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * DeaggregateFactory FACTORY_NAME Deaggregator_4 INPUT FEATURE_TYPE AttributeCreator_OUTPUT ATTR_ACCUM_MODE "HANDLE_CONFLICT" ATTR_CONFLICT_RES "INCOMING_IF_CONFLICT" INCOMING_PREFIX "" RECURSIVE No SPLIT_COMPOSITES No INSTANTIATE_GEOMETRY_INSTANCES_NEW No SET_FME_TYPE Yes PART_NUMBER_FIELD _part_number GEOMETRY_NAME_FIELD _geometry_name ID_ATTR _hierarchy_id PARENT_ID_ATTR _hierarchy_parent_id CHILD_ID_ATTR _hierarchy_child_id_list COPY_ATTR EVERY_NODE OUTPUT POINT FEATURE_TYPE Deaggregator_4_DEAGGREGATED OUTPUT LINE FEATURE_TYPE Deaggregator_4_DEAGGREGATED OUTPUT POLYGON FEATURE_TYPE Deaggregator_4_DEAGGREGATED OUTPUT DONUT FEATURE_TYPE Deaggregator_4_DEAGGREGATED OUTPUT AGGREGATE FEATURE_TYPE Deaggregator_4_DEAGGREGATED # ------------------------------------------------------------------------- FACTORY_DEF * SurfaceSplitterFactory FACTORY_NAME SurfaceSplitter_3 INPUT FEATURE_TYPE Deaggregator_4_DEAGGREGATED OUTPUT FRONT FEATURE_TYPE SurfaceSplitter_3_FRONT OUTPUT BACK FEATURE_TYPE SurfaceSplitter_3_BACK # ------------------------------------------------------------------------- MACRO OUTPUT_NULL_FTYPE not_selected MACRO OUTPUT_NULL_FTYPE GeometryFilter_5_NULL MACRO OUTPUT_INSTANCE_FTYPE not_selected Lookup GeometryFilter_5_RouterTable "" "not_selected" fme_no_geom $(OUTPUT_NULL_FTYPE) MACRO COLLECTION_HANDLING NOT_THIS_TIME MACRO INSTANCE_FILTERING * INCLUDE [ if 0 { puts "MACRO COLLECTION_HANDLING *"; if { puts "MACRO INSTANCE_FILTERING NOT_THIS_TIME"; }; }; if {{$(OUTPUT_INSTANCE_FTYPE)} == "not_selected"} { puts "MACRO INSTANCE_FILTERING NOT_THIS_TIME"; }; ] FACTORY_DEF * TeeFactory FACTORY_NAME GeometryFilter_5_InputPassThrough INPUT FEATURE_TYPE SurfaceSplitter_3_BACK INPUT FEATURE_TYPE SurfaceSplitter_3_FRONT OUTPUT FEATURE_TYPE GeometryFilter_5___Input___ @Geometry(FIX_FMETYPE_FMEGEOMETRY) FACTORY_DEF $(INSTANCE_FILTERING) TestFactory FACTORY_NAME GeometryFilter_5_InstanceTest INPUT FEATURE_TYPE GeometryFilter_5___Input___ TEST @Geometry(IS_GEOMETRY_INSTANCE) == 1 OUTPUT PASSED FEATURE_TYPE $(OUTPUT_INSTANCE_FTYPE) OUTPUT FAILED FEATURE_TYPE GeometryFilter_5___Input___ FACTORY_DEF $(COLLECTION_HANDLING) TestFactory FACTORY_NAME GeometryFilter_5_CollectionTest INPUT FEATURE_TYPE GeometryFilter_5___Input___ TEST &fme_type == "fme_collection" OUTPUT FAILED FEATURE_TYPE GeometryFilter_5___Not_Collection___ OUTPUT PASSED FEATURE_TYPE GeometryFilter_5___Collection___ FACTORY_DEF $(COLLECTION_HANDLING) DeaggregateFactory FACTORY_NAME GeometryFilter_5_Deagg INPUT FEATURE_TYPE GeometryFilter_5___Collection___ HOMOGENIZE_COLLECTIONS YES RECURSIVE YES SET_FME_TYPE YES INSTANTIATE_GEOMETRY_INSTANCES_NEW OUTPUT POINT FEATURE_TYPE GeometryFilter_5___HomogeneousAggregate___ OUTPUT LINE FEATURE_TYPE GeometryFilter_5___HomogeneousAggregate___ OUTPUT POLYGON FEATURE_TYPE GeometryFilter_5___HomogeneousAggregate___ OUTPUT DONUT FEATURE_TYPE GeometryFilter_5___HomogeneousAggregate___ OUTPUT AGGREGATE FEATURE_TYPE GeometryFilter_5___HomogeneousAggregate___ FACTORY_DEF * TeeFactory FACTORY_NAME GeometryFilter_5_RouterPrepper INPUT FEATURE_TYPE GeometryFilter_5___HomogeneousAggregate___ INPUT FEATURE_TYPE GeometryFilter_5___Not_Collection___ INPUT FEATURE_TYPE GeometryFilter_5___Input___ OUTPUT FEATURE_TYPE GeometryFilter_5___Prepped___ GeometryFilter_5_6acd2002_31c1_4ad7_aef7_b2e685b99da10_targetFeatureType @Lookup(GeometryFilter_5_RouterTable,&fme_type) FACTORY_DEF * TestFactory FACTORY_NAME GeometryFilter_5_Router INPUT FEATURE_TYPE GeometryFilter_5___Prepped___ TEST @Value(GeometryFilter_5_6acd2002_31c1_4ad7_aef7_b2e685b99da10_targetFeatureType) != "not_selected" OUTPUT PASSED FEATURE_TYPE * @FeatureType(@Value(GeometryFilter_5_6acd2002_31c1_4ad7_aef7_b2e685b99da10_targetFeatureType)) @RemoveAttributes(GeometryFilter_5_6acd2002_31c1_4ad7_aef7_b2e685b99da10_targetFeatureType) OUTPUT FAILED FEATURE_TYPE GeometryFilter_5_ @RemoveAttributes(GeometryFilter_5_6acd2002_31c1_4ad7_aef7_b2e685b99da10_targetFeatureType) FACTORY_DEF * TeeFactory FACTORY_NAME "GeometryFilter_5 NULL Transformer Output Nuker" INPUT FEATURE_TYPE GeometryFilter_5_NULL # ------------------------------------------------------------------------- INCLUDE [ set RULES_LIST [split {NAN_REMOVAL%""%"Yes"%NULL_REMOVAL%""%"Yes"%CONSECUTIVE_IDENTICAL_VERTICES_2D%CONSECUTIVE_IDENTICAL_VERTICES_2D_PARAMS%"Yes"%TYPE_REPAIR%TYPE_REPAIR_PARAMS%"Yes"%SELF_INTERSECTING%SELF_INTERSECTING_PARAMS%"Yes"%PLANAR_SURFACE%PLANAR_SURFACE_PARAMS%"Yes"%SHELL_VALIDATION%""%"Yes"%SOLID_VOID_REPAIR%""%"Yes"%OGC_SIMPLE_CHECK%""%"No"%OGC_VALID_CHECK%""%"No"%MISSING_TEXTURE_COORDINATES%""%"Yes"%MISSING_VERTEX_NORMALS%""%"Yes"%AREA_ORIENTATION%ORIENTATION_CHECK_PARAMS%"Yes"} {%} ]; set RULE_MACRO_STRING "MACRO RULE_LOOKUP "; foreach RULE_BIT $RULES_LIST { if {[string compare $RULE_BIT NAN_REMOVAL]==0} { append RULE_MACRO_STRING "NAN_REMOVAL "; } elseif {[string compare $RULE_BIT NULL_REMOVAL]==0} { append RULE_MACRO_STRING "NULL_REMOVAL "; } elseif {[string compare $RULE_BIT CONSECUTIVE_IDENTICAL_VERTICES_2D]==0} { append RULE_MACRO_STRING " "; } elseif {[string compare $RULE_BIT TYPE_REPAIR]==0} { append RULE_MACRO_STRING "TYPE_REPAIR "; } elseif {[string compare $RULE_BIT SELF_INTERSECTING]==0} { append RULE_MACRO_STRING " "; } elseif {[string compare $RULE_BIT MISSING_VERTEX_NORMALS]==0} { append RULE_MACRO_STRING "MISSING_VERTEX_NORMALS "; } elseif {[string compare $RULE_BIT PLANAR_SURFACE]==0} { append RULE_MACRO_STRING " "; } elseif {[string compare $RULE_BIT SHELL_VALIDATION]==0} { append RULE_MACRO_STRING " "; } elseif {[string compare $RULE_BIT SOLID_VOID_REPAIR]==0} { append RULE_MACRO_STRING " "; } elseif {[string compare $RULE_BIT OGC_SIMPLE_CHECK]==0} { append RULE_MACRO_STRING " "; } elseif {[string compare $RULE_BIT OGC_VALID_CHECK]==0} { append RULE_MACRO_STRING " "; } elseif {[string compare $RULE_BIT MISSING_TEXTURE_COORDINATES]==0} { append RULE_MACRO_STRING "MISSING_TEXTURE_COORDINATES "; } elseif {[string compare $RULE_BIT AREA_ORIENTATION]==0} { append RULE_MACRO_STRING " "; }; }; puts $RULE_MACRO_STRING ] FACTORY_DEF * GeometryValidationFactory FACTORY_NAME GeometryValidator INPUT FEATURE_TYPE GeometryFilter_5_ ISSUE_ATTR_NAME _issues ISSUES_TO_CHECK $(RULE_LOOKUP) REPAIR_MODE PARAMS CONSECUTIVE_IDENTICAL_VERTICES_2D AUTO_REFINE NO CONSECUTIVE_IDENTICAL_VERTICES_2D CHECK_Z PLANAR_SURFACE CHECK_AREA DO_NOT_CHECK_AREA PLANAR_SURFACE TOLERANCE_MODE "" PLANAR_SURFACE TOLERANCE "" PLANAR_SURFACE ANGULAR_TOLERANCE_MODE "" PLANAR_SURFACE ANGULAR_TOLERANCE "" TYPE_REPAIR CONNECT_Z_MODE FIRST_WINS TYPE_REPAIR ARC_ENDPOINT_TOLERANCE_MODE "Auto" SHELL_VALIDATION FLIP_APPEARANCE_MODE FLIP_APPEARANCES SELF_INTERSECTING CONNECT_Z_MODE FIRST_WINS AREA_ORIENTATION AREA_ORIENTATION OGC_VALID_CHECK OGC_VERSION V1.2.0 OUTPUT VALID FEATURE_TYPE GeometryValidator_PASSED OUTPUT REPAIRED FEATURE_TYPE GeometryValidator_REPAIRED # ------------------------------------------------------------------------- DEFAULT_MACRO Aggregator_BREAK_ATTR INCLUDE [if {"No" == "Yes"} {puts "MACRO Aggregator_BREAK_ATTR BREAK_BEFORE_FIELD_CHANGE Model fme_basename" }] FACTORY_DEF {*} AggregateFactory FACTORY_NAME Aggregator INPUT FEATURE_TYPE GeometryValidator_PASSED INPUT FEATURE_TYPE GeometryValidator_REPAIRED GROUP_BY { Model fme_basename } $(Aggregator_BREAK_ATTR) LIST_NAME "_lod_list{}" ACCUMULATE_ATTRIBUTES Yes OUTPUT AGGREGATE FEATURE_TYPE Aggregator_AGGREGATE # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME AttributeCopier_2 INPUT FEATURE_TYPE Aggregator_AGGREGATE OUTPUT FEATURE_TYPE AttributeCopier_2_OUTPUT @CopyAttributes(gml_id,Building_ID) # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME Cloner_4_CheckCopies INPUT FEATURE_TYPE StringConcatenator_3_OUTPUT INPUT FEATURE_TYPE StringConcatenator_8_OUTPUT INPUT FEATURE_TYPE AttributeCopier_2_OUTPUT TEST "1" TYPE INT ENCODED OUTPUT PASSED FEATURE_TYPE __toOutput__ FACTORY_DEF * TeeFactory FACTORY_NAME Cloner_4_Cloner INPUT FEATURE_TYPE __toOutput__ NUMBER_OF_COPIES "1" COPY_NUMBER_ATTRIBUTE _copynum OUTPUT FEATURE_TYPE Cloner_4_COPY # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME BoundsExtractor_2 INPUT FEATURE_TYPE Cloner_4_COPY OUTPUT FEATURE_TYPE BoundsExtractor_2_OUTPUT @Bounds(_xmin,_xmax,_ymin,_ymax,citygml_base_elevation,_zmax,GEOMETRIC) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME ExpressionEvaluator_3 INPUT FEATURE_TYPE BoundsExtractor_2_OUTPUT OUTPUT FEATURE_TYPE ExpressionEvaluator_3_OUTPUT "_offset" @Evaluate("-@Value(citygml_base_elevation)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME Offsetter_2 INPUT FEATURE_TYPE ExpressionEvaluator_3_OUTPUT OUTPUT FEATURE_TYPE Offsetter_2_Offset @Offset("0","0","@EvaluateExpression(FLOAT,Value_offset,Offsetter_2)") FACTORY_DEF * TestFactory FACTORY_NAME Offsetter_2_PointCloudOffsetter INPUT FEATURE_TYPE Offsetter_2_Offset TEST &fme_type == "fme_point_cloud" TEST "" != "" BOOLEAN_OPERATOR AND OUTPUT PASSED FEATURE_TYPE Offsetter_2_OFFSET @TransformPointCloud(OFFSET,) OUTPUT FAILED FEATURE_TYPE Offsetter_2_OFFSET # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME AttributeCopier_9 INPUT FEATURE_TYPE Offsetter_2_OFFSET OUTPUT FEATURE_TYPE AttributeCopier_9_OUTPUT @CopyAttributes(origin_z,citygml_base_elevation) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME CoordinateSystemExtractor INPUT FEATURE_TYPE AttributeCopier_9_OUTPUT OUTPUT FEATURE_TYPE CoordinateSystemExtractor_OUTPUT "_coordsys" @CoordSys() # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME Tester INPUT FEATURE_TYPE CoordinateSystemExtractor_OUTPUT TEST @EvaluateExpression(FDIV,STRING_ENCODED,Value_coordsys,Tester) ATTRIBUTE_HAS_VALUE "" ENCODED BOOLEAN_OPERATOR OR OUTPUT PASSED FEATURE_TYPE Tester_PASSED OUTPUT FAILED FEATURE_TYPE Tester_FAILED # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME BoundsExtractor INPUT FEATURE_TYPE Tester_FAILED OUTPUT FEATURE_TYPE BoundsExtractor_OUTPUT @Bounds(fme_encoded,_xmin,_xmax,_ymin,_ymax,_zmin,_zmax,GEOMETRIC) # ------------------------------------------------------------------------- INCLUDE [ if { {CARTESIAN} == {CARTESIAN} } { puts {MACRO Offsetter_OFFSET @Offset(REJECTABLE,"@EvaluateExpression(FDIV,FLOAT,-Value_xmax-Value_xmin2.0,Offsetter)","@EvaluateExpression(FDIV,FLOAT,-Value_ymax-Value_ymin2.0,Offsetter)","0")}; } elseif { {CARTESIAN} == {POLAR} } { puts {MACRO Offsetter_OFFSET @Offset(REJECTABLE,"CARTESIAN","","")}; } elseif { {CARTESIAN} == {SPHERICAL} } { puts {MACRO Offsetter_OFFSET @Offset(REJECTABLE,"CARTESIAN","","","")}; } else { puts {MACRO Offsetter_OFFSET @Offset(REJECTABLE,"@EvaluateExpression(FDIV,FLOAT,-Value_xmax-Value_xmin2.0,Offsetter)","@EvaluateExpression(FDIV,FLOAT,-Value_ymax-Value_ymin2.0,Offsetter)","0")}; } ] FACTORY_DEF * TeeFactory FACTORY_NAME Offsetter_OffsetterInput INPUT FEATURE_TYPE BoundsExtractor_OUTPUT OUTPUT FEATURE_TYPE ___TOOFFSETTER___ FACTORY_DEF * TeeFactory FACTORY_NAME Offsetter_Offsetter INPUT FEATURE_TYPE ___TOOFFSETTER___ @RenameAttributes(FME_STRICT,___fme_rejection_code___,fme_rejection_code) OUTPUT FEATURE_TYPE ___TOREJECTOR___ $(Offsetter_OFFSET) FACTORY_DEF * TestFactory FACTORY_NAME Offsetter_Rejector INPUT FEATURE_TYPE ___TOREJECTOR___ TEST @Value(fme_rejection_code) != "" OUTPUT FAILED FEATURE_TYPE Offsetter_Offset @RenameAttributes(FME_STRICT,fme_rejection_code,___fme_rejection_code___) FACTORY_DEF * TestFactory FACTORY_NAME Offsetter_PointCloudOffsetter INPUT FEATURE_TYPE Offsetter_Offset TEST &fme_type == "fme_point_cloud" TEST "" != "" BOOLEAN_OPERATOR AND OUTPUT PASSED FEATURE_TYPE Offsetter_OFFSET @TransformPointCloud(OFFSET,) OUTPUT FAILED FEATURE_TYPE Offsetter_OFFSET # ------------------------------------------------------------------------- # Wipe out the source setting if it was untouched from the default setting DEFAULT_MACRO Reprojector_SOURCE "Read from feature" INCLUDE [if { {Read from feature} == {Read from feature} } { puts {MACRO Reprojector_SOURCE} } ] FACTORY_DEF * TeeFactory FACTORY_NAME Reprojector INPUT FEATURE_TYPE Tester_PASSED OUTPUT FEATURE_TYPE Reprojector_REPROJECTED @Reproject($(Reprojector_SOURCE),"_AZMEA_",NearestNeighbor,PreserveCells,Reprojector,"COORD_SYS_WARNING",RASTER_TOLERANCE,0.0) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME BoundsExtractor_3 INPUT FEATURE_TYPE Reprojector_REPROJECTED OUTPUT FEATURE_TYPE BoundsExtractor_3_OUTPUT @Bounds(fme_encoded,_xmin,_xmax,_ymin,_ymax,_zmin,_zmax,GEOMETRIC) # ------------------------------------------------------------------------- INCLUDE [ if { {CARTESIAN} == {CARTESIAN} } { puts {MACRO Offsetter_3_OFFSET @Offset(REJECTABLE,"0","0","@EvaluateExpression(FDIV,FLOAT,-Value_zmin,Offsetter_3)")}; } elseif { {CARTESIAN} == {POLAR} } { puts {MACRO Offsetter_3_OFFSET @Offset(REJECTABLE,"CARTESIAN","","")}; } elseif { {CARTESIAN} == {SPHERICAL} } { puts {MACRO Offsetter_3_OFFSET @Offset(REJECTABLE,"CARTESIAN","","","")}; } else { puts {MACRO Offsetter_3_OFFSET @Offset(REJECTABLE,"0","0","@EvaluateExpression(FDIV,FLOAT,-Value_zmin,Offsetter_3)")}; } ] FACTORY_DEF * TeeFactory FACTORY_NAME Offsetter_3_OffsetterInput INPUT FEATURE_TYPE Offsetter_OFFSET INPUT FEATURE_TYPE BoundsExtractor_3_OUTPUT OUTPUT FEATURE_TYPE ___TOOFFSETTER___ FACTORY_DEF * TeeFactory FACTORY_NAME Offsetter_3_Offsetter INPUT FEATURE_TYPE ___TOOFFSETTER___ @RenameAttributes(FME_STRICT,___fme_rejection_code___,fme_rejection_code) OUTPUT FEATURE_TYPE ___TOREJECTOR___ $(Offsetter_3_OFFSET) FACTORY_DEF * TestFactory FACTORY_NAME Offsetter_3_Rejector INPUT FEATURE_TYPE ___TOREJECTOR___ TEST @Value(fme_rejection_code) != "" OUTPUT FAILED FEATURE_TYPE Offsetter_3_Offset @RenameAttributes(FME_STRICT,fme_rejection_code,___fme_rejection_code___) FACTORY_DEF * TestFactory FACTORY_NAME Offsetter_3_PointCloudOffsetter INPUT FEATURE_TYPE Offsetter_3_Offset TEST &fme_type == "fme_point_cloud" TEST "" != "" BOOLEAN_OPERATOR AND OUTPUT PASSED FEATURE_TYPE Offsetter_3_OFFSET @TransformPointCloud(OFFSET,) OUTPUT FAILED FEATURE_TYPE Offsetter_3_OFFSET FACTORY_DEF * TeeFactory FACTORY_NAME "Offsetter_3 OFFSET Splitter" INPUT FEATURE_TYPE Offsetter_3_OFFSET OUTPUT FEATURE_TYPE Offsetter_3_OFFSET_0_yfbNNeM9hGk= OUTPUT FEATURE_TYPE Offsetter_3_OFFSET_1_LnNMNyuXNyo= # ------------------------------------------------------------------------- FACTORY_DEF * VertexCreatorFactory FACTORY_NAME VertexCreator INPUT FEATURE_TYPE Offsetter_3_OFFSET_1_LnNMNyuXNyo= MODE REPLACE INDEX CONTINUE_ON_ERROR YES XVAL "0" YVAL "0" ZVAL "@EvaluateExpression(FDIV,FLOAT,Value_zmin,VertexCreator)" OUTPUT OUTPUT FEATURE_TYPE VertexCreator_OUTPUT # ------------------------------------------------------------------------- # Wipe out the source setting if it was untouched from the default setting DEFAULT_MACRO Reprojector_2_SOURCE "Read from feature" INCLUDE [if { {Read from feature} == {Read from feature} } { puts {MACRO Reprojector_2_SOURCE} } ] FACTORY_DEF * TeeFactory FACTORY_NAME Reprojector_2 INPUT FEATURE_TYPE VertexCreator_OUTPUT OUTPUT FEATURE_TYPE Reprojector_2_REPROJECTED @Reproject($(Reprojector_2_SOURCE),"LL84",NearestNeighbor,PreserveCells,Reprojector_2,"COORD_SYS_WARNING",RASTER_TOLERANCE,0.0) # ------------------------------------------------------------------------- MACRO OUTPUT_SURFACE_FTYPE not_selected MACRO OUTPUT_SURFACE_FTYPE GeometryFilter_3_SURFACE MACRO OUTPUT_SOLID_FTYPE not_selected MACRO OUTPUT_SOLID_FTYPE GeometryFilter_3_SOLID MACRO OUTPUT_COLLECTION_FTYPE not_selected MACRO OUTPUT_COLLECTION_FTYPE GeometryFilter_3_COLLECTION MACRO OUTPUT_INSTANCE_FTYPE not_selected Lookup GeometryFilter_3_RouterTable "" "not_selected" fme_surface $(OUTPUT_SURFACE_FTYPE) fme_solid $(OUTPUT_SOLID_FTYPE) fme_collection $(OUTPUT_COLLECTION_FTYPE) MACRO COLLECTION_HANDLING NOT_THIS_TIME MACRO INSTANCE_FILTERING * INCLUDE [ if 0 { puts "MACRO COLLECTION_HANDLING *"; if { puts "MACRO INSTANCE_FILTERING NOT_THIS_TIME"; }; }; if {{$(OUTPUT_INSTANCE_FTYPE)} == "not_selected"} { puts "MACRO INSTANCE_FILTERING NOT_THIS_TIME"; }; ] FACTORY_DEF * TeeFactory FACTORY_NAME GeometryFilter_3_InputPassThrough INPUT FEATURE_TYPE Offsetter_3_OFFSET_0_yfbNNeM9hGk= OUTPUT FEATURE_TYPE GeometryFilter_3___Input___ @Geometry(FIX_FMETYPE_FMEGEOMETRY) FACTORY_DEF $(INSTANCE_FILTERING) TestFactory FACTORY_NAME GeometryFilter_3_InstanceTest INPUT FEATURE_TYPE GeometryFilter_3___Input___ TEST @Geometry(IS_GEOMETRY_INSTANCE) == 1 OUTPUT PASSED FEATURE_TYPE $(OUTPUT_INSTANCE_FTYPE) OUTPUT FAILED FEATURE_TYPE GeometryFilter_3___Input___ FACTORY_DEF $(COLLECTION_HANDLING) TestFactory FACTORY_NAME GeometryFilter_3_CollectionTest INPUT FEATURE_TYPE GeometryFilter_3___Input___ TEST &fme_type == "fme_collection" OUTPUT FAILED FEATURE_TYPE GeometryFilter_3___Not_Collection___ OUTPUT PASSED FEATURE_TYPE GeometryFilter_3___Collection___ FACTORY_DEF $(COLLECTION_HANDLING) DeaggregateFactory FACTORY_NAME GeometryFilter_3_Deagg INPUT FEATURE_TYPE GeometryFilter_3___Collection___ HOMOGENIZE_COLLECTIONS YES RECURSIVE YES SET_FME_TYPE YES INSTANTIATE_GEOMETRY_INSTANCES_NEW OUTPUT POINT FEATURE_TYPE GeometryFilter_3___HomogeneousAggregate___ OUTPUT LINE FEATURE_TYPE GeometryFilter_3___HomogeneousAggregate___ OUTPUT POLYGON FEATURE_TYPE GeometryFilter_3___HomogeneousAggregate___ OUTPUT DONUT FEATURE_TYPE GeometryFilter_3___HomogeneousAggregate___ OUTPUT AGGREGATE FEATURE_TYPE GeometryFilter_3___HomogeneousAggregate___ FACTORY_DEF * TeeFactory FACTORY_NAME GeometryFilter_3_RouterPrepper INPUT FEATURE_TYPE GeometryFilter_3___HomogeneousAggregate___ INPUT FEATURE_TYPE GeometryFilter_3___Not_Collection___ INPUT FEATURE_TYPE GeometryFilter_3___Input___ OUTPUT FEATURE_TYPE GeometryFilter_3___Prepped___ GeometryFilter_3_b9a59d05_1fc9_4193_901c_998c5440b6020_targetFeatureType @Lookup(GeometryFilter_3_RouterTable,&fme_type) FACTORY_DEF * TestFactory FACTORY_NAME GeometryFilter_3_Router INPUT FEATURE_TYPE GeometryFilter_3___Prepped___ TEST @Value(GeometryFilter_3_b9a59d05_1fc9_4193_901c_998c5440b6020_targetFeatureType) != "not_selected" OUTPUT PASSED FEATURE_TYPE * @FeatureType(@Value(GeometryFilter_3_b9a59d05_1fc9_4193_901c_998c5440b6020_targetFeatureType)) @RemoveAttributes(GeometryFilter_3_b9a59d05_1fc9_4193_901c_998c5440b6020_targetFeatureType) OUTPUT FAILED FEATURE_TYPE GeometryFilter_3_ @RemoveAttributes(GeometryFilter_3_b9a59d05_1fc9_4193_901c_998c5440b6020_targetFeatureType) FACTORY_DEF * TeeFactory FACTORY_NAME "GeometryFilter_3 Transformer Output Nuker" INPUT FEATURE_TYPE GeometryFilter_3_ # ------------------------------------------------------------------------- FACTORY_DEF {*} TeeFactory FACTORY_NAME AttributeKeeper_3 INPUT FEATURE_TYPE GeometryFilter_3_SURFACE INPUT FEATURE_TYPE GeometryFilter_3_SOLID INPUT FEATURE_TYPE GeometryFilter_3_COLLECTION OUTPUT { FEATURE_TYPE AttributeKeeper_3_OUTPUT @KeepAttributes(Model,fme_basename,fme_regexp_match,^fme_) } # ------------------------------------------------------------------------- Tcl2 proc CoordinateSystemRemover_CoordSysRemover {} { global FME_CoordSys; set FME_CoordSys {}; } FACTORY_DEF * TeeFactory FACTORY_NAME CoordinateSystemRemover INPUT FEATURE_TYPE AttributeKeeper_3_OUTPUT OUTPUT FEATURE_TYPE CoordinateSystemRemover_OUTPUT @Tcl2(CoordinateSystemRemover_CoordSysRemover) # ------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME "Destination Feature Type Routing Correlator" COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE * ROUTE FME_GENERIC CoordinateSystemRemover_OUTPUT TO DIRECTX __GO_TO_FINAL_OUTPUT_ROUTER__ multi_writer_id,0,SupplyAttributesENCODEDfme_template_feature_typeNewFeatureType,EvaluateExpressionATTR_CREATE_EXPR__wb_out_feat_type__atValueopenparenModelcloseparenNewFeatureType GEOMETRY ROUTE FME_GENERIC Reprojector_2_REPROJECTED TO ESRISHAPE __GO_TO_FINAL_OUTPUT_ROUTER__ multi_writer_id,1,SupplyAttributesENCODEDfme_template_feature_typeh,EvaluateExpressionATTR_CREATE_EXPR__wb_out_feat_type__atValueopenparenfme_basenamecloseparenh GEOMETRY FEATURE_TYPE_ATTRIBUTE __wb_out_feat_type__ OUTPUT ROUTED FEATURE_TYPE * OUTPUT NOT_ROUTED FEATURE_TYPE __nuke_me__ @Tcl2("FME_StatMessage 818059 [FME_GetAttribute fme_template_feature_type] 818060 818061 fme_warn") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "Final Output Nuker" INPUT FEATURE_TYPE __nuke_me__ # ------------------------------------------------------------------------- DIRECTX_1_DEF NewFeatureType # ------------------------------------------------------------------------- ESRISHAPE_1_DEF h SHAPE_GEOMETRY shape_first_feature shape_dimension auto Model char(200)