|
From: <luc...@us...> - 2014-11-27 01:45:57
|
Revision: 21764
http://sourceforge.net/p/sbml/code/21764
Author: luciansmith
Date: 2014-11-27 01:45:42 +0000 (Thu, 27 Nov 2014)
Log Message:
-----------
Updated to version 0.89
Modified Paths:
--------------
trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/CSGNode-uml.pdf
trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/CSGTransformation-uml.pdf
trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/CSGeometry-uml.pdf
trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/Domain-uml.pdf
trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/DomainType-uml.pdf
trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/Geometry-uml.pdf
trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/GeometryDefinition-uml.pdf
trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/MixedGeometry-uml.pdf
trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/ParametricGeometry-uml.pdf
trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/SampledField-uml.pdf
trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/SampledFieldGeometry-uml.pdf
trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/extended-parameter-uml.pdf
trunk/specifications/sbml-level-3/version-1/spatial/specification/macros.tex
trunk/specifications/sbml-level-3/version-1/spatial/specification/main.tex
trunk/specifications/sbml-level-3/version-1/spatial/specification/syntax.tex
Added Paths:
-----------
trunk/specifications/sbml-level-3/version-1/spatial/specification/spatial-v1-sbml-l3v1-rel0.89.pdf
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/CSGNode-uml.pdf
===================================================================
(Binary files differ)
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/CSGTransformation-uml.pdf
===================================================================
(Binary files differ)
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/CSGeometry-uml.pdf
===================================================================
(Binary files differ)
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/Domain-uml.pdf
===================================================================
(Binary files differ)
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/DomainType-uml.pdf
===================================================================
(Binary files differ)
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/Geometry-uml.pdf
===================================================================
(Binary files differ)
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/GeometryDefinition-uml.pdf
===================================================================
(Binary files differ)
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/MixedGeometry-uml.pdf
===================================================================
(Binary files differ)
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/ParametricGeometry-uml.pdf
===================================================================
(Binary files differ)
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/SampledField-uml.pdf
===================================================================
(Binary files differ)
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/SampledFieldGeometry-uml.pdf
===================================================================
(Binary files differ)
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/figs/extended-parameter-uml.pdf
===================================================================
(Binary files differ)
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/macros.tex
===================================================================
--- trunk/specifications/sbml-level-3/version-1/spatial/specification/macros.tex 2014-11-26 15:00:47 UTC (rev 21763)
+++ trunk/specifications/sbml-level-3/version-1/spatial/specification/macros.tex 2014-11-27 01:45:42 UTC (rev 21764)
@@ -54,7 +54,7 @@
\newcommand{\ListOfOrdinalMappings}{\defRef{ListOfOrdinalMappings}{ListOfOrdinalMappings-class}}
\newcommand{\ListOfParametricObjects}{\defRef{ListOfParametricObjects}{ListOfParametricObjects-class}}
\newcommand{\ListOfSampledVolumes}{\defRef{ListOfSampledVolumes}{ListOfSampledVolumes-class}}
-\newcommand{\ListOfSpatialPoints}{\defRef{ListOfSpatialPoints}{ListOfSpatialPoints-class}}
+\newcommand{\SpatialPoints}{\defRef{SpatialPoints}{SpatialPoints-class}}
\newcommand{\MixedGeometry}{\defRef{MixedGeometry}{MixedGeometry-class}}
\newcommand{\OrdinalMapping}{\defRef{OrdinalMapping}{OrdinalMapping-class}}
\newcommand{\ParametricGeometry}{\defRef{ParametricGeometry}{ParametricGeometry-class}}
@@ -66,8 +66,6 @@
\newcommand{\SampledField}{\defRef{SampledField}{SampledField-class}}
\newcommand{\SampledVolume}{\defRef{SampledVolume}{SampledVolume-class}}
\newcommand{\SampledVolumes}{\defRef{SampledVolumes}{SampledVolume-class}}
-\newcommand{\SpatialPoint}{\defRef{SpatialPoint}{SpatialPoint-class}}
-\newcommand{\SpatialPoints}{\defRef{SpatialPoints}{SpatialPoint-class}}
\newcommand{\SpatialSymbolReference}{\defRef{SpatialSymbolReference}{SpatialSymbolReference-class}}
\newcommand{\TransformationComponent}{\defRef{TransformationComponent}{TransformationComponent-class}}
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/main.tex
===================================================================
--- trunk/specifications/sbml-level-3/version-1/spatial/specification/main.tex 2014-11-26 15:00:47 UTC (rev 21763)
+++ trunk/specifications/sbml-level-3/version-1/spatial/specification/main.tex 2014-11-27 01:45:42 UTC (rev 21764)
@@ -5,8 +5,8 @@
\begin{document}
\packageTitle{Spatial Processes}
-\packageVersion{Version 1, Release 0.88 (Draft)}
-\packageVersionDate{September 2014}
+\packageVersion{Version 1, Release 0.89 (Draft)}
+\packageVersionDate{November 2014}
\packageGeneralURL{http://sbml.org/Documents/Specifications/SBML_Level_3/Packages/spatial}
\packageThisVersionURL{TBD}
Added: trunk/specifications/sbml-level-3/version-1/spatial/specification/spatial-v1-sbml-l3v1-rel0.89.pdf
===================================================================
(Binary files differ)
Index: trunk/specifications/sbml-level-3/version-1/spatial/specification/spatial-v1-sbml-l3v1-rel0.89.pdf
===================================================================
--- trunk/specifications/sbml-level-3/version-1/spatial/specification/spatial-v1-sbml-l3v1-rel0.89.pdf 2014-11-26 15:00:47 UTC (rev 21763)
+++ trunk/specifications/sbml-level-3/version-1/spatial/specification/spatial-v1-sbml-l3v1-rel0.89.pdf 2014-11-27 01:45:42 UTC (rev 21764)
Property changes on: trunk/specifications/sbml-level-3/version-1/spatial/specification/spatial-v1-sbml-l3v1-rel0.89.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Modified: trunk/specifications/sbml-level-3/version-1/spatial/specification/syntax.tex
===================================================================
--- trunk/specifications/sbml-level-3/version-1/spatial/specification/syntax.tex 2014-11-26 15:00:47 UTC (rev 21763)
+++ trunk/specifications/sbml-level-3/version-1/spatial/specification/syntax.tex 2014-11-27 01:45:42 UTC (rev 21764)
@@ -81,12 +81,10 @@
%
%The \primtype{CoordinateKind} primitive data type is used in the definition of the \CoordinateComponent class. The type \primtype{CoordinateKind} is derived from type \primtype{string} and its values are restricted to being one of the following possibilities: \val{normal}, \val{symmetrical}, and \val{fixed}. Attributes of type \primtype{CoordinateKind} cannot take on any other values. The meaning of these values is discussed in the context of the \CoordinateComponent class's definition in \sec{CoordinateComponent-class}.
-\begin{blockChanged}
\subsubsection{Type \fixttspace\primtypeNC{DataKind}}
\label{primtype-DataKind}
-The \primtype{DataKind} primitive data type is used in the definition of the \SampledField class. \primtype{DataKind} is derived from type \primtype{string} and its values are restricted to being one of the following possibilities: \val{double}, \val{float}, \val{uint8}, \val{uint16}, and \val{uint32}. Attributes of type \primtype{DataKind} cannot take on any other values. The meaning of these values is discussed in the context of the \SampledField class's definition in \sec{SampledField-class}.
-\end{blockChanged}
+The \primtype{DataKind} primitive data type is used in the definition of the \SampledField \changed{and \ParametricGeometry classes}. \primtype{DataKind} is derived from type \primtype{string} and its values are restricted to being one of the following possibilities: \val{double}, \val{float}, \val{uint8}, \val{uint16}, and \val{uint32}. Attributes of type \primtype{DataKind} cannot take on any other values. The meaning of these values is discussed in the context of the \changed{classes' definitions in \sec{SampledField-class} and \sec{ParametricGeometry-class}}.
\subsubsection{Type \fixttspace\primtypeNC{DiffusionKind}}
@@ -95,12 +93,10 @@
The \primtype{DiffusionKind} primitive data type is used in the definition of the \DiffusionCoefficient class. \primtype{DiffusionKind} is derived from type \primtype{string} and its values are restricted to being one of the following possibilities: \val{isotropic}, \val{anisotropic}, and \val{tensor}. Attributes of type \primtype{DiffusionKind} cannot take on any other values. The meaning of these values is discussed in the context of the \DiffusionCoefficient class's definition in \sec{DiffusionCoefficient-class}.
-\begin{blockChanged}
\subsubsection{Type \fixttspace\primtypeNC{CompressionKind}}
\label{primtype-CompressionKind}
-The \primtype{CompressionKind} primitive data type is used in the definition of the \SampledField class. \primtype{CompressionKind} is derived from type \primtype{string} and its values are restricted to being one of the following possibilities: \val{uncompressed} and \val{deflated}. Attributes of type \primtype{CompressionKind} cannot take on any other values. The meaning of these values is discussed in the context of the \SampledField class's definition in \sec{SampledField-class}.
-\end{blockChanged}
+The \primtype{CompressionKind} primitive data type is used in the definition of the \SampledField \changed{and \ParametricObject classes}. \primtype{CompressionKind} is derived from type \primtype{string} and its values are restricted to being one of the following possibilities: \val{uncompressed}, \val{deflated}\changed{, and \val{base64}}. Attributes of type \primtype{CompressionKind} cannot take on any other values. The meaning of these values is discussed in the context of the classes' definitions in \sec{SampledField-class} and \sec{ParametricObject-class}.
\subsubsection{Type \fixttspace\primtypeNC{FunctionKind}}
@@ -115,28 +111,22 @@
The \primtype{GeometryKind} primitive data type is used in the definition of the \Geometry class. \primtype{GeometryKind} is derived from type \primtype{string} and its values are restricted to being the single possibility \val{cartesian}. Other \primtype{GeometryKind} types are held in reserve for future versions of this specification, and may include \val{cylindrical}, \val{spherical}, and \val{polar}. Attributes of type \primtype{GeometryKind} cannot take on any other values. The meaning of these values is discussed in the context of the \Geometry class's definition in \sec{Geometry-class}.
-\begin{blockChanged}
\subsubsection{Type \fixttspace\primtypeNC{InterpolationKind}}
\label{primtype-InterpolationKind}
The \primtype{InterpolationKind} primitive data type is used in the definition of the \SampledField class. \primtype{InterpolationKind} is derived from type \primtype{string} and its values are restricted to being one of the following possibilities: \val{nearestNeighbor} and \val{linear}. Attributes of type \primtype{InterpolationKind} cannot take on any other values. The meaning of these values is discussed in the context of the \SampledField class's definition in \sec{SampledField-class}.
-\end{blockChanged}
-\begin{blockChanged}
\subsubsection{Type \fixttspace\primtypeNC{PolygonKind}}
\label{primtype-PolygonKind}
The \primtype{PolygonKind} primitive data type is used in the definition of the \ParametricObject class. \primtype{PolygonKind} is derived from type \primtype{string} and its values are restricted to being one of the following possibilities: \val{triangle} and \val{quadrilateral}. Attributes of type \primtype{PolygonKind} cannot take on any other values. The meaning of these values is discussed in the context of the \ParametricObject class's definition in \sec{ParametricObject-class}.
-\end{blockChanged}
-\begin{blockChanged}
\subsubsection{Type \fixttspace\primtypeNC{PrimitiveKind}}
\label{primtype-PrimitiveKind}
-The \primtype{PrimitiveKind} primitive data type is used in the definition of the \CSGPrimitive class. \primtype{InterpolationKind} is derived from type \primtype{string} and its values are restricted to being one of the following possibilities: \val{sphere}, \val{cube}, \val{cylinder}, \val{cone}, \val{circle}, \val{square}, and \val{rightTriangle}. Attributes of type \primtype{PrimitiveKind} cannot take on any other values. The meaning of these values is discussed in the context of the \CSGPrimitive class's definition in \sec{SampledField-class}.
-\end{blockChanged}
+The \primtype{PrimitiveKind} primitive data type is used in the definition of the \CSGPrimitive class. \primtype{PrimitiveKind} is derived from type \primtype{string} and its values are restricted to being one of the following possibilities: \val{sphere}, \val{cube}, \val{cylinder}, \val{cone}, \val{circle}, \val{square}, and \val{rightTriangle}. Attributes of type \primtype{PrimitiveKind} cannot take on any other values. The meaning of these values is discussed in the context of the \CSGPrimitive class's definition in \sec{SampledField-class}.
\subsubsection{Type \fixttspace\primtypeNC{SetOperation}}
@@ -150,12 +140,10 @@
The \primtype{doubleArray} primitive data type is a space-delimited list of \primtype{double} values in a single string.
-\begin{blockChanged}
\subsubsection{Type \fixttspace\primtypeNC{arrayData}}
\label{primtype-arrayData}
-The \primtype{arrayData} primitive data type is used in the definition of the \SampledField class. It consists of a possibly-compressed whitespace-delimited list of numerical values in a single string. The meaning and possible content of these values is discussed in the context of the \SampledField class's definition in \sec{SampledField-class}.
-\end{blockChanged}
+The \primtype{arrayData} primitive data type is used in the definition of the \SampledField \changed{and \ParametricObject classes}. It consists of a possibly-compressed whitespace-and-semicolon-delimited list of numerical values in a single string. The meaning and possible content of these values is discussed in the context of the \changed{classes' definitions in \sec{SampledField-class} and \sec{ParametricGeometry-class}}.
%\clearpage
@@ -206,9 +194,9 @@
\subsubsection{The \token{unitSize} attribute}
The \token{unitSize} attribute is of type \primtype{double} and represents the relative size of the \Compartment with respect to the size of the \Domains to which they are mapped. Thus for any infinitesimal subset of the \Domain with size S, there exists an amount of Compartment$_{\text{i}}$ of size (S*unitSize$_{\text{i}}$) for i=1..N compartments mapped to that \DomainType. For example, a 3D \Compartment (and \DomainType) which is mapped to a 3D \DomainType has a \token{unitSize} which is a volume fraction of dimensionless unit. The total set of all such volume fractions mapped to a particular \DomainType will typically sum to one.
-If the \token{spatialDimensions} attribute of the parent \Compartment is different than the \token{\changed{spatialDimensions}} attribute of referenced \DomainType, the \token{unitSize} attribute is a conversion factor between the two. The most common example of this would be a 2D \Compartment being mapped to a 3D \DomainType, such as an ER-membrane being mapped to a volumetric cell interior. In this case, the \token{unitSize} is a surface-to-volume ratio.
+If the \token{spatialDimensions} attribute of the parent \Compartment is different than the \token{spatialDimensions} attribute of referenced \DomainType, the \token{unitSize} attribute is a conversion factor between the two. The most common example of this would be a 2D \Compartment being mapped to a 3D \DomainType, such as an ER-membrane being mapped to a volumetric cell interior. In this case, the \token{unitSize} is a surface-to-volume ratio.
-If connected to a \Parameter via a \SpatialSymbolReference, an \InitialAssignment may override the value of the \token{unitSize} attribute. It is theoretically possible to have this value change in time through the use of a \Rule or \Event, but some (if not all) software tools may not support this setup. If the value is set to change, and the dimensionality of the parent \Compartment and referenced \DomainType is the same, the other \CompartmentMapping elements for the same \DomainType will typically change in concert, so that they continue to sum to one. \changed{Also note that \Species amounts are preserved in SBML, so a changing \token{unitSize} may induce a corresponding change in any correlated \Species concentration.}
+If connected to a \Parameter via a \SpatialSymbolReference, an \InitialAssignment may override the value of the \token{unitSize} attribute. It is theoretically possible to have this value change in time through the use of a \Rule or \Event, but some (if not all) software tools may not support this setup. If the value is set to change, and the dimensionality of the parent \Compartment and referenced \DomainType is the same, the other \CompartmentMapping elements for the same \DomainType will typically change in concert, so that they continue to sum to one. Also note that \Species amounts are preserved in SBML, so a changing \token{unitSize} may induce a corresponding change in any correlated \Species concentration.
Any bound \Parameter's units should be equivalent to the units of the parent \Compartment divided by the units of the referenced \DomainType.
@@ -267,10 +255,8 @@
\subsubsection{The \token{variable} attribute}
The required \token{variable} attribute of \DiffusionCoefficient is of type \primtype{SIdRef} and is the \primtype{SId} of the \Species or \Parameter in the model whose diffusion coefficient is being set.
-\begin{blockChanged}
\subsubsection{The \token{type} and \token{coordinateReference} attributes}
-The required \token{type} attribute of \DiffusionCoefficient is of type \primtype{DiffusionKind} and indicates whether the diffusion coefficient is \val{isotropic} (i.e. applies equally in all dimensions/directions), \val{anisotropic} (i.e. applies only for a single coordinate), or \val{tensor} (i.e. applies only for a particular pair of coordinates). \changed{Coefficients of type \val{isotropic} may not have any \token{coordinateReference} attributes defined, since diffusion is defined for all axes. Coefficients of type \val{anisotropic} must define the \token{coordinateReference1} attribute and not the \token{coordinateReference2} attribute, and applies in the direction of that axis. Coefficients of type \val{tensor} must define both the attributes \token{coordinateReference1} and \token{coordinateReference2}, defining diffusion in relation to the direction due to a gradient in the diagonal term of the diffusion tensor for the two coordinates. In no case may \token{coordinateReference2} be defined but not \token{coordinateReference1}.}
-\end{blockChanged}
+The required \token{type} attribute of \DiffusionCoefficient is of type \primtype{DiffusionKind} and indicates whether the diffusion coefficient is \val{isotropic} (i.e. applies equally in all dimensions/directions), \val{anisotropic} (i.e. applies only for a single coordinate), or \val{tensor} (i.e. applies only for a particular pair of coordinates). Coefficients of type \val{isotropic} may not have any \token{coordinateReference} attributes defined, since diffusion is defined for all axes. Coefficients of type \val{anisotropic} must define the \token{coordinateReference1} attribute and not the \token{coordinateReference2} attribute, and applies in the direction of that axis. Coefficients of type \val{tensor} must define both the attributes \token{coordinateReference1} and \token{coordinateReference2}, defining diffusion in relation to the direction due to a gradient in the diagonal term of the diffusion tensor for the two coordinates. In no case may \token{coordinateReference2} be defined but not \token{coordinateReference1}.
\subsubsection{\DiffusionCoefficient uniqueness}
Only one \DiffusionCoefficient may be defined per \Species per axis or pair of valid axes in the \Compartment in which it resides. Since isotropic diffusion is defined for all axes at once, this means that if an isotropic \DiffusionCoefficient is defined for a \Species, it may have no other diffusuion coefficients.
@@ -303,11 +289,9 @@
%For spherical Geometries, there will again be one boundary for the maximum of the radius, and another boundary for the minumum of the radius if that minimum is not \val{0}. For the spherical azimuth and elevation, there will be either two boundaries each corresponding to the minimum and maximum values, or no boundaries, for each minimum 0$^\circ$ and maximum 360$^\circ$ pair.
-\begin{blockChanged}
For internal boundaries, one may either define a \BoundaryCondition for a \Species at that boundary, or one may define one or more transport reactions that describe how the physical entities that \Species represent are moved (or converted) from one side of the boundary to the other. One may not define both a \BoundaryCondition and a \Reaction that describes the same phenomenon, as this would result in the equivalent of an overdetermined system, not dissimilar from the reason that the change in a \Species may not be defined by both a \Reaction and a \RateRule. A \Species set \token{boundaryCondition} = \val{true} may have a defined \BoundaryCondition and also appear in a transport \Reaction, but its change in time and space will only be determined by the \BoundaryCondition.
If neither a \BoundaryCondition nor a \Reaction is defined for a particular \Species/boundary pair, the flux of that \Species at that boundary is zero.
-\end{blockChanged}
The \Parameter's value is set either through the \token{value} attribute or an \InitialAssignment. If the boundary condition changes in time, it can be set with a \Rule or \Event. If set, the \Parameter unit must be equal to the appropriate unit for its \token{type} (see below). Only one \BoundaryCondition may be defined per \Species per boundary (regardless of type).
@@ -316,7 +300,7 @@
The \token{variable} attribute of \BoundaryCondition is of type \primtype{SIdRef} and is the SId of the \Species or \Parameter in the model whose boundary condition is being set.
\subsubsection{The \token{type} attribute}
-The \token{type} attribute is of type \primtype{BoundaryConditionKind} and indicates the type of boundary condition. The boundary condition types come in three groups: for Neumann boundaries, \val{Neumann} (the inward normal flux) is used. For Dirichlet boundaries, \val{Dirichlet} (the value) is used. For Robin boundaries, three different Parameters must be defined, with \BoundaryCondition elements of type \val{Robin\_valueCoefficient}, \val{Robin\_inwardNormalGradientCoefficient}, and \val{Robin\_sum}.
+The \token{type} attribute is of type \primtype{BoundaryConditionKind} and indicates the type of boundary condition. The boundary condition types come in three groups: for Neumann boundaries, \val{Neumann} (the inward normal flux) is used. For Dirichlet boundaries, \val{Dirichlet} (the value) is used. For Robin boundaries, three different Parameters must be defined, with \BoundaryCondition elements of type \val{Robin\_inwardNormalGradientCoefficient}, \val{Robin\_valueCoefficient}, and \val{Robin\_sum}.
The unit of the boundary condition is determined by the type, and the unit for density and velocity. For \val{Dirichlet}, the unit would be the unit of concentration. For \val{Neumann}, the unit would be concentration*length/time. For Robin boundaries, for a variable \val{u} with an inward pointing normal vector \val{n}, Robin value coefficient \val{a}, Robin inward normal gradient coefficient \val{b}, and Robin sum \val{g}, the condition is defined by the equation \val{a*u + b*inner\_product(grad(u),n) = g}, with appropriate units. The suggested set of units that satisfy this condition is to have units of nondimensional for \val{a}, 1/length for \val{b}, and the same units as the referenced \token{variable} for \val{c}.
@@ -340,11 +324,9 @@
\subsubsection{The \token{isLocal} attribute}
The \token{isLocal} attribute for a \Reaction is of type \primtype{Boolean}. The attribute is set to true if the reaction is to be considered a local description of the reaction in terms of concentration/time defined at each point in space rather than substance/time over an entire \Compartment or "pool". Note that this means that the units of the \KineticLaw are different depending on whether the \Reaction is local or not.
-\begin{blockChanged}
If a \Reaction is defined to be a local (having an \token{isLocal} value of \val{true}), the value of the \token{compartment} attribute of the \Reaction must be defined. This is because the interpretation of the \Reaction is very different if the reaction takes place at the boundary of the \Compartment of the \Species (where the reaction rate units are flux densities) than if it takes place within the interior of that \Compartment (where the reaction rate units are concentration/time define throughout the volume). The first will give you gradients in the solution, while the other will not.
If the referenced \Species come from multiple compartments, the \token{compartment} of the \Reaction must be a \Compartment that makes physical sense for the individual \Species to meet.
-\end{blockChanged}
\subsection{The \class{Geometry} class}
\label{Geometry-class}
@@ -368,7 +350,7 @@
\end{figure}
\subsubsection{The \token{id} attribute}
-The \token{id} attribute is of type \primtype{SpId}, uniquely identifies the \Geometry element, and is optional. \changed{It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.}
+The \token{id} attribute is of type \primtype{SpId}, uniquely identifies the \Geometry element, and is optional. It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.
\subsubsection{The \token{coordinateSystem} attribute}
The \token{coordinateSystem} attribute is a required attribute and is of type \primtype{GeometryKind}. It represents the coordinate system used by the \Geometry. A value of \val{cartesian} indicates that the geometry is a cartesian coordinate system, with the coordinate components corresponding to the x, y, and z components of that system (which could be 1-, 2-, or 3-dimensional). This is the only coordinate system defined in this version of the specification--in the future, if necessary, \val{cylendrical}, \val{spherical}, and \val{polar} may be added as possibilities, along with n-dimensional cartesian modeling, should there be interest in the modeling community to exchange these types of models.
@@ -473,10 +455,12 @@
As a derived quantity, if connected to a \Parameter via a \SpatialSymbolReference, this value may \emph{not} be overridden by an \InitialAssignment, nor by the use of a \Rule or \Event. Its value is always connected to the size of its component \Domains instead. The units of a \DomainType are the units of the corresponding base units of the SBML \Model for length (for one-dimensional domains), area (for two-dimensional domains), or volume (for three-dimensional domains). It is required to define the corresponding base units for every \DomainType in the \Model.
-\subsubsection{The \token{\changed{spatialDimensions}} attribute}
-The \token{\changed{spatialDimensions}} attribute of the \DomainType is of type \primtype{int} and can take on a value of 0, 1, 2, or 3. The spatial dimension is specified for a \DomainType, rather than being repeated for each \Domain that is represented by the \DomainType.
+\subsubsection{The \token{spatialDimensions} attribute}
+The \token{spatialDimensions} attribute of the \DomainType is of type \primtype{int} and can take on a value of 0, 1, 2, or 3. The spatial dimension is specified for a \DomainType, rather than being repeated for each \Domain that is represented by the \DomainType.
+\changed{If the \token{spatialDimensions} attribute of a \DomainType is a lower dimensionality than the \Geometry to which it refers (via the \Domain), it is considered to describe the surface of that \Geometry in the 3D case, or the perimeter of that \Geometry in the 2D case. Since there is no defined perimeter of a 3D object, it is illegal to have a \DomainType with a \token{spatialDimensions} of \val{1} where the corresponding \Geometry is three-dimensional.}
+
\subsection{The \class{Domain} class}
\label{Domain-class}
\label{ListOfInteriorPoints-class}
@@ -526,7 +510,7 @@
\end{figure}
\subsubsection{The \token{id} attribute}
-This attribute identifies an \AdjacentDomains object. The attribute is of type \primtype{SpId}. \changed{It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.}
+This attribute identifies an \AdjacentDomains object. The attribute is of type \primtype{SpId}. It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.
\subsubsection{The \token{domain1} and \token{domain2} attributes}
The \token{domain1} and \token{domain2} attributes, of type \primtype{SpIdRef}, are required attributes. They are the \primtype{SpId}'s of two domains that touch each other (spatially adjacent). These are typically surface-volume contacts.
@@ -534,7 +518,7 @@
\subsection{The \class{GeometryDefinition} class}
\label{GeometryDefinition-class}
-A \Geometry can specify a list of \GeometryDefinitions. The \GeometryDefinition is an abstract class that is the general term for the container which defines the concrete geometric constructs represented by the \Geometry. Four types of \GeometryDefinitions have been identified - \AnalyticGeometry, \SampledFieldGeometry, \ParametricGeometry, \CSGeometry (Constructed Solid Geometry) - and are elaborated in the following sections. The definition of the \GeometryDefinition element is displayed in \fig{GeometryDefinition-uml}. The spatial dimension of the \GeometryDefinition must match the \token{\changed{spatialDimensions}} of the \DomainType defined for the associated \Domain.
+A \Geometry can specify a list of \GeometryDefinitions. The \GeometryDefinition is an abstract class that is the general term for the container which defines the concrete geometric constructs represented by the \Geometry. Four types of \GeometryDefinitions have been identified - \AnalyticGeometry, \SampledFieldGeometry, \ParametricGeometry, \CSGeometry (Constructed Solid Geometry) - and are elaborated in the following sections. The definition of the \GeometryDefinition element is displayed in \fig{GeometryDefinition-uml}. The spatial dimension of the \GeometryDefinition must match the \token{spatialDimensions} of the \DomainType defined for the associated \Domain.
\begin{figure}[ht]
\includegraphics{figs/GeometryDefinition-uml}
@@ -543,12 +527,10 @@
\end{figure}
\subsubsection{The \token{id} attribute}
-The \token{id} attribute is common to all the \GeometryDefinition types and is used to uniquely identify the \GeometryDefinition. The attribute is of type \primtype{SpId}. \changed{It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.}
+The \token{id} attribute is common to all the \GeometryDefinition types and is used to uniquely identify the \GeometryDefinition. The attribute is of type \primtype{SpId}. It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.
-\begin{blockChanged}
\subsubsection{The \token{isActive} attribute}
The \token{isActive} attribute that is common to all the \GeometryDefinition types is used to identify the \GeometryDefinition that is considered the active \GeometryDefinition for the document. When multiple \GeometryDefinition elements define the same underlying geometry, each may set their \token{isActive} attribute to \val{true}. At least one \GeometryDefinition in a \Model must have an \token{isActive} attribute of \val{true}, and any other \GeometryDefinition that does not describe that same underlying physical geometry must have an \token{isActive} value of \val{false}.
-\end{blockChanged}
\subsection{The \class{AnalyticGeometry} class}
\label{AnalyticGeometry-class}
@@ -569,7 +551,7 @@
The \AnalyticVolume is used to specify the analytic expression of a volumetric (3-dimensional) domain. The analytic expression for the \AnalyticVolume is defined in the Math element.
\subsubsection{The \token{id} attribute}
-The \token{id} attribute uniquely identifies the \AnalyticVolume. The attribute is required and is of type \primtype{SpId}. \changed{It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.}
+The \token{id} attribute uniquely identifies the \AnalyticVolume. The attribute is required and is of type \primtype{SpId}. It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.
\subsubsection{The \token{functionType} attribute}
The \token{functionType} attribute is of type \primtype{FunctionKind} and is currently limited to just \val{layered} (a possibility for future versions of the specification is to allow the value \val{R-function}). A \val{layered} function type implies that the Math child element contains an inequality in the spatial dimensions (e.g. x,y,z) such that evaluation to \val{true} indicates that the point (x,y,z) is within that shape, and "false" indicates that it is not covered by that shape.
@@ -581,15 +563,13 @@
The \token{domainType} attribute of type \primtype{SpIdRef} is a required attribute. It represents the \primtype{SpId} of the \DomainType of the \Domain that is represented by this \AnalyticVolume.
\subsubsection{The \token{ordinal} attribute}
-The \token{ordinal} attribute is of type \primtype{int}, \changed{and is required}. It is used to represent the order of the \AnalyticVolume. The \token{ordinal} is useful while reconstructing the geometry in the specific software tool - it represents the order in which the \AnalyticVolumes representing geometric domains have to be evaluated.
+The \token{ordinal} attribute is of type \primtype{int}, and is required. It is used to represent the order of the \AnalyticVolume. The \token{ordinal} is useful while reconstructing the geometry in the specific software tool - it represents the order in which the \AnalyticVolumes representing geometric domains have to be evaluated.
Rather than struggle with the task of preventing overlapping regions of space from different \AnalyticVolumes, the \AnalyticVolumes are to be considered to be evaluated in the reverse order of their ordinals. In this way, any \AnalyticVolumes that have already been processed will cover those with a smaller ordinal, thus resolving any ambiguities and removing the constraint that all \AnalyticVolumes be disjoint and cover the entire geometric domain. The \AnalyticVolume with \token{ordinal} 0 can be the "background" layer (typically the extracellular space).
-No two \AnalyticVolume elements \changed{should} have the same \token{ordinal} value, even if they should not overlap, because some tools may not calculate the geometries to the same level of precision as other tools, and may end up with overlap due to rounding errors, and will still need to resolve the ambiguity for their own purposes. \changed{If a software tool discovers two overlapping \AnalyticVolume elements with the same \token{ordinal} value, it may resolve the situation however it sees fit.}
+No two \AnalyticVolume elements should have the same \token{ordinal} value, even if they should not overlap, because some tools may not calculate the geometries to the same level of precision as other tools, and may end up with overlap due to rounding errors, and will still need to resolve the ambiguity for their own purposes. If a software tool discovers two overlapping \AnalyticVolume elements with the same \token{ordinal} value, it may resolve the situation however it sees fit.
-{\color{red} Lucian: \notice To match the \CSGPrimitive class, relaxed the 'no two may be equal' rule to be a suggestion.}
-
\subsection{The \class{Math} class}
\label{Math-class}
The Math element is a required element for an \AnalyticVolume. The Math element contains a MathML expression that defines the analytic expression for the \AnalyticVolume referencing the coordinate components that are specified in the \ListOfCoordinateComponents in the \Geometry, according to the \token{functionType}.
@@ -616,7 +596,7 @@
A \SampledVolume represents an interval of the sampled field that constitutes one or more contiguous regions. A \SampledVolume is defined for each volumetric (3-dimensional) \Domain in the \Geometry. It has the following attributes.
\subsubsection{The \token{id} attribute}
-The \token{id} attribute identifies a \SampledVolume object. The attribute is of type \primtype{SpId} and is required when specifying a \SampledVolume. \changed{It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.}
+The \token{id} attribute identifies a \SampledVolume object. The attribute is of type \primtype{SpId} and is required when specifying a \SampledVolume. It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.
\subsubsection{The \token{domainType} attribute}
The required \token{domainType} attribute is of type \primtype{SpIdRef}. It is the \primtype{SpId} of the \DomainType that represents this class of anatomical features. If there are more than one contiguous regions, then more than one domain will be defined corresponding to each \SampledVolume.
@@ -648,27 +628,23 @@
\subsection{The \class{CSGObject} class}
\label{CSGObject-class}
-Each \CSGObject is a scene graph representing a particular geometric object using constructed solid geometry. A node in a tree (scene graph) is made up of \CSGPrimitives, \CSGSetOperators, and \CSGTransformations. Note that the \CSGPrimitives are always leaves in this tree. The \CSGObject is analogous to an \AnalyticVolume element in the sense that it is a constructed geometry (from primitives) used to specify a volumetric (3-dimensional) domain. The \CSGObject element has three attributes : \token{id}, \token{domain\changed{Type}} and \token{ordinal}. The definition of the \CSGObject is completed by defining a \CSGNode which is the root of the \CSGObject scene graph.
+Each \CSGObject is a scene graph representing a particular geometric object using constructed solid geometry. A node in a tree (scene graph) is made up of \CSGPrimitives, \CSGSetOperators, and \CSGTransformations. Note that the \CSGPrimitives are always leaves in this tree. The \CSGObject is analogous to an \AnalyticVolume element in the sense that it is a constructed geometry (from primitives) used to specify a volumetric (3-dimensional) domain. The \CSGObject element has three attributes : \token{id}, \token{domainType} and \token{ordinal}. The definition of the \CSGObject is completed by defining a \CSGNode which is the root of the \CSGObject scene graph.
\subsubsection{The \token{id} attribute}
-The \token{id} attribute uniquely identifies the \CSGObject element. The attribute is required and is of type \primtype{SpId}. \changed{It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.}
+The \token{id} attribute uniquely identifies the \CSGObject element. The attribute is required and is of type \primtype{SpId}. It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.
-\subsubsection{The \token{domain\changed{Type}} attribute}
-The \token{domain\changed{Type}} attribute is of type \primtype{SpIdRef} and is a required attribute. It is a reference to the \token{id} of the \DomainType that this \CSGObject represents.
+\subsubsection{The \token{domainType} attribute}
+The \token{domainType} attribute is of type \primtype{SpIdRef} and is a required attribute. It is a reference to the \token{id} of the \DomainType that this \CSGObject represents.
All \InteriorPoints of the corresponding \DomainType must be points inside the geometry this \CSGObject describes.
-{\color{red} Lucian: \notice Jim clarified that all of these attributes are supposed to be domainType references, not domain references. In this case, it was always 'domainType' in the UML.}
-
\subsubsection{The \token{ordinal} attribute}
The \token{ordinal} attribute is of type \primtype{int}. It is used to represent the order of the \CSGObject. The \token{ordinal} is useful while reconstructing the geometry in the specific software tool - it represents the order in which the \CSGObjects representing geometric domains have to be placed.
-\changed{No two \CSGObject elements should have the same \token{ordinal} value, even if they should not overlap, because some tools may not calculate the geometries to the same level of precision as other tools, and may end up with overlap due to rounding errors, and will still need to resolve the ambiguity for their own purposes. If a software tool discovers two overlapping \CSGObject elements with the same \token{ordinal} value, it may resolve the situation however it sees fit.}
+No two \CSGObject elements should have the same \token{ordinal} value, even if they should not overlap, because some tools may not calculate the geometries to the same level of precision as other tools, and may end up with overlap due to rounding errors, and will still need to resolve the ambiguity for their own purposes. If a software tool discovers two overlapping \CSGObject elements with the same \token{ordinal} value, it may resolve the situation however it sees fit.
-{\color{red} Lucian: \notice Made this required, but relaxed the 'no two may be equal' rule to be a suggestion.}
-
\subsubsection{The [\token{csgNode}] child}
The child [\token{csgNode}] element represents the geometry that is to be linked to the \token{domainType} of the \CSGObject. Note that the child of the \CSGObject element is not called \val{csgNode} but rather takes the name of the derived class, decapitalized. Thus, a \CSGObject may have a \token{csgPrimitive}, \token{csgPseudoPrimitive}, \token{csgSetOperator}, \token{csgTranslation}, \token{csgRotation}, \token{csgScale}, or \token{csgHomogeneousTransformation} child.
@@ -689,10 +665,17 @@
\end{figure}
\subsubsection{The \token{id} attribute}
-The \token{id} attribute uniquely identifies the \CSGNode element. The attribute is required and is of type \primtype{SpId}. \changed{It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.}
+The \token{id} attribute uniquely identifies the \CSGNode element. The attribute is \changed{optional} and is of type \primtype{SpId}. It has no mathematical meaning, and cannot be connected to a \Parameter via a \SpatialSymbolReference element.
-\begin{blockChanged}
+\subsection{The \class{CSGPrimitive} class}
+\label{CSGPrimitive-class}
+\CSGPrimitive element represents the primitive geometric shapes that can be represented by the \CSGeometry. These shapes are defined in \tab{primitive-definitions} with a predefined orientation and fitting within the unit cube (+/- 1 in x, y, and z) or unit square (+/- 1 in x and y). This element has one required attribute : \token{primitiveType} of type \primtype{PrimitiveKind}.
+
+\subsubsection{The \token{primitiveType} attribute}
+The \token{primitiveType} attribute is a required attribute that is of type \primtype{PrimitiveKind}. It represents one of the predefined primitive shapes. The meaning and definition of those types is listed in \tab{primitive-definitions}.
+
+
\begin{table}[thb]
\begin{edtable}{tabular}{>{\centering\arraybackslash}m{0.9in} >{\centering\arraybackslash}m{0.7in} >{\raggedright\arraybackslash}m{4.4in}}
%\begin{edtable}{tabular}{p{0.9in}p{0.7in}p{4.4in}}
@@ -708,23 +691,12 @@
\token{rightTriangle} & 2 & A triangle with vertexes at (-1,-1), (-1,1), and (1,-1).\\
\bottomrule
\end{edtable}
- \caption{Definitios of the possible values of the \token{primitiveType} attribute of the \CSGPrimitive class.
+ \caption{Definitions of the possible values of the \token{primitiveType} attribute of the \CSGPrimitive class.
}
\label{primitive-definitions}
\end{table}
-\end{blockChanged}
-{\color{red} Lucian: \notice Does this work?}
-
-\subsection{The \class{CSGPrimitive} class}
-\label{CSGPrimitive-class}
-\CSGPrimitive element represents the primitive geometric shapes that can be represented by the \CSGeometry. These shapes are defined in \tab{primitive-definitions} with a predefined orientation and fitting within the unit cube (+/- 1 in x, y, and z) or unit square (+/- 1 in x and y). This element has one required attribute : \token{primitiveType} of type \primtype{PrimitiveKind}.
-
-\subsubsection{The \token{primitiveType} attribute}
-The \token{primitiveType} attribute is a required attribute that is of type \primtype{PrimitiveKind}. It represents one of the predefined primitive shapes. \changed{The meaning and definition of those types is listed in \tab{primitive-definitions}.}
-
-
\subsection{The \class{CSGPseudoPrimitive} class}
\label{CSGPseudoPrimitive-class}
\CSGPseudoPrimitive element is used to reference a pre-defined \CSGObject object while defining a \CSGObject (geometric domain). This allows the re-use of one constructed \CSGObject in another. It has one attribute of type \primtype{SpIdRef}.
@@ -738,16 +710,14 @@
The \CSGSetOperator element represents the set operations (union, intersection, difference) that can be performed on a set of primitive geometric shapes (\CSGPrimitives) or on a set of \CSGNodes (a transformation or set operation on one or a set of \CSGPrimitives). This element has one attribute of type \primtype{string}. It also contains a required child \ListOfCSGNodes that represents the set of nodes on which the set operation is performed.
\subsubsection{The \token{operationType} attribute}
-The \token{operationType} attribute is of type \primtype{SetOperation} and represents an operation that can be performed on a set of \CSGNodes. The possible values that the \token{operationType} attribute can take are \val{union}, \val{intersection}, \changed{or \val{relativeComplement}. The values \val{union} and \val{intersection} are n-ary, meaning they are defined for any number of child nodes of this \CSGSetOperator. The intersection or union of the empty set (zero children) is defined as the empty set, and the intersection or union of a single child is defined as that child. The union of multiple sets is defined as including any element that appears in any of those component sets, and the intersection of multiple sets is defined as including only those elements that appear in all of the component sets.}
+The \token{operationType} attribute is of type \primtype{SetOperation} and represents an operation that can be performed on a set of \CSGNodes. The possible values that the \token{operationType} attribute can take are \val{union}, \val{intersection}, or \val{relativeComplement}. The values \val{union} and \val{intersection} are n-ary, meaning they are defined for any number of child nodes of this \CSGSetOperator. The intersection or union of the empty set (zero children) is defined as the empty set, and the intersection or union of a single child is defined as that child. The union of multiple sets is defined as including any element that appears in any of those component sets, and the intersection of multiple sets is defined as including only those elements that appear in all of the component sets.
-\begin{blockChanged}
The value \val{relativeComplement} is binary, meaning that it must have exactly two children. Its meaning is defined according to the \token{complement} attributes, below.
\subsubsection{The \token{complementA} and \token{complementB} attributes}
-The \token{complement} attributes are of type \primtype{SpIdRef}. If the \token{operationType} of the \CSGSetOperator is \val{relativeComplement}, they both must be set to indicate the order in which the complement is to be carried out, and must refer, respectively, to the two \token{csgNode} children of this \CSGSetOperator. The relative complement of the children (and thus the meaning of this node) is defined as the set of elements in \token{complementB}, but not in \token{complementA}.
+The \token{complement} attributes are of type \primtype{SpIdRef}. If the \token{operationType} of the \CSGSetOperator has the value \val{relativeComplement}, they both must be set to indicate the order in which the complement is to be carried out, and must refer, respectively, to the two \token{csgNode} children of this \CSGSetOperator. The relative complement of the children (and thus the meaning of this node) is defined as the set of elements in \token{complementB}, but not in \token{complementA}.
If the \token{operationType} of the \CSGSetOperator is not \val{relativeComplement}, neither \token{complement} attribute may be set.
-\end{blockChanged}
@@ -770,8 +740,6 @@
\label{TransformationComponent-uml}
\end{figure}
-{\color{red} Lucian: \notice 'transformationType' attribute removed (it was never in the UML).}
-
\subsubsection{The \token{csgNode} child}
The child \token{csgNode} element represents the geometry that is to be transformed by the \CSGTransformation element. Note that this child is not called \token{csgNode} but rather takes the name of the derived class, decapitalized. Thus, it may be called \token{csgPrimitive}, \token{csgPseudoPrimitive}, \token{csgSetOperator}, \token{csgTranslation}, \token{csgRotation}, \token{csgScale}, or \token{csgHomogeneousTransformation}.
@@ -782,13 +750,13 @@
The \CSGTranslation element represents a translation transformation on a \CSGNode (a transformation or set operation on one or a set of \CSGPrimitives) or a \CSGPrimitive along the axes defined in the \Geometry. This element has 3 attributes:
\subsubsection{The \token{translateX} attribute}
-The \token{translateX} attribute is of type \primtype{double}. It represents the translation of the \CSGNode along the x-axis (the \CoordinateComponent with the \token{type} of \val{cartesianX}).
+The \token{translateX} \changed{required} attribute is of type \primtype{double}. It represents the translation of the \CSGNode along the x-axis (the \CoordinateComponent with the \token{type} of \val{cartesianX}).
\subsubsection{The \token{translateY} attribute}
-The \token{translateY} attribute is of type \primtype{double}. It represents the translation of the \CSGNode along the y-axis (the \CoordinateComponent with the \token{type} of \val{cartesianY}).
+The \token{translateY} attribute is of type \primtype{double}. It represents the translation of the \CSGNode along the y-axis (the \CoordinateComponent with the \token{type} of \val{cartesianY}). \changed{This attribute must not be defined if no such \CoordinateComponent is present in the parent \Geometry, and is required otherwise.}
\subsubsection{The \token{translateZ} attribute}
-The \token{translateZ} attribute is of type \primtype{double}. It represents the translation of the \CSGNode along the z-axis (the \CoordinateComponent with the \token{type} of \val{cartesianZ}).
+The \token{translateZ} attribute is of type \primtype{double}. It represents the translation of the \CSGNode along the z-axis (the \CoordinateComponent with the \token{type} of \val{cartesianZ}). \changed{This attribute must not be defined if no such \CoordinateComponent is present in the parent \Geometry, and is required otherwise.}
%Note: we'll have to change the above if we ever re-introduce non-cartesian coordinates.
@@ -796,33 +764,33 @@
\label{CSGRotation-class}
The \CSGRotation element represents a rotation transformation on a \CSGNode (a transformation or set operation on one or a set of \CSGPrimitives) or a \CSGPrimitive about the axes defined in the \Geometry. This element has 4 attributes:
-\begin{blockChanged}
\subsubsection{The \token{rotateX}, \token{rotateY}, and \token{rotateZ} attributes}
The \token{rotate} attributes are of type \primtype{double}, and must be defined for the same number of \CoordinateComponents as are present in the parent \Geometry. If all three are defined, they define a point in space that determines the vector (from the origin) of the axis about which the rotation is to occur in three-dimensional space. They must therefore not all be equal to zero. If two are defined (\token{rotateX} and \token{rotateY}), they define the point in two-dimensional space about which the rotation is to occur. (In this case, (0,0) would be legal.) Nothing can be rotated in 1-dimensional space, and therefore defining only \token{rotateX} is meaningless.
-\end{blockChanged}
\subsubsection{The \token{rotationAngleInRadians} attribute}
-The \token{rotationAngleInRadians} attribute is of type \primtype{double}. It represents the rotation angle of the \CSGNode, in radians, along the defined axis. \changed{In three-dimensional space, this rotation is defined as clockwise looking down the vector from the origin. In two-dimensional space, this rotation is defined as being clockwise.}
+The \token{rotationAngleInRadians} attribute is of type \primtype{double}. It represents the rotation angle of the \CSGNode, in radians, along the defined axis. In three-dimensional space, this rotation is defined as counterclockwise looking down the vector from the origin. In two-dimensional space, \changed{this rotation is defined the same way, as a counterclockwise rotation along the Z axis emerging from the defined point. 'Looking down' at the surface of the shape, this would be a clockwise rotation.}
+{\color{red} Lucian: \notice Still need to make sure the 2D explanation is correct; the list was contradictory on the point.}
+
\subsection{The \class{CSGScale} class}
\label{CSGScale-class}
-The \CSGScale element represents a scale transformation on a \CSGNode (a transformation or set operation on one or a set of \CSGPrimitives) or a \CSGPrimitive along the axes defined in the \Geometry. \changed{All scaling occurs individually for all component primitive shapes, relative to those shapes' origins when originally defined in \tab{primitive-definitions}. This makes a significant difference when using (for example) the 'set' operations: two adjacent circles may not touch, and their intersection may therefore be zero. But if scaled to be larger, those two circles may now overlap, creating an intersection where none existed before. Even if the child of the \CSGScale class is a \CSGSetOperator, then, it is the children of that set operator that are scaled, and not the calculated set itself. It is therefore perhaps easier (and more clear to model) if the only children of the \CSGScale class are \CSGPrimitives.}
+The \CSGScale element represents a scale transformation on a \CSGNode (a transformation or set operation on one or a set of \CSGPrimitives) or a \CSGPrimitive along the axes defined in the \Geometry. All scaling occurs \changed{collectively for the component primitive shapes, and the expansion occurs from the geometrical center of the object, i.e. the center of the smallest bounding box that would contain the current volume of the object. This means, for example, that if the child of the \CSGScale object is a hemisphere, defined as the intersection of a sphere and a cube, the bounding box would be half the size of a box that would have included the original entire sphere.}
-{\color{red} Lucian: \notice So, I just made up the above based on what I imagined would be easier to implement. The other option is that the scale operator acts on the *center of mass* of its child, meaning that the center of mass must be calculated for anything not already a \CSGPrimitive. Whoever implements this first, let me know what turns out to be easier, and we can do it that way.}
+{\color{red} Lucian: \notice Changed based on email discussions to be a collective scaling, not individual scaling. Also defined 'center of mass' in what is hopefully the simplest way--a center as determined by 'mass' would be pretty difficult to calculate, I think!}
This element has 3 attributes:
\subsubsection{The \token{scaleX} attribute}
-The \token{scaleX} attribute is of type \primtype{double}. It represents the amount of scaling of the \CSGNode along the x-axis (the \CoordinateComponent with the \token{type} of \val{cartesianX}).
+The \token{scaleX} \changed{required} attribute is of type \primtype{double}. It represents the amount of scaling of the \CSGNode along the x-axis (the \CoordinateComponent with the \token{type} of \val{cartesianX}).
\subsubsection{The \token{scaleY} attribute}
-The \token{scaleY} attribute is of type \primtype{double}. It represents the amount of scaling of the \CSGNode along the y-axis (the \CoordinateComponent with the \token{type} of \val{cartesianY}).
+The \token{scaleY} attribute is of type \primtype{double}. It represents the amount of scaling of the \CSGNode along the y-axis (the \CoordinateComponent with the \token{type} of \val{cartesianY}). \changed{This attribute must not be defined if no such \CoordinateComponent is present in the parent \Geometry, and is required otherwise.}
\subsubsection{The \token{scaleZ} attribute}
-The \token{scaleZ} attribute is of type \primtype{double}. It represents the amount of scaling of the \CSGNode along the z-axis (the \CoordinateComponent with the \token{type} of \val{cartesianZ}).
+The \token{scaleZ} attribute is of type \primtype{double}. It represents the amount of scaling of the \CSGNode along the z-axis (the \CoordinateComponent with the \token{type} of \val{cartesianZ}). \changed{This attribute must not be defined if no such \CoordinateComponent is present in the parent \Geometry, and is required otherwise.}
-{\color{red} Lucian: \notice Is 'the amount of scaling' here relative? In other words, if I have a \token{scaleX} value of '1.0', is it not scaled along the X axis at all, with '0.5' halving it and '2.0' doubling it? And '0.0' making it disappear? Are negative values allowed, inverting the object, i.e. inverting a cone by giving it a 'z' scaling factor of '-1'?}
+\changed{The amount of scaling for all three attributes is relative to the original size of the object. In other words, if a \CSGScale object has a \token{scaleX} value of \val{1.0}, is it not scaled along the X axis at all, with \val{0.5} halving it, \val{2.0} doubling it, and \val{0.0} making the entire object disappear completely. Negative values produce effective inversions of the object, e.g. inverting a unit cone by giving it a \...
[truncated message content] |