<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by Nick Palmiotto (TAG, LLC) -->
<xs:schema targetNamespace="BwCommand" xmlns:a="Attribute" xmlns:e="Evaluator" xmlns:ax="Attributes" xmlns:c="Command" xmlns:bc="BwCommand" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:import namespace="Attributes" schemaLocation="../../Common/Attribute/Attributes.xsd"/>
	<xs:import namespace="Evaluator" schemaLocation="../../Common/Evaluator/Evaluator.xsd"/>
	<xs:import namespace="Command" schemaLocation="../../Common/Command/Command.xsd"/>
	<xs:element name="AutoInterpolate">
		<xs:annotation>
			<xs:documentation>Automatically Interpolates betwen two values using the default Interpolation Algorithm.  This Command registers the Attributes of the AttributeContainer that is the target of the AutoInterpolate.  To use, first declare any optional AutoInterpolate Attributes and the required target Attribute.  After the target is set, declare any target Attributes to be Interpolated.  All declared target Attributes will Interpolate from their current value to the newly declared values.  Each declared target Attribute creates a new channel for the AutoInterpolate animation.  AutoInterpolate can effect 1...n channels simultaneously.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="c:CommandType">
					<xs:attribute name="duration" type="xs:float" use="optional" default="1"/>
					<xs:attribute name="postBehavior" type="xs:int" use="optional" default="1"/>
					<xs:attribute name="renderAndRelease" type="xs:boolean" use="optional" default="true"/>
					<xs:attribute name="shape" type="xs:anySimpleType" use="optional" default="eKeyframeShape_Linear"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="ConnectAttributes">
		<xs:annotation>
			<xs:documentation>Connects n number of Attributes from a source AttributeContainer to a target AttributeContainer using Attribute AddTarget</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="c:CommandType">
					<xs:sequence maxOccurs="unbounded">
						<xs:element name="sourceAttribute" type="xs:string"/>
						<xs:element name="targetAttribute" type="xs:string"/>
					</xs:sequence>
					<xs:attribute name="connectionType" type="xs:anySimpleType" use="optional"/>
					<xs:attribute name="persist" type="xs:boolean" use="optional" default="true"/>
					<xs:attribute name="sourceContainer" type="xs:string" use="optional"/>
					<xs:attribute name="targetContainer" type="xs:string" use="optional"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="ConnectOutputs">
		<xs:annotation>
			<xs:documentation>Connects n number of EvaluatorOutputs from a source Evaluator to a target AttributeContainer using Attribute AddTarget</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="c:CommandType">
					<xs:sequence maxOccurs="unbounded">
						<xs:element name="sourceOutput" type="xs:string"/>
						<xs:element name="targetAttribute" type="xs:string"/>
						<xs:element name="item" type="xs:int" minOccurs="0"/>
					</xs:sequence>
					<xs:attribute name="persist" type="xs:boolean" use="optional" default="true"/>
					<xs:attribute name="sourceEvaluator" type="xs:string" use="optional"/>
					<xs:attribute name="targetContainer" type="xs:string" use="optional"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="CreateWaypoints">
		<xs:annotation>
			<xs:documentation>AutoInterpolates the target between a sequence of points</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="c:CommandType">
					<xs:sequence maxOccurs="unbounded">
						<xs:element name="inputPosition" type="ax:Vector3DFloatAttrType" minOccurs="0"/>
						<xs:element name="inputRotation" type="ax:Vector3DFloatAttrType" minOccurs="0"/>
						<xs:element name="inputScale" type="ax:Vector3DFloatAttrType" minOccurs="0"/>
						<xs:element name="inputTime" type="xs:float" minOccurs="0"/>
						<xs:element name="path" type="e:EvaluatorType"/>
					</xs:sequence>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="Evaluate" type="c:CommandType">
		<xs:annotation>
			<xs:documentation>Calls the Evaluate method of the target Evaluator</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="Insert" type="c:CommandType">
		<xs:annotation>
			<xs:documentation>Inserts a Node into a Graph</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="Locate">
		<xs:annotation>
			<xs:documentation>Locates the target by moving the Camera and changing its field of view contain the target's bounding box.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="c:CommandType">
					<xs:attribute name="duration" type="xs:float" use="optional" default="1"/>
					<xs:attribute name="transition" type="xs:boolean" use="optional" default="true"/>
					<xs:attribute name="updateClipPlanes" type="xs:boolean" use="optional" default="true"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="Morph">
		<xs:annotation>
			<xs:documentation>Transforms source vertices into target vertices.  Use the Morph Command to morph one model into another.  (Both model must have the same number of vertices.)</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="c:CommandType">
					<xs:attribute name="source" type="xs:string" use="optional"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="Play" type="c:CommandType">
		<xs:annotation>
			<xs:documentation>Plays the target Evaluator, or all Evaluators if no target is specified</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="Remove" type="c:CommandType">
		<xs:annotation>
			<xs:documentation>Removes the target from the scene</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="SendMessage">
		<xs:annotation>
			<xs:documentation>Sends a serialized XML stream to the target Call Back Function</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="c:CommandType">
					<xs:attribute name="get" type="xs:anyURI" use="optional"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="Set" type="c:CommandType">
		<xs:annotation>
			<xs:documentation>Sets one or more Attributes for the given target.  To use the Set Command, first declare optional Set Attributes and a target.  Then declare 1-n number of Attributes belonging to the target, along with each Attribute's new value(s).</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="ShadeElevations">
		<xs:annotation>
			<xs:documentation>Uses an IsoShader to shade the vertexColors of the given target with 1 or more bands of color ranges, based on the elevation (y value) of the targets vertices</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="c:CommandType">
					<xs:sequence>
						<xs:element name="isoShaderBands" type="a:AttributeVectorType"/>
					</xs:sequence>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="ShadeSlopes">
		<xs:annotation>
			<xs:documentation>Uses an IsoShader to shade the vertexColors of the given target with 1 or more bands of color ranges, based on the slope between target vertices</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="c:CommandType">
					<xs:sequence>
						<xs:element name="isoShaderBands" type="a:AttributeVectorType" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="StateTransition" type="c:CommandType">
		<xs:annotation>
			<xs:documentation>Changes the State of a StateMachine to the target State</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="Stop" type="c:CommandType">
		<xs:annotation>
			<xs:documentation>Stops the target Evaluator or all Evaluators is no target is specified</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="Undo" type="c:CommandType">
		<xs:annotation>
			<xs:documentation>Reverses the previously Executed Command</xs:documentation>
		</xs:annotation>
	</xs:element>
</xs:schema>
