How Intersect 3D Line with Multipatch (3D Analyst) works
Intersect 3D Line With Multipatch finds the points of intersection between lines and multipatches and optionally writes these points, and/or the lines split at these locations, to an output feature class. The calculations are performed on 3D features in 3D Euclidian space. The tool returns a number (integer) representing the number of points of intersection found.
When an Output Point Feature Class is specified, the OIDs of both the line and multipatch will be written as attributes for each point to identify which two features are responsible for creating the point. The 3D distance along the line, from the beginning of the line up to the point of intersection, will be included.
When an Output Line Feature Class is specified, the input lines are split at the points of intersection with the multipatches, then written out. The source line OID, along with OIDs of the multipatches responsible for the from and to split points, are included. The number -1 is used as a code to indicate when either the start or end point of a line is not a point of intersection (that is, split location) but rather the start or end of the original input line. The 3D distance for the start point of an output line relative to the beginning of the source input line is included. If a line doesn't intersect any multipatch, it is copied, unaltered, to the output.
If there is any intersection of a multipatch with an original line, then the entire original line will be represented by one or more new lines which, when combined, would be equivalent geometrically to the original line. The sum of the LENGTH_3D value of each new line derived from one original line will be equal to the 3D length of the original line.
For each new line, the sum of DIST_3D and LENGTH_3D will be equal to the 3D distance along the original line at which the end of the new line occurs.
For each new line generated, there is a pair of multipatch IDs. If a new line comes from the beginning of an original line, and there wasn't an intersection with a multipatch exactly at the beginning of the original line, then -1 is assigned as the ID of the multipatch at the beginning of the new line. Likewise, if a new line comes from the end of an original line, and there wasn't an intersection with a multipatch exactly at the end of the original line, then -1 is assigned as the ID of the multipatch at the end of the new line.
For each new line that comes from the interior of an original line (that is, no common endpoint) the same multipatch ID is given for each endpoint, if a matching pair can be found; otherwise, the first multipatch ID found for each endpoint is given. For instance, if a line passes through two abutting cubes (multipatch 1 and multipatch 2) and nothing else, and both endpoints of the original line are outside the multipatches, then four new lines will be created. The multipatch ID pairs (for beginning and end) for each new line are (-1, 1); (1, 1); (2, 2); and (2, -1).