{"id":622,"date":"2020-03-07T09:31:21","date_gmt":"2020-03-07T09:31:21","guid":{"rendered":"https:\/\/www.parametriczoo.com\/?p=622"},"modified":"2020-03-07T09:46:33","modified_gmt":"2020-03-07T09:46:33","slug":"plane-line-intersection-in-revit-api","status":"publish","type":"post","link":"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/","title":{"rendered":"Plane &#8211; Line intersection in Revit API"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;3.22.7&#8243;][et_pb_row custom_padding=&#8221;||72px|||&#8221; _builder_version=&#8221;3.22.7&#8243;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;3.22.7&#8243;][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>In last couple of posts (<a href=\"https:\/\/www.parametriczoo.com\/index.php\/2020\/02\/29\/signed-distance-of-a-point-from-a-plane\/\">Signed distance of a point from a plane<\/a> and <a href=\"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/03\/coincident-planes\/\">coincident planes<\/a>) I was discussing plane geometry and implementation of some properties of it in Revit API. In this post I would like to extend our discussion to the top of the intersection of plane and other geometries. For the first step we talk about the line and plane intersection and in the up-coming posts we shall discuss curves, surfaces and solids.<\/p>\n<p>By definition the line-plane intersection\u00a0<span>in\u00a0<\/span>three-dimensional space<span>\u00a0can be the\u00a0<\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Empty_set\" title=\"Empty set\">empty set<\/a><span>, a\u00a0<\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Point_(geometry)\" title=\"Point (geometry)\">point<\/a><span>, or a line. It is the entire line if that line is embedded in the plane, and is the empty set if the line is parallel to the plane but outside it<\/span>. As you can guess there are no such a thing as Line-Plane intersection in Revit API, however implementation of Line-Plane method is quiet easy if we just look at the algebraic definition of line and plane.\u00a0<span style=\"font-size: 14px;\">\u00a0<\/span><\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/03\/image001-1.png&#8221; align=&#8221;center&#8221; _builder_version=&#8221;3.22.7&#8243; width=&#8221;25%&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>Above is an <em>explicit<\/em> equation of a plane where\u00a0<em><strong>p\u2080<\/strong><\/em>\u00a0 is a point on the plane (you may call it origin of the plane) and vector <em><strong>n<\/strong><\/em> the normal of the plane. all set of points <strong><em>p<\/em><\/strong> which satisfies above equation defines a plane in 3d space.\u00a0<\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/03\/image003-1.png&#8221; align=&#8221;center&#8221; _builder_version=&#8221;3.22.7&#8243; width=&#8221;34%&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;3.22.7&#8243; custom_padding=&#8221;||0px|||&#8221;]<\/p>\n<p>The equation 2 is the <em>parametric<\/em> representation of the line where\u00a0<em><strong>l\u2080 <\/strong><\/em>is a point on the line<b><i>, l i<\/i><\/b>s the direction vector and <i><\/i><b><i>d <\/i><\/b>is real number which is called parameter of the line. Note that when d changes from zero to any real number, the point <strong><em>p<\/em><\/strong> moves along the direction<strong><em> l<\/em><\/strong>\u00a0staring from point\u00a0<em><b>l\u2080. <\/b><\/em>Since we are interested\u00a0in the intersection of line and plane we replace the point <strong><em>p<\/em><\/strong> in plane equation with its equivalent\u00a0from equation (2). This is same as finding point p which satisfies both equations, meaning a point that can be on the plane and on the line simultaneously.<\/p>\n<p><em><strong><\/strong><\/em><\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/03\/image005-1.png&#8221; align=&#8221;center&#8221; _builder_version=&#8221;3.22.7&#8243; width=&#8221;39%&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>Expanding above gives us :\u00a0<\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/03\/image007.png&#8221; align=&#8221;center&#8221; _builder_version=&#8221;3.22.7&#8243; width=&#8221;42%&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>Now we solve for parameter <em><strong>d.\u00a0<\/strong><\/em><\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/03\/image009.png&#8221; align=&#8221;center&#8221; _builder_version=&#8221;3.22.7&#8243; width=&#8221;30%&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>The equation <strong><em>(5)<\/em><\/strong> has a solution if the dot product of the vectors <strong><em>l<\/em><\/strong> and <strong><em>n<\/em><\/strong> is not zero. Well, in fact if the dot product<strong><em>\u00a0(l.n)<\/em><\/strong> is zero it means that the line is parallel to the plane ( <em><strong>l<\/strong><\/em> is perpendicular to the <em><strong>n<\/strong><\/em>)\u00a0 , in this case we must check if the line is completely inside the plane or outside of it.\u00a0 If the line is completely indie the plane then every point on the line including the <strong><em>l\u2080<\/em><\/strong> must lie on the plane. To evaluate this , we can replace p in equation <strong><em>(1)<\/em><\/strong> with <strong><em>l\u2080<\/em><\/strong> and see if it satisfies the equation. If the result turns out zero (within given tolerance) then the line is a sub-set of the plane (inside it) otherwise it is outside it. We even know the distance of parallel line to the plane , and it is noting but the non-zero value of equation <em><strong>(1)<\/strong><\/em>.<\/p>\n<p>If the dot product (<em><strong>l.n)<\/strong><\/em> is non zero then d indicates the parameter of the intersection point on the line. To obtain the actual intersection point all we need to do is to replace d in equation <em><strong>(2)<\/strong><\/em> by its equivalent in equation <em><strong>(5)<\/strong><\/em>.\u00a0 \u00a0If we choose the\u00a0<strong><em>l\u2080 to be the first point of the line then we can even find out<\/em><\/strong>\u00a0 \u00a0\u00a0<\/p>\n<p>&nbsp;<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>Let us know discuss the implementation of the Line-Plane intersection method in Revit. First we compute both numerator and denominator of the equation (5) and we check if the\u00a0denominator is nearly\u00a0 zero :\u00a0<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;3.22.7&#8243; background_color=&#8221;#f2f2f2&#8243; border_width_all=&#8221;1px&#8221; border_color_all=&#8221;#d3d3d3&#8243; custom_margin=&#8221;-2px|||||&#8221; custom_padding=&#8221;11px|15px|0px|15px|false|true&#8221; saved_tabs=&#8221;all&#8221;]<\/p>\n<pre style=\"font-family: Consolas; font-size: 13px; color: black;\"><span class=\"comment\" style=\"color: green;\">\/\/compute the dot prodcut and signed distance <\/span><br \/><span class=\"keyword\" style=\"color: blue;\">double<\/span> <span class=\"local name\" style=\"color: #1f377f;\">denominator<\/span> <span class=\"operator\">=<\/span> <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">l<\/span><span class=\"operator\">.<\/span><span class=\"identifier - property name - (TRANSIENT)\">Direction<\/span><span class=\"operator\">.<\/span><span class=\"identifier - method name - (TRANSIENT)\" style=\"color: #74531f;\">Normalize<\/span><span class=\"punctuation\">()<\/span><span class=\"operator\">.<\/span><span class=\"identifier - method name - (TRANSIENT)\" style=\"color: #74531f;\">DotProduct<\/span><span class=\"punctuation\">(<\/span><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">p<\/span><span class=\"operator\">.<\/span><span class=\"identifier - property name - (TRANSIENT)\">Normal<\/span><span class=\"punctuation\">);<\/span><br \/><span class=\"keyword\" style=\"color: blue;\">double<\/span> <span class=\"local name - unnecessary code - (TRANSIENT)\" style=\"color: #1f377f;\">numerator<\/span> <span class=\"operator\">=<\/span> <span class=\"punctuation\">(<\/span><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">p<\/span><span class=\"operator\">.<\/span><span class=\"identifier - property name - (TRANSIENT)\">Origin<\/span> <span class=\"operator - operator - overloaded - (TRANSIENT)\" style=\"color: #74531f;\">-<\/span> <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">l<\/span><span class=\"operator\">.<\/span><span class=\"identifier - method name - (TRANSIENT)\" style=\"color: #74531f;\">GetEndPoint<\/span><span class=\"punctuation\">(<\/span><span class=\"number\">0<\/span><span class=\"punctuation\">))<\/span><span class=\"operator\">.<\/span><span class=\"identifier - method name - (TRANSIENT)\" style=\"color: #74531f;\">DotProduct<\/span><span class=\"punctuation\">(<\/span><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">p<\/span><span class=\"operator\">.<\/span><span class=\"identifier - property name - (TRANSIENT)\">Normal<\/span><span class=\"punctuation\">);<\/span><br \/><span class=\"comment\" style=\"color: green;\">\/\/check if the dot product is almost zero <\/span><br \/><span class=\"keyword - control\" style=\"color: #8f08c4;\">if<\/span> <span class=\"punctuation\">(<\/span><span class=\"class name - identifier - static symbol - (TRANSIENT)\" style=\"color: #2b91af;\">Math<\/span><span class=\"operator\">.<\/span><span class=\"identifier - method name - static symbol - (TRANSIENT)\" style=\"color: #74531f;\">Abs<\/span><span class=\"punctuation\">(<\/span><span class=\"identifier - local name - (TRANSIENT)\" style=\"color: #1f377f;\">denominator<\/span><span class=\"punctuation\">)<\/span> <span class=\"operator\">&lt;<\/span><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">tolerance<\/span><span class=\"punctuation\">)<\/span><br \/><span class=\"punctuation\">{<\/span><br \/>    <span class=\"comment\" style=\"color: green;\">\/\/ line is parallel to plane (could be inside or outside the plane)<\/span><br \/><span class=\"punctuation\">}<\/span><br \/><span class=\"keyword - control\" style=\"color: #8f08c4;\">else<\/span><br \/><span class=\"punctuation\">{<\/span><br \/>    <span class=\"comment\" style=\"color: green;\">\/\/ line is intersecting with plane<\/span><br \/><span class=\"punctuation\">}<\/span><\/pre>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>If the dot product is non zero we compute the intersection :\u00a0<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;3.22.7&#8243; background_color=&#8221;#f2f2f2&#8243; border_width_all=&#8221;1px&#8221; border_color_all=&#8221;#d3d3d3&#8243; custom_margin=&#8221;-2px|||||&#8221; custom_padding=&#8221;11px|15px|0px|15px|false|true&#8221; saved_tabs=&#8221;all&#8221;]<\/p>\n<pre style=\"font-family:Consolas;font-size:13px;color:black;\"><span class=\"comment\" style=\"color:green;\">\/\/ line is intersecting wih plane<\/span><br\/><span class=\"comment\" style=\"color:green;\">\/\/ compute the line paramemer <\/span><br\/><span class=\"keyword\" style=\"color:blue;\">double<\/span> <span class=\"local name\" style=\"color:#1f377f;\">parameter<\/span> <span class=\"operator\">=<\/span> <span class=\"identifier - local name - (TRANSIENT)\" style=\"color:#1f377f;\">numerator<\/span> <span class=\"operator\">\/<\/span> <span class=\"identifier - local name - (TRANSIENT)\" style=\"color:#1f377f;\">denominator<\/span><span class=\"punctuation\">;<\/span><br\/><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color:#1f377f;\">intersectionPoint<\/span> <span class=\"operator\">=<\/span> <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color:#1f377f;\">l<\/span><span class=\"operator\">.<\/span><span class=\"identifier - method name - (TRANSIENT)\" style=\"color:#74531f;\">GetEndPoint<\/span><span class=\"punctuation\">(<\/span><span class=\"number\">0<\/span><span class=\"punctuation\">)<\/span> <span class=\"operator - operator - overloaded - (TRANSIENT)\" style=\"color:#74531f;\">+<\/span> <span class=\"identifier - local name - (TRANSIENT)\" style=\"color:#1f377f;\">parameter<\/span> <span class=\"operator - operator - overloaded - (TRANSIENT)\" style=\"color:#74531f;\">*<\/span> <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color:#1f377f;\">l<\/span><span class=\"operator\">.<\/span><span class=\"identifier - property name - (TRANSIENT)\">Direction<\/span><span class=\"punctuation\">;<\/span><\/pre>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>If not, then we check the numerator and we check whether the line is outside or inside the plane.<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;3.22.7&#8243; background_color=&#8221;#f2f2f2&#8243; border_width_all=&#8221;1px&#8221; border_color_all=&#8221;#d3d3d3&#8243; custom_margin=&#8221;-2px|||||&#8221; custom_padding=&#8221;11px|15px|0px|15px|false|true&#8221; saved_tabs=&#8221;all&#8221;]<\/p>\n<pre style=\"font-family:Consolas;font-size:13px;color:black;\"><span class=\"comment\" style=\"color:green;\">\/\/ line is parallel to plane (could be inside or outside the plane)<\/span><br\/><span class=\"keyword - control\" style=\"color:#8f08c4;\">if<\/span> <span class=\"punctuation\">(<\/span><span class=\"class name - identifier - static symbol - (TRANSIENT)\" style=\"color:#2b91af;\">Math<\/span><span class=\"operator\">.<\/span><span class=\"identifier - method name - static symbol - (TRANSIENT)\" style=\"color:#74531f;\">Abs<\/span><span class=\"punctuation\">(<\/span><span class=\"identifier - local name - (TRANSIENT)\" style=\"color:#1f377f;\">numerator<\/span><span class=\"punctuation\">)<\/span><span class=\"operator\">&lt;<\/span><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color:#1f377f;\">tolerance<\/span><span class=\"punctuation\">)<\/span><br\/><span class=\"punctuation\">{<\/span><br\/>    <span class=\"comment\" style=\"color:green;\">\/\/line is inside the plane<\/span><br\/><span class=\"punctuation\">}<\/span><br\/><span class=\"keyword - control\" style=\"color:#8f08c4;\">else<\/span><br\/><span class=\"punctuation\">{<\/span><br\/>    <span class=\"comment\" style=\"color:green;\">\/\/ line is outside the plane<\/span><br\/><span class=\"punctuation\">}<\/span><\/pre>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>In order to represent the line-plane intersection status we can define an enum :<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;3.22.7&#8243; background_color=&#8221;#f2f2f2&#8243; border_width_all=&#8221;1px&#8221; border_color_all=&#8221;#d3d3d3&#8243; custom_margin=&#8221;-2px|||||&#8221; custom_padding=&#8221;11px|15px|0px|15px|false|true&#8221; saved_tabs=&#8221;all&#8221;]<\/p>\n<pre style=\"font-family: Consolas; font-size: 13px; color: black;\"><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">summary<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> The status of line-plane intersection<\/span><br \/><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;\/<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">summary<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/><span class=\"keyword\" style=\"color: blue;\">public<\/span> <span class=\"keyword\" style=\"color: blue;\">enum<\/span> <span class=\"enum name\" style=\"color: #2b91af;\">Plane_Line<\/span><br \/><span class=\"punctuation\">{<\/span><br \/>    <span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">summary<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/>    <span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> Line is completely inside the plane<\/span><br \/>    <span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;\/<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">summary<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/>    <span class=\"enum member name\">Subset<\/span><span class=\"punctuation\">,<\/span><br \/>    <span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">summary<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/>    <span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> Line is parallel to the plane <\/span><br \/>    <span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;\/<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">summary<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/>    <span class=\"enum member name\">Disjoint<\/span><span class=\"punctuation\">,<\/span><br \/>    <span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">summary<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/>    <span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> Line is intersecting with the plane<\/span><br \/>    <span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;\/<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">summary<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/>    <span class=\"enum member name\">Intersecting<\/span><br \/><span class=\"punctuation\">}<\/span><\/pre>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>Below is the complete implementation of the Plane-Line intersection method. Note that we also output the line parameter, this is useful when it is important to know whether the intersection point is inside a bounded line or not. Since we used the first point of the line\u00a0\u00a0<em><strong><span class=\"operator\">.<\/span><span class=\"identifier - method name - (TRANSIENT)\">GetEndPoint<\/span><span class=\"punctuation\">(<\/span><span class=\"number\">0<\/span><\/strong><\/em><span class=\"punctuation\"><em><strong>)<\/strong><\/em> the intersection point is inside the line segment if the parameter is between 0 and the segment length.\u00a0<\/span><\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;3.22.7&#8243; background_color=&#8221;#f2f2f2&#8243; border_width_all=&#8221;1px&#8221; border_color_all=&#8221;#d3d3d3&#8243; custom_margin=&#8221;-2px|||||&#8221; custom_padding=&#8221;11px|15px|0px|15px|false|true&#8221; saved_tabs=&#8221;all&#8221;]<\/p>\n<pre style=\"font-family: Consolas; font-size: 13px; color: black;\"><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">summary<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> Compute Plane-Line intersection<\/span><br \/><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;\/<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">summary<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">param<\/span><span class=\"xml doc comment - attribute name\" style=\"color: gray;\"> name<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">=<\/span><span class=\"xml doc comment - attribute quotes\" style=\"color: gray;\">\"<\/span><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">p<\/span><span class=\"xml doc comment - attribute quotes\" style=\"color: gray;\">\"<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><span class=\"xml doc comment - text\" style=\"color: green;\">This plane<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;\/<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">param<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">param<\/span><span class=\"xml doc comment - attribute name\" style=\"color: gray;\"> name<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">=<\/span><span class=\"xml doc comment - attribute quotes\" style=\"color: gray;\">\"<\/span><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">l<\/span><span class=\"xml doc comment - attribute quotes\" style=\"color: gray;\">\"<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><span class=\"xml doc comment - text\" style=\"color: green;\">Line to intersect with<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;\/<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">param<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">param<\/span><span class=\"xml doc comment - attribute name\" style=\"color: gray;\"> name<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">=<\/span><span class=\"xml doc comment - attribute quotes\" style=\"color: gray;\">\"<\/span><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">tolerance<\/span><span class=\"xml doc comment - attribute quotes\" style=\"color: gray;\">\"<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><span class=\"xml doc comment - text\" style=\"color: green;\">Tolerance<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;\/<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">param<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">param<\/span><span class=\"xml doc comment - attribute name\" style=\"color: gray;\"> name<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">=<\/span><span class=\"xml doc comment - attribute quotes\" style=\"color: gray;\">\"<\/span><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">intersectionPoint<\/span><span class=\"xml doc comment - attribute quotes\" style=\"color: gray;\">\"<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><span class=\"xml doc comment - text\" style=\"color: green;\">The intersection point, Null if it does not exist<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;\/<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">param<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">param<\/span><span class=\"xml doc comment - attribute name\" style=\"color: gray;\"> name<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">=<\/span><span class=\"xml doc comment - attribute quotes\" style=\"color: gray;\">\"<\/span><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">parameter<\/span><span class=\"xml doc comment - attribute quotes\" style=\"color: gray;\">\"<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><span class=\"xml doc comment - text\" style=\"color: green;\">The parameter of the intersection point on the line<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;\/<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">param<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">\/\/\/<\/span><span class=\"xml doc comment - text\" style=\"color: green;\"> <\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&lt;<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">returns<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;&lt;\/<\/span><span class=\"xml doc comment - name\" style=\"color: gray;\">returns<\/span><span class=\"xml doc comment - delimiter\" style=\"color: gray;\">&gt;<\/span><br \/><span class=\"keyword\" style=\"color: blue;\">public<\/span> <span class=\"keyword\" style=\"color: blue;\">static<\/span> <span class=\"enum name - identifier - (TRANSIENT)\" style=\"color: #2b91af;\">Plane_Line<\/span> <span class=\"extension method name - static symbol - (TRANSIENT)\" style=\"color: #74531f;\">Intersect<\/span><span class=\"punctuation\">(<\/span><span class=\"keyword\" style=\"color: blue;\">this<\/span> <span class=\"class name - identifier - (TRANSIENT)\" style=\"color: #2b91af;\">Plane<\/span> <span class=\"parameter name\" style=\"color: #1f377f;\">p<\/span><span class=\"punctuation\">,<\/span> <span class=\"class name - identifier - (TRANSIENT)\" style=\"color: #2b91af;\">Line<\/span> <span class=\"parameter name\" style=\"color: #1f377f;\">l<\/span><span class=\"punctuation\">,<\/span> <span class=\"keyword\" style=\"color: blue;\">double<\/span> <span class=\"parameter name\" style=\"color: #1f377f;\">tolerance<\/span><span class=\"punctuation\">,<\/span> <br \/><span class=\"keyword\" style=\"color: blue;\">out<\/span> <span class=\"class name - identifier - (TRANSIENT)\" style=\"color: #2b91af;\">XYZ<\/span> <span class=\"parameter name\" style=\"color: #1f377f;\">intersectionPoint<\/span><span class=\"punctuation\">,<\/span> <span class=\"keyword\" style=\"color: blue;\">out<\/span> <span class=\"keyword\" style=\"color: blue;\">double<\/span> <span class=\"parameter name\" style=\"color: #1f377f;\">parameter<\/span><span class=\"punctuation\">)<\/span><br \/><span class=\"punctuation\">{<\/span><br \/>    <span class=\"comment\" style=\"color: green;\">\/\/compute the dot prodcut and signed distance <\/span><br \/>    <span class=\"keyword\" style=\"color: blue;\">double<\/span> <span class=\"local name\" style=\"color: #1f377f;\">denominator<\/span> <span class=\"operator\">=<\/span> <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">l<\/span><span class=\"operator\">.<\/span><span class=\"identifier - property name - (TRANSIENT)\">Direction<\/span><span class=\"operator\">.<\/span><span class=\"identifier - method name - (TRANSIENT)\" style=\"color: #74531f;\">DotProduct<\/span><span class=\"punctuation\">(<\/span><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">p<\/span><span class=\"operator\">.<\/span><span class=\"identifier - property name - (TRANSIENT)\">Normal<\/span><span class=\"punctuation\">);<\/span><br \/>    <span class=\"keyword\" style=\"color: blue;\">double<\/span> <span class=\"local name\" style=\"color: #1f377f;\">numerator<\/span> <span class=\"operator\">=<\/span> <span class=\"punctuation\">(<\/span><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">p<\/span><span class=\"operator\">.<\/span><span class=\"identifier - property name - (TRANSIENT)\">Origin<\/span> <span class=\"operator - operator - overloaded - (TRANSIENT)\" style=\"color: #74531f;\">-<\/span> <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">l<\/span><span class=\"operator\">.<\/span><span class=\"identifier - method name - (TRANSIENT)\" style=\"color: #74531f;\">GetEndPoint<\/span><span class=\"punctuation\">(<\/span><span class=\"number\">0<\/span><span class=\"punctuation\">))<\/span><span class=\"operator\">.<\/span><span class=\"identifier - method name - (TRANSIENT)\" style=\"color: #74531f;\">DotProduct<\/span><span class=\"punctuation\">(<\/span><span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">p<\/span><span class=\"operator\">.<\/span><span class=\"identifier - property name - (TRANSIENT)\">Normal<\/span><span class=\"punctuation\">);<\/span><br \/>    <span class=\"comment\" style=\"color: green;\">\/\/check if the dot product is almost zero <\/span><br \/>    <span class=\"keyword - control\" style=\"color: #8f08c4;\">if<\/span> <span class=\"punctuation\">(<\/span><span class=\"class name - identifier - static symbol - (TRANSIENT)\" style=\"color: #2b91af;\">Math<\/span><span class=\"operator\">.<\/span><span class=\"identifier - method name - static symbol - (TRANSIENT)\" style=\"color: #74531f;\">Abs<\/span><span class=\"punctuation\">(<\/span><span class=\"identifier - local name - (TRANSIENT)\" style=\"color: #1f377f;\">denominator<\/span><span class=\"punctuation\">)<\/span> <span class=\"operator\">&lt;<\/span> <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">tolerance<\/span><span class=\"punctuation\">)<\/span><br \/>    <span class=\"punctuation\">{<\/span><br \/>        <span class=\"comment\" style=\"color: green;\">\/\/ line is parallel to plane (could be inside or outside the plane)<\/span><br \/>        <span class=\"keyword - control\" style=\"color: #8f08c4;\">if<\/span> <span class=\"punctuation\">(<\/span><span class=\"class name - identifier - static symbol - (TRANSIENT)\" style=\"color: #2b91af;\">Math<\/span><span class=\"operator\">.<\/span><span class=\"identifier - method name - static symbol - (TRANSIENT)\" style=\"color: #74531f;\">Abs<\/span><span class=\"punctuation\">(<\/span><span class=\"identifier - local name - (TRANSIENT)\" style=\"color: #1f377f;\">numerator<\/span><span class=\"punctuation\">)<\/span> <span class=\"operator\">&lt;<\/span> <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">tolerance<\/span><span class=\"punctuation\">)<\/span><br \/>        <span class=\"punctuation\">{<\/span><br \/>            <span class=\"comment\" style=\"color: green;\">\/\/line is inside the plane<\/span><br \/>            <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">intersectionPoint<\/span> <span class=\"operator\">=<\/span> <span class=\"keyword\" style=\"color: blue;\">null<\/span><span class=\"punctuation\">;<\/span><br \/>            <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">parameter<\/span> <span class=\"operator\">=<\/span> <span class=\"keyword\" style=\"color: blue;\">double<\/span><span class=\"operator\">.<\/span><span class=\"constant name - identifier - static symbol - (TRANSIENT)\">NaN<\/span><span class=\"punctuation\">;<\/span><br \/>            <span class=\"keyword - control\" style=\"color: #8f08c4;\">return<\/span> <span class=\"enum name - identifier - (TRANSIENT)\" style=\"color: #2b91af;\">Plane_Line<\/span><span class=\"operator\">.<\/span><span class=\"enum member name - identifier - (TRANSIENT)\">Subset<\/span><span class=\"punctuation\">;<\/span><br \/>        <span class=\"punctuation\">}<\/span><br \/>        <span class=\"keyword - control\" style=\"color: #8f08c4;\">else<\/span><br \/>        <span class=\"punctuation\">{<\/span><br \/>            <span class=\"comment\" style=\"color: green;\">\/\/ line is outside the plane                    <\/span><br \/>            <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">intersectionPoint<\/span> <span class=\"operator\">=<\/span> <span class=\"keyword\" style=\"color: blue;\">null<\/span><span class=\"punctuation\">;<\/span><br \/>            <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">parameter<\/span> <span class=\"operator\">=<\/span> <span class=\"keyword\" style=\"color: blue;\">double<\/span><span class=\"operator\">.<\/span><span class=\"constant name - identifier - static symbol - (TRANSIENT)\">NaN<\/span><span class=\"punctuation\">;<\/span><br \/>            <span class=\"keyword - control\" style=\"color: #8f08c4;\">return<\/span> <span class=\"enum name - identifier - (TRANSIENT)\" style=\"color: #2b91af;\">Plane_Line<\/span><span class=\"operator\">.<\/span><span class=\"enum member name - identifier - (TRANSIENT)\">Disjoint<\/span><span class=\"punctuation\">;<\/span><br \/>        <span class=\"punctuation\">}<\/span><br \/>    <span class=\"punctuation\">}<\/span><br \/>    <span class=\"keyword - control\" style=\"color: #8f08c4;\">else<\/span><br \/>    <span class=\"punctuation\">{<\/span><br \/>        <span class=\"comment\" style=\"color: green;\">\/\/ line is intersecting wih plane<\/span><br \/>        <span class=\"comment\" style=\"color: green;\">\/\/ compute the line paramemer <\/span><br \/>        <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">parameter<\/span> <span class=\"operator\">=<\/span> <span class=\"identifier - local name - (TRANSIENT)\" style=\"color: #1f377f;\">numerator<\/span> <span class=\"operator\">\/<\/span> <span class=\"identifier - local name - (TRANSIENT)\" style=\"color: #1f377f;\">denominator<\/span><span class=\"punctuation\">;<\/span><br \/>        <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">intersectionPoint<\/span> <span class=\"operator\">=<\/span> <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">l<\/span><span class=\"operator\">.<\/span><span class=\"identifier - method name - (TRANSIENT)\" style=\"color: #74531f;\">GetEndPoint<\/span><span class=\"punctuation\">(<\/span><span class=\"number\">0<\/span><span class=\"punctuation\">)<\/span> <span class=\"operator - operator - overloaded - (TRANSIENT)\" style=\"color: #74531f;\">+<\/span> <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">parameter<\/span> <span class=\"operator - operator - overloaded - (TRANSIENT)\" style=\"color: #74531f;\">*<\/span> <span class=\"identifier - parameter name - (TRANSIENT)\" style=\"color: #1f377f;\">l<\/span><span class=\"operator\">.<\/span><span class=\"identifier - property name - (TRANSIENT)\">Direction<\/span><span class=\"punctuation\">;<\/span><br \/>        <span class=\"keyword - control\" style=\"color: #8f08c4;\">return<\/span> <span class=\"enum name - identifier - (TRANSIENT)\" style=\"color: #2b91af;\">Plane_Line<\/span><span class=\"operator\">.<\/span><span class=\"enum member name - identifier - (TRANSIENT)\">Intersecting<\/span><span class=\"punctuation\">;<\/span><br \/>    <span class=\"punctuation\">}<\/span><br \/><span class=\"punctuation\">}<\/span><\/pre>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Plane and Line intersection in Revit API<\/p>\n","protected":false},"author":1,"featured_media":655,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":""},"categories":[45],"tags":[50,33,47,48],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Plane - Line intersection in Revit API - Parametric Zoo<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Plane - Line intersection in Revit API - Parametric Zoo\" \/>\n<meta property=\"og:description\" content=\"Plane and Line intersection in Revit API\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/\" \/>\n<meta property=\"og:site_name\" content=\"Parametric Zoo\" \/>\n<meta property=\"article:published_time\" content=\"2020-03-07T09:31:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-03-07T09:46:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/03\/plane-line-intersection.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1770\" \/>\n\t<meta property=\"og:image:height\" content=\"1292\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"PARA\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"PARA\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.parametriczoo.com\/#website\",\"url\":\"https:\/\/www.parametriczoo.com\/\",\"name\":\"Parametric Zoo\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.parametriczoo.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/#primaryimage\",\"url\":\"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/03\/plane-line-intersection.jpg\",\"contentUrl\":\"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/03\/plane-line-intersection.jpg\",\"width\":1770,\"height\":1292,\"caption\":\"plane - line intersection\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/\",\"url\":\"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/\",\"name\":\"Plane - Line intersection in Revit API - Parametric Zoo\",\"isPartOf\":{\"@id\":\"https:\/\/www.parametriczoo.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/#primaryimage\"},\"datePublished\":\"2020-03-07T09:31:21+00:00\",\"dateModified\":\"2020-03-07T09:46:33+00:00\",\"author\":{\"@id\":\"https:\/\/www.parametriczoo.com\/#\/schema\/person\/0368c6eb8bfe3a003504793be2a2e0e3\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.parametriczoo.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Plane &#8211; Line intersection in Revit API\"}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.parametriczoo.com\/#\/schema\/person\/0368c6eb8bfe3a003504793be2a2e0e3\",\"name\":\"PARA\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.parametriczoo.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2b2ff0ff40493545df12d0b31a504675?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2b2ff0ff40493545df12d0b31a504675?s=96&d=mm&r=g\",\"caption\":\"PARA\"},\"url\":\"https:\/\/www.parametriczoo.com\/index.php\/author\/para\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Plane - Line intersection in Revit API - Parametric Zoo","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/","og_locale":"en_US","og_type":"article","og_title":"Plane - Line intersection in Revit API - Parametric Zoo","og_description":"Plane and Line intersection in Revit API","og_url":"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/","og_site_name":"Parametric Zoo","article_published_time":"2020-03-07T09:31:21+00:00","article_modified_time":"2020-03-07T09:46:33+00:00","og_image":[{"width":1770,"height":1292,"url":"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/03\/plane-line-intersection.jpg","type":"image\/jpeg"}],"author":"PARA","twitter_card":"summary_large_image","twitter_misc":{"Written by":"PARA","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"https:\/\/www.parametriczoo.com\/#website","url":"https:\/\/www.parametriczoo.com\/","name":"Parametric Zoo","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.parametriczoo.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/#primaryimage","url":"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/03\/plane-line-intersection.jpg","contentUrl":"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/03\/plane-line-intersection.jpg","width":1770,"height":1292,"caption":"plane - line intersection"},{"@type":"WebPage","@id":"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/","url":"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/","name":"Plane - Line intersection in Revit API - Parametric Zoo","isPartOf":{"@id":"https:\/\/www.parametriczoo.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/#primaryimage"},"datePublished":"2020-03-07T09:31:21+00:00","dateModified":"2020-03-07T09:46:33+00:00","author":{"@id":"https:\/\/www.parametriczoo.com\/#\/schema\/person\/0368c6eb8bfe3a003504793be2a2e0e3"},"breadcrumb":{"@id":"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.parametriczoo.com\/index.php\/2020\/03\/07\/plane-line-intersection-in-revit-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.parametriczoo.com\/"},{"@type":"ListItem","position":2,"name":"Plane &#8211; Line intersection in Revit API"}]},{"@type":"Person","@id":"https:\/\/www.parametriczoo.com\/#\/schema\/person\/0368c6eb8bfe3a003504793be2a2e0e3","name":"PARA","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.parametriczoo.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2b2ff0ff40493545df12d0b31a504675?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b2ff0ff40493545df12d0b31a504675?s=96&d=mm&r=g","caption":"PARA"},"url":"https:\/\/www.parametriczoo.com\/index.php\/author\/para\/"}]}},"jetpack_featured_media_url":"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/03\/plane-line-intersection.jpg","_links":{"self":[{"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/posts\/622"}],"collection":[{"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/comments?post=622"}],"version-history":[{"count":0,"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/posts\/622\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/media\/655"}],"wp:attachment":[{"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/media?parent=622"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/categories?post=622"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/tags?post=622"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}