Esempio n. 1
0
# recorded in the version control history of the file, available from
# its original location https://github.com/nortikin/sverchok/commit/master
#
# SPDX-License-Identifier: GPL3
# License-Filename: LICENSE

import bpy
from bpy.props import BoolProperty, FloatProperty, EnumProperty

from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import updateNode, zip_long_repeat, map_recursive
from sverchok.dependencies import FreeCAD
from sverchok.utils.dummy_nodes import add_dummy

if FreeCAD is None:
    add_dummy('SvSolidCenterOfMassNode', 'Center of Mass', 'FreeCAD')
else:
    import Part


class SvSolidCenterOfMassNode(bpy.types.Node, SverchCustomTreeNode):
    """
    Triggers: Center of Mass
    Tooltip: Calculate center of mass (barycenter) of a Solid object
    """
    bl_idname = 'SvSolidCenterOfMassNode'
    bl_label = 'Center of Mass'
    bl_icon = 'OUTLINER_OB_EMPTY'
    solid_catergory = "Operators"

    def sv_init(self, context):
Esempio n. 2
0
import json

import bpy
from bpy.props import EnumProperty, StringProperty

from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import updateNode
from sverchok.utils.curve.nurbs import SvNurbsCurve, SvGeomdlCurve
from sverchok.utils.surface.nurbs import SvNurbsSurface, SvGeomdlSurface
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.dependencies import geomdl

if geomdl is None:
    add_dummy('SvExNurbsToJsonNode', "NURBS to JSON", 'geomdl')
else:
    # FIXME: Ugly temporary hack... Has to be replaced after
    # https://github.com/orbingol/NURBS-Python/issues/76 is fixed.
    from geomdl import _exchange
    from geomdl import multi

    class SvExNurbsToJsonOp(bpy.types.Operator):
        "NURBS to JSON"
        bl_idname = "node.sv_ex_nurbs_to_json"
        bl_label = "NURBS to JSON"
        bl_options = {'REGISTER', 'INTERNAL'}

        nodename: StringProperty(name='nodename')
        treename: StringProperty(name='treename')

        def execute(self, context):
Esempio n. 3
0
#
# SPDX-License-Identifier: GPL3
# License-Filename: LICENSE

import bpy
from bpy.props import FloatProperty, StringProperty, BoolProperty, EnumProperty, IntProperty

from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import updateNode, ensure_nesting_level, zip_long_repeat, throttle_and_update_node, get_data_nesting_level
from sverchok.utils.field.scalar import SvScalarField
from sverchok.utils.voronoi3d import Bounds, lloyd3d_bounded
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.dependencies import scipy

if scipy is None:
    add_dummy('SvLloyd3dNode', "Lloyd 3D", 'scipy')


class SvLloyd3dNode(bpy.types.Node, SverchCustomTreeNode):
    """
    Triggers: Lloyd Mesh
    Tooltip: Redistribute 3D points within bounding box or sphere uniformly by use of Lloyd's algorithm
    """
    bl_idname = 'SvLloyd3dNode'
    bl_label = 'Lloyd 3D'
    bl_icon = 'OUTLINER_OB_EMPTY'
    sv_icon = 'SV_VORONOI'

    iterations: IntProperty(name="Iterations",
                            description="Number of Lloyd algorithm iterations",
                            min=0,
Esempio n. 4
0
from sverchok.dependencies import FreeCAD
from sverchok.utils.dummy_nodes import add_dummy

if FreeCAD is None:
    add_dummy('SvToursSolidNode', 'Torus (Solid)', 'FreeCAD')
else:

    import bpy
    from bpy.props import FloatProperty, FloatVectorProperty

    from sverchok.node_tree import SverchCustomTreeNode
    from sverchok.data_structure import updateNode, match_long_repeat as mlr
    import Part
    from FreeCAD import Base

    class SvToursSolidNode(bpy.types.Node, SverchCustomTreeNode):
        """
        Triggers: Torus Cylinder
        Tooltip: Create Solid Torus
        """
        bl_idname = 'SvToursSolidNode'
        bl_label = 'Torus (Solid)'
        bl_icon = 'MESH_TORUS'
        solid_catergory = "Inputs"

        cylinder_radius: FloatProperty(name="Radius R",
                                       default=1,
                                       precision=4,
                                       update=updateNode)
        cylinder_radius_top: FloatProperty(name="Radius r",
                                           default=0.25,
Esempio n. 5
0
import numpy as np

import bpy
from bpy.props import FloatProperty, EnumProperty, BoolProperty, IntProperty, StringProperty
from mathutils import Vector, Matrix

from sverchok.node_tree import SverchCustomTreeNode, throttled
from sverchok.data_structure import updateNode, zip_long_repeat, match_long_repeat, ensure_nesting_level
from sverchok.utils.logging import info, exception
from sverchok.utils.field.scalar import SvScalarField
from sverchok.dependencies import skimage
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.utils.marching_squares import make_contours

if skimage is None:
    add_dummy('SvExMarchingSquaresNode', "Marching Squares", 'skimage')
else:
    from skimage import measure

    class SvExMarchingSquaresNode(bpy.types.Node, SverchCustomTreeNode):
        """
        Triggers: Marching Squares
        Tooltip: Marching Squares
        """
        bl_idname = 'SvExMarchingSquaresNode'
        bl_label = 'Marching Squares'
        bl_icon = 'OUTLINER_OB_EMPTY'
        sv_icon = 'SV_EX_MSQUARES'

        iso_value: FloatProperty(name="Value", default=1.0, update=updateNode)
Esempio n. 6
0
import numpy as np

import bpy
from bpy.props import FloatProperty, EnumProperty, BoolProperty, IntProperty

from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import updateNode, zip_long_repeat, get_data_nesting_level, ensure_nesting_level
from sverchok.utils.sv_bmesh_utils import bmesh_from_pydata
from sverchok.utils.field.rbf import mesh_field
from sverchok.dependencies import scipy
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.utils.math import rbf_functions

if scipy is None:
    add_dummy('SvMeshSurfaceFieldNode', "Mesh Smoothed Surface Field", 'scipy')


class SvMeshSurfaceFieldNode(bpy.types.Node, SverchCustomTreeNode):
    """
    Triggers: Mesh Surface Field
    Tooltip: Generate scalar field, defining a smoothed surface of the mesh
    """
    bl_idname = 'SvMeshSurfaceFieldNode'
    bl_label = 'Mesh Smoothed Surface Field'
    bl_icon = 'OUTLINER_OB_EMPTY'

    function: EnumProperty(name="Function",
                           items=rbf_functions,
                           default='multiquadric',
                           update=updateNode)
Esempio n. 7
0
from sverchok.dependencies import FreeCAD
from sverchok.utils.dummy_nodes import add_dummy

if FreeCAD is None:
    add_dummy('SvSolidEdgesNode', 'Solid Edges', 'FreeCAD')
else:
    import numpy as np
    import bpy
    from bpy.props import BoolProperty
    from sverchok.node_tree import SverchCustomTreeNode
    from sverchok.data_structure import updateNode
    from sverchok.utils.curve.freecad import SvSolidEdgeCurve

    class SvSolidEdgesNode(bpy.types.Node, SverchCustomTreeNode):
        """
        Triggers: Solid Edges
        Tooltip: Get Edges from Solid
        """
        bl_idname = 'SvSolidEdgesNode'
        bl_label = 'Solid Edges (Curves)'
        bl_icon = 'EDGESEL'
        solid_catergory = "Outputs"

        flat_output: BoolProperty(name="Flat Output",
                                  default=False,
                                  update=updateNode)

        nurbs_output: BoolProperty(
            name="NURBS Output",
            description="Output curves in NURBS representation",
            default=False,
Esempio n. 8
0
from sverchok.dependencies import FreeCAD
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.utils.sv_operator_mixins import SvGenericNodeLocator

if FreeCAD is None:
    add_dummy('SvFCStdSpreadsheetNode', 'SvFCStdSpreadsheetNode', 'FreeCAD')

else:
    F = FreeCAD
    import bpy
    from bpy.props import StringProperty, IntProperty, BoolProperty, EnumProperty, FloatProperty
    from sverchok.node_tree import SverchCustomTreeNode
    from sverchok.data_structure import updateNode
    from sverchok.utils.logging import info

    class SvFCStdSpreadsheetOperator(bpy.types.Operator, SvGenericNodeLocator):

        bl_idname = "node.sv_fcstd_spreadsheet_operator"
        bl_label = "read/write freecad spreadsheet"
        bl_options = {'INTERNAL', 'REGISTER'}

        def execute(self, context):
            node = self.get_node(context)

            if not node: return {'CANCELLED'}     

            node.edit_spreadsheet(node)
            updateNode(node,context)

            return {'FINISHED'}
Esempio n. 9
0
import copy
import numpy as np

import bpy
from bpy.props import FloatProperty, BoolVectorProperty, BoolProperty, IntProperty
from mathutils import Matrix
from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import updateNode, numpy_full_list, has_element
from sverchok.utils.nodes_mixins.recursive_nodes import SvRecursiveNode
from sverchok.utils.dummy_nodes import add_dummy

from sverchok_open3d.dependencies import open3d as o3d
from sverchok_open3d.utils.triangle_mesh import triangle_mesh_viewer_map, calc_normals, calc_tris_areas

if o3d is None:
    add_dummy('SvO3TriangleMeshPokeNode', 'O3D Triangle Mesh Poke', 'open3d')
else:

    vec_3f = o3d.utility.Vector3dVector
    vec_2f = o3d.utility.Vector2dVector
    vec_3i = o3d.utility.Vector3iVector
    vec_1i = o3d.utility.IntVector

    def get_normals(triangle_mesh, np_verts, np_faces, mask):
        if triangle_mesh.has_triangle_normals():
            normals = np.asarray(triangle_mesh.triangle_normals)[mask]
        else:
            normals = calc_normals([np_verts, np_faces[mask]], v_normals=False, output_numpy=True, as_array=True)
        return normals

    def spread_vertex_attrib(triangle_mesh, np_faces_masked, attribute):
Esempio n. 10
0
from sverchok.dependencies import FreeCAD
from sverchok.utils.dummy_nodes import add_dummy

if FreeCAD is None:
    add_dummy('SvSolidToMeshNode', 'Solid to Mesh', 'FreeCAD')
else:
    import math
    import bpy
    from bpy.props import FloatProperty, EnumProperty, BoolProperty, IntProperty

    from sverchok.node_tree import SverchCustomTreeNode
    from sverchok.data_structure import updateNode, match_long_repeat as mlr

    import MeshPart

    class SvSolidToMeshNode(bpy.types.Node, SverchCustomTreeNode):
        """
        Triggers: Solid to Mesh
        Tooltip: Generate mesh from solid
        """
        bl_idname = 'SvSolidToMeshNode'
        bl_label = 'Solid to Mesh'
        bl_icon = 'MESH_CUBE'
        sv_icon = 'SV_SOLID_TO_MESH'
        solid_catergory = "Outputs"

        replacement_nodes = [('SvSolidToMeshNodeMk2', None, None)]

        modes = [
            ('Basic', 'Basic', '', 0),
            ('Standard', 'Standard', '', 1),
Esempio n. 11
0
import numpy as np

import bpy
from bpy.props import FloatProperty, EnumProperty, BoolProperty
from mathutils import Matrix

from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import (updateNode, zip_long_repeat,
                                     ensure_nesting_level,
                                     get_data_nesting_level)
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.dependencies import scipy
from sverchok.utils.surface.rbf import SvRbfSurface

if scipy is None:
    add_dummy('SvExMinimalSurfaceNode', "Minimal Surface", 'scipy')
else:
    from scipy.interpolate import Rbf

    class SvExMinimalSurfaceNode(bpy.types.Node, SverchCustomTreeNode):
        """
        Triggers: Minimal Surface
        Tooltip: Minimal Surface
        """
        bl_idname = 'SvExMinimalSurfaceNode'
        bl_label = 'Minimal Surface'
        bl_icon = 'OUTLINER_OB_EMPTY'
        sv_icon = 'SV_EX_MINSURFACE'

        def update_sockets(self, context):
            self.inputs['Matrix'].hide_safe = self.coord_mode == 'UV'
Esempio n. 12
0
import numpy as np

import bpy
from bpy.props import FloatProperty, EnumProperty, BoolProperty, IntProperty

import sverchok
from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import updateNode, zip_long_repeat, ensure_nesting_level, get_data_nesting_level
from sverchok.utils.logging import info, exception
from sverchok.utils.curve import SvCurve
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.dependencies import scipy
from sverchok.utils.manifolds import ortho_project_curve

if scipy is None:
    add_dummy('SvExOrthoProjectCurveNode', "Ortho Project on Curve", 'scipy')
else:

    class SvExOrthoProjectCurveNode(bpy.types.Node, SverchCustomTreeNode):
        """
        Triggers: Ortho Project Curve
        Tooltip: Find the orthogonal projection of the point onto the curve
        """
        bl_idname = 'SvExOrthoProjectCurveNode'
        bl_label = 'Ortho Project on Curve'
        bl_icon = 'OUTLINER_OB_EMPTY'
        sv_icon = 'SV_ORTHO_CURVE'

        samples: IntProperty(name="Init Resolution",
                             default=5,
                             min=3,
Esempio n. 13
0
import numpy as np

import bpy
from bpy.props import BoolProperty

from sverchok.node_tree import SverchCustomTreeNode, throttled
from sverchok.data_structure import zip_long_repeat, ensure_nesting_level, get_data_nesting_level, updateNode
from sverchok.utils.curve.core import SvCurve
from sverchok.utils.surface.freecad import curves_to_face
from sverchok.utils.dummy_nodes import add_dummy

from sverchok.dependencies import FreeCAD

if FreeCAD is None:
    add_dummy('SvSolidWireFaceNode', 'Face from Curves (Solid)', 'FreeCAD')
else:
    import Part
    from FreeCAD import Base

class SvSolidWireFaceNode(bpy.types.Node, SverchCustomTreeNode):
    """
    Triggers: Solid Face Wire Curve
    Tooltip: Make a Face of a Solid from it's boundary edges (wire) defined by one or several Curves
    """
    bl_idname = 'SvSolidWireFaceNode'
    bl_label = "Face from Curves (Solid)"
    bl_icon = 'EDGESEL'
    sv_icon = 'SV_CURVES_FACE'
    solid_catergory = "Inputs"
Esempio n. 14
0
from sverchok.dependencies import FreeCAD
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.utils.sv_operator_mixins import SvGenericNodeLocator

if FreeCAD is None:
    add_dummy('SvWriteFCStdNode', 'SvWriteFCStdNode', 'FreeCAD')

else:
    F = FreeCAD
    import bpy
    from bpy.props import StringProperty, BoolProperty, EnumProperty
    from sverchok.node_tree import SverchCustomTreeNode  # OLD throttled
    from sverchok.data_structure import updateNode, match_long_repeat  # NEW throttle_and_update_node
    from sverchok.utils.logging import info

    class SvWriteFCStdOperator(bpy.types.Operator, SvGenericNodeLocator):

        bl_idname = "node.sv_write_fcstd_operator"
        bl_label = "write freecad file"
        bl_options = {'INTERNAL', 'REGISTER'}

        def execute(self, context):
            node = self.get_node(context)

            if not node: return {'CANCELLED'}

            node.write_FCStd(node)
            updateNode(node, context)

            return {'FINISHED'}
Esempio n. 15
0
import bpy
from bpy.props import FloatProperty, EnumProperty, BoolProperty, IntProperty
import bmesh
from mathutils import Matrix

import sverchok
from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import updateNode, zip_long_repeat, ensure_nesting_level, get_data_nesting_level
from sverchok.utils.sv_mesh_utils import polygons_to_edges, mesh_join
from sverchok.utils.sv_bmesh_utils import pydata_from_bmesh, bmesh_from_pydata
from sverchok.utils.logging import info, exception
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.dependencies import scipy

if scipy is None:
    add_dummy('SvExDelaunay3DNode', "Delaunay 3D", 'scipy')
else:
    from scipy.spatial import Delaunay

    class SvExDelaunay3DNode(bpy.types.Node, SverchCustomTreeNode):
        """
        Triggers: Delaunay 3D
        Tooltip: Generate 3D Delaunay Triangulation
        """
        bl_idname = 'SvExDelaunay3DNode'
        bl_label = 'Delaunay 3D'
        bl_icon = 'OUTLINER_OB_EMPTY'
        sv_icon = 'SV_VORONOI'

        join: BoolProperty(name="Join", default=False, update=updateNode)
Esempio n. 16
0
import copy
import numpy as np

import bpy
from bpy.props import BoolProperty

from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import updateNode
from sverchok.utils.nodes_mixins.recursive_nodes import SvRecursiveNode
from sverchok.utils.dummy_nodes import add_dummy

from sverchok_open3d.dependencies import open3d as o3d
from sverchok_open3d.utils.triangle_mesh import clean_doubled_faces, triangle_mesh_viewer_map

if o3d is None:
    add_dummy('SvO3TriangleMeshCleanNode', 'Triangle Mesh Clean', 'open3d')
else:

    class SvO3TriangleMeshCleanNode(bpy.types.Node, SverchCustomTreeNode,
                                    SvRecursiveNode):
        """
        Triggers: Triangle Mesh Clean
        Tooltip: Open3d Triangle Mesh Clean
        """
        bl_idname = 'SvO3TriangleMeshCleanNode'
        bl_label = 'Triangle Mesh Clean'
        bl_icon = 'MESH_DATA'

        viewer_map = triangle_mesh_viewer_map

        normalize_normals: BoolProperty(
Esempio n. 17
0
from bpy.props import FloatProperty, EnumProperty, BoolProperty, IntProperty
from mathutils import Matrix
from mathutils.bvhtree import BVHTree

import sverchok
from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import (updateNode, zip_long_repeat, ensure_nesting_level,
                                     throttle_and_update_node, repeat_last_for_length)
from sverchok.utils.logging import info, exception
from sverchok.utils.surface import SvSurface
from sverchok.utils.manifolds import raycast_surface
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.dependencies import scipy

if scipy is None:
    add_dummy('SvExRaycastSurfaceNode', "Raycast on Surface", 'scipy')
else:

    class SvExRaycastSurfaceNode(bpy.types.Node, SverchCustomTreeNode):
        """
        Triggers: Raycast on Surface
        Tooltip: Raycast on Surface
        """
        bl_idname = 'SvExRaycastSurfaceNode'
        bl_label = 'Raycast on Surface'
        bl_icon = 'OUTLINER_OB_EMPTY'
        sv_icon = 'SV_SURFACE_RAYCAST'

        samples : IntProperty(
            name = "Init Resolution",
            default = 10,
Esempio n. 18
0
import numpy as np

import bpy
from bpy.props import BoolProperty, EnumProperty, FloatVectorProperty, FloatProperty

from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import zip_long_repeat, ensure_nesting_level, updateNode
from sverchok.utils.surface.core import SvSurface
from sverchok.utils.surface.freecad import surface_to_freecad, is_solid_face_surface
from sverchok.utils.dummy_nodes import add_dummy

from sverchok.dependencies import FreeCAD

if FreeCAD is None:
    add_dummy('SvSolidFaceSolidifyNode', 'Solidify Face (Solid)', 'FreeCAD')
else:
    import Part
    from FreeCAD import Base

class SvSolidFaceSolidifyNode(bpy.types.Node, SverchCustomTreeNode):
    """
    Triggers: Soldify Solid Face Offset Thickness
    Tooltip: Make a Solid by offsetting (adding thickness, solidifying) a Face of a Solid
    """
    bl_idname = 'SvSolidFaceSolidifyNode'
    bl_label = 'Solidify Face (Solid)'
    bl_icon = 'EDGESEL'
    sv_icon = 'SV_SOLIDIFY_FACE'
    solid_catergory = "Operators"
Esempio n. 19
0
import bpy
from bpy.props import FloatProperty, EnumProperty, BoolProperty, IntProperty
from mathutils import Vector

from sverchok.node_tree import SverchCustomTreeNode, throttled
from sverchok.data_structure import updateNode, zip_long_repeat, fullList, ensure_nesting_level
from sverchok.utils.logging import info, exception
from sverchok.utils.sv_mesh_utils import polygons_to_edges
from sverchok.utils.sv_bmesh_utils import bmesh_from_pydata, edge_data_from_bmesh_edges
from sverchok.utils.geom import PlaneEquation, center
from sverchok.utils.surface.nurbs import SvGeomdlSurface
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.dependencies import geomdl

if geomdl is None:
    add_dummy('SvExQuadsToNurbsNode', "Quads to NURBS", 'geomdl')
else:
    from geomdl import NURBS, BSpline, knotvector

    class SvExQuadsToNurbsNode(bpy.types.Node, SverchCustomTreeNode):
        """
        Triggers: Quad to NURBS
        Tooltip: Make a smooth NURBS surface patch from each quad face
        """
        bl_idname = 'SvExQuadsToNurbsNode'
        bl_label = 'Quads to NURBS'
        bl_icon = 'SURFACE_NSURFACE'

        degree_u: IntProperty(name="Degree U",
                              min=2,
                              max=4,
import bpy
from bpy.props import FloatProperty, EnumProperty, BoolProperty, IntProperty, BoolVectorProperty
from mathutils import Matrix

import sverchok
from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import updateNode, zip_long_repeat, fullList, match_long_repeat
from sverchok.utils.nodes_mixins.recursive_nodes import SvRecursiveNode
from sverchok.utils.dummy_nodes import add_dummy

from sverchok_open3d.dependencies import open3d as o3d
from sverchok_open3d.utils.triangle_mesh import triangle_mesh_viewer_map

if o3d is None:
    add_dummy('SvO3TriangleMeshFromPointCloudNode', 'Triangle Mesh from Point Cloud', 'open3d')
else:
    class SvO3TriangleMeshFromPointCloudNode(bpy.types.Node, SverchCustomTreeNode, SvRecursiveNode):
        """
        Triggers: Mesh from Point Cloud
        Tooltip: Mesh from Point Cloud
        """
        bl_idname = 'SvO3TriangleMeshFromPointCloudNode'
        bl_label = 'Triangle Mesh from Point Cloud'
        bl_icon = 'MESH_DATA'
        sv_icon = 'SV_RANDOM_NUM_GEN'
        viewer_map = triangle_mesh_viewer_map
        methods = [
            ('ALPHA', "Alpha Shape", "Alpha Shape", 0),
            ('BALL_PIVOTING', "Ball Pivoting", "Ball Pivoting algorithm (Slow)", 1),
            ('POISSON', "Poisson", "Poisson Reconstruction (Fast)", 2),
Esempio n. 21
0
import bpy
from bpy.props import StringProperty, EnumProperty

from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import flatten_data, map_recursive, zip_long_repeat, ensure_nesting_level, get_data_nesting_level
from sverchok.utils.curve.core import SvCurve
from sverchok.utils.surface.core import SvSurface
from sverchok.dependencies import FreeCAD
from sverchok.utils.dummy_nodes import add_dummy

if FreeCAD is None:
    add_dummy('SvCompoundSolidNode', 'Compound Solid', 'FreeCAD')
else:

    from FreeCAD import Part
    try:
        import Part as PartModule
    except ImportError:
        PartModule = Part

    from sverchok.utils.solid import to_solid

    class SvCompoundSolidNode(bpy.types.Node, SverchCustomTreeNode):
        """
        Triggers: Compound Solid
        Tooltip: Make Compound Solid object out of Solids, Curves and Surfaces
        """
        bl_idname = 'SvCompoundSolidNode'
        bl_label = 'Compound Solid'
        bl_icon = 'STICKY_UVS_LOC'
        solid_catergory = "Outputs"
Esempio n. 22
0
from math import pi
import bpy
from bpy.props import FloatProperty, EnumProperty, BoolProperty, IntProperty
from mathutils import Vector, Matrix

from sverchok.node_tree import SverchCustomTreeNode, throttled
from sverchok.data_structure import updateNode, zip_long_repeat, ensure_nesting_level
from sverchok.utils.curve import SvCircle
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.dependencies import circlify

if circlify is None:
    add_dummy('SvExCirclifyNode', "Circlify", 'circlify')
else:

    class SvExCirclifyNode(bpy.types.Node, SverchCustomTreeNode):
        """
        Triggers: Circlify
        Tooltip: Generate circles packed into a larger circle
        """
        bl_idname = 'SvExCirclifyNode'
        bl_label = 'Circlify'
        bl_icon = 'MESH_CIRCLE'
        sv_icon = 'SV_CIRCLIFY'

        major_radius : FloatProperty(
            name = "Major Radius",
            default = 1.0,
            update = updateNode)
Esempio n. 23
0
import numpy as np

import bpy
from bpy.props import FloatProperty, EnumProperty, BoolProperty, IntProperty

from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import updateNode, zip_long_repeat, ensure_nesting_level
from sverchok.utils.curve import SvBezierCurve
from sverchok.utils.geom import linear_approximation, Spline
from sverchok.dependencies import scipy
from sverchok.utils.dummy_nodes import add_dummy

if scipy is None:
    add_dummy('SvExBezierCurveFitNode', "Approximate Bezier Curve", 'scipy')
else:
    from scipy.optimize import curve_fit

    def init_guess(verts, npoints):
        approx = linear_approximation(verts)
        line = approx.most_similar_line()
        projections = line.projection_of_points(verts)
        m = projections.min(axis=0)
        M = projections.max(axis=0)
        return np.linspace(m, M, num=npoints)

    def goal(ts, *xs):
        n3 = len(xs)
        n = n3 // 3
        control_points = np.array(xs).reshape((n,3))
        curve = SvBezierCurve(control_points)
Esempio n. 24
0
import bpy
from bpy.props import BoolProperty, IntProperty

from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import updateNode, zip_long_repeat, get_data_nesting_level, ensure_nesting_level
from sverchok.utils.curve.nurbs import SvGeomdlCurve
from sverchok.dependencies import geomdl
from sverchok.utils.dummy_nodes import add_dummy

if geomdl is None:
    add_dummy('SvExApproxNurbsCurveNode', "Approximate NURBS Curve", 'geomdl')
else:
    from geomdl import fitting

    class SvExApproxNurbsCurveNode(bpy.types.Node, SverchCustomTreeNode):
        """
        Triggers: NURBS Curve
        Tooltip: Approximate NURBS Curve
        """
        bl_idname = 'SvExApproxNurbsCurveNode'
        bl_label = 'Approximate NURBS Curve'
        bl_icon = 'CURVE_NCURVE'

        replacement_nodes = [('SvApproxNurbsCurveMk2Node', None, None)]

        degree: IntProperty(name="Degree",
                            min=2,
                            max=6,
                            default=3,
                            update=updateNode)
Esempio n. 25
0
import numpy as np

import bpy
from bpy.props import BoolProperty, EnumProperty, FloatVectorProperty, FloatProperty

from sverchok.node_tree import SverchCustomTreeNode, throttled
from sverchok.data_structure import zip_long_repeat, ensure_nesting_level, updateNode, repeat_last_for_length, get_data_nesting_level
from sverchok.utils.surface.core import SvSurface
from sverchok.utils.surface.freecad import SvSolidFaceSurface, surface_to_freecad, is_solid_face_surface
from sverchok.utils.dummy_nodes import add_dummy

from sverchok.dependencies import FreeCAD

if FreeCAD is None:
    add_dummy('SvHollowSolidNode', 'Hollow Solid', 'FreeCAD')
else:
    import Part
    from FreeCAD import Base


class SvHollowSolidNode(bpy.types.Node, SverchCustomTreeNode):
    """
    Triggers: Hollow Solid
    Tooltip: Make a hollow solid shell out a solid body
    """
    bl_idname = 'SvHollowSolidNode'
    bl_label = 'Hollow Solid'
    bl_icon = 'MOD_THICKNESS'
    sv_icon = 'SV_HOLLOW_SOLID'
    solid_catergory = "Operators"
Esempio n. 26
0
from sverchok.utils.logging import info, exception
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.dependencies import scipy


def to_radius(r, v, c):
    x, y, z = v
    x0, y0, z0 = c
    v = x - x0, y - y0, z - z0
    rho, phi, theta = to_spherical(v, "radians")
    x, y, z = from_spherical(r, phi, theta, "radians")
    return x + x0, y + y0, z + z0


if scipy is None:
    add_dummy('SvExVoronoiSphereNode', "Voronoi Sphere", 'scipy')
else:
    from scipy.spatial import SphericalVoronoi

    class SvExVoronoiSphereNode(bpy.types.Node, SverchCustomTreeNode):
        """
        Triggers: Voronoi Sphere
        Tooltip: Generate Voronoi diagram on the surface of the sphere
        """
        bl_idname = 'SvExVoronoiSphereNode'
        bl_label = 'Voronoi Sphere'
        bl_icon = 'OUTLINER_OB_EMPTY'
        sv_icon = 'SV_VORONOI'

        radius: FloatProperty(name="Radius",
                              default=1.0,
Esempio n. 27
0
import bpy
from bpy.props import StringProperty, EnumProperty

from sverchok.node_tree import SverchCustomTreeNode, throttled
from sverchok.data_structure import flatten_data, map_recursive
from sverchok.utils.curve.core import SvCurve
from sverchok.utils.surface.core import SvSurface
from sverchok.utils.logging import debug
from sverchok.dependencies import FreeCAD
from sverchok.utils.dummy_nodes import add_dummy

if FreeCAD is None:
    add_dummy('SvExportSolidNode', 'Export Solid', 'FreeCAD')
else:

    from FreeCAD import Part

    from sverchok.utils.solid import to_solid

    class SvExportSolidOperator(bpy.types.Operator):

        bl_idname = "node.sv_export_solid_mk2"
        bl_label = "Export Solid"
        bl_options = {'INTERNAL', 'REGISTER'}

        idtree: StringProperty(default='')
        idname: StringProperty(default='')

        def execute(self, context):
            tree = bpy.data.node_groups[self.idtree]
Esempio n. 28
0
import bpy
from bpy.props import FloatProperty, BoolProperty, EnumProperty, IntProperty

from sverchok.core.sv_custom_exceptions import SvNoDataError
from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import updateNode, ensure_nesting_level, zip_long_repeat, repeat_last_for_length
from sverchok.utils.field.scalar import SvScalarField
from sverchok.utils.field.probe import field_random_probe
from sverchok.utils.surface.populate import populate_surface
from sverchok.utils.surface.freecad import SvSolidFaceSurface
from sverchok.dependencies import FreeCAD
from sverchok.utils.dummy_nodes import add_dummy

if FreeCAD is None:
    add_dummy('SvPopulateSolidNode', 'Populate Solid', 'FreeCAD')
else:
    from FreeCAD import Base
    import Part


class SvPopulateSolidNode(bpy.types.Node, SverchCustomTreeNode):
    """
    Triggers: Populate Solid
    Tooltip: Generate random points within solid body
    """
    bl_idname = 'SvPopulateSolidNode'
    bl_label = 'Populate Solid'
    bl_icon = 'OUTLINER_OB_EMPTY'
    sv_icon = 'SV_POPULATE_SOLID'
Esempio n. 29
0
# recorded in the version control history of the file, available from
# its original location https://github.com/nortikin/sverchok/commit/master
#
# SPDX-License-Identifier: GPL3
# License-Filename: LICENSE

import bpy
from bpy.props import BoolProperty, FloatProperty, EnumProperty

from sverchok.node_tree import SverchCustomTreeNode, throttled
from sverchok.data_structure import updateNode, zip_long_repeat, map_recursive
from sverchok.dependencies import FreeCAD
from sverchok.utils.dummy_nodes import add_dummy

if FreeCAD is None:
    add_dummy('SvSolidAreaNode', 'Solid Area', 'FreeCAD')
else:
    import Part


class SvSolidAreaNode(bpy.types.Node, SverchCustomTreeNode):
    """
    Triggers: Area Solid
    Tooltip: Calculate total area of all faces of a Solid object
    """
    bl_idname = 'SvSolidAreaNode'
    bl_label = 'Solid Area'
    bl_icon = 'OUTLINER_OB_EMPTY'
    sv_icon = 'SV_AREA'
    solid_catergory = "Operators"
Esempio n. 30
0
from sverchok.dependencies import FreeCAD
from sverchok.utils.dummy_nodes import add_dummy
from sverchok.utils.sv_operator_mixins import SvGenericNodeLocator

if FreeCAD is None:
    add_dummy('SvReadFCStdNode', 'SvReadFCStdNode', 'FreeCAD')

else:
    F = FreeCAD
    import bpy
    from bpy.props import StringProperty, BoolProperty, EnumProperty
    from sverchok.node_tree import SverchCustomTreeNode
    from sverchok.data_structure import updateNode
    from sverchok.utils.logging import info

    class SvReadFCStdOperator(bpy.types.Operator, SvGenericNodeLocator):

        bl_idname = "node.sv_read_fcstd_operator"
        bl_label = "read freecad file"
        bl_options = {'INTERNAL', 'REGISTER'}

        def execute(self, context):
            node = self.get_node(context)

            if not node: return {'CANCELLED'}

            if not any(socket.is_linked for socket in node.outputs):
                return {'CANCELLED'}
            if not node.inputs['File Path'].is_linked:
                return {'CANCELLED'}