<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="nxdlformat.xsl" ?>
<!--
# NeXus - Neutron and X-ray Common Data Format
# 
# Copyright (C) 2008-2020 NeXus International Advisory Committee (NIAC)
# 
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 3 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
# For further information, see http://www.nexusformat.org
-->
<definition name="NXcsg"
	   extends="NXobject"
	   type="group"
	   category="contributed"
	   xmlns="http://definition.nexusformat.org/nxdl/3.1"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://definition.nexusformat.org/nxdl/3.1 ../nxdl.xsd"
	   >
  <doc>
    constructive solid geometry NeXus class, using :ref:`NXquadric`
    and :ref:`NXoff_geometry`.
  </doc>
  <field
     name="operation">
    <doc>
      One of the standard construction solid geometry set operations,
      or if the CSG is a pointer to the geometry provided by an
      :ref:`NXquadric` or an :ref:`NXoff_geometry`. Takes values:
    </doc>
    <enumeration>
      <item value="UNION" />
      <item value="INTERSECTION" />
      <item value="DIFFERENCE" />
      <item value="COMPLEMENT" />
      <item value="IS_QUADRIC" />
      <item value="IS_MESH" />
    </enumeration>
  </field>
  <group
     name="a"
     type="NXcsg"
     minOccurs="0"
     maxOccurs="1">
   <doc>
     The first operand of constructive solid geometry
     operation. Compulsory if 'operation' is UNION, INTERSECTION,
     DIFFERENCE or COMPLEMENT.
   </doc>
  </group>
  <group
     name="b"
     type="NXcsg"
     minOccurs="0"
     maxOccurs="1">
    <doc>
     The second operand of constructive solid geometry
     operation. Compulsory if 'operation' is UNION, INTERSECTION or
     DIFFERENCE.
    </doc>
  </group>
  <field
     name="geometry"
     type="NX_CHAR"
     minOccurs="0"
     maxOccurs="1">
    <doc>
      Path to a field that is either an :ref:`NXquadric` (if
      'operation' = IS_QUADRIC) or an :ref:`NXoff_geometry` (if
      'operation' = IS_MESH) that defines the surface making up the
      constructive solid geometry component. Compulsory if 'operation'
      is IS_QUADRIC or IS_MESH.
    </doc>
  </field>
</definition>
