\& .sp 1 .ce 3 \s+1\fBChapter 9\fP\s-1 \s+1\fBSpatial Searches\fP\s-1 .sp 2 .nr H1 9 .nr H2 0 .nr H3 0 .nr H4 0 .nr H5 0 .na .LP .XS Chapter 9: Spatial Searches .XE .LP The functions described in this chapter allow for spatial searches of structure networks. The portion of the structure network to be searched is specified, and a set of filters much like the invisibility and highlight filters are specified to limit the set of eligible primitives. A search distance is also specified. The first output primitive that satisfies the filter criteria and is within the search distance is returned. .NH 2 Search Context .XS \*(SN Search Contexts .XE .LP A search context is a PEX resource that contains all the search criteria to be used when spatially searching a structure network. Two of the attributes that specify search criteria contain name set resource identifiers. If name sets are created, bound to a search context, then freed, the contents of the name sets will remain, since they are still referenced by the search context. However, if the search context is queried, the value .PN PEXAlreadyFreed will be returned for any such freed name sets, since they no longer have valid resource identifiers by which they can be referenced. .LP A search context resource contains the following attributes: .ID Search position Search distance Search ceiling Model clip flag Start path Normal list Inverted list .DE .LP The search position attribute specifies the search reference position in world coordinates. .LP The search distance attribute specifies a distance from the search reference position in world coordinates. The distance specifies a search aperture. Whether the aperture is considered to be a sphere or a cube is implementation-dependent. If the search distance is less than or equal to zero, a primitive must intersect the search position to be considered within the search aperture. .LP The search ceiling attribute defines the ceiling of the search operation. The search ceiling is an index into the list of element references contained in the search start path. Index one refers to the first path element in the list. Searching stops when the end of the structure specified by the search ceiling is reached. If the ceiling is one, the search effectively operates without a ceiling and terminates at the end of the first structure in the start path. .LP The model clip flag specifies whether modeling clipping must be performed during the search operations. If .PN True , modeling clipping is performed using the modeling clipping attributes as they are encountered during the search traversal. If .PN False , no model clipping is performed and model clipping attributes encountered during the traversal are effectively ignored. .LP The start path attribute defines the structure network path used as the starting point for the search. The search traversal begins at the element following the one indicated by the start path. .LP The normal list is a list of name set resource identifier pairs. Each pair of name sets is considered to be a filter to be used in the search traversal. A primitive's name set attribute must have at least one name in common with the inclusion name set of each filter, and must have no names in common with the exclusion name set of each filter, to be eligible for the search. .LP The inverted list is a list of name set resource identifier pairs. Each pair of name sets is considered to be a filter that is inverted and used in the search traversal. A primitive's name set attribute must have no names in common with the inclusion name set of each inverted filter, or must have at least one name in common with the exclusion name set of each inverted filter, to be eligible for the search. .LP The .PN PEXSearchNetwork function is used to perform a search operation once all of the search criteria attributes have been established. To search, the structure network specified is conceptually traversed, starting at the element following the element specified by the start path. Each output primitive is transformed to world coordinates and compared against the search aperture to determine proximity. For text and annotation text primitives, only the transformed origin of the text string is used to determine proximity. If .IN "text" "spatial searches" .IN "annotation text" "spatial searches" the transformed primitive's geometry places it within the search aperture, its name set attribute is checked against the normal list and against the inverted list to determine eligibility. .LP The search is successful if an output primitive is found which satisfies the search filter criteria and is withing the search aperture. The path to the first such primitive found is returned, and the start path attribute of the search context is set to the found path. This allows the next search operation on the same search context to continue from just after the found primitive. .LP If no such primitive is found before the end of the structure indicated by the search ceiling is reached, the search is unsuccessful, NULL is returned as the found path, and the start path attribute is not changed. .LP .bp .XS Function Descriptions .XE .SH PEXChangeSearchContext - Change Search Context .XS PEXChangeSearchContext .XE .IN "PEXChangeSearchContext" "" "@DEF@" .SH Synopsis .RS .FD 0 void PEXChangeSearchContext\^(\^Display *\fIdisplay\fP\^, PEXSearchContext \fIcontext\fP\^, unsigned long \fIvalue_mask\fP\^, PEXSCAttributes *\fIvalues\fP\^) .FN .RE .SH Arguments .RS .IP \fIdisplay\fP 1i A pointer to a display structure returned by a successful \fBXOpenDisplay\fP call. .IP \fIcontext\fP 1i The resource identifier of the search context. .IP \fIvalue_mask\fP 1i A mask indicating the search context attributes to be changed. .IP \fIvalues\fP 1i A pointer to new values for the specified search context attributes. .RE .SH Returns .RS .LP None .RE .SH Description .RS .LP This function modifies the attributes of the specified search context resource. The value mask indicates which values are specified. The value mask is constructed by or'ing together the following constants: .ID .PN PEXSCPosition .PN PEXSCDistance .PN PEXSCCeiling .PN PEXSCModelClipFlag .PN PEXSCStartPath .PN PEXSCNormalList .PN PEXSCInvertedList .DE .RE .SH Data Structures .ID .Co typedef XID PEXSearchContext; .sp typedef struct { PEXCoord position; float distance; unsigned short ceiling; Bool model_clip_flag; PEXStructurePath start_path; PEXListOfNameSetPair normal; PEXListOfNameSetPair inverted; } PEXSCAttributes; .sp typedef struct { float x; float y; float z; } PEXCoord; .sp typedef struct { unsigned long count; /* number of elements */ PEXElementRef *elements; } PEXStructurePath; .sp typedef struct { PEXStructure structure; unsigned long offset; } PEXElementRef; .sp typedef XID PEXStructure; .sp typedef struct { unsigned short count; /* number of pairs */ PEXNameSetPair *pairs; } PEXListOfNameSetPair; .sp typedef struct { PEXNameSet inclusion; PEXNameSet exclusion; } PEXNameSetPair; .sp typedef XID PEXNameSet; .ft P .DE .SH Errors .RS .IP \fIBadPEXNameSet\fP 1i The specified name set resource identifier is invalid. .IP \fIBadPEXPath\fP 1i The specified path is invalid. .IP \fIBadPEXSearchContext\fP 1i The specified search context resource identifier is invalid. .IP \fIBadValue\fP 1i A specified value is out of range, or an invalid bit is set in the value mask. .RE .SH See Also .RS .LP .PN PEXCreateSearchContext , .PN PEXGetSearchContext .RE .bp .SH PEXCopySearchContext - Copy Search Context .XS PEXCopySearchContext .XE .IN "PEXCopySearchContext" "" "@DEF@" .SH Synopsis .RS .FD 0 void PEXCopySearchContext\^(\^Display *\fIdisplay\fP\^, unsigned long \fIvalue_mask\fP\^, PEXSearchContext \fIsrc_context\fP\^, PEXSearchContext \fIdst_context\fP\^) .FN .RE .SH Arguments .RS .IP \fIdisplay\fP 1i A pointer to a display structure returned by a successful \fBXOpenDisplay\fP call. .IP \fIvalue_mask\fP 1i A mask specifying which attributes are to be copied. .IP \fIsrc_context\fP 1i The resource identifier of the source search context. .IP \fIdst_context\fP 1i The resource identifier of the destination search context. .RE .SH Returns .RS .LP None .RE .SH Description .RS .LP This function copies attributes from the source search context to the destination search context resource. Both must already exist as valid search context resources. Attributes indicated by the value mask are copied and the remainder of the attributes are left unchanged. The value mask is constructed by or'ing together the following constants: .ID .PN PEXSCPosition .PN PEXSCDistance .PN PEXSCCeiling .PN PEXSCModelClipFlag .PN PEXSCStartPath .PN PEXSCNormalList .PN PEXSCInvertedList .DE .RE .SH Data Structures .ID .Co typedef XID PEXSearchContext; .ft P .DE .SH Errors .RS .IP \fIBadPEXSearchContext\fP 1i The specified search context resource identifier is invalid. .IP \fIBadValue\fP 1i An invalid bit is set in the value mask. .RE .SH See Also .RS .LP .PN PEXCreateSearchContext .RE .bp .SH PEXCreateSearchContext - Create Search Context .XS PEXCreateSearchContext .XE .IN "PEXCreateSearchContext" "" "@DEF@" .SH Synopsis .RS .FD 0 PEXSearchContext PEXCreateSearchContext\^(\^Display *\fIdisplay\fP\^, unsigned long \fIvalue_mask\fP\^, PEXSCAttributes *\fIvalues\fP\^) .FN .RE .SH Arguments .RS .IP \fIdisplay\fP 1i A pointer to a display structure returned by a successful \fBXOpenDisplay\fP call. .IP \fIvalue_mask\fP 1i A mask indicating the attributes specified. .IP \fIvalues\fP 1i A pointer to values used to override default values in the new search context resource. .RE .SH Returns .RS .LP The resource identifier of the newly-created search context resource. .RE .SH Description .RS .LP This function creates a search context and returns the resource identifier of the created search context resource. The value mask indicates which values are specified to override the default values. The value mask is constructed by or'ing together the following constants: .ID .PN PEXSCPosition .PN PEXSCDistance .PN PEXSCCeiling .PN PEXSCModelClipFlag .PN PEXSCStartPath .PN PEXSCNormalList .PN PEXSCInvertedList .DE .RE .SH Data Structures .ID .Co typedef XID PEXSearchContext; .sp typedef struct { PEXCoord position; float distance; unsigned short ceiling; Bool model_clip_flag; PEXStructurePath start_path; PEXListOfNameSetPair normal; PEXListOfNameSetPair inverted; } PEXSCAttributes; .sp typedef struct { float x; float y; float z; } PEXCoord; .sp typedef struct { unsigned long count; /* number of elements */ PEXElementRef *elements; } PEXStructurePath; .sp typedef struct { PEXStructure structure; unsigned long offset; } PEXElementRef; .sp typedef XID PEXStructure; .sp typedef struct { unsigned short count; /* number of pairs */ PEXNameSetPair *pairs; } PEXListOfNameSetPair; .sp typedef struct { PEXNameSet inclusion; PEXNameSet exclusion; } PEXNameSetPair; .sp typedef XID PEXNameSet; .ft P .DE .SH Errors .RS .IP \fIBadAlloc\fP 1i The server failed to allocate the resource. .IP \fIBadPEXNameSet\fP 1i The specified name set resource identifier is invalid. .IP \fIBadPEXPath\fP 1i The specified path is invalid. .IP \fIBadValue\fP 1i A specified value is out of range, or an invalid bit is set in the value mask. .RE .SH See Also .RS .LP .PN PEXFreeSearchContext .RE .bp .SH PEXFreeSCAttributes - Free Storage Returned by PEXGetSearchContext .XS PEXFreeSCAttributes .XE .IN "PEXFreeSCAttributes" "" "@DEF@" .SH Synopsis .RS .FD 0 void PEXFreeSCAttributes\^(\^PEXSCAttributes *\fIvalues\fP\^) .FN .RE .SH Arguments .RS .IP \fIvalues\fP 1i A pointer to the search context attribute values. .RE .SH Returns .RS .LP None .RE .SH Description .RS .LP This function deallocates memory returned by .PN PEXGetSearchContext . .RE .SH Errors .RS .IP None 1i .RE .SH See Also .RS .LP .PN PEXGetSearchContext .RE .bp .SH PEXFreeSearchContext - Free Search Context .XS PEXFreeSearchContext .XE .IN "PEXFreeSearchContext" "" "@DEF@" .SH Synopsis .RS .FD 0 void PEXFreeSearchContext\^(\^Display *\fIdisplay\fP\^, PEXSearchContext \fIcontext\fP\^) .FN .RE .SH Arguments .RS .IP \fIdisplay\fP 1i A pointer to a display structure returned by a successful \fBXOpenDisplay\fP call. .IP \fIcontext\fP 1i The resource identifier of the search context. .RE .SH Returns .RS .LP None .RE .SH Description .RS .LP This function deletes the search context resource and frees memory associated with it. .RE .SH Errors .RS .IP \fIBadPEXSearchContext\fP 1i The specified search context resource identifier is invalid. .RE .SH See Also .RS .LP .PN PEXCreateSearchContext .RE .bp .SH PEXGetSearchContext - Get Search Context Attributes .XS PEXGetSearchContext .XE .IN "PEXGetSearchContext" "" "@DEF@" .SH Synopsis .RS .FD 0 PEXSCAttributes *PEXGetSearchContext\^(\^Display *\fIdisplay\fP\^, PEXSearchContext \fIcontext\fP\^, unsigned long \fIvalue_mask\fP\^) .FN .RE .SH Arguments .RS .IP \fIdisplay\fP 1i A pointer to a display structure returned by a successful \fBXOpenDisplay\fP call. .IP \fIcontext\fP 1i The resource identifier of the search context to be queried. .IP \fIvalue_mask\fP 1i A mask indicating which attributes to return. .RE .SH Returns .RS .LP A pointer to the requested attribute values; a null pointer if unsuccessful. .RE .SH Description .RS .LP This function returns the requested attribute values of the specified search context resource. The value mask indicates which attributes are to be returned. The value mask is constructed by or'ing together the following constants: .ID .PN PEXSCPosition .PN PEXSCDistance .PN PEXSCCeiling .PN PEXSCModelClipFlag .PN PEXSCStartPath .PN PEXSCNormalList .PN PEXSCInvertedList .DE .LP PEXlib allocates memory for the returned search context attribute values. .PN PEXFreeSCAttributes should be called to deallocate the memory. .RE .SH Data Structures .ID .Co typedef XID PEXSearchContext; .sp typedef struct { PEXCoord position; float distance; unsigned short ceiling; Bool model_clip_flag; PEXStructurePath start_path; PEXListOfNameSetPair normal; PEXListOfNameSetPair inverted; } PEXSCAttributes; .sp typedef struct { float x; float y; float z; } PEXCoord; .sp typedef struct { unsigned long count; /* number of elements */ PEXElementRef *elements; } PEXStructurePath; .sp typedef struct { PEXStructure structure; unsigned long offset; } PEXElementRef; .sp typedef XID PEXStructure; .sp typedef struct { unsigned short count; /* number of pairs */ PEXNameSetPair *pairs; } PEXListOfNameSetPair; .sp typedef struct { PEXNameSet inclusion; PEXNameSet exclusion; } PEXNameSetPair; .sp typedef XID PEXNameSet; .ft P .DE .SH Errors .RS .IP \fIBadPEXSearchContext\fP 1i The specified search context resource identifier is invalid. .IP \fIBadValue\fP 1i An invalid bit is set in the value mask. .RE .SH See Also .RS .LP .PN PEXCreateSearchContext , .PN PEXChangeSearchContext , .PN PEXFreeSCAttributes .RE .bp .SH PEXSearchNetwork - Search Network .XS PEXSearchNetwork .XE .IN "PEXSearchNetwork" "" "@DEF@" .SH Synopsis .RS .FD 0 Status PEXSearchNetwork\^(\^Display *\fIdisplay\fP\^, PEXSearchContext \fIcontext\fP\^, PEXStructurePath **\fIpath_return\fP\^) .FN .RE .SH Arguments .RS .IP \fIdisplay\fP 1i A pointer to a display structure returned by a successful \fBXOpenDisplay\fP call. .IP \fIcontext\fP 1i The resource identifier of the search context. .IP \fIpath_return\fP 1i Returns a pointer to a structure network path identifying the first primitive found. .RE .SH Returns .RS .LP Zero if unsuccessful; non-zero otherwise. .RE .SH Description .RS .LP This function searches a structure network according to the specified search criteria. The path to the first primitive found that satisfies the search criteria is returned. If no primitive is found that satisfies the criteria, a null pointer is returned. .LP After the search has been completed, the start path attribute of the specified search context will be set to the path returned, if a primitive was found. .LP PEXlib allocates memory for the returned structure path. .PN PEXFreeStructurePaths should be called to deallocate the memory. .RE .SH Data Structures .ID .Co typedef XID PEXSearchContext; .sp typedef struct { unsigned long count; /* number of elements */ PEXElementRef *elements; } PEXStructurePath; .sp typedef struct { PEXStructure structure; unsigned long offset; } PEXElementRef; .sp typedef XID PEXStructure; .ft P .DE .SH Errors .RS .IP \fIBadPEXPath\fP 1i The specified path is invalid. .IP \fIBadPEXSearchContext\fP 1i The specified search context resource identifier is invalid. .RE .SH See Also .RS .LP .PN PEXCreateSearchContext , .PN PEXChangeSearchContext , .PN PEXFreeStructurePaths .RE .bp