Skip to content
Snippets Groups Projects
add_dimension.py 133 KiB
Newer Older
  • Learn to ignore specific revisions
  • # ##### BEGIN GPL LICENSE BLOCK #####
    #
    #  This program is free software; you can redistribute it and / or
    #  modify it under the terms of the GNU General Public License
    #  as published by the Free Software Foundation; either version 2
    #  of the License, or (at your option) any later version.
    #
    #  This program is distributed in the hope that it will be useful,
    #  but WITHOUT ANY WARRANTY; without even the implied warranty of
    #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    #  GNU General Public License for more details.
    #
    #  You should have received a copy of the GNU General Public License
    #  along with this program; if not, write to the Free Software Foundation,
    #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
    #
    # ##### END GPL LICENSE BLOCK #####
    
    bl_info = {
        'name': 'Dimension',
        'author': 'Spivak Vladimir (http://cwolf3d.korostyshev.net)',
    
        'blender': (2, 78, 0),
    
        'location': 'View3D > Add > Curve',
        'description': 'Adds Dimension',
        'warning': '', # used for warning icon and text in addons panel
        'wiki_url': 'http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/Curve/Dimension',
    
        "tracker_url": "https://developer.blender.org/maniphest/task/edit/form/2/",
    
        'category': 'Add Curve'}
    
    
    ##------------------------------------------------------------
    #### import modules
    import bpy
    from bpy.props import  *
    from mathutils import  *
    from math import  *
    from bpy.app.handlers import persistent
    
    # Add a TextCurve
    def addText(string = '', loc = ((0, 0, 0)), textsize = 1, align = 'CENTER', offset_y = 0, font = ''):
    
        tcu = bpy.data.curves.new(string + 'Data', 'FONT')
        text = bpy.data.objects.new(string + 'Text', tcu)
        tcu.body = string
    
        tcu.size = textsize
        tcu.offset_y = offset_y
        if font == '':
            fnt = bpy.data.fonts[0]
        else:
            fnt = bpy.data.fonts.load(font)
        tcu.font = fnt
        text.location = loc
    
        bpy.context.collection.objects.link(text)
    
    
        return text
    
    ##------------------------------------------------------------
    # Dimension: Linear-1
    def Linear1(width = 2, length = 2, dsize = 1, depth = 0.1, center = False, arrow = 'Arrow1', arrowdepth = 0.1, arrowlength = 0.25):
    
        newpoints = []
    
        w = 1
        if width < 0:
            w = -1
        l = 1
        if length < 0:
            l = -1
    
        if center:
           center1 = w * depth / 2
           center2 = w * depth / 2
        else:
           center1 = 0
           center2 = w * depth
    
    
        if arrow == 'Arrow1' or arrow == 'Arrow2':
    
            newpoints.append([-center1, 0, 0]) #1
            newpoints.append([-center1, length, 0]) #2
            newpoints.append([-center1, length + l * dsize, 0]) #3
            newpoints.append([center2, length + l * dsize, 0]) #4
            newpoints.append([center2, length + l * dsize / 2 + l * depth / 100, 0]) #5
            newpoints.append([center2 + w * arrowlength, length + l * dsize / 2 + l * arrowdepth + l * depth / 2, 0]) #6
    
            if arrow == 'Arrow1':
                newpoints.append([center2 + w * arrowlength, length + l * dsize / 2 + l * depth / 2, 0]) #7
                newpoints.append([width-center2-w * arrowlength, length + l * dsize / 2 + l * depth / 2, 0]) #8
            else:
                newpoints.append([center2 + w * arrowlength * 3 / 4, length + l * dsize / 2 + l * depth / 2, 0]) #7
                newpoints.append([width-center2-w * arrowlength * 3 / 4, length + l * dsize / 2 + l * depth / 2, 0]) #8
    
            newpoints.append([width-center2-w * arrowlength, length + l * dsize / 2 + l * arrowdepth + l * depth / 2, 0]) #9
            newpoints.append([width-center2, length + l * dsize / 2 + l * depth / 100, 0]) #10
            newpoints.append([width-center2, length + l * dsize, 0]) #11
            newpoints.append([width + center1, length + l * dsize, 0]) #12
            newpoints.append([width + center1, length, 0]) #13
            newpoints.append([width + center1, 0, 0]) #14
            newpoints.append([width-center2, 0, 0]) #15
            newpoints.append([width-center2, length, 0]) #16
            newpoints.append([width-center2, length + l * dsize / 2-l * depth / 100, 0]) #17
            newpoints.append([width-center2-w * arrowlength, length + l * dsize / 2-l * arrowdepth-l * depth / 2, 0]) #18
    
            if arrow == 'Arrow1':
                newpoints.append([width-center2-w * arrowlength, length + l * dsize / 2-l * depth / 2, 0]) #19
                newpoints.append([center2 + w * arrowlength, length + l * dsize / 2-l * depth / 2, 0]) #20
            else:
                newpoints.append([width-center2-w * arrowlength * 3 / 4, length + l * dsize / 2-l * depth / 2, 0]) #19
                newpoints.append([center2 + w * arrowlength * 3 / 4, length + l * dsize / 2-l * depth / 2, 0]) #20
    
            newpoints.append([center2 + w * arrowlength, length + l * dsize / 2-l * arrowdepth-l * depth / 2, 0]) #21
            newpoints.append([center2, length + l * dsize / 2-l * depth / 100, 0]) #22
            newpoints.append([center2, length, 0]) #23
            newpoints.append([center2, 0, 0]) #24
    
    
        if arrow == 'Serifs1' or arrow == 'Serifs2':
    
            b = sqrt(depth * depth / 2)
            x = sin(radians(45)) * arrowlength * w
            y = cos(radians(45)) * arrowlength * l
            newpoints.append([-center1, 0, 0]) #1
            newpoints.append([-center1, length, 0]) #2
            newpoints.append([-center1, length + l * dsize / 2-l * depth / 2-l * b, 0]) #3
            newpoints.append([-center1-x, length + l * dsize / 2-l * depth / 2-l * b-y, 0]) #4
            newpoints.append([-center1-w * b-x, length + l * dsize / 2-l * depth / 2-y, 0]) #5
    
            if arrow == 'Serifs2':
                newpoints.append([-center1-w * b, length + l * dsize / 2-l * depth / 2, 0]) #6
                newpoints.append([-center1-w * dsize / 2, length + l * dsize / 2-l * depth / 2, 0]) #7
                newpoints.append([-center1-w * dsize / 2, length + l * dsize / 2 + l * depth / 2, 0]) #8
    
            newpoints.append([-center1, length + l * dsize / 2 + l * depth / 2, 0]) #9
            newpoints.append([-center1, length + l * dsize, 0]) #10
            newpoints.append([center2, length + l * dsize, 0]) #11
            newpoints.append([center2, length + l * dsize / 2 + l * depth / 2 + l * b, 0]) #12
            newpoints.append([center2 + x, length + l * dsize / 2 + l * depth / 2 + l * b + y, 0]) #13
            newpoints.append([center2 + w * b + x, length + l * dsize / 2 + l * depth / 2 + y, 0]) #14
            newpoints.append([center2 + w * b, length + l * dsize / 2 + l * depth / 2, 0]) #15
            newpoints.append([width-center2, length + l * dsize / 2 + l * depth / 2, 0]) #16
            newpoints.append([width-center2, length + l * dsize, 0]) #17
            newpoints.append([width + center1, length + l * dsize, 0]) #18
            newpoints.append([width + center1, length + l * dsize / 2 + l * depth / 2 + l * b, 0]) #19
            newpoints.append([width + center1 + x, length + l * dsize / 2 + l * depth / 2 + l * b + y, 0]) #20
            newpoints.append([width + center1 + w * b + x, length + l * dsize / 2 + l * depth / 2 + y, 0]) #21
    
            if arrow == 'Serifs2':
                newpoints.append([width + center1 + w * b, length + l * dsize / 2 + l * depth / 2, 0]) #22
                newpoints.append([width + center1 + w * dsize / 2, length + l * dsize / 2 + l * depth / 2, 0]) #23
                newpoints.append([width + center1 + w * dsize / 2, length + l * dsize / 2-l * depth / 2, 0]) #24
    
            newpoints.append([width + center1, length + l * dsize / 2-l * depth / 2, 0]) #25
            newpoints.append([width + center1, length, 0]) #26
            newpoints.append([width + center1, 0, 0]) #27
            newpoints.append([width-center2, 0, 0]) #28
            newpoints.append([width-center2, length, 0]) #29
            newpoints.append([width-center2, length + l * dsize / 2-l * depth / 2-l * b, 0]) #30
            newpoints.append([width-center2-x, length + l * dsize / 2-l * depth / 2-l * b-y, 0]) #31
            newpoints.append([width-center2-w * b-x, length + l * dsize / 2-l * depth / 2-y, 0]) #32
            newpoints.append([width-center2-w * b, length + l * dsize / 2-l * depth / 2, 0]) #33
            newpoints.append([center2, length + l * dsize / 2-l * depth / 2, 0]) #34
            newpoints.append([center2, length, 0]) #35
            newpoints.append([center2, 0, 0]) #36
    
    
        if arrow == 'Without':
    
            newpoints.append([-center1, 0, 0]) #1
            newpoints.append([-center1, length, 0]) #2
            newpoints.append([-center1, length + l * dsize, 0]) #3
            newpoints.append([center2, length + l * dsize, 0]) #4
            newpoints.append([center2, length + l * dsize / 2 + l * depth / 2, 0]) #7
            newpoints.append([width-center2, length + l * dsize / 2 + l * depth / 2, 0]) #8
            newpoints.append([width-center2, length + l * dsize, 0]) #11
            newpoints.append([width + center1, length + l * dsize, 0]) #12
            newpoints.append([width + center1, length, 0]) #13
            newpoints.append([width + center1, 0, 0]) #14
            newpoints.append([width-center2, 0, 0]) #15
            newpoints.append([width-center2, length, 0]) #16
            newpoints.append([width-center2, length + l * dsize / 2-l * depth / 2, 0]) #19
            newpoints.append([center2, length + l * dsize / 2-l * depth / 2, 0]) #20
            newpoints.append([center2, length, 0]) #23
            newpoints.append([center2, 0, 0]) #24
    
        return newpoints
    
    ##------------------------------------------------------------
    # Dimension: Linear-2
    def Linear2(width = 2, dsize = 1, depth = 0.1, center = False, arrow = 'Arrow1', arrowdepth = 0.25, arrowlength = 0.25):
    
        newpoints = []
    
        w = 1
        if width < 0:
            w = -1
    
        if center:
           center1 = w * depth / 2
           center2 = w * depth / 2
        else:
           center1 = 0
           center2 = w * depth
    
    
        if arrow == 'Arrow1' or arrow == 'Arrow2':
    
            newpoints.append([0, 0, 0]) #1
            newpoints.append([w * arrowlength, arrowdepth + depth / 2, 0]) #2
    
            if arrow == 'Arrow1':
                newpoints.append([w * arrowlength, depth / 2, 0]) #3
                newpoints.append([width-w * arrowlength, depth / 2, 0]) #4
            else:
                newpoints.append([w * arrowlength * 3 / 4, depth / 2, 0]) #3
                newpoints.append([width-w * arrowlength * 3 / 4, depth / 2, 0]) #4
    
            newpoints.append([width-w * arrowlength, arrowdepth + depth / 2, 0]) #5
            newpoints.append([width, 0, 0]) #6
            newpoints.append([width-w * arrowlength, -arrowdepth-depth / 2, 0]) #7
    
            if arrow == 'Arrow1':
                newpoints.append([width-w * arrowlength, -depth / 2, 0]) #8
                newpoints.append([w * arrowlength, -depth / 2, 0]) #9
            else:
                newpoints.append([width-w * arrowlength * 3 / 4, -depth / 2, 0]) #8
                newpoints.append([w * arrowlength * 3 / 4, -depth / 2, 0]) #9
    
            newpoints.append([w * arrowlength, -arrowdepth-depth / 2, 0]) #10
    
    
        if arrow == 'Serifs1':
    
            b = sqrt(depth * depth / 2)
            x = sin(radians(45)) * arrowlength * w
            y = cos(radians(45)) * arrowlength
            newpoints.append([-center1, -dsize / 2, 0]) #2
            newpoints.append([-center1, -depth / 2-b, 0]) #3
            newpoints.append([-center1-x, -depth / 2-b-y, 0]) #4
            newpoints.append([-center1-w * b-x, -depth / 2-y, 0]) #5
            newpoints.append([-center1-w * b, -depth / 2, 0]) #6
            newpoints.append([-center1-w * dsize / 2, -depth / 2, 0]) #7
            newpoints.append([-center1-w * dsize / 2, depth / 2, 0]) #8
            newpoints.append([-center1, depth / 2, 0]) #9
            newpoints.append([-center1, dsize / 2, 0]) #10
            newpoints.append([center2, dsize / 2, 0]) #11
            newpoints.append([center2, depth / 2 + b, 0]) #12
            newpoints.append([center2 + x, depth / 2 + b + y, 0]) #13
            newpoints.append([center2 + w * b + x, depth / 2 + y, 0]) #14
            newpoints.append([center2 + w * b, depth / 2, 0]) #15
            newpoints.append([width-center2, depth / 2, 0]) #16
            newpoints.append([width-center2, dsize / 2, 0]) #17
            newpoints.append([width + center1, dsize / 2, 0]) #18
            newpoints.append([width + center1, depth / 2 + b, 0]) #19
            newpoints.append([width + center1 + x, depth / 2 + b + y, 0]) #20
            newpoints.append([width + center1 + w * b + x, depth / 2 + y, 0]) #21
            newpoints.append([width + center1 + w * b, depth / 2, 0]) #22
            newpoints.append([width + center1 + w * dsize / 2, depth / 2, 0]) #23
            newpoints.append([width + center1 + w * dsize / 2, -depth / 2, 0]) #24
            newpoints.append([width + center1, -depth / 2, 0]) #25
            newpoints.append([width + center1, -dsize / 2, 0]) #26
            newpoints.append([width-center2, -dsize / 2, 0]) #29
            newpoints.append([width-center2, -depth / 2-b, 0]) #30
            newpoints.append([width-center2-x, -depth / 2-b-y, 0]) #31
            newpoints.append([width-center2-w * b-x, -depth / 2-y, 0]) #32
            newpoints.append([width-center2-w * b, -depth / 2, 0]) #33
            newpoints.append([center2, -depth / 2, 0]) #34
            newpoints.append([center2, -dsize / 2, 0]) #35
    
    
        if arrow == 'Serifs2':
    
            b = sqrt(depth * depth / 2)
            x = sin(radians(45)) * arrowlength * w
            y = cos(radians(45)) * arrowlength
            newpoints.append([-center1 + w * b, -depth / 2, 0]) #3
            newpoints.append([-center1-x, -depth / 2-b-y, 0]) #4
            newpoints.append([-center1-w * b-x, -depth / 2-y, 0]) #5
            newpoints.append([center2 + x, depth / 2 + b + y, 0]) #13
            newpoints.append([center2 + w * b + x, depth / 2 + y, 0]) #14
            newpoints.append([center2 + w * b, depth / 2, 0]) #15
            newpoints.append([width + center1-w * b, depth / 2, 0]) #19
            newpoints.append([width + center1 + x, depth / 2 + b + y, 0]) #20
            newpoints.append([width + center1 + w * b + x, depth / 2 + y, 0]) #21
            newpoints.append([width-center2-x, -depth / 2-b-y, 0]) #31
            newpoints.append([width-center2-w * b-x, -depth / 2-y, 0]) #32
            newpoints.append([width-center2-w * b, -depth / 2, 0]) #33
    
    
        if arrow == 'Without':
    
            newpoints.append([0, depth / 2, 0]) #3
            newpoints.append([width, depth / 2, 0]) #4
            newpoints.append([width, -depth / 2, 0]) #8
            newpoints.append([0, -depth / 2, 0]) #9
    
        return newpoints
    
    ##------------------------------------------------------------
    # Dimension: Linear-3
    def Linear3(width = 2, length = 2, dsize = 1, depth = 0.1, center = False, arrow = 'Arrow1', arrowdepth = 0.25, arrowlength = 0.25):
    
        newpoints = []
    
        w = 1
        if width < 0:
            w = -1
        l = 1
        if length < 0:
            l = -1
    
        if center:
           center1 = w * depth / 2
           center2 = w * depth / 2
        else:
           center1 = 0
           center2 = w * depth
    
    
        if arrow == 'Arrow1' or arrow == 'Arrow2':
    
            newpoints.append([-center1, 0, 0]) #1
            newpoints.append([-center1, length, 0]) #2
            newpoints.append([-center1, length + l * dsize / 2-l * depth / 100, 0]) #3
            newpoints.append([-center1-w * arrowlength, length + l * dsize / 2-l * arrowdepth-l * depth / 2, 0]) #4
    
            if arrow == 'Arrow1':
                newpoints.append([-center1-w * arrowlength, length + l * dsize / 2-l * depth / 2, 0]) #5
            else:
                newpoints.append([-center1-w * arrowlength * 3 / 4, length + l * dsize / 2-l * depth / 2, 0]) #5
    
            newpoints.append([-center1-w * arrowlength-w * dsize / 2, length + l * dsize / 2-l * depth / 2, 0]) #6
            newpoints.append([-center1-w * arrowlength-w * dsize / 2, length + l * dsize / 2 + l * depth / 2, 0]) #7
    
            if arrow == 'Arrow1':
                newpoints.append([-center1-w * arrowlength, length + l * dsize / 2 + l * depth / 2, 0]) #8
            else:
                newpoints.append([-center1-w * arrowlength * 3 / 4, length + l * dsize / 2 + l * depth / 2, 0]) #8
    
            newpoints.append([-center1-w * arrowlength, length + l * dsize / 2 + l * arrowdepth + l * depth / 2, 0]) #9
            newpoints.append([-center1, length + l * dsize / 2 + l * depth / 100, 0]) #10
            newpoints.append([-center1, length + l * dsize, 0]) #11
            newpoints.append([center2, length + l * dsize, 0]) #12
            newpoints.append([center2, length + l * dsize / 2 + l * depth / 2, 0]) #13
            newpoints.append([width-center2, length + l * dsize / 2 + l * depth / 2, 0]) #14
            newpoints.append([width-center2, length + l * dsize, 0]) #15
            newpoints.append([width + center1, length + l * dsize, 0]) #16
            newpoints.append([width + center1, length + l * dsize / 2 + l * depth / 100, 0]) #17
            newpoints.append([width + center1 + w * arrowlength, length + l * dsize / 2 + l * arrowdepth + l * depth / 2, 0]) #18
    
            if arrow == 'Arrow1':
                newpoints.append([width + center1 + w * arrowlength, length + l * dsize / 2 + l * depth / 2, 0]) #19
            else:
                newpoints.append([width + center1 + w * arrowlength * 3 / 4, length + l * dsize / 2 + l * depth / 2, 0]) #19
    
            newpoints.append([width + center1 + w * arrowlength + w * dsize / 2, length + l * dsize / 2 + l * depth / 2, 0]) #20
            newpoints.append([width + center1 + w * arrowlength + w * dsize / 2, length + l * dsize / 2-l * depth / 2, 0]) #21
    
            if arrow == 'Arrow1':
                newpoints.append([width + center1 + w * arrowlength, length + l * dsize / 2-l * depth / 2, 0]) #22
            else:
                newpoints.append([width + center1 + w * arrowlength * 3 / 4, length + l * dsize / 2-l * depth / 2, 0]) #22
    
            newpoints.append([width + center1 + w * arrowlength, length + l * dsize / 2-l * arrowdepth-l * depth / 2, 0]) #23
            newpoints.append([width + center1, length + l * dsize / 2-l * depth / 100, 0]) #24
            newpoints.append([width + center1, length, 0]) #25
            newpoints.append([width + center1, 0, 0]) #26
            newpoints.append([width-center2, 0, 0]) #27
            newpoints.append([width-center2, length, 0]) #28
            newpoints.append([width-center2, length + l * dsize / 2-l * depth / 2, 0]) #29
            newpoints.append([center2, length + l * dsize / 2-l * depth / 2, 0]) #30
            newpoints.append([center2, length, 0]) #31
            newpoints.append([center2, 0, 0]) #32
    
    
        if arrow == 'Serifs1' or arrow == 'Serifs2':
    
            b = sqrt(depth * depth / 2)
            x = sin(radians(45)) * arrowlength * w
            y = cos(radians(45)) * arrowlength * l
            newpoints.append([-center1, 0, 0]) #1
            newpoints.append([-center1, length, 0]) #2
            newpoints.append([-center1, length + l * dsize / 2-l * depth / 2-l * b, 0]) #3
            newpoints.append([-center1-x, length + l * dsize / 2-l * depth / 2-l * b-y, 0]) #4
            newpoints.append([-center1-w * b-x, length + l * dsize / 2-l * depth / 2-y, 0]) #5
            newpoints.append([-center1-w * b, length + l * dsize / 2-l * depth / 2, 0]) #6
    
            if arrow == 'Serifs1':
                newpoints.append([-center1-w * dsize / 2, length + l * dsize / 2-l * depth / 2, 0]) #7
                newpoints.append([-center1-w * dsize / 2, length + l * dsize / 2 + l * depth / 2, 0]) #8
            else:
                newpoints.append([-center1-w * dsize, length + l * dsize / 2-l * depth / 2, 0]) #7
                newpoints.append([-center1-w * dsize, length + l * dsize / 2 + l * depth / 2, 0]) #8
    
            newpoints.append([-center1, length + l * dsize / 2 + l * depth / 2, 0]) #9
            newpoints.append([-center1, length + l * dsize, 0]) #10
            newpoints.append([center2, length + l * dsize, 0]) #11
            newpoints.append([center2, length + l * dsize / 2 + l * depth / 2 + l * b, 0]) #12
            newpoints.append([center2 + x, length + l * dsize / 2 + l * depth / 2 + l * b + y, 0]) #13
            newpoints.append([center2 + w * b + x, length + l * dsize / 2 + l * depth / 2 + y, 0]) #14
            newpoints.append([center2 + w * b, length + l * dsize / 2 + l * depth / 2, 0]) #15
            newpoints.append([width-center2, length + l * dsize / 2 + l * depth / 2, 0]) #16
            newpoints.append([width-center2, length + l * dsize, 0]) #17
            newpoints.append([width + center1, length + l * dsize, 0]) #18
            newpoints.append([width + center1, length + l * dsize / 2 + l * depth / 2 + l * b, 0]) #19
            newpoints.append([width + center1 + x, length + l * dsize / 2 + l * depth / 2 + l * b + y, 0]) #20
            newpoints.append([width + center1 + w * b + x, length + l * dsize / 2 + l * depth / 2 + y, 0]) #21
            newpoints.append([width + center1 + w * b, length + l * dsize / 2 + l * depth / 2, 0]) #22
    
            if arrow == 'Serifs1':
                newpoints.append([width + center1 + w * dsize / 2, length + l * dsize / 2 + l * depth / 2, 0]) #23
                newpoints.append([width + center1 + w * dsize / 2, length + l * dsize / 2-l * depth / 2, 0]) #24
            else:
                newpoints.append([width + center1 + w * dsize, length + l * dsize / 2 + l * depth / 2, 0]) #23
                newpoints.append([width + center1 + w * dsize, length + l * dsize / 2-l * depth / 2, 0]) #24
    
            newpoints.append([width + center1, length + l * dsize / 2-l * depth / 2, 0]) #25
            newpoints.append([width + center1, length, 0]) #26
            newpoints.append([width + center1, 0, 0]) #27
            newpoints.append([width-center2, 0, 0]) #28
            newpoints.append([width-center2, length, 0]) #29
            newpoints.append([width-center2, length + l * dsize / 2-l * depth / 2-l * b, 0]) #30
            newpoints.append([width-center2-x, length + l * dsize / 2-l * depth / 2-l * b-y, 0]) #31
            newpoints.append([width-center2-w * b-x, length + l * dsize / 2-l * depth / 2-y, 0]) #32
            newpoints.append([width-center2-w * b, length + l * dsize / 2-l * depth / 2, 0]) #33
            newpoints.append([center2, length + l * dsize / 2-l * depth / 2, 0]) #34
            newpoints.append([center2, length, 0]) #35
            newpoints.append([center2, 0, 0]) #36
    
    
        if arrow == 'Without':
    
            newpoints.append([-center1, 0, 0]) #1
            newpoints.append([-center1, length, 0]) #2
            newpoints.append([-center1, length + l * dsize / 2-l * depth / 2, 0]) #5
            newpoints.append([-center1-w * dsize / 2, length + l * dsize / 2-l * depth / 2, 0]) #6
            newpoints.append([-center1-w * dsize / 2, length + l * dsize / 2 + l * depth / 2, 0]) #7
            newpoints.append([-center1, length + l * dsize / 2 + l * depth / 2, 0]) #8
            newpoints.append([-center1, length + l * dsize, 0]) #11
            newpoints.append([center2, length + l * dsize, 0]) #12
            newpoints.append([center2, length + l * dsize / 2 + l * depth / 2, 0]) #13
            newpoints.append([width-center2, length + l * dsize / 2 + l * depth / 2, 0]) #14
            newpoints.append([width-center2, length + l * dsize, 0]) #15
            newpoints.append([width + center1, length + l * dsize, 0]) #16
            newpoints.append([width + center1, length + l * dsize / 2 + l * depth / 2, 0]) #19
            newpoints.append([width + center1 + w * dsize / 2, length + l * dsize / 2 + l * depth / 2, 0]) #20
            newpoints.append([width + center1 + w * dsize / 2, length + l * dsize / 2-l * depth / 2, 0]) #21
            newpoints.append([width + center1, length + l * dsize / 2-l * depth / 2, 0]) #22
            newpoints.append([width + center1, length, 0]) #25
            newpoints.append([width + center1, 0, 0]) #26
            newpoints.append([width-center2, 0, 0]) #27
            newpoints.append([width-center2, length, 0]) #28
            newpoints.append([width-center2, length + l * dsize / 2-l * depth / 2, 0]) #29
            newpoints.append([center2, length + l * dsize / 2-l * depth / 2, 0]) #30
            newpoints.append([center2, length, 0]) #31
            newpoints.append([center2, 0, 0]) #32
    
        return newpoints
    
    ##------------------------------------------------------------
    # Dimension: Radius
    def Radius(width = 2, length = 2, dsize = 1, depth = 0.1, center = False, arrow = 'Arrow1', arrowdepth = 0.25, arrowlength = 0.25):
    
        newpoints = []
    
        w = 1
        if width < 0:
            w = -1
        length = abs(length)
    
        if center:
           center1 = w * depth / 2
           center2 = w * depth / 2
        else:
           center1 = 0
           center2 = w * depth
    
    
        if arrow == 'Arrow1' or arrow == 'Arrow2':
    
            newpoints.append([0, depth / 2, 0]) #1
            newpoints.append([width, depth / 2, 0]) #2
            newpoints.append([width + w * arrowlength, depth / 2 + arrowdepth, 0]) #3
    
            if arrow == 'Arrow1':
                newpoints.append([width + w * arrowlength, depth / 2, 0]) #4
            else:
                newpoints.append([width + w * arrowlength * 3 / 4, depth / 2, 0]) #4
    
            newpoints.append([width + w * arrowlength + w * length, depth / 2, 0]) #5
            newpoints.append([width + w * arrowlength + w * length, -depth / 2, 0]) #6
    
            if arrow == 'Arrow1':
                newpoints.append([width + w * arrowlength, -depth / 2, 0]) #7
            else:
                newpoints.append([width + w * arrowlength * 3 / 4, -depth / 2, 0]) #7
    
            newpoints.append([width + w * arrowlength, -depth / 2-arrowdepth, 0]) #8
            newpoints.append([width, -depth / 2, 0]) #9
            newpoints.append([0, -depth / 2, 0]) #10
    
    
        if arrow == 'Serifs1' or arrow == 'Serifs2':
    
            b = sqrt(depth * depth / 2)
            x = sin(radians(45)) * arrowlength * w
            y = cos(radians(45)) * arrowlength
            newpoints.append([0, depth / 2, 0]) #1
    
            if arrow == 'Serifs1':
                newpoints.append([width-center2, depth / 2, 0]) #16
                newpoints.append([width-center2, dsize / 2, 0]) #17
                newpoints.append([width + center1, dsize / 2, 0]) #18
                newpoints.append([width + center1, depth / 2 + b, 0]) #19
            else:
                newpoints.append([width + center1-w * b, depth / 2, 0]) #19
    
            newpoints.append([width + center1 + x, depth / 2 + b + y, 0]) #20
            newpoints.append([width + center1 + w * b + x, depth / 2 + y, 0]) #21
            newpoints.append([width + center1 + w * b, depth / 2, 0]) #22
            newpoints.append([width + center1 + w * length, depth / 2, 0]) #23
            newpoints.append([width + center1 + w * length, -depth / 2, 0]) #24
    
            if arrow == 'Serifs1':
                newpoints.append([width + center1, -depth / 2, 0]) #25
                newpoints.append([width + center1, -dsize / 2, 0]) #26
                newpoints.append([width-center2, -dsize / 2, 0]) #29
                newpoints.append([width-center2, -depth / 2-b, 0]) #30
            else:
                newpoints.append([width-center2 + w * b, -depth / 2, 0]) #30
    
            newpoints.append([width-center2-x, -depth / 2-b-y, 0]) #31
            newpoints.append([width-center2-w * b-x, -depth / 2-y, 0]) #32
            newpoints.append([width-center2-w * b, -depth / 2, 0]) #33
            newpoints.append([0, -depth / 2, 0]) #10
    
    
        if arrow == 'Without':
    
            newpoints.append([0, depth / 2, 0]) #1
            newpoints.append([width, depth / 2, 0]) #2
            newpoints.append([width, -depth / 2, 0]) #9
            newpoints.append([0, -depth / 2, 0]) #10
    
        return newpoints
    
    ##------------------------------------------------------------
    # Dimension: Diameter
    def Diameter(width = 2, length = 2, dsize = 1, depth = 0.1, center = False, arrow = 'Arrow1', arrowdepth = 0.25, arrowlength = 0.25):
    
        newpoints = []
    
        width = width / 2
        w = 1
        if width < 0:
            w = -1
        length = abs(length)
    
        if center:
           center1 = w * depth / 2
           center2 = w * depth / 2
        else:
           center1 = 0
           center2 = w * depth
    
    
        if arrow == 'Arrow1' or arrow == 'Arrow2':
    
            newpoints.append([0, depth / 2, 0]) #1
            newpoints.append([width, depth / 2, 0]) #2
            newpoints.append([width + w * arrowlength, depth / 2 + arrowdepth, 0]) #3
    
            if arrow == 'Arrow1':
                newpoints.append([width + w * arrowlength, depth / 2, 0]) #4
            else:
                newpoints.append([width + w * arrowlength * 3 / 4, depth / 2, 0]) #4
    
            newpoints.append([width + w * arrowlength + w * length, depth / 2, 0]) #5
            newpoints.append([width + w * arrowlength + w * length, -depth / 2, 0]) #6
    
            if arrow == 'Arrow1':
                newpoints.append([width + w * arrowlength, -depth / 2, 0]) #7
            else:
                newpoints.append([width + w * arrowlength * 3 / 4, -depth / 2, 0]) #7
    
            newpoints.append([width + w * arrowlength, -depth / 2-arrowdepth, 0]) #8
            newpoints.append([width, -depth / 2, 0]) #9
            newpoints.append([0, -depth / 2, 0]) #10
            newpoints.append([-width, -depth / 2, 0]) #11
            newpoints.append([-width-w * arrowlength, -depth / 2-arrowdepth, 0]) #12
    
            if arrow == 'Arrow1':
                newpoints.append([-width-w * arrowlength, -depth / 2, 0]) #13
            else:
                newpoints.append([-width-w * arrowlength * 3 / 4, -depth / 2, 0]) #13
    
            newpoints.append([-width-w * arrowlength-w * length, -depth / 2, 0]) #14
            newpoints.append([-width-w * arrowlength-w * length, depth / 2, 0]) #15
    
            if arrow == 'Arrow1':
                newpoints.append([-width-w * arrowlength, depth / 2, 0]) #16
            else:
                newpoints.append([-width-w * arrowlength * 3 / 4, depth / 2, 0]) #16
    
            newpoints.append([-width-w * arrowlength, depth / 2 + arrowdepth, 0]) #17
            newpoints.append([-width, depth / 2, 0]) #18
    
    
        if arrow == 'Serifs1' or arrow == 'Serifs2':
    
            b = sqrt(depth * depth / 2)
            x = sin(radians(45)) * arrowlength * w
            y = cos(radians(45)) * arrowlength
            newpoints.append([0, depth / 2, 0]) #1
    
            if arrow == 'Serifs1':
                newpoints.append([width-center2, depth / 2, 0]) #16
                newpoints.append([width-center2, dsize / 2, 0]) #17
                newpoints.append([width + center1, dsize / 2, 0]) #18
                newpoints.append([width + center1, depth / 2 + b, 0]) #19
            else:
                newpoints.append([width + center1-w * b, depth / 2, 0]) #19
    
            newpoints.append([width + center1 + x, depth / 2 + b + y, 0]) #20
            newpoints.append([width + center1 + w * b + x, depth / 2 + y, 0]) #21
            newpoints.append([width + center1 + w * b, depth / 2, 0]) #22
            newpoints.append([width + center1 + w * length, depth / 2, 0]) #23
            newpoints.append([width + center1 + w * length, -depth / 2, 0]) #24
    
            if arrow == 'Serifs1':
                newpoints.append([width + center1, -depth / 2, 0]) #25
                newpoints.append([width + center1, -dsize / 2, 0]) #26
                newpoints.append([width-center2, -dsize / 2, 0]) #29
                newpoints.append([width-center2, -depth / 2-b, 0]) #30
            else:
                newpoints.append([width-center2 + w * b, -depth / 2, 0]) #30
    
            newpoints.append([width-center2-x, -depth / 2-b-y, 0]) #31
            newpoints.append([width-center2-w * b-x, -depth / 2-y, 0]) #32
            newpoints.append([width-center2-w * b, -depth / 2, 0]) #33
            newpoints.append([0, -depth / 2, 0]) #10
    
            if arrow == 'Serifs1':
                newpoints.append([-width + center2, -depth / 2, 0]) #25
                newpoints.append([-width + center2, -dsize / 2, 0]) #26
                newpoints.append([-width-center1, -dsize / 2, 0]) #29
                newpoints.append([-width-center1, -depth / 2-b, 0]) #30
            else:
                newpoints.append([-width-center1 + w * b, -depth / 2, 0]) #30
    
            newpoints.append([-width-center1-x, -depth / 2-b-y, 0]) #31
            newpoints.append([-width-center1-w * b-x, -depth / 2-y, 0]) #32
            newpoints.append([-width-center1-w * b, -depth / 2, 0]) #33
            newpoints.append([-width + center2-w * length, -depth / 2, 0]) #24
            newpoints.append([-width + center2-w * length, depth / 2, 0]) #23
    
            if arrow == 'Serifs1':
                newpoints.append([-width-center1, depth / 2, 0]) #16
                newpoints.append([-width-center1, dsize / 2, 0]) #17
                newpoints.append([-width + center2, dsize / 2, 0]) #18
                newpoints.append([-width + center2, depth / 2 + b, 0]) #19
            else:
                newpoints.append([-width + center2-w * b, depth / 2, 0]) #19
    
            newpoints.append([-width + center2 + x, depth / 2 + b + y, 0]) #20
            newpoints.append([-width + center2 + w * b + x, depth / 2 + y, 0]) #21
            newpoints.append([-width + center2 + w * b, depth / 2, 0]) #22
    
    
        if arrow == 'Without':
    
    594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000
            newpoints.append([0, depth / 2, 0]) #1
            newpoints.append([width, depth / 2, 0]) #2
            newpoints.append([width, -depth / 2, 0]) #9
            newpoints.append([0, -depth / 2, 0]) #10
            newpoints.append([-width, -depth / 2, 0]) #11
            newpoints.append([-width, depth / 2, 0]) #18
    
        return newpoints
    
    ##------------------------------------------------------------
    # Dimension: Angular1
    def Angular1(width = 2, length = 2, depth = 0.1, angle = 45, resolution = 10, center = False, arrow = 'Arrow1', arrowdepth = 0.25, arrowlength = 0.25):
    
        newpoints = []
    
        if arrow == 'Serifs1' or arrow == 'Serifs2':
            arrow = 'Without'
    
        w = 1
        if width < 0:
            w = -1
    
        if resolution == 0:
           resolution = 1
    
        if arrow == 'Without':
           arrowdepth = 0.0
           arrowlength = 0.0
    
        length = abs(length)
        angle = radians(angle)
    
        if center:
           center1 = w * depth / 2
           center2 = w * depth / 2
        else:
           center1 = 0
           center2 = w * depth
    
        g = hypot(width + w * length, center2)
        u_depth = asin((center2) / g)
    
        g = hypot(width, center2)
        u_depth_min = asin((center2 + center2/4) / g)
    
        g = hypot(width, arrowlength + w * center2)
        u_arrow = asin((arrowlength + w * center2) / g)
    
        if width < 0:
            u_depth = -u_depth
            u_depth_min = -u_depth_min
    
        a = 1
        if angle < 0 :
           a = -1
           u_depth = -u_depth
           u_depth_min = -u_depth_min
           u_arrow = -u_arrow
    
        x = (a * center1) / tan(angle / 2)
        newpoints.append([-x, -a * center1, 0]) #1
        newpoints.append([width + w * length, -a * center1, 0]) #2
        newpoints.append([width + w * length, a * center2, 0]) #3
    
        if arrow == 'Without':
            newpoints.append([width + w * depth / 2, a * center2, 0]) #4
        else:
            newpoints.append([width + w * depth / 100, a * center2, 0]) #4
    
        g = width + w * arrowdepth + w * depth / 2
        x = cos(u_arrow + u_depth) * g
        y = sin(u_arrow + u_depth) * g
        newpoints.append([x, y, 0]) #5
    
        if arrow == 'Arrow1':
            g = width + w * depth / 2
            x = cos(u_arrow + u_depth) * g
            y = sin(u_arrow + u_depth) * g
            newpoints.append([x, y, 0]) #6
        if arrow == 'Arrow2':
            g = width + w * depth / 2
            x = cos(u_arrow * 3 / 4 + u_depth) * g
            y = sin(u_arrow * 3 / 4 + u_depth) * g
            newpoints.append([x, y, 0]) #6
    
        i = 1
        while i < resolution :
            u = i * (angle - u_arrow * 2 - u_depth * 2) / resolution
            g = width + w * depth / 2
            x = cos(u + u_arrow + u_depth) * g
            y = sin(u + u_arrow + u_depth) * g
            newpoints.append([x, y, 0]) #n
            i  += 1
    
        if arrow == 'Arrow1':
            g = width + w * depth / 2
            x = cos(angle - u_arrow - u_depth) * g
            y = sin(angle - u_arrow - u_depth) * g
            newpoints.append([x, y, 0]) #7
        if arrow == 'Arrow2':
            g = width + w * depth / 2
            x = cos(angle - u_arrow * 3 / 4 - u_depth) * g
            y = sin(angle - u_arrow * 3 / 4 - u_depth) * g
            newpoints.append([x, y, 0]) #7
    
        u = angle - u_arrow - u_depth
        g = width + w * arrowdepth + w * depth / 2
        x = cos(u) * g
        y = sin(u) * g
        newpoints.append([x, y, 0]) #8
    
        if arrow == 'Without':
            g = width + w * depth / 2
            x = cos(angle-u_depth_min) * g
            y = sin(angle-u_depth_min) * g
            newpoints.append([x, y, 0]) #9
        else:
            g = width + w * depth / 100
            x = cos(angle-u_depth_min) * g
            y = sin(angle-u_depth_min) * g
            newpoints.append([x, y, 0]) #9
    
        if arrow == 'Without':
            g = width-w * depth / 2
            x = cos(angle-u_depth_min) * g
            y = sin(angle-u_depth_min) * g
            newpoints.append([x, y, 0]) #10
        else:
            g = width-w * depth / 100
            x = cos(angle-u_depth_min) * g
            y = sin(angle-u_depth_min) * g
            newpoints.append([x, y, 0]) #10
    
        g = width-w * arrowdepth-w * depth / 2
        x = cos(u) * g
        y = sin(u) * g
        newpoints.append([x, y, 0]) #11
    
        if arrow == 'Arrow1':
            u = angle - u_arrow - u_depth
            g = width-w * depth / 2
            x = cos(u) * g
            y = sin(u) * g
            newpoints.append([x, y, 0]) #12
        if arrow == 'Arrow2':
            u = angle - u_arrow * 3 / 4 - u_depth
            g = width-w * depth / 2
            x = cos(u) * g
            y = sin(u) * g
            newpoints.append([x, y, 0]) #12
    
        i = resolution - 1
        while i >=  1 :
            u = i * (angle - u_arrow * 2 - u_depth * 2) / resolution
            g = width-w * depth / 2
            x = cos(u + u_arrow + u_depth) * g
            y = sin(u + u_arrow + u_depth) * g
            newpoints.append([x, y, 0]) #n
            i -=  1
    
        if arrow == 'Arrow1':
            g = width-w * depth / 2
            x = cos(u_arrow + u_depth) * g
            y = sin(u_arrow + u_depth) * g
            newpoints.append([x, y, 0]) #13
        if arrow == 'Arrow2':
            g = width-w * depth / 2
            x = cos(u_arrow * 3 / 4 + u_depth) * g
            y = sin(u_arrow * 3 / 4 + u_depth) * g
            newpoints.append([x, y, 0]) #13
    
        g = width-w * arrowdepth-w * depth / 2
        x = cos(u_arrow + u_depth) * g
        y = sin(u_arrow + u_depth) * g
        newpoints.append([x, y, 0]) #14
    
        if arrow == 'Without':
            newpoints.append([width-w * depth / 2, a * center2, 0]) #15
        else:
            newpoints.append([width-w * depth / 100, a * center2, 0]) #15
    
        x = (a * center2) / tan(angle / 2)
        newpoints.append([x, a * center2, 0]) #16
    
        g = width + w * length
        x = cos(angle-u_depth) * g
        y = sin(angle-u_depth) * g
        newpoints.append([x, y, 0]) #17
    
        if center:
            g = width + w * length
            x = cos(angle + u_depth) * g
            y = sin(angle + u_depth) * g
            newpoints.append([x, y, 0]) #18
        else:
            g = width + w * length
            x = cos(angle) * g
            y = sin(angle) * g
            newpoints.append([x, y, 0]) #18
    
        return newpoints
    
    ##------------------------------------------------------------
    # Dimension: Angular2
    def Angular2(width = 2, depth = 0.1, angle = 45, resolution = 10, arrow = 'Arrow1', arrowdepth = 0.25, arrowlength = 0.25):
    
        newpoints = []
    
        if arrow == 'Serifs1' or arrow == 'Serifs2':
            arrow = 'Without'
    
        w = 1
        if width < 0:
            w = -1
    
        if resolution == 0:
           resolution = 1
    
        if arrow == 'Without':
           arrowdepth = 0.0
           arrowlength = 0.0
    
        angle = radians(angle)
    
        newpoints.append([width, 0, 0]) #1
    
        g = hypot(width + w * depth / 2, arrowlength)
        u_arrow = asin((arrowlength) / g)
        if angle < 0 :
           u_arrow = -u_arrow
    
        g = width + w * arrowdepth + w * depth / 2
        x = cos(u_arrow) * g
        y = sin(u_arrow) * g
        newpoints.append([x, y, 0]) #2
    
        if arrow == 'Arrow1':
            g = width + w * depth / 2
            x = cos(u_arrow) * g
            y = sin(u_arrow) * g
            newpoints.append([x, y, 0]) #3
    
        if arrow == 'Arrow2':
            g = width + w * depth / 2
            x = cos(u_arrow * 3 / 4) * g
            y = sin(u_arrow * 3 / 4) * g
            newpoints.append([x, y, 0]) #3
    
        i = 1
        while i < resolution :
            u = i * (angle - u_arrow * 2) / resolution
            g = width + w * depth / 2
            x = cos(u + u_arrow) * g
            y = sin(u + u_arrow) * g
            newpoints.append([x, y, 0]) #n
            i  += 1
    
        if arrow == 'Arrow1':
            u = angle - u_arrow
            g = width + w * depth / 2
            x = cos(u) * g
            y = sin(u) * g
            newpoints.append([x, y, 0]) #4
        if arrow == 'Arrow2':
            u = angle - u_arrow * 3 / 4
            g = width + w * depth / 2
            x = cos(u) * g
            y = sin(u) * g
            newpoints.append([x, y, 0]) #4
    
        u = angle - u_arrow
        g = width + w * arrowdepth + w * depth / 2
        x = cos(u) * g
        y = sin(u) * g
        newpoints.append([x, y, 0]) #5
    
        g = width
        x = cos(angle) * g
        y = sin(angle) * g
        newpoints.append([x, y, 0]) #6
    
        g = width-w * arrowdepth-w * depth / 2
        x = cos(u) * g
        y = sin(u) * g
        newpoints.append([x, y, 0]) #7
    
        if arrow == 'Arrow1':
            u = angle - u_arrow
            g = width-w * depth / 2
            x = cos(u) * g
            y = sin(u) * g
            newpoints.append([x, y, 0]) #8
        if arrow == 'Arrow2':
            u = angle - u_arrow * 3 / 4
            g = width-w * depth / 2
            x = cos(u) * g
            y = sin(u) * g
            newpoints.append([x, y, 0]) #8
    
        i = resolution - 1
        while i > 0 :
            u = i * (angle - u_arrow * 2) / resolution
            g = width-w * depth / 2
            x = cos(u + u_arrow) * g
            y = sin(u + u_arrow) * g
            newpoints.append([x, y, 0]) #n
            i -=  1
    
        if arrow == 'Arrow1':
            g = width-w * depth / 2
            x = cos(u_arrow) * g
            y = sin(u_arrow) * g
            newpoints.append([x, y, 0]) #9
        if arrow == 'Arrow2':
            g = width-w * depth / 2
            x = cos(u_arrow * 3 / 4) * g
            y = sin(u_arrow * 3 / 4) * g
            newpoints.append([x, y, 0]) #9
    
        g = width-w * arrowdepth-w * depth / 2
        x = cos(u_arrow) * g
        y = sin(u_arrow) * g
        newpoints.append([x, y, 0]) #10
    
        return newpoints
    
    ##------------------------------------------------------------
    # Dimension: Angular3
    def Angular3(width = 2, length = 2, dsize = 1, depth = 0.1, angle = 45, resolution = 10, center = False, arrow = 'Arrow1', arrowdepth = 0.25, arrowlength = 0.25):
    
        newpoints = []
    
        if arrow == 'Serifs1' or arrow == 'Serifs2':
            arrow = 'Without'
    
        w = 1
        if width < 0:
            w = -1
    
        if resolution == 0:
           resolution = 1
    
        if arrow == 'Without':
           arrowdepth = 0.0
           arrowlength = 0.0
    
        resolution_2 = floor(resolution / 2)
    
        length = abs(length)
        angle = radians(angle)
    
        if center:
           center1 = w * depth / 2
           center2 = w * depth / 2
        else:
           center1 = 0
           center2 = w * depth
    
        g = hypot(width + w * length, center2)
        u_depth = asin((center2) / g)
    
        g = hypot(width + depth / 2, center2)
        u_depth_13 = asin((center2 + center2/4) / g)
    
        g = hypot(width-depth / 2, center2)
        u_depth_14 = asin((center2 + center2/4) / g)
    
        g = hypot(width, center2)
        u_depth_min = asin((center2) / g)
    
        g = hypot(width, arrowlength + w * center2)
        u_arrow = asin((arrowlength + w * center2) / g)
    
        g = hypot(width, arrowlength + w * center2 + dsize)
        u_dsize = asin((arrowlength + w * center2 + dsize) / g)
    
        if width < 0:
            u_depth = -u_depth
            u_depth_min = -u_depth_min
            u_depth_13 = -u_depth_13
            u_depth_14 = -u_depth_14
    
        a = 1
        if angle < 0 :
           a = -1
           u_depth = -u_depth
           u_depth_min = -u_depth_min
           u_arrow = -u_arrow
           u_depth_13 = -u_depth_13
           u_depth_14 = -u_depth_14
    
        x = (a * center1) / tan(angle / 2)
        newpoints.append([-x, -a * center1, 0]) #1
    
        if arrow == 'Without':
            newpoints.append([width-w * depth / 2, -a * center1, 0]) #2
        else:
            newpoints.append([width-w * depth / 100, -a * center1, 0]) #2
    
        g = width-w * arrowdepth-w * depth / 2
        x = cos(-u_arrow-u_depth) * g
        y = sin(-u_arrow-u_depth) * g
        newpoints.append([x, y, 0]) #3
    
        if arrow == 'Arrow1':
            g = width-w * depth / 2
            x = cos(-u_arrow-u_depth) * g