IBoolSectionEx Interface
IBoolSectionEx interface is an enhanced version of IBoolSection, 
which returns information about the interentity curve of the two objects. 
See also BoolOp Sample 
 
HRESULT Execute( 
EBooleanOperation operation, ISection* object, VARIANT_BOOL createIntersLine, 
IArray** edges ) 
Parameters 
operation - [in] member of 
EBooleanOperation 
enumeration indicating the operation to perform 
object - [in] reference to the second object 
for the operation. (The first object is the entity which implements this IBoolSectionEx interface)  
createIntersLine - [in] If true a set of Line Strip 
objects representing interentity line will be created and added as child of the 
first entity (the entity where this interface was queried form). See remarks 
for more details 
edges  - [out, retval] Array of isolated interentity 
loops. Each element has type IArray, elements in the 
later array have type IVertex. See remarks 
Remarks 
  
Performs operation indicated by operation on the entity where this IBoolSectionEx was queried from 
and object. This method also allows performing subtraction of a 
programmatically defined plane from the object. See details in 
Planar Subtract. 
If createIntersLine parameter is true a new empty 
object will be created and added as new child of the first entity. The object 
will act as a group (container for its children). The objects will have one or 
more child objects of Line Strip 
type one per linked piece of interentity. For example, subtraction of a long 
and thin cylinder from a sphere will have two closed isolated interentity 
loops. In that case the newly added object will have two children one per each 
interentity loop. Coordinates of points in the lines and other information can 
be obtained via ISectionPointSet 
	and
	ISectionLineStrip 
	queried form the relevant child. See BoolOp Sample 
for an example. 
The returned edges   array contains information abut 
the isolated linked interentity loops. Each loop is an array (IArray) 
of IVertex
elements, which can be used to obtain coordinates and normals to the surface at 
the interentity points. This calculation is not performed and NULL will be 
returned if createIntersLine is false. 
 IVertex
obtained above contains all normals to the resulting surface. The most frequent 
case when two surfaces are smooth around the interentity curve the vertex 
contains two normals on the left (side of surface of the first object, where 
this interface was queried form) and right hand side of the interentity curve. 
Often there are several normals on each side, for example when interentity 
curve crosses an edge of either surface. In some cases (planar 
subtract or case when the second object is not a closed surface and edges do 
not intersect) the interentity curve becomes an edge of the resulting surface, 
so the vertex can have only single normal, the one which belongs to the first 
surface. 
To find out which normals in the vertex belong to which side of the curve 
query IUserData
from the IVertex
and call IUserData.GetData. The 
returned cnt number is count of normals which belong to the first 
surface (normals on the left). Normals 0 to cnt-1 in 
the vertex belong to the first surface, the rest belong to the second surface. 
  
 
HRESULT STDMETHODCALLTYPE Execute2( 
ISection* object,
EBoolOpContext* context ) 
Parameters 
object - [in] reference to the 
second object 
for the operation. (The first object is the entity which implements 
this IBoolSectionEx interface)  
context - [in, out] - additional input and output 
parameters for the operation. See remarks 
Remarks 
  
Performs operation indicated by context.operation 
on the entity where this IBoolSectionEx was queried from and object. This method also allows performing subtraction of a 
programmatically defined plane from the object. See details in 
Planar Subtract. 
If context.execute is false, only 
interentity loops are calculated and the Boolean operation is not executed, 
which significantly improves performance. 
If context.interentityLine is true a new empty 
object will be created and added as new child of the first entity. The object 
will act as a group (container for its children). The objects will have one or 
more child objects of Line Strip 
type one per linked piece of interentity. For example, subtraction of a long 
and thin cylinder from a sphere will have two closed isolated interentity 
loops. In that case the newly added object will have two children one per each 
interentity loop. Coordinates of points in the lines and other information can 
be obtained via ISectionPointSet 
	and
	ISectionLineStrip 
	queried form the relevant child. See BoolOp Sample 
for an example. 
If context.needEdges is true 
context.edges will contain information abut the 
    calculated interentity curve. This calculation is not performed context.interentityLine
is false. The curve consists of the isolated linked interentity loops. 
Each loop is an array (IArray) of
IVertex
elements, which can be used to obtain coordinates and normals to the surface at 
the interentity points. See remarks for the previous method for more 
details. 
 context.edges array must be created by the caller. To 
 create the array call 
Create or
Create2 method of
IDIObjectGenerator interface with 
parameter  eType set to eObjTypeArray 
member of EObjectType enumeration. 
Query IArray  
from the returned IUnknown interface. After call to 
        this Execute2() method the array will contain elements which in turn are arrays 
        too. More exactly arrays of vertices.  
If separateComponents is true and the first object becomes 
divided into several isolated pieces, the pieces will become separate objects. 
The initial first object will be replaced with one if the pieces. The other 
pieces will be added as new children of the first object. Selection of pieces 
for the parent and children is random. 
    Note: All elements of the context  structure must be initialized before the call. Details 
 
HRESULT STDMETHODCALLTYPE CreateExtendedContext( 
    IDictionary_KC** contextExt) 
Parameters 
contextExt - [out, retval] The created and returned context 
Remarks 
 
    Creates a context with extra options for the Execute3 method below. All 
        parameters have the default values 
 
HRESULT Execute3(
EBooleanOperation operation, ISection** object, 
    IDictionary_KC* contextExt) 
Parameters 
operation - [in] member of 
EBooleanOperation 
enumeration indicating the operation to perform 
object - [in] reference to the 
second object for the operation. (The first object is the entity which implements 
this IBoolSectionEx interface)  
contextExt  - [in] A null reference or a context created 
    by the CreateExtendedContext() method above, which contains additional options for the operation. 
    See remarks 
Remarks 
 
Performs operation specified by operation 
on the entity where this IBoolSectionEx was queried from and object. 
    The significant difference with the Execute2 method is that the 
    InclideChildren* 
    properties below, allow boolean operations on groups of objects 
contextExt has the following parameters: 
    
        
            | Name | 
            
                Type | 
            
                Description | 
            
                Default Value | 
         
        
            | 
                OperationID | 
            
                Integer | 
            
                Valie must coinside with one of 
EBooleanOperation enumeration. Overrides value 
                specified by operation | 
            
EBooleanOperation.eBoolOpSubtract | 
         
        
            | 
                CreateLine | 
            
                Boolean | 
            
                If true interentity line of the two surfaces will be added to the model. See
                comments for the 
                createIntersLine parameter above for details  | 
            
                false | 
         
        
            | 
                InterentityLineOnly | 
            
                Boolean | 
            
                If true only interentity line is calculated | 
            
                false | 
         
        
            | 
                ReturnInterentity | 
            
                Boolean | 
            
                Same as context.needEdges parameter above | 
            
                false | 
         
        
            | 
                SeparateComponents | 
            
                Boolean | 
            
                Same as separateComponents parameter above | 
            
                false | 
         
        
            | 
                EdgeArray | 
            
                Variant | 
            
                IArray created by the caller. See comments for the  context.edges parameter above | 
            
                null | 
         
        
            | 
                IncludeChildrenThis | 
            
                Boolean | 
            
                If true children and all other descendants of the first (this) object will be 
                included in the operation | 
            
                false | 
         
        
            | 
                IncludeChildrenOther | 
            
                Boolean | 
            
                If true children and all other descendants of object 
                will be included in the operation | 
            
                false | 
         
     
 
 
HRESULT Clip(IObjectOriented* objectClipper, VARIANT_BOOL needTopLinkedComponentOnly) 
Parameters 
objectClipper - [in] The object to be clipped with 
needTopLinkedComponentOnly - [in] See remarks
Remarks 
  
Clips the object, which implements this interface with objectClipper 
    needTopLinkedComponentOnly has effect only when objectClipper 
 has natural diection of its internal area. In the initial implementation this is used for the case of an infinite prizm build 
        on a polygon in x and y axes, so z axis defines a positive direction 
    After the operation the resulting surface is often split into isolated pieces (A sphere clipped with a thin infinite 
    triangular prizm around the center). When the pieces have non-overlapping distinct  ranges they are arranged along z axis 
    In this situation if needTopLinkedComponentOnly is true only the one with max z will be the result of the operation.
        Otherwise all components will be merged into the final object
     
 
HRESULT Clip2(IObjectOriented* objectClipper, IListT** listIEntity) 
Parameters 
objectClipper - [in] The object to be clipped with 
listIEntity - [in] See remarks
Remarks 
  
    Calculates the result of cliping this object (the object, which implements this interface) with objectClipper 
    Does not modify this object. listIEntity contains linked pieces of the result. See also the previous method 
  
                 |