|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface ITinAdvanced2
Provides access to members that control advanced TIN functions.
Method Summary | |
---|---|
void |
convertToPolylines(IFeatureClass pFeatureClass,
ITinDynamicFilter pFilter,
Object pFieldName)
Converts qualified edges to a polyline feature class. |
int |
findTriangleIndex(IPoint pPoint)
The triangle at the specified location. |
void |
getCountedUniqueTagValues(int type,
ILongArray[] ppValues,
ILongArray[] ppCounts)
Returns unique tag values with counts for the specified element type. |
int |
getLeftTriangleIndex(int edgeIndex)
Gets left triangle index of the specified edge. |
double |
getNaturalNeighborZ(double x,
double y)
Return the z-coordinate of the specified location using Natural Neighbor interpolation. |
int |
getNeighborEdgeIndex(int edgeIndex)
Gets neighbor edge index. |
int |
getNodeDegree(int nodeIndex,
boolean bEnforcedEdgesOnly)
Returns the degree of the specified node. |
int |
getNodeSource(int nodeIndex)
Returns the source of the specified node. |
void |
getNodeSourceCounts(int[] pcOriginal,
int[] pcSuper,
int[] pcDensified,
int[] pcIntersection,
int[] pcUnknown)
Returns the number of nodes with respect to different sources. |
int |
getRightTriangleIndex(int edgeIndex)
Gets right triangle index of the specified edge. |
void |
getSpecialEdgeCounts(int[] pcHardDataEdges,
int[] pcSoftDataEdges,
int[] pcTagValueDataEdges)
Returns the total number of special edges in the TIN. |
boolean |
hasEdgeType(int type)
Returns TRUE if the TIN contains the specified edge type. |
boolean |
isEdgeInsideDataArea(int edgeIndex)
Returns TRUE if the edge is inside data area. |
boolean |
isNodeInsideDataArea(int nodeIndex)
Returns TRUE if the node is inside data area. |
boolean |
isNodeOnDomainBoundary(int nodeIndex)
Returns TRUE if the specified node is on domain's boundary. |
boolean |
isTriangleInsideDataArea(int triangleIndex)
Returns TRUE if the triangle is inside data area. |
void |
queryAllEdgeIndicesAroundNode(int nodeIndex,
ILongArray pEdges)
Returns all edges connected to the specified node. |
void |
queryBeginEndNodeIndices(int edgeIndex,
int[] pBegin,
int[] pEnd)
Gets begin and end nodes of the specified edge. |
void |
queryEdgeIndicesAroundNode(int nodeIndex,
ILongArray pEdges)
Returns all edges having the specified node as begin node. |
void |
queryElementAsGeometry(int type,
int index,
IGeometry pGeometry)
Output the specified TIN element as Geometry object. |
void |
queryNaturalNeighborIndices(IPoint pPoint,
ILongArray pNodes)
Returns all Natural Neighbors corresponding to the query point. |
void |
queryNeighborsAndWeights(double x,
double y,
ILongArray pNeighbors,
IDoubleArray pWeights)
Returns natural neighbors and their weights corresponding to the query point. |
void |
queryNodeIndicesAroundNode(int nodeIndex,
ILongArray pNodes)
Returns all nodes connected to the specified node. |
void |
queryTriangleEdgeIndices(int triangleIndex,
int[] pA,
int[] pB,
int[] pC)
Gets the three edges of the specified triangle (clockwise). |
void |
queryTriangleIndicesAroundNode(int nodeIndex,
ILongArray pTriangles)
Returns all triangles sharing the specified node. |
void |
queryTriangleNeighborhoodIndices(IPoint pPoint,
ILongArray pTriangles)
Returns all triangles whose circumscribed circle contains the query point. |
void |
queryTriangleNodeIndices(int triangleIndex,
int[] pA,
int[] pB,
int[] pC)
Gets the three nodes of the specified triangle (clockwise). |
void |
saveAsVersion(String newName,
int ver,
Object pOverWrite)
Saves the TIN to disk using the specified (full path) name. |
Methods inherited from interface com.esri.arcgis.geodatabase.ITin |
---|
getDataEdgeCount, getDataNodeCount, getDataTriangleCount, getExtent, getFields, getVersion, getZFactor, isDelaunay, isEmpty, isHasEdgeTagValues, isHasNodeTagValues, isHasTriangleTagValues, saveAs, setZFactor |
Method Detail |
---|
int getNodeSource(int nodeIndex) throws IOException, AutomationException
The source of the specified node is returned as an esriTinNodeSourceType enumeration. This gives an indication of where the node came from; its origin. If a node has the value esriTinOriginal it was input, as a point or vertex, by a user. All other node source types, with the possible exception of esriTinUnknown, represent those which are software generated. These others include the four super nodes that are added upon initial TIN creation, and densification and intersection nodes added to breaklines. Nodes are added to breaklines, where necessary, in order to make them Delaunay conforming.
If the intersection point between two or more breaklines was input as part of the source data the node source will be set to esriTinOriginal because the software did not need to generate the intersection point. If you need to discover nodes where breaklines intersect, regardless of whether they were software generated, use ITinAdvanced2.GetNodeDegree or ITinNode2.Degree with the EnforcedEdgesOnly option set to TRUE. Returned values greater than two are intersection points. A value of two might be considered an intersection but only if the node is the endpoint of two different breaklines.
TINs do not yet persist node source information. It is only maintained while the TIN is is edit mode. This means after a TIN has been saved to disk, all nodes, except for super nodes, become unknown.
See also: ITinNode2.Source
nodeIndex
- The nodeIndex (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.ITinNode2
void getNodeSourceCounts(int[] pcOriginal, int[] pcSuper, int[] pcDensified, int[] pcIntersection, int[] pcUnknown) throws IOException, AutomationException
Returns the total number of nodes in the TIN for each source type. The different types include original, densified, intersection, supernode, and unknown.
TINs do not yet persist node source information. It is only maintained while the TIN is is edit mode. This means after a TIN has been saved to disk, all nodes, except for super nodes, become unknown.
See also: ITinAdvanced2.GetNodeSource, ITinNode2.Source
pcOriginal
- The pcOriginal (out: use single element array)pcSuper
- The pcSuper (out: use single element array)pcDensified
- The pcDensified (out: use single element array)pcIntersection
- The pcIntersection (out: use single element array)pcUnknown
- The pcUnknown (out: use single element array)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.int getNodeDegree(int nodeIndex, boolean bEnforcedEdgesOnly) throws IOException, AutomationException
GetNodeDegree returns the number of edges incident to the node. If bEnforcedEdgesOnly is set to True then only the number of hard and soft break edges are counted.
This member uses the SingleEdge interpretation where only one edge between node pairs is considered.
nodeIndex
- The nodeIndex (in)bEnforcedEdgesOnly
- The bEnforcedEdgesOnly (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.boolean isNodeOnDomainBoundary(int nodeIndex) throws IOException, AutomationException
Returns TRUE if the node resides on the perimeter of the TIN's interpolation zone. This is the case if there's at least one nodata triangle and one data triangle incident to the node.
nodeIndex
- The nodeIndex (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void getSpecialEdgeCounts(int[] pcHardDataEdges, int[] pcSoftDataEdges, int[] pcTagValueDataEdges) throws IOException, AutomationException
Returns the number of hard, soft, and tagged edges.
Since edges can be both tagged and hard or soft, some overlap in the counts can exist.
At present, edge tags can only be assigned and used while a TIN's being edited. Edge tags do not get persisted so they are lost when a TIN is saved to disk.
pcHardDataEdges
- The pcHardDataEdges (out: use single element array)pcSoftDataEdges
- The pcSoftDataEdges (out: use single element array)pcTagValueDataEdges
- The pcTagValueDataEdges (out: use single element array)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.boolean hasEdgeType(int type) throws IOException, AutomationException
HasEdgeType will return True if the specified edge type, esriTinRegularEdge, esriTinHardEdge, or esriTinSoftEdge, is present.
type
- A com.esri.arcgis.geodatabase.esriTinEdgeType constant (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.int getLeftTriangleIndex(int edgeIndex) throws IOException, AutomationException
Returns the index of the triangle on the left side of the specified edge. Note that edges of triangles are ordered clockwise.
If the edge is on the extreme perimeter of the TIN, the returned index will equal 0, meaning no triangle, as the base index for triangles is 1.
edgeIndex
- The edgeIndex (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.int getRightTriangleIndex(int edgeIndex) throws IOException, AutomationException
Returns the index of the triangle on the right side of the specified edge. Note that edges of triangles are ordered clockwise.
edgeIndex
- The edgeIndex (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void queryBeginEndNodeIndices(int edgeIndex, int[] pBegin, int[] pEnd) throws IOException, AutomationException
Returns the indices of the from and to nodes of the specified edge.
Note that edges in a triangle are ordered clockwise.
edgeIndex
- The edgeIndex (in)pBegin
- The pBegin (out: use single element array)pEnd
- The pEnd (out: use single element array)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.int getNeighborEdgeIndex(int edgeIndex) throws IOException, AutomationException
Returns the index of the corresponding edge in the adjacent triangle.
Zero is returned if the given edge is on the extreme perimeter of the TIN with no adjacent triangle.
edgeIndex
- The edgeIndex (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void queryTriangleNodeIndices(int triangleIndex, int[] pA, int[] pB, int[] pC) throws IOException, AutomationException
Returns the indices of the three nodes that comprise the specified triangle.
triangleIndex
- The triangleIndex (in)pA
- The pA (out: use single element array)pB
- The pB (out: use single element array)pC
- The pC (out: use single element array)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void queryTriangleEdgeIndices(int triangleIndex, int[] pA, int[] pB, int[] pC) throws IOException, AutomationException
Returns the indices of the three edges that comprise the specified triangle.
They are returned from smaller index to larger in clockwise order.
triangleIndex
- The triangleIndex (in)pA
- The pA (out: use single element array)pB
- The pB (out: use single element array)pC
- The pC (out: use single element array)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void queryNodeIndicesAroundNode(int nodeIndex, ILongArray pNodes) throws IOException, AutomationException
Returns indices for nodes adjacent to specified node. These are its direct neighbors which are connected by triangle edges.
The passed object that implements ILongArray must have already been instantiated.
nodeIndex
- The nodeIndex (in)pNodes
- A reference to a com.esri.arcgis.system.ILongArray (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void queryEdgeIndicesAroundNode(int nodeIndex, ILongArray pEdges) throws IOException, AutomationException
This populates a LongArray with the indices of edges that surround a given node.
The passed LongArray must already have been instantiated.
A single edge interpretation is used. This is where edges between adjacent triangles are shared.
Only edges that have their from node in common with the specified node are returned. Because of this, some boundary edges incident to super nodes will have no representation.
nodeIndex
- The nodeIndex (in)pEdges
- A reference to a com.esri.arcgis.system.ILongArray (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void queryAllEdgeIndicesAroundNode(int nodeIndex, ILongArray pEdges) throws IOException, AutomationException
This populates a LongArray with the indices of edges that surround a given node.
The passed LongArray must already have been instantiated.
A Single Edge interpretation is used. This is where edges between adjacent triangles are shared.
For non-super nodes, all returned edges have their from node in common with the specified node. In the special case of a super node, the last returned edge will have its to node in common. That returned index will also be flagged using a negative value.
nodeIndex
- The nodeIndex (in)pEdges
- A reference to a com.esri.arcgis.system.ILongArray (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void queryTriangleIndicesAroundNode(int nodeIndex, ILongArray pTriangles) throws IOException, AutomationException
Returns indices for triangles incident to the specified node.
The passed object that implements ILongArray must have already been instantiated.
nodeIndex
- The nodeIndex (in)pTriangles
- A reference to a com.esri.arcgis.system.ILongArray (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void queryNaturalNeighborIndices(IPoint pPoint, ILongArray pNodes) throws IOException, AutomationException
Returns the indices of the nodes that are natural neighbors of the query point. This set represents those the point would connect to if inserted into the triangulation.
If the query point is coincident with an existing node, that nodes neighbors will be returned.
An empty set is returned if the query point falls outside the triangulation.
The passed LongArray must already be instantiated.
The TIN must be Delaunay.
pPoint
- A reference to a com.esri.arcgis.geometry.IPoint (in)pNodes
- A reference to a com.esri.arcgis.system.ILongArray (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void queryTriangleNeighborhoodIndices(IPoint pPoint, ILongArray pTriangles) throws IOException, AutomationException
Returns the indices of all triangles that would be effected if the query point were inserted in the triangulation. These are the triangles whose circumscribed circles contain the query point.
No special attention is paid to the presence of breaklines or whether the query point falls inside the interpolation zone. Triangles connected to super nodes may be included in the returned set.
An empty set will be returned if the query point resides entirely outside the triangulation (including the super node extent).
The passed object that implements ILongArray must have already been instantiated.
pPoint
- A reference to a com.esri.arcgis.geometry.IPoint (in)pTriangles
- A reference to a com.esri.arcgis.system.ILongArray (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void queryElementAsGeometry(int type, int index, IGeometry pGeometry) throws IOException, AutomationException
Returns the specified TIN element as the type of geometry object that's passed.
The passed geometry object must already be instantiated.
Node elements can be returned as points.
Edge elements can be returned as multipoints, lines, paths, and polylines.
Triangle elements can be returned as multipoints, paths, rings, polylines, and polygons.
type
- A com.esri.arcgis.geodatabase.esriTinElementType constant (in)index
- The index (in)pGeometry
- A reference to a com.esri.arcgis.geometry.IGeometry (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void queryNeighborsAndWeights(double x, double y, ILongArray pNeighbors, IDoubleArray pWeights) throws IOException, AutomationException
Returns the natural neighbor indices and their normalized weights for the given query point. The weights are based on area-stealing, or Sibson, interpolation. There is a one to one correspondence between the index and weight entries placed in the two arrays.
For valid results the TIN should have been constructed using only mass points. It must be Delaunay and have a convex interpolation zone. Breaklines are not taken into consideration.
If the query point is incident to a node only that node's index will be returned along with a weight of 1.0.
Zero neighbors will be reported if a query point falls outside the TIN's interpolation zone.
If a super node is discovered to be a neighbor it will be excluded from consideration. It will not be reported as a neighbor or be included in determining weights.
Both objects implementing the array functionality must be instantiated before being used with this member.
x
- The x (in)y
- The y (in)pNeighbors
- A reference to a com.esri.arcgis.system.ILongArray (in)pWeights
- A reference to a com.esri.arcgis.system.IDoubleArray (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.int findTriangleIndex(IPoint pPoint) throws IOException, AutomationException
Returns the index of the triangle that encompasses the point.
If the point falls completely outside the TIN, including the area represented by its super nodes, the returned index will be 0.
pPoint
- A reference to a com.esri.arcgis.geometry.IPoint (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.boolean isTriangleInsideDataArea(int triangleIndex) throws IOException, AutomationException
Returns TRUE if the triangle is inside the data area. This is the same as the domain or interpolation zone of the TIN.
triangleIndex
- The triangleIndex (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.boolean isEdgeInsideDataArea(int edgeIndex) throws IOException, AutomationException
If the triangle the edge belongs to, its RightTriangle, is inside the TIN's data area then this function will return True for the edge.
edgeIndex
- The edgeIndex (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.boolean isNodeInsideDataArea(int nodeIndex) throws IOException, AutomationException
Returns True if any triangles incident to the node are inside the TIN's interpolation zone.
nodeIndex
- The nodeIndex (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void getCountedUniqueTagValues(int type, ILongArray[] ppValues, ILongArray[] ppCounts) throws IOException, AutomationException
Returns an array of integers containing all the tag values used for the given element type - node, edge, or triangle. An additional returned array reports the number of elements that have been assigned a particular tag. The indices of the two arrays correspond with one another. So, the first element of the count array indicates the number of elements that have been assigned the value of the of the first element in the tag value array.
The arrays can potentially be as large as the number of elements. It's a good idea to check how many unique values there are using UniqueTagValueCount before executing this function.
When an edge is assigned a tag the corresponding edge in the adjacent triangle is automatically assigned the same tag. So, even though you only assigned one unique tag to an individual edge the reported element count for that tag will reported as two. The only exception is with super edges where there are no adjacent triangles with corresponding edges.
The returned tag values will be sorted in ascending order if the TIN has been created by, or saved/copied by the 8.1 version of this software or later. The tag values might otherwise not be sorted.
The arrays will be set to Null ('Nothing' in VB) if the TIN has no tags related to the specified element type.
Note as soon as one element is assigned a tag all the other elements of the same type are given the default tag of 0. So, if you only assign a one non-zero tag to one element you will find two values reported by this member, 0 and the value you assigned.
type
- A com.esri.arcgis.geodatabase.esriTinElementType constant (in)ppValues
- A reference to a com.esri.arcgis.system.ILongArray (out: use single element array)ppCounts
- A reference to a com.esri.arcgis.system.ILongArray (out: use single element array)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.double getNaturalNeighborZ(double x, double y) throws IOException, AutomationException
The returned height is based on natural neighbor interpolation. This scheme finds the closest nodes in all directions, the ones that would be connected to if the query point were inserted in the triangulation, and applies an area based weighting scheme to them.
Hard breaklines and the TIN data area boundary constrain the neighbor search. Data on the opposite side of these boundaries, relative to the query point, are excluded from consideration. Therefore, the surface is continuously smooth except across hard breaklines and at the data area boundary. Hard breaklines constitute an abrupt change in slope.
The z value returned when the query point falls outside the interpolation zone is NODATA (or not-a-number, NaN). You can determine if this is the case by passing it to ITinAdvanced.IsVoidZ or ISurface.IsVoidZ.
x
- The x (in)y
- The y (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void convertToPolylines(IFeatureClass pFeatureClass, ITinDynamicFilter pFilter, Object pFieldName) throws IOException, AutomationException
Extracts embedded TIN polylines and writes them out to the specified feature class.
The specified feature class must exist and be polyline based.
If the feature class is Z enabled the polylines written to it will be 3D, otherwise they will be 2D.
The specified filter must be edge based (e.g. TinEdgeTypeFilter) and implement ITinDynamicFilter. You can use ITinEdgeTypeFilter2 with its RegularEdgesExcluded property set to TRUE to extract hard and soft breaklines as polyline features.
A field will be added to the feature class and is used to store a numeric code for the output features. In the case of edge type, a value of 1 is used for soft breaklines and 2 for hard. The added field will be called 'Code' unless you provide a different name via the optional field name argument.
Do not have WorkspaceEdit turned on as this member needs to add fields to the output feature class, a schema edit operation that WorkspaceEdit does not permit.
pFeatureClass
- A reference to a com.esri.arcgis.geodatabase.IFeatureClass (in)pFilter
- A reference to a com.esri.arcgis.geodatabase.ITinDynamicFilter (in)pFieldName
- A Variant (in, optional, pass null if not required)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void saveAsVersion(String newName, int ver, Object pOverWrite) throws IOException, AutomationException
Saves the TIN to disk using the format, or version, specified by esriTinVersion.
If you need a TIN that is backwards compatible with ArcINFO Workstation, ArcView 3.x, and versions of ArcGIS 9.3.1 and prior you must use esriTin70001. These packages will not recognized TINs saved using esriTin80001.
If the TIN is Delaunay conforming (see ITin.IsDelaunay, ITinEdit2.SetToConstrainedDelaunay) it can be saved to either esriTin70001 or esriTin80001. If it isn't it can only be saved to esriTin80001. An error will be raised if you attempt to save it to esriTin70001.
If the TIN has edge tag values (see ITin.HasEdgeTags) they will be dropped when saving to esriTin70001.
Node source information (see ITinNode2.Source) will be dropped when saving to esriTin70001.
Some spatial references are not supported with esriTin70001. Those which aren't will be excluded when saving to esriTin70001.
newName
- The newName (in)ver
- A com.esri.arcgis.geodatabase.esriTinVersion constant (in)pOverWrite
- A Variant (in, optional, pass null if not required)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |