From 996b12b04ab6429a06f0adb89fb8b9bc2122ed79 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Mon, 20 Jul 2020 18:17:00 +0200 Subject: [PATCH 1/5] Solid Distance Node --- docs/nodes/solid/solid_distance.rst | 45 ++++++++ index.md | 1 + nodes/solid/cylinder_solid.py | 2 +- nodes/solid/solid_boolean.py | 9 +- nodes/solid/solid_distance.py | 164 ++++++++++++++++++++++++++++ 5 files changed, 218 insertions(+), 3 deletions(-) create mode 100644 docs/nodes/solid/solid_distance.rst create mode 100644 nodes/solid/solid_distance.py diff --git a/docs/nodes/solid/solid_distance.rst b/docs/nodes/solid/solid_distance.rst new file mode 100644 index 000000000..ade67e214 --- /dev/null +++ b/docs/nodes/solid/solid_distance.rst @@ -0,0 +1,45 @@ +Solid Distance +============== + +Dependencies +------------ + +This node requires FreeCAD_ library to work. + +.. _FreeCAD: ../../solids.rst + +Functionality +------------- + +The node returns the closest point to a vector that is over a solid surface. It will also accept "Solid Faces" and "Solid Edges" + +Options +------- + +**Mode**: Solid, Face or Edge + +Inputs +------ + +All inputs are vectorized and the data will be matched to the longest list + +- **Solid / Solid Face / Solid Edge**: Element to project points to. +- **Vertices**: Vertices to make the analysis over. + +Outputs +------- + +- **Distance**: Minimum distance between point and Element. +- **Closest Point**: Point in element where the distance is minimal +- **Info**: returns a triple per vector with: + - Nearest topology item type (Face, Edge or Vertex) + - Nearest topology item index + - Nearest topology item parameter (UV coords for faces, U for edges and None for vertex) + + +Examples +-------- + +.. image:: https://raw.githubusercontent.com/vicdoval/sverchok/docs_images/images_for_docs/solid/points_inside_solid/points_inside_solid_blender_sverchok_example.png + +.. image:: https://raw.githubusercontent.com/vicdoval/sverchok/docs_images/images_for_docs/solid/points_inside_solid/points_inside_solid_blender_sverchok_example_01.png diff --git a/index.md b/index.md index 07652dbc8..56b326844 100644 --- a/index.md +++ b/index.md @@ -203,6 +203,7 @@ SvMirrorSolidNode SvOffsetSolidNode SvIsInsideSolidNode + SvSolidDistanceNode SvMeshToSolidNode SvSolidToMeshNode SvSolidVerticesNode diff --git a/nodes/solid/cylinder_solid.py b/nodes/solid/cylinder_solid.py index 3ccf39251..134d59101 100644 --- a/nodes/solid/cylinder_solid.py +++ b/nodes/solid/cylinder_solid.py @@ -46,7 +46,7 @@ else: size=3, update=updateNode) direction: FloatVectorProperty( - name="Origin", + name="Direction", default=(0, 0, 1), size=3, update=updateNode) diff --git a/nodes/solid/solid_boolean.py b/nodes/solid/solid_boolean.py index e2e4f16a5..f7045e15d 100644 --- a/nodes/solid/solid_boolean.py +++ b/nodes/solid/solid_boolean.py @@ -9,7 +9,7 @@ else: from bpy.props import BoolProperty, FloatProperty, EnumProperty from sverchok.node_tree import SverchCustomTreeNode from sverchok.data_structure import updateNode, match_long_repeat as mlr - + import Part class SvSolidBooleanNode(bpy.types.Node, SverchCustomTreeNode): """ @@ -94,6 +94,7 @@ else: if self.refine_solid: base = base.removeSplitter() self.outputs[0].sv_set([base]) + def single_intersect(self): solids_a = self.inputs[0].sv_get() solids_b = self.inputs[1].sv_get() @@ -107,12 +108,16 @@ else: base = solids[0].copy() for s in solids[1:]: base = base.common(s) + self.outputs[0].sv_set([base]) + def single_difference(self): solids_a = self.inputs[0].sv_get() solids_b = self.inputs[1].sv_get() solids = [] for solid_a, solid_b in zip(*mlr([solids_a, solids_b])): - solids.append(solid_a.cut(solid_b)) + shape = solid_a.cut(solid_b) + + solids.append(shape) self.outputs[0].sv_set(solids) def multi_difference(self): diff --git a/nodes/solid/solid_distance.py b/nodes/solid/solid_distance.py new file mode 100644 index 000000000..295f6b5e5 --- /dev/null +++ b/nodes/solid/solid_distance.py @@ -0,0 +1,164 @@ + +from sverchok.dependencies import FreeCAD +from sverchok.utils.dummy_nodes import add_dummy + +if FreeCAD is None: + add_dummy('SvSolidDistanceNode', 'Solid Distance', 'FreeCAD') +else: + import bpy + from sverchok.node_tree import SverchCustomTreeNode + from bpy.props import EnumProperty + from sverchok.data_structure import updateNode + from sverchok.data_structure import match_long_repeat as mlr + import Part + from FreeCAD import Base + + class SvSolidDistanceNode(bpy.types.Node, SverchCustomTreeNode): + """ + Triggers: Closest point on Solid + Tooltip: Closest point to a vector on a solid surface, accepts also solid faces and solid edges + """ + bl_idname = 'SvSolidDistanceNode' + bl_label = 'Solid Distance' + bl_icon = 'OUTLINER_OB_EMPTY' + sv_icon = 'SV_POINTS_INSIDE_SOLID' + solid_catergory = "Operators" + + modes = [ + ('Solid', 'Solid', '', 0), + ('Face', 'Face', '', 1), + ('Edge', 'Edge', '', 2), + ('Vertex', 'Vertex', '', 3), + + ] + def set_sockets(self,context): + self.update_sockets() + updateNode(self, context) + + def update_sockets(self): + self.inputs['Solid'].hide_safe = self.mode != 'Solid' + self.inputs['Solid Face'].hide_safe = self.mode != 'Face' + self.inputs['Solid Edge'].hide_safe = self.mode != 'Edge' + self.inputs['Solid B'].hide_safe = self.mode_b != 'Solid' + self.inputs['Solid Face B'].hide_safe = self.mode_b != 'Face' + self.inputs['Solid Edge B'].hide_safe = self.mode_b != 'Edge' + + + mode: EnumProperty( + name="Mode", + description="Algorithm used for conversion", + items=modes[:3], default="Solid", + update=set_sockets) + + mode_b: EnumProperty( + name="Mode", + description="Algorithm used for conversion", + items=modes, default="Solid", + update=set_sockets) + + def sv_init(self, context): + self.inputs.new('SvSolidSocket', "Solid") + self.inputs.new('SvSurfaceSocket', "Solid Face") + self.inputs.new('SvCurveSocket', "Solid Edge") + self.inputs.new('SvSolidSocket', "Solid B") + self.inputs.new('SvSurfaceSocket', "Solid Face B") + self.inputs.new('SvCurveSocket', "Solid Edge B") + self.inputs.new('SvVerticesSocket', "Vertices") + self.outputs.new('SvStringsSocket', "Distance") + self.outputs.new('SvVerticesSocket', "Closest Point") + self.outputs.new('SvStringsSocket', "Info") + self.outputs.new('SvVerticesSocket', "Closest Point B") + self.outputs.new('SvStringsSocket', "Info B") + self.mode= "Solid" + self.mode_b= "Solid" + self.update_sockets() + + def draw_buttons(self, context, layout): + row = layout.row(align=True) + col = row.column(align=True) + col.label(text='From') + col.prop(self, "mode", text="") + col = row.column(align=True) + col.label(text='To') + col.prop(self, "mode_b", text="") + + def process(self): + if not any(socket.is_linked for socket in self.outputs): + return + + + solids_in = self.inputs[self["mode"]].sv_get() + objects_b = self.inputs[self["mode_b"] + 3].sv_get() + # points = self.inputs[6].sv_get() + + + distances_out = [] + closest_points_out = [] + infos_out = [] + closest_points_out_b = [] + infos_out_b = [] + for solid, object_b, in zip(*mlr([solids_in, objects_b])): + distances = [] + closest_points = [] + infos = [] + closest_points_b = [] + infos_b = [] + + if self.mode == 'Solid': + if isinstance(solid, Part.Solid): + shape = solid.OuterShell + else: + shape = solid + elif self.mode == 'Face': + shape = solid.face + else: + shape = solid.edge + + if self.mode_b == 'Vertex': + for v in object_b: + vertex = Part.Vertex(Base.Vector(v)) + + d = shape.distToShape(vertex) + distances.append(d[0]) + closest_points.append(d[1][0][0][:]) + infos.append(d[2][0][0:3]) + else: + if self.mode_b == "Solid": + if isinstance(solid, Part.Solid): + shape_b = object_b.OuterShell + else: + shape_b = object_b + elif self.mode == 'Face': + shape_b = solid.face + else: + shape_b = solid.edge + d = shape.distToShape(shape_b) + distances.append(d[0]) + closest_points.append(d[1][0][0][:]) + infos.append(d[2][0][0:3]) + closest_points_b.append(d[1][0][1][:]) + infos_b.append(d[2][0][3:]) + closest_points_out_b.append(closest_points_b) + infos_out_b.append(infos_b) + + + distances_out.append(distances) + closest_points_out.append(closest_points) + infos_out.append(infos) + + + self.outputs['Distance'].sv_set(distances_out) + self.outputs['Closest Point'].sv_set(closest_points_out) + self.outputs['Info'].sv_set(infos_out) + self.outputs['Closest Point B'].sv_set(closest_points_out_b) + self.outputs['Info B'].sv_set(infos_out_b) + + + +def register(): + if FreeCAD is not None: + bpy.utils.register_class(SvSolidDistanceNode) + +def unregister(): + if FreeCAD is not None: + bpy.utils.unregister_class(SvSolidDistanceNode) -- GitLab From ebfc95a2a8c6849db88d18de142b9487c048f8e6 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Sat, 8 Aug 2020 19:35:31 +0200 Subject: [PATCH 2/5] docs and refactor --- docs/nodes/solid/solid_distance.rst | 27 ++++--- nodes/solid/solid_distance.py | 108 ++++++++++++++-------------- 2 files changed, 71 insertions(+), 64 deletions(-) diff --git a/docs/nodes/solid/solid_distance.rst b/docs/nodes/solid/solid_distance.rst index ade67e214..a21f6f5c2 100644 --- a/docs/nodes/solid/solid_distance.rst +++ b/docs/nodes/solid/solid_distance.rst @@ -11,35 +11,42 @@ This node requires FreeCAD_ library to work. Functionality ------------- -The node returns the closest point to a vector that is over a solid surface. It will also accept "Solid Faces" and "Solid Edges" +The node returns the distance between a Solid, a solid Face or a solid Edge to another Solid (or solid face, solid edge or vertex). + +It will also return which is the closest point between the selected objects and information about where this closest point is. + Options ------- -**Mode**: Solid, Face or Edge +**From**: Solid, Solid Face or Solid Edge + +**To**: Solid, Solid Face, Solid Edge or Vertex Inputs ------ All inputs are vectorized and the data will be matched to the longest list -- **Solid / Solid Face / Solid Edge**: Element to project points to. -- **Vertices**: Vertices to make the analysis over. +- **Solid / Solid Face / Solid Edge**: First element +- ****Solid / Solid Face / Solid Edge / Vertices**: Second element Outputs ------- -- **Distance**: Minimum distance between point and Element. -- **Closest Point**: Point in element where the distance is minimal -- **Info**: returns a triple per vector with: +- **Distance**: Minimum distance. +- **Closest Point A and B**: Points in element where the distance is minimal +- **Info A and B**: returns a triple per element with: - Nearest topology item type (Face, Edge or Vertex) - Nearest topology item index - - Nearest topology item parameter (UV coords for faces, U for edges and None for vertex) + - Nearest topology item parameter (UV coordinates for faces, T for edges and None for vertex) Examples -------- -.. image:: https://raw.githubusercontent.com/vicdoval/sverchok/docs_images/images_for_docs/solid/points_inside_solid/points_inside_solid_blender_sverchok_example.png +.. image:: https://raw.githubusercontent.com/vicdoval/sverchok/docs_images/images_for_docs/solid/solid_distance/solid_distance_blender_sverchok_example_00.png + +.. image:: https://raw.githubusercontent.com/vicdoval/sverchok/docs_images/images_for_docs/solid/solid_distance/solid_distance_blender_sverchok_example_01.png -.. image:: https://raw.githubusercontent.com/vicdoval/sverchok/docs_images/images_for_docs/solid/points_inside_solid/points_inside_solid_blender_sverchok_example_01.png +.. image:: https://raw.githubusercontent.com/vicdoval/sverchok/docs_images/images_for_docs/solid/solid_distance/solid_distance_blender_sverchok_example_03.png diff --git a/nodes/solid/solid_distance.py b/nodes/solid/solid_distance.py index 295f6b5e5..888a02d7f 100644 --- a/nodes/solid/solid_distance.py +++ b/nodes/solid/solid_distance.py @@ -13,10 +13,23 @@ else: import Part from FreeCAD import Base + def get_shape(mode, base_object): + if mode == 'Solid': + if isinstance(base_object, Part.Solid): + shape = base_object.OuterShell + else: + shape = base_object + elif mode == 'Face': + shape = base_object.face + else: + shape = base_object.edge + return shape + + class SvSolidDistanceNode(bpy.types.Node, SverchCustomTreeNode): """ - Triggers: Closest point on Solid - Tooltip: Closest point to a vector on a solid surface, accepts also solid faces and solid edges + Triggers: Closest point on Solids + Tooltip: Distance between solids. Closest point on a solid surface, accepts also solid faces and solid edges """ bl_idname = 'SvSolidDistanceNode' bl_label = 'Solid Distance' @@ -31,17 +44,20 @@ else: ('Vertex', 'Vertex', '', 3), ] - def set_sockets(self,context): + def set_sockets(self, context): self.update_sockets() updateNode(self, context) def update_sockets(self): - self.inputs['Solid'].hide_safe = self.mode != 'Solid' - self.inputs['Solid Face'].hide_safe = self.mode != 'Face' - self.inputs['Solid Edge'].hide_safe = self.mode != 'Edge' + self.inputs['Solid A'].hide_safe = self.mode != 'Solid' + self.inputs['Solid Face A'].hide_safe = self.mode != 'Face' + self.inputs['Solid Edge A'].hide_safe = self.mode != 'Edge' self.inputs['Solid B'].hide_safe = self.mode_b != 'Solid' self.inputs['Solid Face B'].hide_safe = self.mode_b != 'Face' self.inputs['Solid Edge B'].hide_safe = self.mode_b != 'Edge' + self.inputs['Vertices'].hide_safe = self.mode_b != 'Vertex' + self.outputs['Closest Point B'].hide_safe = self.mode_b == 'Vertex' + self.outputs['Info B'].hide_safe = self.mode_b == 'Vertex' mode: EnumProperty( @@ -57,20 +73,20 @@ else: update=set_sockets) def sv_init(self, context): - self.inputs.new('SvSolidSocket', "Solid") - self.inputs.new('SvSurfaceSocket', "Solid Face") - self.inputs.new('SvCurveSocket', "Solid Edge") + self.inputs.new('SvSolidSocket', "Solid A") + self.inputs.new('SvSurfaceSocket', "Solid Face A") + self.inputs.new('SvCurveSocket', "Solid Edge A") self.inputs.new('SvSolidSocket', "Solid B") self.inputs.new('SvSurfaceSocket', "Solid Face B") self.inputs.new('SvCurveSocket', "Solid Edge B") self.inputs.new('SvVerticesSocket', "Vertices") self.outputs.new('SvStringsSocket', "Distance") - self.outputs.new('SvVerticesSocket', "Closest Point") - self.outputs.new('SvStringsSocket', "Info") + self.outputs.new('SvVerticesSocket', "Closest Point A") + self.outputs.new('SvStringsSocket', "Info A") self.outputs.new('SvVerticesSocket', "Closest Point B") self.outputs.new('SvStringsSocket', "Info B") - self.mode= "Solid" - self.mode_b= "Solid" + self.mode = "Solid" + self.mode_b = "Solid" self.update_sockets() def draw_buttons(self, context, layout): @@ -87,69 +103,53 @@ else: return - solids_in = self.inputs[self["mode"]].sv_get() + objects_a = self.inputs[self["mode"]].sv_get() objects_b = self.inputs[self["mode_b"] + 3].sv_get() - # points = self.inputs[6].sv_get() - distances_out = [] - closest_points_out = [] - infos_out = [] + closest_points_out_a = [] + infos_out_a = [] closest_points_out_b = [] infos_out_b = [] - for solid, object_b, in zip(*mlr([solids_in, objects_b])): + + for object_a, object_b, in zip(*mlr([objects_a, objects_b])): distances = [] - closest_points = [] - infos = [] + closest_points_a = [] + infos_a = [] closest_points_b = [] infos_b = [] - - if self.mode == 'Solid': - if isinstance(solid, Part.Solid): - shape = solid.OuterShell - else: - shape = solid - elif self.mode == 'Face': - shape = solid.face - else: - shape = solid.edge + shape = get_shape(self.mode, object_a) if self.mode_b == 'Vertex': for v in object_b: vertex = Part.Vertex(Base.Vector(v)) - d = shape.distToShape(vertex) - distances.append(d[0]) - closest_points.append(d[1][0][0][:]) - infos.append(d[2][0][0:3]) + dist = shape.distToShape(vertex) + distances.append(dist[0]) + closest_points_a.append(dist[1][0][0][:]) + infos_a.append(dist[2][0][0:3]) else: - if self.mode_b == "Solid": - if isinstance(solid, Part.Solid): - shape_b = object_b.OuterShell - else: - shape_b = object_b - elif self.mode == 'Face': - shape_b = solid.face - else: - shape_b = solid.edge - d = shape.distToShape(shape_b) - distances.append(d[0]) - closest_points.append(d[1][0][0][:]) - infos.append(d[2][0][0:3]) - closest_points_b.append(d[1][0][1][:]) - infos_b.append(d[2][0][3:]) + shape_b = get_shape(self.mode_b, object_b) + + dist = shape.distToShape(shape_b) + distances.append(dist[0]) + closest_points_a.append(dist[1][0][0][:]) + infos_a.append(dist[2][0][0:3]) + closest_points_b.append(dist[1][0][1][:]) + infos_b.append(dist[2][0][3:]) + closest_points_out_b.append(closest_points_b) infos_out_b.append(infos_b) distances_out.append(distances) - closest_points_out.append(closest_points) - infos_out.append(infos) + closest_points_out_a.append(closest_points_a) + infos_out_a.append(infos_a) self.outputs['Distance'].sv_set(distances_out) - self.outputs['Closest Point'].sv_set(closest_points_out) - self.outputs['Info'].sv_set(infos_out) + self.outputs['Closest Point A'].sv_set(closest_points_out_a) + self.outputs['Info A'].sv_set(infos_out_a) self.outputs['Closest Point B'].sv_set(closest_points_out_b) self.outputs['Info B'].sv_set(infos_out_b) -- GitLab From cff92679175f351dd373d61f520d67623d52f01b Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Sat, 8 Aug 2020 19:39:30 +0200 Subject: [PATCH 3/5] typo in docs --- docs/nodes/solid/solid_distance.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/nodes/solid/solid_distance.rst b/docs/nodes/solid/solid_distance.rst index a21f6f5c2..c4bbb3a23 100644 --- a/docs/nodes/solid/solid_distance.rst +++ b/docs/nodes/solid/solid_distance.rst @@ -29,14 +29,14 @@ Inputs All inputs are vectorized and the data will be matched to the longest list - **Solid / Solid Face / Solid Edge**: First element -- ****Solid / Solid Face / Solid Edge / Vertices**: Second element +- **Solid / Solid Face / Solid Edge / Vertices**: Second element Outputs ------- - **Distance**: Minimum distance. - **Closest Point A and B**: Points in element where the distance is minimal -- **Info A and B**: returns a triple per element with: +- **Info A and B**: Returns a triple per element with: - Nearest topology item type (Face, Edge or Vertex) - Nearest topology item index - Nearest topology item parameter (UV coordinates for faces, T for edges and None for vertex) -- GitLab From 85ec89fb2cfc8056a08410c4f33e8afb7c7487c6 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Sat, 8 Aug 2020 19:47:37 +0200 Subject: [PATCH 4/5] Icon --- nodes/solid/solid_distance.py | 4 +- ui/icons/sv_solid_distance.png | Bin 0 -> 1488 bytes ui/icons/svg/sv_solid_distance.svg | 211 +++++++++++++++++++++++++++++ 3 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 ui/icons/sv_solid_distance.png create mode 100644 ui/icons/svg/sv_solid_distance.svg diff --git a/nodes/solid/solid_distance.py b/nodes/solid/solid_distance.py index 888a02d7f..e91604192 100644 --- a/nodes/solid/solid_distance.py +++ b/nodes/solid/solid_distance.py @@ -34,7 +34,7 @@ else: bl_idname = 'SvSolidDistanceNode' bl_label = 'Solid Distance' bl_icon = 'OUTLINER_OB_EMPTY' - sv_icon = 'SV_POINTS_INSIDE_SOLID' + sv_icon = 'SV_SOLID_DISTANCE' solid_catergory = "Operators" modes = [ @@ -137,7 +137,7 @@ else: infos_a.append(dist[2][0][0:3]) closest_points_b.append(dist[1][0][1][:]) infos_b.append(dist[2][0][3:]) - + closest_points_out_b.append(closest_points_b) infos_out_b.append(infos_b) diff --git a/ui/icons/sv_solid_distance.png b/ui/icons/sv_solid_distance.png new file mode 100644 index 0000000000000000000000000000000000000000..8661c02f773e8e1beba0ce8718d99a8c9c41ec38 GIT binary patch literal 1488 zcmV;>1uy!EP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11zkx* zK~#90?VDd{TU8v#KlxW(YAR)A^H0)+Zk4%K(T5U*QtdYIA5u_o6vny^0_!Scih>*B z9;UvmQ;H-CeOX0Bn0=5jg>5YAi?waKxzcV_h_kip(x$`pU)quM=fmy2OKYiXlk{A+ zeBeUvIXUNk^UXQ;obx;PLXP_z%Mxkzz#G5=cTs*6I01w+DM}@NKvsB60L3cAW&-=7 z^EUxpE*Bn;XW4=x!j&sm03HHf1-{6Jz-+VF04KnfEnC>XfB&)tMI`k*&df_&8?34Y zs3vECY5}Ur8K7E#YVLaj77v5z-~e6%=70{gS)%D#Y`_#ie}6y6j~`#QpopZNdVs%y z4fE$?Kpk)#m79u$YeA;2t9we~+@Wh`z1t-uUWvqauf z{DZa-`m(;ho?tKtKt)9bd-m+f6OlH+2ShR_*?d$2Qd3hSsT?_SL~kLzK!I9`*~Jd@ z0TKuV3fBKQdLzY zv$L~?38zk-5{tzmXmf;8wKB8IgTSwV?Ay0*!N_p*=uy2ZTm=f1s?0Kv0Dl3}+}yli zWT>sJ)lE1{W~bt&;~8MWX0yrZ)29s+;_HcasQ{kj1!tfiQxc8Ax3cYqUax0^s9!1(w$ z2M!!yVq#(zt*cA|&jHT^j{%m4M4pCsWbpV zfc5Lw)7aR^&Ye4PI@8;Do}QlO{Q2_)gF#}kn4bI=5CHQSumSi3DDZeZw6wHPRFv5% z!PwXse!riAfdSAS>UaXUVHN}420jHidGaLX<>f}k;NT#Wlas5eG(SI|;^I3Guk`ix zQCC-|?`gb;b{{eYX8_r{b*prBbxBuOmvnY^%J%Ks)4ustS653%M~6}Gwr$(=ydS|l zdxMVwc)eaDVPIf@3l}b=U2!NB;@Y)q#(7CeiT=?8<_SpT0p#V~8Sba1rc(3Y1%6*) zolh~}ty1esxketC$AJH%8wjni%>LA!{JEHPb)BxT35<7l3<<|Fai*bMvVlo*UP3&o6@eh zxVShq2*U92u>SD|n5PAF06Q*Sx!{x7!)eoN?^HM?jp+?+wlXAG7GbXQmdA%Hu#S+WQ7> q;Nex)GY$*_zX0E&z0{E-m45+u+@z62Q**)q0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + -- GitLab From 121d097bfff7faedcadf60e5d9e2b7d32360afe9 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Sat, 8 Aug 2020 20:09:29 +0200 Subject: [PATCH 5/5] docs to index --- docs/nodes/solid/solid_index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/nodes/solid/solid_index.rst b/docs/nodes/solid/solid_index.rst index 8a58a88ad..da162b84c 100644 --- a/docs/nodes/solid/solid_index.rst +++ b/docs/nodes/solid/solid_index.rst @@ -17,6 +17,7 @@ Solid mirror_solid offset_solid points_inside_solid + solid_distance mesh_to_solid solid_to_mesh solid_faces -- GitLab