From 5be43ac68ab0899fd73696498e6126448f86f66f Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Fri, 3 Mar 2023 16:32:55 +0800 Subject: [PATCH 01/24] add folder addon simple_deform_helper --- simple_deform_helper/LICENSE | 339 +++++++++++++++ simple_deform_helper/README.md | 34 ++ simple_deform_helper/README_CN.md | 31 ++ simple_deform_helper/__init__.py | 34 ++ simple_deform_helper/data.py | 57 +++ simple_deform_helper/draw.py | 212 ++++++++++ simple_deform_helper/gizmo.json | 1 + simple_deform_helper/gizmo.py | 619 ++++++++++++++++++++++++++++ simple_deform_helper/image/emm.jpeg | Bin 0 -> 158854 bytes simple_deform_helper/operators.py | 68 +++ simple_deform_helper/preferences.py | 177 ++++++++ simple_deform_helper/timers.py | 28 ++ simple_deform_helper/translate.py | 55 +++ simple_deform_helper/utils.py | 510 +++++++++++++++++++++++ 14 files changed, 2165 insertions(+) create mode 100644 simple_deform_helper/LICENSE create mode 100644 simple_deform_helper/README.md create mode 100644 simple_deform_helper/README_CN.md create mode 100644 simple_deform_helper/__init__.py create mode 100644 simple_deform_helper/data.py create mode 100644 simple_deform_helper/draw.py create mode 100644 simple_deform_helper/gizmo.json create mode 100644 simple_deform_helper/gizmo.py create mode 100644 simple_deform_helper/image/emm.jpeg create mode 100644 simple_deform_helper/operators.py create mode 100644 simple_deform_helper/preferences.py create mode 100644 simple_deform_helper/timers.py create mode 100644 simple_deform_helper/translate.py create mode 100644 simple_deform_helper/utils.py diff --git a/simple_deform_helper/LICENSE b/simple_deform_helper/LICENSE new file mode 100644 index 000000000..d159169d1 --- /dev/null +++ b/simple_deform_helper/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/simple_deform_helper/README.md b/simple_deform_helper/README.md new file mode 100644 index 000000000..e6e9e6258 --- /dev/null +++ b/simple_deform_helper/README.md @@ -0,0 +1,34 @@ +# SimpleDeformHelper +# Move to [AIGODLIKE](https://github.com/AIGODLIKE/popoti_align_helper.git) + +Simple Deform Modifier Visual adjustment tool + +You can modify parameters more intuitively by dragging the gizmo directly + +![emm.jpeg](image/emm.jpeg) + +To display the gizmo, you need to select the active object and the active modifier is a simple deformation modifier + +1. Angle control gizmo + +You can drag to control the modifier's value + +2. Axial control gizmo + +Modify the deformation axis of the active modifier by clicking + + + +Shortcut keys (when dragging the gizmo): + +X Y Z: modify the modifier's deformation axis + +A: Show deformation axis gizmo + +Scroll wheel: switch the origin control mode + +Toggle the axial gizmo (displayed only when the mode is bending): + +6 directions, each direction has two directions that can be switched + +While dragging the upper and lower limits gizmo, you can hold down Ctrl to maintain the relative distance between the upper and lower limits diff --git a/simple_deform_helper/README_CN.md b/simple_deform_helper/README_CN.md new file mode 100644 index 000000000..05b1ed74b --- /dev/null +++ b/simple_deform_helper/README_CN.md @@ -0,0 +1,31 @@ +# SimpleDeformHelper + +Simple Deform Modifier Visual adjustment tool + +You can modify parameters more intuitively by dragging the gizmo directly + +![emm.jpeg](image/emm.jpeg) + +显示Gizmo需要选择活动物体并且活动修改器为简易形变修改器 + +1.角度控制Gizmo + + 可通过拖动来控制修改器的值 + +2.轴向控制Gizmo + + 通过单击修改活动修改器的形变轴向 + +快捷键(在拖动Gizmo时): + + X Y Z:修改修改器的变形轴 + +A:显示变形轴Gizmo + + 滚轮滚动:切换原点控制模式 + +切换轴向Gizmo(只有在模式为弯曲时才可显示): + + 6个方向每个方向有两个方向可切换 + +在拖动上下限Gizmo时可以按住Ctrl 保持上下限之间的相对距离 \ No newline at end of file diff --git a/simple_deform_helper/__init__.py b/simple_deform_helper/__init__.py new file mode 100644 index 000000000..428f83e31 --- /dev/null +++ b/simple_deform_helper/__init__.py @@ -0,0 +1,34 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +from . import gizmo, operators, preferences, data,timers,translate + +bl_info = { + "name": "SimpleDeformHelper", + "author": "AIGODLIKE Community(BlenderCN辣椒,小萌新)", + "version": (0, 1, 1), + "blender": (3, 0, 0), + "location": "3D View -> Select an object and the active modifier is simple deformation", + "description": "Simple Deform visualization adjustment tool", + "doc_url": "https://github.com/Yorha4D/simple_deform_helper/blob/main/README_CN.md", + "wiki_url": "", + "category": "3D View" +} + +module_tuple = ( + gizmo, + timers, + translate, + operators, + preferences, +) + + +def register(): + data.Data.load_gizmo_data() + + for item in module_tuple: + item.register() + + +def unregister(): + for item in module_tuple: + item.unregister() diff --git a/simple_deform_helper/data.py b/simple_deform_helper/data.py new file mode 100644 index 000000000..6f759db51 --- /dev/null +++ b/simple_deform_helper/data.py @@ -0,0 +1,57 @@ +from os.path import dirname, basename, realpath + +G_MODIFIERS_PROPERTY = [ # copy modifier data + 'angle', + 'deform_axis', + 'deform_method', + 'factor', + 'invert_vertex_group', + 'limits', + 'lock_x', + 'lock_y', + 'lock_z', + 'origin', + 'show_expanded', + 'show_in_editmode', + 'vertex_group', +] + +G_INDICES = ( + (0, 1), (0, 2), (1, 3), (2, 3), + (4, 5), (4, 6), (5, 7), (6, 7), + (0, 4), (1, 5), (2, 6), (3, 7)) + +G_NAME = 'ViewSimpleDeformGizmo_' # Temporary use files +G_CON_LIMIT_NAME = G_NAME + 'constraints_limit_rotation' # 约束名称 +G_ADDON_NAME = basename(dirname(realpath(__file__))) # "simple_deform_helper" + + +class Data: + G_GizmoCustomShapeDict = {} + G_SimpleDeformGizmoHandlerDit = {} + + @classmethod + def load_gizmo_data(cls) -> None: + import json + import os + json_path = os.path.join(os.path.dirname(__file__), "gizmo.json") + with open(json_path, "r") as file: + cls.G_GizmoCustomShapeDict = json.load(file) + + @staticmethod + def from_bmesh_get_triangle_face_co(mesh: 'bpy.types.Mesh') -> list: + """ + :param mesh: 输入一个网格数据 + :type mesh: bpy.data.meshes + :return list: 反回顶点列表[[co1,co2,co3],[co1,co2,co3]...] + """ + import bmesh + + bm = bmesh.new() + bm.from_mesh(mesh) + bm.faces.ensure_lookup_table() + bm.verts.ensure_lookup_table() + bmesh.ops.triangulate(bm, faces=bm.faces) + co_list = [list(float(format(j, ".4f")) for j in vert.co) for face in bm.faces for vert in face.verts] + bm.free() + return co_list diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py new file mode 100644 index 000000000..1f1d1ef32 --- /dev/null +++ b/simple_deform_helper/draw.py @@ -0,0 +1,212 @@ +import bgl +import blf +import bpy +import gpu +from gpu_extras.batch import batch_for_shader +from mathutils import Vector + +from .data import G_INDICES, G_MODIFIERS_PROPERTY, G_NAME, Data +from .utils import Pref, Utils + + +class Handler(Data): + @classmethod + def add_handler(cls): + """向3d视图添加绘制handler + 并将其存储下来 + """ + if 'handler' not in cls.G_SimpleDeformGizmoHandlerDit: + cls.G_SimpleDeformGizmoHandlerDit['handler'] = bpy.types.SpaceView3D.draw_handler_add( + Draw3D.draw_bound_box, (), 'WINDOW', 'POST_VIEW') + + @classmethod + def del_handler_text(cls): + + if 'handler_text' in cls.G_SimpleDeformGizmoHandlerDit: + bpy.types.SpaceView3D.draw_handler_remove( + cls.G_SimpleDeformGizmoHandlerDit['handler_text'], 'WINDOW') + cls.G_SimpleDeformGizmoHandlerDit.pop('handler_text') + + @classmethod + def del_handler(cls): + data = bpy.data + if data.meshes.get(G_NAME): + data.meshes.remove(data.meshes.get(G_NAME)) + + if data.objects.get(G_NAME): + data.objects.remove(data.objects.get(G_NAME)) + + cls.del_handler_text() + + if 'handler' in cls.G_SimpleDeformGizmoHandlerDit: + bpy.types.SpaceView3D.draw_handler_remove( + cls.G_SimpleDeformGizmoHandlerDit['handler'], 'WINDOW') + cls.G_SimpleDeformGizmoHandlerDit.clear() + + +class Draw3D(Pref, Data): + + @classmethod + def draw_3d_shader(cls, pos, indices, color=None, *, shader_name='3D_UNIFORM_COLOR', draw_type='LINES'): + """ + :param draw_type: + :param shader_name: + :param color: + :param indices: + :param pos: + :type pos:list ((0,0,0),(1,1,1)) + 2D_FLAT_COLOR - 2D_IMAGE - 2D_SMOOTH_COLOR - 2D_UNIFORM_COLOR - 3D_FLAT_COLOR - 3D_SMOOTH_COLOR - 3D_UNIFORM_COLOR - 3D_POLYLINE_FLAT_COLOR - 3D_POLYLINE_SMOOTH_COLOR - 3D_POLYLINE_UNIFORM_COLOR + ('POINTS', 'LINES', 'TRIS', 'LINE_STRIP', 'LINE_LOOP','TRI_STRIP', + 'TRI_FAN', 'LINES_ADJ', 'TRIS_ADJ', 'LINE_STRIP_ADJ') + `NONE`, `ALWAYS`, `LESS`, `LESS_EQUAL`, `EQUAL`, `GREATER` and `GREATER_EQUAL` + """ + + shader = gpu.shader.from_builtin(shader_name) + if draw_type == 'POINTS': + batch = batch_for_shader(shader, draw_type, {'pos': pos}) + else: + batch = batch_for_shader( + shader, draw_type, {'pos': pos}, indices=indices) + + shader.bind() + if color: + shader.uniform_float('color', color) + + batch.draw(shader) + + font_info = { + 'font_id': 0, + 'handler': None, + } + + @classmethod + def draw_str(cls): + obj = bpy.context.object + font_id = cls.font_info['font_id'] + + blf.position(font_id, 200, 80, 0) + blf.size(font_id, 15, 72) + blf.color(font_id, 1, 1, 1, 1) + blf.draw( + font_id, + f'The scaling value of the object {obj.name_full} is not 1,' + f' which will cause the deformation of the simple deformation modifier.' + f' Please apply the scaling before deformation') + if obj.scale == Vector((1, 1, 1)): + Handler.del_handler_text() + + @classmethod + def draw_text(cls, x, y, text='Hello Word', font_id=0, size=10, *, color=(0.5, 0.5, 0.5, 1), dpi=72, column=0): + blf.position(font_id, x, y - (size * (column + 1)), 0) + blf.size(font_id, size, dpi) + blf.draw(font_id, text) + blf.color(font_id, *color) + + @classmethod + def draw_box(cls, data, mat): + pref = cls._pref() + coords = Utils.matrix_calculation(mat, + cls.data_to_calculation(data)) + cls.draw_3d_shader(coords, G_INDICES, pref.bound_box_color) + + @classmethod + def data_to_calculation(cls, data): + ((min_x, min_y, min_z), (max_x, max_y, max_z)) = data + return ( + (max_x, min_y, min_z), + (min_x, min_y, min_z), + (max_x, max_y, min_z), + (min_x, max_y, min_z), + (max_x, min_y, max_z), + (min_x, min_y, max_z), + (max_x, max_y, max_z), + (min_x, max_y, max_z)) + + @classmethod + def draw_limits_bound_box(cls): + + pref = cls._pref() + handler_dit = cls.G_SimpleDeformGizmoHandlerDit + if 'draw_limits_bound_box' in handler_dit: + # draw limits_bound_box + mat, data = handler_dit['draw_limits_bound_box'] + bgl.glEnable(bgl.GL_DEPTH_TEST) + coords = Utils.matrix_calculation(mat, cls.data_to_calculation(data)) + cls.draw_3d_shader(coords, + G_INDICES, + pref.limits_bound_box_color) + + @classmethod + def draw_limits_line(cls): + handler_dit = cls.G_SimpleDeformGizmoHandlerDit + if 'draw_line' in handler_dit: + line_pos, limits_pos, = handler_dit['draw_line'] + bgl.glDisable(bgl.GL_DEPTH_TEST) + # draw limits line + cls.draw_3d_shader(limits_pos, ((1, 0),), (1, 1, 0, 0.5)) + # draw line + cls.draw_3d_shader(line_pos, ((1, 0),), (1, 1, 0, 0.3)) + # draw pos + cls.draw_3d_shader([line_pos[1]], (), (0, 1, 0, 0.5), + shader_name='3D_UNIFORM_COLOR', draw_type='POINTS') + + @classmethod + def draw_deform_mesh(cls, ob, context): + pref = cls._pref() + handler_dit = cls.G_SimpleDeformGizmoHandlerDit + active = context.object.modifiers.active + # draw deform mesh + if 'draw' in handler_dit: + pos, indices, mat, mod_data, limits = handler_dit['draw'] + if ([getattr(active, i) for i in G_MODIFIERS_PROPERTY] == mod_data) and ( + ob.matrix_world == mat) and limits == active.limits[:]: + bgl.glEnable(bgl.GL_DEPTH_TEST) + cls.draw_3d_shader( + pos, indices, pref.deform_wireframe_color) + + @classmethod + def draw_scale_text(cls, ob): + if (ob.scale != Vector((1, 1, 1))) and ('handler_text' not in cls.G_SimpleDeformGizmoHandlerDit): + cls.G_SimpleDeformGizmoHandlerDit['handler_text'] = bpy.types.SpaceView3D.draw_handler_add( + cls.draw_str, (), 'WINDOW', 'POST_PIXEL') + + @classmethod + def is_draw_box(cls, context): + obj = context.object # 活动物体 + matrix = obj.matrix_world # 活动物体矩阵 + modifier = context.object.modifiers.active # 活动修改器 + + pref = cls._pref() + simple_poll = Utils.simple_deform_poll(context) + bend = modifier and (modifier.deform_method == 'BEND') + display_switch_axis = False == pref.display_bend_axis_switch_gizmo + + cls.draw_scale_text(obj) + Utils.update_co_data(obj, modifier) + + co_data = Utils.generate_co_data() + + if simple_poll and ((not bend) or display_switch_axis): + # draw bound box + cls.draw_box(co_data, matrix) + cls.draw_deform_mesh(obj, context) + cls.draw_limits_line() + cls.draw_limits_bound_box() + elif simple_poll and (bend and not display_switch_axis): + bgl.glDisable(bgl.GL_DEPTH_TEST) + cls.draw_box(co_data, matrix) + Utils.new_empty(obj, modifier) + + @classmethod + def draw_bound_box(cls): + gpu.state.blend_set('ALPHA') + gpu.state.line_width_set(1) + bgl.glEnable(bgl.GL_BLEND) + bgl.glEnable(bgl.GL_ALPHA) + bgl.glDisable(bgl.GL_DEPTH_TEST) + + context = bpy.context + if Utils.simple_deform_poll(context): + cls.is_draw_box(context) + else: + Handler.del_handler() diff --git a/simple_deform_helper/gizmo.json b/simple_deform_helper/gizmo.json new file mode 100644 index 000000000..c7f3bc66f --- /dev/null +++ b/simple_deform_helper/gizmo.json @@ -0,0 +1 @@ +{"XYZ_GizmoGroup_": [[0.515, -0.035, 0.195], [0.9272, -0.035, 0.2567], [0.515, -0.035, 0.2567], [0.515, -0.035, 0.195], [0.8003, -0.035, 0.195], [0.9272, -0.035, 0.2567], [0.8003, -0.035, 0.195], [0.6229, -0.035, -0.1596], [0.9272, -0.035, 0.2567], [0.4961, -0.035, -0.2213], [0.6229, -0.035, -0.1596], [0.8003, -0.035, 0.195], [0.4961, -0.035, -0.2213], [0.9272, -0.035, -0.1596], [0.6229, -0.035, -0.1596], [0.4961, -0.035, -0.2213], [0.9272, -0.035, -0.2213], [0.9272, -0.035, -0.1596], [-0.0311, -0.035, 0.0317], [-0.1257, -0.035, 0.2567], [-0.2084, -0.035, 0.2567], [-0.0311, -0.035, 0.0317], [0.0026, -0.035, 0.092], [-0.1257, -0.035, 0.2567], [0.0026, -0.035, 0.092], [0.215, -0.035, 0.2567], [0.1323, -0.035, 0.2567], [0.0026, -0.035, 0.092], [0.0376, -0.035, 0.031], [0.215, -0.035, 0.2567], [-0.0311, -0.035, 0.0317], [0.0376, -0.035, 0.031], [0.0026, -0.035, 0.092], [-0.0311, -0.035, -0.2213], [0.0376, -0.035, 0.031], [-0.0311, -0.035, 0.0317], [-0.0311, -0.035, -0.2213], [0.0376, -0.035, -0.2213], [0.0376, -0.035, 0.031], [-0.7671, -0.035, 0.0261], [-0.8751, -0.035, 0.2567], [-0.9585, -0.035, 0.2567], [-0.7671, -0.035, 0.0261], [-0.725, -0.035, 0.0745], [-0.8751, -0.035, 0.2567], [-0.725, -0.035, 0.0745], [-0.493, -0.035, 0.2567], [-0.5757, -0.035, 0.2567], [-0.725, -0.035, 0.0745], [-0.6837, -0.035, 0.0261], [-0.493, -0.035, 0.2567], [-0.7671, -0.035, 0.0261], [-0.6837, -0.035, 0.0261], [-0.725, -0.035, 0.0745], [-0.9732, -0.035, -0.2213], [-0.6837, -0.035, 0.0261], [-0.7671, -0.035, 0.0261], [-0.9732, -0.035, -0.2213], [-0.725, -0.035, -0.0237], [-0.6837, -0.035, 0.0261], [-0.725, -0.035, -0.0237], [-0.4797, -0.035, -0.2213], [-0.6837, -0.035, 0.0261], [-0.9732, -0.035, -0.2213], [-0.8898, -0.035, -0.2213], [-0.725, -0.035, -0.0237], [-0.5624, -0.035, -0.2213], [-0.4797, -0.035, -0.2213], [-0.725, -0.035, -0.0237], [0.515, 0.035, 0.195], [0.515, 0.035, 0.2567], [0.9272, 0.035, 0.2567], [0.515, 0.035, 0.195], [0.9272, 0.035, 0.2567], [0.8003, 0.035, 0.195], [0.8003, 0.035, 0.195], [0.9272, 0.035, 0.2567], [0.6229, 0.035, -0.1596], [0.4961, 0.035, -0.2213], [0.8003, 0.035, 0.195], [0.6229, 0.035, -0.1596], [0.4961, 0.035, -0.2213], [0.6229, 0.035, -0.1596], [0.9272, 0.035, -0.1596], [0.4961, 0.035, -0.2213], [0.9272, 0.035, -0.1596], [0.9272, 0.035, -0.2213], [-0.0311, 0.035, 0.0317], [-0.2084, 0.035, 0.2567], [-0.1257, 0.035, 0.2567], [-0.0311, 0.035, 0.0317], [-0.1257, 0.035, 0.2567], [0.0026, 0.035, 0.092], [0.0026, 0.035, 0.092], [0.1323, 0.035, 0.2567], [0.215, 0.035, 0.2567], [0.0026, 0.035, 0.092], [0.215, 0.035, 0.2567], [0.0376, 0.035, 0.031], [-0.0311, 0.035, 0.0317], [0.0026, 0.035, 0.092], [0.0376, 0.035, 0.031], [-0.0311, 0.035, -0.2213], [-0.0311, 0.035, 0.0317], [0.0376, 0.035, 0.031], [-0.0311, 0.035, -0.2213], [0.0376, 0.035, 0.031], [0.0376, 0.035, -0.2213], [-0.7671, 0.035, 0.0261], [-0.9585, 0.035, 0.2567], [-0.8751, 0.035, 0.2567], [-0.7671, 0.035, 0.0261], [-0.8751, 0.035, 0.2567], [-0.725, 0.035, 0.0745], [-0.725, 0.035, 0.0745], [-0.5757, 0.035, 0.2567], [-0.493, 0.035, 0.2567], [-0.725, 0.035, 0.0745], [-0.493, 0.035, 0.2567], [-0.6837, 0.035, 0.0261], [-0.7671, 0.035, 0.0261], [-0.725, 0.035, 0.0745], [-0.6837, 0.035, 0.0261], [-0.9732, 0.035, -0.2213], [-0.7671, 0.035, 0.0261], [-0.6837, 0.035, 0.0261], [-0.9732, 0.035, -0.2213], [-0.6837, 0.035, 0.0261], [-0.725, 0.035, -0.0237], [-0.725, 0.035, -0.0237], [-0.6837, 0.035, 0.0261], [-0.4797, 0.035, -0.2213], [-0.9732, 0.035, -0.2213], [-0.725, 0.035, -0.0237], [-0.8898, 0.035, -0.2213], [-0.5624, 0.035, -0.2213], [-0.725, 0.035, -0.0237], [-0.4797, 0.035, -0.2213], [-0.5624, -0.035, -0.2213], [-0.4797, 0.035, -0.2213], [-0.4797, -0.035, -0.2213], [-0.725, -0.035, -0.0237], [-0.5624, 0.035, -0.2213], [-0.5624, -0.035, -0.2213], [-0.8898, -0.035, -0.2213], [-0.725, 0.035, -0.0237], [-0.725, -0.035, -0.0237], [-0.9732, -0.035, -0.2213], [-0.8898, 0.035, -0.2213], [-0.8898, -0.035, -0.2213], [-0.7671, -0.035, 0.0261], [-0.9732, 0.035, -0.2213], [-0.9732, -0.035, -0.2213], [-0.9585, -0.035, 0.2567], [-0.7671, 0.035, 0.0261], [-0.7671, -0.035, 0.0261], [-0.8751, -0.035, 0.2567], [-0.9585, 0.035, 0.2567], [-0.9585, -0.035, 0.2567], [-0.725, -0.035, 0.0745], [-0.8751, 0.035, 0.2567], [-0.8751, -0.035, 0.2567], [-0.5757, -0.035, 0.2567], [-0.725, 0.035, 0.0745], [-0.725, -0.035, 0.0745], [-0.493, -0.035, 0.2567], [-0.5757, 0.035, 0.2567], [-0.5757, -0.035, 0.2567], [-0.6837, -0.035, 0.0261], [-0.493, 0.035, 0.2567], [-0.493, -0.035, 0.2567], [-0.4797, -0.035, -0.2213], [-0.6837, 0.035, 0.0261], [-0.6837, -0.035, 0.0261], [0.0376, -0.035, 0.031], [0.215, 0.035, 0.2567], [0.215, -0.035, 0.2567], [0.0376, -0.035, -0.2213], [0.0376, 0.035, 0.031], [0.0376, -0.035, 0.031], [-0.0311, -0.035, -0.2213], [0.0376, 0.035, -0.2213], [0.0376, -0.035, -0.2213], [-0.0311, -0.035, -0.2213], [-0.0311, 0.035, 0.0317], [-0.0311, 0.035, -0.2213], [-0.2084, -0.035, 0.2567], [-0.0311, 0.035, 0.0317], [-0.0311, -0.035, 0.0317], [-0.1257, -0.035, 0.2567], [-0.2084, 0.035, 0.2567], [-0.2084, -0.035, 0.2567], [0.0026, -0.035, 0.092], [-0.1257, 0.035, 0.2567], [-0.1257, -0.035, 0.2567], [0.0026, -0.035, 0.092], [0.1323, 0.035, 0.2567], [0.0026, 0.035, 0.092], [0.215, -0.035, 0.2567], [0.1323, 0.035, 0.2567], [0.1323, -0.035, 0.2567], [0.9272, -0.035, 0.2567], [0.515, 0.035, 0.2567], [0.515, -0.035, 0.2567], [0.6229, -0.035, -0.1596], [0.9272, 0.035, 0.2567], [0.9272, -0.035, 0.2567], [0.9272, -0.035, -0.1596], [0.6229, 0.035, -0.1596], [0.6229, -0.035, -0.1596], [0.9272, -0.035, -0.2213], [0.9272, 0.035, -0.1596], [0.9272, -0.035, -0.1596], [0.4961, -0.035, -0.2213], [0.9272, 0.035, -0.2213], [0.9272, -0.035, -0.2213], [0.8003, -0.035, 0.195], [0.4961, 0.035, -0.2213], [0.4961, -0.035, -0.2213], [0.515, -0.035, 0.195], [0.8003, 0.035, 0.195], [0.8003, -0.035, 0.195], [0.515, -0.035, 0.195], [0.515, 0.035, 0.2567], [0.515, 0.035, 0.195], [-0.5624, -0.035, -0.2213], [-0.5624, 0.035, -0.2213], [-0.4797, 0.035, -0.2213], [-0.725, -0.035, -0.0237], [-0.725, 0.035, -0.0237], [-0.5624, 0.035, -0.2213], [-0.8898, -0.035, -0.2213], [-0.8898, 0.035, -0.2213], [-0.725, 0.035, -0.0237], [-0.9732, -0.035, -0.2213], [-0.9732, 0.035, -0.2213], [-0.8898, 0.035, -0.2213], [-0.7671, -0.035, 0.0261], [-0.7671, 0.035, 0.0261], [-0.9732, 0.035, -0.2213], [-0.9585, -0.035, 0.2567], [-0.9585, 0.035, 0.2567], [-0.7671, 0.035, 0.0261], [-0.8751, -0.035, 0.2567], [-0.8751, 0.035, 0.2567], [-0.9585, 0.035, 0.2567], [-0.725, -0.035, 0.0745], [-0.725, 0.035, 0.0745], [-0.8751, 0.035, 0.2567], [-0.5757, -0.035, 0.2567], [-0.5757, 0.035, 0.2567], [-0.725, 0.035, 0.0745], [-0.493, -0.035, 0.2567], [-0.493, 0.035, 0.2567], [-0.5757, 0.035, 0.2567], [-0.6837, -0.035, 0.0261], [-0.6837, 0.035, 0.0261], [-0.493, 0.035, 0.2567], [-0.4797, -0.035, -0.2213], [-0.4797, 0.035, -0.2213], [-0.6837, 0.035, 0.0261], [0.0376, -0.035, 0.031], [0.0376, 0.035, 0.031], [0.215, 0.035, 0.2567], [0.0376, -0.035, -0.2213], [0.0376, 0.035, -0.2213], [0.0376, 0.035, 0.031], [-0.0311, -0.035, -0.2213], [-0.0311, 0.035, -0.2213], [0.0376, 0.035, -0.2213], [-0.0311, -0.035, -0.2213], [-0.0311, -0.035, 0.0317], [-0.0311, 0.035, 0.0317], [-0.2084, -0.035, 0.2567], [-0.2084, 0.035, 0.2567], [-0.0311, 0.035, 0.0317], [-0.1257, -0.035, 0.2567], [-0.1257, 0.035, 0.2567], [-0.2084, 0.035, 0.2567], [0.0026, -0.035, 0.092], [0.0026, 0.035, 0.092], [-0.1257, 0.035, 0.2567], [0.0026, -0.035, 0.092], [0.1323, -0.035, 0.2567], [0.1323, 0.035, 0.2567], [0.215, -0.035, 0.2567], [0.215, 0.035, 0.2567], [0.1323, 0.035, 0.2567], [0.9272, -0.035, 0.2567], [0.9272, 0.035, 0.2567], [0.515, 0.035, 0.2567], [0.6229, -0.035, -0.1596], [0.6229, 0.035, -0.1596], [0.9272, 0.035, 0.2567], [0.9272, -0.035, -0.1596], [0.9272, 0.035, -0.1596], [0.6229, 0.035, -0.1596], [0.9272, -0.035, -0.2213], [0.9272, 0.035, -0.2213], [0.9272, 0.035, -0.1596], [0.4961, -0.035, -0.2213], [0.4961, 0.035, -0.2213], [0.9272, 0.035, -0.2213], [0.8003, -0.035, 0.195], [0.8003, 0.035, 0.195], [0.4961, 0.035, -0.2213], [0.515, -0.035, 0.195], [0.515, 0.035, 0.195], [0.8003, 0.035, 0.195], [0.515, -0.035, 0.195], [0.515, -0.035, 0.2567], [0.515, 0.035, 0.2567]], "Suzanne_GizmoGroup_": [[0.265, -0.2437, 0.0984], [0.2826, -0.204, 0.0145], [0.318, -0.1952, 0.0984], [-0.2826, -0.204, 0.0145], [-0.265, -0.2437, 0.0984], [-0.318, -0.1952, 0.0984], [0.318, -0.1952, 0.0984], [0.3091, -0.1422, -0.0076], [0.3533, -0.1333, 0.0984], [-0.3091, -0.1422, -0.0076], [-0.318, -0.1952, 0.0984], [-0.3533, -0.1333, 0.0984], [0.2826, -0.204, 0.0145], [0.1987, -0.1643, -0.0517], [0.3091, -0.1422, -0.0076], [-0.1987, -0.1643, -0.0517], [-0.2826, -0.204, 0.0145], [-0.3091, -0.1422, -0.0076], [0.2473, -0.2482, 0.0543], [0.1987, -0.2217, -0.0208], [0.2826, -0.204, 0.0145], [-0.1987, -0.2217, -0.0208], [-0.2473, -0.2482, 0.0543], [-0.2826, -0.204, 0.0145], [0.1987, -0.257, 0.0366], [0.1148, -0.2349, 0.0145], [0.1987, -0.2217, -0.0208], [-0.1148, -0.2349, 0.0145], [-0.1987, -0.257, 0.0366], [-0.1987, -0.2217, -0.0208], [0.1987, -0.2217, -0.0208], [0.0883, -0.1819, -0.0076], [0.1987, -0.1643, -0.0517], [-0.0883, -0.1819, -0.0076], [-0.1987, -0.2217, -0.0208], [-0.1987, -0.1643, -0.0517], [0.0795, -0.2349, 0.0984], [0.0883, -0.1819, -0.0076], [0.1148, -0.2349, 0.0145], [-0.0795, -0.2349, 0.0984], [-0.0883, -0.1819, -0.0076], [-0.0442, -0.1863, 0.0984], [0.1546, -0.2658, 0.0543], [0.0795, -0.2349, 0.0984], [0.1148, -0.2349, 0.0145], [-0.0795, -0.2349, 0.0984], [-0.1546, -0.2658, 0.0543], [-0.1148, -0.2349, 0.0145], [0.1369, -0.2658, 0.0984], [0.1148, -0.2349, 0.1823], [0.0795, -0.2349, 0.0984], [-0.1148, -0.2349, 0.1823], [-0.1369, -0.2658, 0.0984], [-0.0795, -0.2349, 0.0984], [0.1148, -0.2349, 0.1823], [0.0442, -0.1863, 0.0984], [0.0795, -0.2349, 0.0984], [-0.1148, -0.2349, 0.1823], [-0.0442, -0.1863, 0.0984], [-0.0883, -0.1819, 0.2088], [0.1987, -0.2217, 0.2177], [0.0883, -0.1819, 0.2088], [0.1148, -0.2349, 0.1823], [-0.1987, -0.2217, 0.2177], [-0.0883, -0.1819, 0.2088], [-0.1987, -0.1643, 0.253], [0.1987, -0.257, 0.1647], [0.1148, -0.2349, 0.1823], [0.1546, -0.2658, 0.147], [-0.1987, -0.257, 0.1647], [-0.1148, -0.2349, 0.1823], [-0.1987, -0.2217, 0.2177], [0.2473, -0.2482, 0.147], [0.1987, -0.2217, 0.2177], [0.1987, -0.257, 0.1647], [-0.2473, -0.2482, 0.147], [-0.1987, -0.2217, 0.2177], [-0.2826, -0.204, 0.1823], [0.2826, -0.204, 0.1823], [0.1987, -0.1643, 0.253], [0.1987, -0.2217, 0.2177], [-0.2826, -0.204, 0.1823], [-0.1987, -0.1643, 0.253], [-0.3091, -0.1422, 0.2088], [0.318, -0.1952, 0.0984], [0.3091, -0.1422, 0.2088], [0.2826, -0.204, 0.1823], [-0.318, -0.1952, 0.0984], [-0.3091, -0.1422, 0.2088], [-0.3533, -0.1333, 0.0984], [0.265, -0.2437, 0.0984], [0.2826, -0.204, 0.1823], [0.2473, -0.2482, 0.147], [-0.265, -0.2437, 0.0984], [-0.2826, -0.204, 0.1823], [-0.318, -0.1952, 0.0984], [0.2473, -0.2482, 0.147], [0.2694, -0.2526, 0.0984], [0.265, -0.2437, 0.0984], [-0.2473, -0.2482, 0.147], [-0.2694, -0.2526, 0.0984], [-0.2517, -0.257, 0.1514], [0.1987, -0.257, 0.1647], [0.2517, -0.257, 0.1514], [0.2473, -0.2482, 0.147], [-0.1987, -0.257, 0.1647], [-0.2517, -0.257, 0.1514], [-0.1987, -0.2702, 0.1735], [0.1546, -0.2658, 0.147], [0.1987, -0.2702, 0.1735], [0.1987, -0.257, 0.1647], [-0.1546, -0.2658, 0.147], [-0.1987, -0.2702, 0.1735], [-0.1502, -0.2791, 0.1514], [0.1369, -0.2658, 0.0984], [0.1502, -0.2791, 0.1514], [0.1546, -0.2658, 0.147], [-0.1369, -0.2658, 0.0984], [-0.1502, -0.2791, 0.1514], [-0.1281, -0.2791, 0.0984], [0.1369, -0.2658, 0.0984], [0.1502, -0.2791, 0.0498], [0.1281, -0.2791, 0.0984], [-0.1502, -0.2791, 0.0498], [-0.1369, -0.2658, 0.0984], [-0.1281, -0.2791, 0.0984], [0.1546, -0.2658, 0.0543], [0.1987, -0.2702, 0.0278], [0.1502, -0.2791, 0.0498], [-0.1987, -0.2702, 0.0278], [-0.1546, -0.2658, 0.0543], [-0.1502, -0.2791, 0.0498], [0.1987, -0.257, 0.0366], [0.2517, -0.257, 0.0498], [0.1987, -0.2702, 0.0278], [-0.2517, -0.257, 0.0498], [-0.1987, -0.257, 0.0366], [-0.1987, -0.2702, 0.0278], [0.2473, -0.2482, 0.0543], [0.2694, -0.2526, 0.0984], [0.2517, -0.257, 0.0498], [-0.2694, -0.2526, 0.0984], [-0.2473, -0.2482, 0.0543], [-0.2517, -0.257, 0.0498], [0.1987, -0.2835, 0.0984], [0.2517, -0.257, 0.0498], [0.2694, -0.2526, 0.0984], [-0.2694, -0.2526, 0.0984], [-0.2517, -0.257, 0.0498], [-0.1987, -0.2835, 0.0984], [0.1987, -0.2702, 0.0278], [0.2517, -0.257, 0.0498], [0.1987, -0.2835, 0.0984], [-0.1987, -0.2835, 0.0984], [-0.2517, -0.257, 0.0498], [-0.1987, -0.2702, 0.0278], [0.1987, -0.2835, 0.0984], [0.1502, -0.2791, 0.0498], [0.1987, -0.2702, 0.0278], [-0.1987, -0.2702, 0.0278], [-0.1502, -0.2791, 0.0498], [-0.1987, -0.2835, 0.0984], [0.1987, -0.2835, 0.0984], [0.1281, -0.2791, 0.0984], [0.1502, -0.2791, 0.0498], [-0.1502, -0.2791, 0.0498], [-0.1281, -0.2791, 0.0984], [-0.1987, -0.2835, 0.0984], [0.1987, -0.2835, 0.0984], [0.1502, -0.2791, 0.1514], [0.1281, -0.2791, 0.0984], [-0.1281, -0.2791, 0.0984], [-0.1502, -0.2791, 0.1514], [-0.1987, -0.2835, 0.0984], [0.1987, -0.2835, 0.0984], [0.1987, -0.2702, 0.1735], [0.1502, -0.2791, 0.1514], [-0.1502, -0.2791, 0.1514], [-0.1987, -0.2702, 0.1735], [-0.1987, -0.2835, 0.0984], [0.1987, -0.2835, 0.0984], [0.2517, -0.257, 0.1514], [0.1987, -0.2702, 0.1735], [-0.1987, -0.2702, 0.1735], [-0.2517, -0.257, 0.1514], [-0.1987, -0.2835, 0.0984], [0.1987, -0.2835, 0.0984], [0.2694, -0.2526, 0.0984], [0.2517, -0.257, 0.1514], [-0.2517, -0.257, 0.1514], [-0.2694, -0.2526, 0.0984], [-0.1987, -0.2835, 0.0984], [0.0927, -0.1731, -0.564], [-0.0, -0.1422, -0.5949], [0.1016, -0.1289, -0.5861], [-0.0927, -0.1731, -0.564], [-0.0, -0.1422, -0.5949], [-0.0, -0.1775, -0.5728], [0.1325, -0.1731, -0.5552], [0.1016, -0.1289, -0.5861], [0.1855, -0.1113, -0.5728], [-0.1325, -0.1731, -0.5552], [-0.1016, -0.1289, -0.5861], [-0.0927, -0.1731, -0.564], [0.2076, -0.1157, -0.5419], [0.1325, -0.1731, -0.5552], [0.1855, -0.1113, -0.5728], [-0.1325, -0.1731, -0.5552], [-0.2076, -0.1157, -0.5419], [-0.1855, -0.1113, -0.5728], [0.1987, -0.1378, -0.4315], [0.1502, -0.1908, -0.5022], [0.2076, -0.1157, -0.5419], [-0.1502, -0.1908, -0.5022], [-0.1987, -0.1378, -0.4315], [-0.2076, -0.1157, -0.5419], [0.1766, -0.1378, -0.2858], [0.1413, -0.204, -0.4359], [0.1987, -0.1378, -0.4315], [-0.1413, -0.204, -0.4359], [-0.1766, -0.1378, -0.2858], [-0.1987, -0.1378, -0.4315], [0.1148, -0.1333, -0.1445], [0.2252, -0.1952, -0.065], [0.0707, -0.2747, -0.0959], [-0.2252, -0.1952, -0.065], [-0.1148, -0.1333, -0.1445], [-0.0707, -0.2747, -0.0959], [0.3577, -0.1201, -0.0606], [0.2252, -0.1952, -0.065], [0.2473, -0.1157, -0.118], [-0.3577, -0.1201, -0.0606], [-0.2252, -0.1952, -0.065], [-0.3489, -0.1687, -0.0076], [0.3577, -0.1201, -0.0606], [0.4107, -0.1554, 0.0763], [0.3489, -0.1687, -0.0076], [-0.4107, -0.1554, 0.0763], [-0.3577, -0.1201, -0.0606], [-0.3489, -0.1687, -0.0076], [0.4858, -0.151, 0.2044], [0.4107, -0.1554, 0.0763], [0.4681, -0.0671, 0.0454], [-0.4858, -0.151, 0.2044], [-0.4107, -0.1554, 0.0763], [-0.4195, -0.1863, 0.1735], [0.4019, -0.1687, 0.2353], [0.4195, -0.1863, 0.1735], [0.4858, -0.151, 0.2044], [-0.4019, -0.1687, 0.2353], [-0.4195, -0.1863, 0.1735], [-0.3886, -0.2261, 0.1956], [0.2782, -0.204, 0.3016], [0.3886, -0.2261, 0.1956], [0.4019, -0.1687, 0.2353], [-0.2782, -0.204, 0.3016], [-0.3886, -0.2261, 0.1956], [-0.2473, -0.2658, 0.2707], [0.2782, -0.204, 0.3016], [0.1766, -0.2879, 0.3236], [0.2473, -0.2658, 0.2707], [-0.1766, -0.2879, 0.3236], [-0.2782, -0.204, 0.3016], [-0.2473, -0.2658, 0.2707], [0.0883, -0.2437, 0.3678], [0.1766, -0.2879, 0.3236], [0.1811, -0.2305, 0.3899], [-0.0883, -0.2437, 0.3678], [-0.1766, -0.2879, 0.3236], [-0.1148, -0.2967, 0.3104], [0.0353, -0.2393, 0.2397], [0.1148, -0.2967, 0.3104], [0.0883, -0.2437, 0.3678], [-0.0353, -0.2393, 0.2397], [-0.1148, -0.2967, 0.3104], [-0.0574, -0.2923, 0.2044], [-0.0, -0.2349, 0.2044], [0.0574, -0.2923, 0.2044], [0.0353, -0.2393, 0.2397], [-0.0, -0.2349, 0.2044], [-0.0574, -0.2923, 0.2044], [-0.0, -0.2791, 0.1602], [0.1413, -0.2437, 0.2265], [0.0574, -0.2923, 0.2044], [0.0927, -0.2526, 0.1956], [-0.1413, -0.2437, 0.2265], [-0.0574, -0.2923, 0.2044], [-0.1148, -0.2967, 0.3104], [0.1413, -0.2437, 0.2265], [0.1766, -0.2879, 0.3236], [0.1148, -0.2967, 0.3104], [-0.1766, -0.2879, 0.3236], [-0.1413, -0.2437, 0.2265], [-0.1148, -0.2967, 0.3104], [0.2473, -0.2658, 0.2707], [0.1855, -0.2349, 0.2309], [0.2429, -0.2217, 0.2088], [-0.2473, -0.2658, 0.2707], [-0.1855, -0.2349, 0.2309], [-0.1766, -0.2879, 0.3236], [0.3886, -0.2261, 0.1956], [0.2429, -0.2217, 0.2088], [0.34, -0.1908, 0.1735], [-0.3886, -0.2261, 0.1956], [-0.2429, -0.2217, 0.2088], [-0.2473, -0.2658, 0.2707], [0.4195, -0.1863, 0.1735], [0.34, -0.1908, 0.1735], [0.3621, -0.1819, 0.1293], [-0.4195, -0.1863, 0.1735], [-0.34, -0.1908, 0.1735], [-0.3886, -0.2261, 0.1956], [0.4107, -0.1554, 0.0763], [0.3621, -0.1819, 0.1293], [0.3533, -0.1819, 0.0675], [-0.4107, -0.1554, 0.0763], [-0.3621, -0.1819, 0.1293], [-0.4195, -0.1863, 0.1735], [0.3489, -0.1687, -0.0076], [0.3533, -0.1819, 0.0675], [0.2782, -0.1952, -0.0032], [-0.3489, -0.1687, -0.0076], [-0.3533, -0.1819, 0.0675], [-0.4107, -0.1554, 0.0763], [0.2252, -0.1952, -0.065], [0.2782, -0.1952, -0.0032], [0.212, -0.2128, -0.0297], [-0.2252, -0.1952, -0.065], [-0.2782, -0.1952, -0.0032], [-0.3489, -0.1687, -0.0076], [0.0707, -0.2747, -0.0959], [0.212, -0.2128, -0.0297], [0.1148, -0.2349, 0.0145], [-0.0707, -0.2747, -0.0959], [-0.212, -0.2128, -0.0297], [-0.2252, -0.1952, -0.065], [0.1148, -0.2349, 0.0145], [-0.0, -0.2261, -0.012], [0.0707, -0.2747, -0.0959], [-0.0, -0.2261, -0.012], [-0.1148, -0.2349, 0.0145], [-0.0707, -0.2747, -0.0959], [0.0574, -0.2923, 0.2044], [0.0707, -0.2482, 0.1337], [0.0927, -0.2526, 0.1956], [-0.0574, -0.2923, 0.2044], [-0.0707, -0.2482, 0.1337], [-0.0, -0.2791, 0.1602], [0.0707, -0.2482, 0.1337], [-0.0, -0.2482, 0.0808], [0.0751, -0.2437, 0.0808], [-0.0, -0.2482, 0.0808], [-0.0707, -0.2482, 0.1337], [-0.0751, -0.2437, 0.0808], [0.0927, -0.2393, 0.041], [-0.0, -0.2482, 0.0808], [-0.0, -0.2261, -0.012], [-0.0927, -0.2393, 0.041], [-0.0, -0.2482, 0.0808], [-0.0751, -0.2437, 0.0808], [0.0353, -0.2084, -0.5375], [-0.0, -0.1775, -0.5728], [0.0927, -0.1731, -0.564], [-0.0, -0.1775, -0.5728], [-0.0353, -0.2084, -0.5375], [-0.0927, -0.1731, -0.564], [0.0662, -0.2172, -0.511], [0.0927, -0.1731, -0.564], [0.1325, -0.1731, -0.5552], [-0.0927, -0.1731, -0.564], [-0.0662, -0.2172, -0.511], [-0.1325, -0.1731, -0.5552], [0.0662, -0.2172, -0.511], [0.1502, -0.1908, -0.5022], [0.0618, -0.2305, -0.4448], [-0.0662, -0.2172, -0.511], [-0.1502, -0.1908, -0.5022], [-0.1325, -0.1731, -0.5552], [0.1192, -0.2172, -0.2902], [0.0662, -0.2305, -0.4271], [0.1413, -0.204, -0.4359], [-0.0662, -0.2305, -0.4271], [-0.1192, -0.2172, -0.2902], [-0.1413, -0.204, -0.4359], [0.0618, -0.2305, -0.4448], [0.1413, -0.204, -0.4359], [0.0662, -0.2305, -0.4271], [-0.1413, -0.204, -0.4359], [-0.0618, -0.2305, -0.4448], [-0.0662, -0.2305, -0.4271], [-0.0, -0.2349, -0.224], [0.0442, -0.2393, -0.2902], [0.0486, -0.2349, -0.2019], [-0.0, -0.2349, -0.224], [-0.0442, -0.2393, -0.2902], [-0.0, -0.2393, -0.2902], [0.0442, -0.2393, -0.2902], [-0.0, -0.2305, -0.4227], [0.0662, -0.2305, -0.4271], [-0.0442, -0.2393, -0.2902], [-0.0, -0.2305, -0.4227], [-0.0, -0.2393, -0.2902], [0.0618, -0.2305, -0.4448], [-0.0, -0.2305, -0.4227], [-0.0, -0.2305, -0.4713], [-0.0618, -0.2305, -0.4448], [-0.0, -0.2305, -0.4227], [-0.0662, -0.2305, -0.4271], [0.0707, -0.2393, -0.1666], [0.053, -0.257, -0.1931], [0.0486, -0.2349, -0.2019], [-0.053, -0.257, -0.1931], [-0.0707, -0.2393, -0.1666], [-0.0486, -0.2349, -0.2019], [0.0574, -0.2349, -0.1224], [0.0751, -0.2658, -0.1666], [0.0707, -0.2393, -0.1666], [-0.0751, -0.2658, -0.1666], [-0.0574, -0.2349, -0.1224], [-0.0707, -0.2393, -0.1666], [0.0221, -0.257, -0.1091], [0.0574, -0.2349, -0.1224], [-0.0, -0.2349, -0.118], [-0.0221, -0.257, -0.1091], [-0.0574, -0.2349, -0.1224], [-0.0618, -0.257, -0.1136], [-0.0, -0.2658, -0.1445], [-0.0, -0.2349, -0.118], [-0.0, -0.2393, -0.1489], [-0.0, -0.2658, -0.1445], [-0.0, -0.2349, -0.118], [-0.0221, -0.257, -0.1091], [0.0486, -0.2349, -0.2019], [-0.0, -0.257, -0.2195], [-0.0, -0.2349, -0.224], [-0.0486, -0.2349, -0.2019], [-0.0, -0.257, -0.2195], [-0.053, -0.257, -0.1931], [0.053, -0.257, -0.1931], [-0.0, -0.2702, -0.2019], [-0.0, -0.257, -0.2195], [-0.053, -0.257, -0.1931], [-0.0, -0.2702, -0.2019], [-0.0442, -0.2702, -0.1798], [-0.0, -0.2658, -0.1445], [0.0265, -0.2747, -0.1224], [0.0221, -0.257, -0.1091], [-0.0265, -0.2747, -0.1224], [-0.0, -0.2658, -0.1445], [-0.0221, -0.257, -0.1091], [0.0221, -0.257, -0.1091], [0.053, -0.2747, -0.1268], [0.0618, -0.257, -0.1136], [-0.053, -0.2747, -0.1268], [-0.0221, -0.257, -0.1091], [-0.0618, -0.257, -0.1136], [0.053, -0.2747, -0.1268], [0.0751, -0.2658, -0.1666], [0.0618, -0.257, -0.1136], [-0.053, -0.2747, -0.1268], [-0.0751, -0.2658, -0.1666], [-0.0618, -0.2835, -0.1666], [0.0751, -0.2658, -0.1666], [0.0442, -0.2702, -0.1798], [0.053, -0.257, -0.1931], [-0.0442, -0.2702, -0.1798], [-0.0751, -0.2658, -0.1666], [-0.053, -0.257, -0.1931], [0.0618, -0.2835, -0.1666], [0.0265, -0.2747, -0.1224], [-0.0, -0.2835, -0.1533], [-0.0618, -0.2835, -0.1666], [-0.0265, -0.2747, -0.1224], [-0.053, -0.2747, -0.1268], [-0.0, -0.2835, -0.1533], [0.0442, -0.2702, -0.1798], [0.0618, -0.2835, -0.1666], [-0.0442, -0.2702, -0.1798], [-0.0, -0.2835, -0.1533], [-0.0618, -0.2835, -0.1666], [-0.0, -0.2349, -0.118], [0.0707, -0.2747, -0.0959], [-0.0, -0.2261, -0.012], [-0.0707, -0.2747, -0.0959], [-0.0, -0.2349, -0.118], [-0.0, -0.2261, -0.012], [0.0574, -0.2349, -0.1224], [0.0927, -0.2172, -0.1754], [0.0707, -0.2747, -0.0959], [-0.0927, -0.2172, -0.1754], [-0.0574, -0.2349, -0.1224], [-0.0707, -0.2747, -0.0959], [0.0486, -0.2349, -0.2019], [0.0927, -0.2172, -0.1754], [0.0707, -0.2393, -0.1666], [-0.0486, -0.2349, -0.2019], [-0.0927, -0.2172, -0.1754], [-0.1016, -0.2172, -0.2151], [0.0442, -0.2393, -0.2902], [0.1016, -0.2172, -0.2151], [0.0486, -0.2349, -0.2019], [-0.0442, -0.2393, -0.2902], [-0.1016, -0.2172, -0.2151], [-0.1192, -0.2172, -0.2902], [0.1457, -0.1289, -0.2151], [0.1192, -0.2172, -0.2902], [0.1766, -0.1378, -0.2858], [-0.1457, -0.1289, -0.2151], [-0.1192, -0.2172, -0.2902], [-0.1016, -0.2172, -0.2151], [0.1325, -0.1289, -0.1798], [0.1016, -0.2172, -0.2151], [0.1457, -0.1289, -0.2151], [-0.1325, -0.1289, -0.1798], [-0.1016, -0.2172, -0.2151], [-0.0927, -0.2172, -0.1754], [0.1148, -0.1333, -0.1445], [0.0927, -0.2172, -0.1754], [0.1325, -0.1289, -0.1798], [-0.0927, -0.2172, -0.1754], [-0.1148, -0.1333, -0.1445], [-0.1325, -0.1289, -0.1798], [-0.0, -0.2305, -0.4713], [0.053, -0.2261, -0.458], [0.0618, -0.2305, -0.4448], [-0.0, -0.2305, -0.4713], [-0.053, -0.2261, -0.458], [-0.0, -0.2217, -0.4757], [0.0662, -0.2172, -0.511], [0.053, -0.2261, -0.458], [0.053, -0.2172, -0.5022], [-0.053, -0.2261, -0.458], [-0.0662, -0.2172, -0.511], [-0.053, -0.2172, -0.5022], [0.0353, -0.2084, -0.5375], [0.053, -0.2172, -0.5022], [0.0265, -0.204, -0.5287], [-0.053, -0.2172, -0.5022], [-0.0353, -0.2084, -0.5375], [-0.0265, -0.204, -0.5287], [-0.0, -0.204, -0.5419], [0.0265, -0.204, -0.5287], [-0.0, -0.204, -0.5331], [-0.0265, -0.204, -0.5287], [-0.0, -0.204, -0.5419], [-0.0, -0.204, -0.5331], [0.0265, -0.204, -0.5287], [-0.0, -0.1731, -0.5243], [-0.0, -0.204, -0.5331], [-0.0265, -0.204, -0.5287], [-0.0, -0.1731, -0.5243], [-0.0265, -0.1731, -0.5198], [0.0265, -0.204, -0.5287], [0.053, -0.1775, -0.4978], [0.0265, -0.1731, -0.5198], [-0.053, -0.1775, -0.4978], [-0.0265, -0.204, -0.5287], [-0.0265, -0.1731, -0.5198], [0.053, -0.2172, -0.5022], [0.053, -0.1908, -0.4624], [0.053, -0.1775, -0.4978], [-0.053, -0.1908, -0.4624], [-0.053, -0.2172, -0.5022], [-0.053, -0.1775, -0.4978], [-0.0, -0.2217, -0.4757], [0.053, -0.1908, -0.4624], [0.053, -0.2261, -0.458], [-0.0, -0.2217, -0.4757], [-0.053, -0.1908, -0.4624], [-0.0, -0.1863, -0.4801], [-0.0, -0.1863, -0.4801], [0.0265, -0.1731, -0.5198], [0.053, -0.1908, -0.4624], [-0.0265, -0.1731, -0.5198], [-0.0, -0.1863, -0.4801], [-0.053, -0.1908, -0.4624], [0.053, -0.1908, -0.4624], [0.0265, -0.1731, -0.5198], [0.053, -0.1775, -0.4978], [-0.053, -0.1775, -0.4978], [-0.0265, -0.1731, -0.5198], [-0.053, -0.1908, -0.4624], [0.0751, -0.2437, 0.0808], [0.106, -0.2526, 0.0498], [0.0972, -0.257, 0.0852], [-0.106, -0.2526, 0.0498], [-0.0751, -0.2437, 0.0808], [-0.0972, -0.257, 0.0852], [0.0707, -0.2482, 0.1337], [0.0972, -0.257, 0.0852], [0.1016, -0.257, 0.1293], [-0.0972, -0.257, 0.0852], [-0.0707, -0.2482, 0.1337], [-0.1016, -0.257, 0.1293], [0.0707, -0.2482, 0.1337], [0.1192, -0.257, 0.1735], [0.0927, -0.2526, 0.1956], [-0.0707, -0.2482, 0.1337], [-0.1192, -0.257, 0.1735], [-0.1016, -0.257, 0.1293], [0.1148, -0.2349, 0.0145], [0.106, -0.2526, 0.0498], [0.0927, -0.2393, 0.041], [-0.1148, -0.2349, 0.0145], [-0.106, -0.2526, 0.0498], [-0.1281, -0.257, 0.0233], [0.1148, -0.2349, 0.0145], [0.212, -0.2349, -0.0032], [0.1281, -0.257, 0.0233], [-0.212, -0.2349, -0.0032], [-0.1148, -0.2349, 0.0145], [-0.1281, -0.257, 0.0233], [0.212, -0.2128, -0.0297], [0.2694, -0.2217, 0.0189], [0.212, -0.2349, -0.0032], [-0.2694, -0.2217, 0.0189], [-0.212, -0.2128, -0.0297], [-0.212, -0.2349, -0.0032], [0.2782, -0.1952, -0.0032], [0.3268, -0.1996, 0.0719], [0.2694, -0.2217, 0.0189], [-0.3268, -0.1996, 0.0719], [-0.2782, -0.1952, -0.0032], [-0.2694, -0.2217, 0.0189], [0.3533, -0.1819, 0.0675], [0.3312, -0.204, 0.1249], [0.3268, -0.1996, 0.0719], [-0.3312, -0.204, 0.1249], [-0.3533, -0.1819, 0.0675], [-0.3268, -0.1996, 0.0719], [0.34, -0.1908, 0.1735], [0.3312, -0.204, 0.1249], [0.3621, -0.1819, 0.1293], [-0.34, -0.1908, 0.1735], [-0.3312, -0.204, 0.1249], [-0.318, -0.2084, 0.1602], [0.2429, -0.2217, 0.2088], [0.318, -0.2084, 0.1602], [0.34, -0.1908, 0.1735], [-0.2429, -0.2217, 0.2088], [-0.318, -0.2084, 0.1602], [-0.2385, -0.2526, 0.1867], [0.2429, -0.2217, 0.2088], [0.1899, -0.2437, 0.2044], [0.2385, -0.2526, 0.1867], [-0.1899, -0.2437, 0.2044], [-0.2429, -0.2217, 0.2088], [-0.2385, -0.2526, 0.1867], [0.1855, -0.2349, 0.2309], [0.1546, -0.2526, 0.2], [0.1899, -0.2437, 0.2044], [-0.1546, -0.2526, 0.2], [-0.1855, -0.2349, 0.2309], [-0.1899, -0.2437, 0.2044], [0.1413, -0.2437, 0.2265], [0.1192, -0.257, 0.1735], [0.1546, -0.2526, 0.2], [-0.1192, -0.257, 0.1735], [-0.1413, -0.2437, 0.2265], [-0.1546, -0.2526, 0.2], [0.1192, -0.257, 0.1735], [0.159, -0.2482, 0.1867], [0.1546, -0.2526, 0.2], [-0.1192, -0.257, 0.1735], [-0.159, -0.2482, 0.1867], [-0.1325, -0.2437, 0.1647], [0.1899, -0.2437, 0.2044], [0.159, -0.2482, 0.1867], [0.1899, -0.2393, 0.1912], [-0.159, -0.2482, 0.1867], [-0.1899, -0.2437, 0.2044], [-0.1899, -0.2393, 0.1912], [0.1899, -0.2437, 0.2044], [0.2341, -0.2393, 0.1823], [0.2385, -0.2526, 0.1867], [-0.1899, -0.2437, 0.2044], [-0.2341, -0.2393, 0.1823], [-0.1899, -0.2393, 0.1912], [0.2385, -0.2526, 0.1867], [0.3003, -0.1996, 0.1514], [0.318, -0.2084, 0.1602], [-0.2385, -0.2526, 0.1867], [-0.3003, -0.1996, 0.1514], [-0.2341, -0.2393, 0.1823], [0.3312, -0.204, 0.1249], [0.3003, -0.1996, 0.1514], [0.3135, -0.1952, 0.1205], [-0.3003, -0.1996, 0.1514], [-0.3312, -0.204, 0.1249], [-0.3136, -0.1952, 0.1205], [0.3312, -0.204, 0.1249], [0.3091, -0.1952, 0.0808], [0.3268, -0.1996, 0.0719], [-0.3312, -0.204, 0.1249], [-0.3091, -0.1952, 0.0808], [-0.3136, -0.1952, 0.1205], [0.2694, -0.2217, 0.0189], [0.3091, -0.1952, 0.0808], [0.2606, -0.2128, 0.0278], [-0.3091, -0.1952, 0.0808], [-0.2694, -0.2217, 0.0189], [-0.2606, -0.2128, 0.0278], [0.2694, -0.2217, 0.0189], [0.212, -0.2261, 0.0101], [0.212, -0.2349, -0.0032], [-0.2694, -0.2217, 0.0189], [-0.212, -0.2261, 0.0101], [-0.2606, -0.2128, 0.0278], [0.212, -0.2349, -0.0032], [0.1369, -0.2437, 0.0322], [0.1281, -0.257, 0.0233], [-0.212, -0.2349, -0.0032], [-0.1369, -0.2437, 0.0322], [-0.212, -0.2261, 0.0101], [0.106, -0.2526, 0.0498], [0.1369, -0.2437, 0.0322], [0.1148, -0.2393, 0.0587], [-0.1369, -0.2437, 0.0322], [-0.106, -0.2526, 0.0498], [-0.1148, -0.2393, 0.0587], [0.1192, -0.257, 0.1735], [0.1104, -0.2437, 0.1293], [0.1325, -0.2437, 0.1647], [-0.1104, -0.2437, 0.1293], [-0.1192, -0.257, 0.1735], [-0.1325, -0.2437, 0.1647], [0.1016, -0.257, 0.1293], [0.1104, -0.2393, 0.0896], [0.1104, -0.2437, 0.1293], [-0.1104, -0.2393, 0.0896], [-0.1016, -0.257, 0.1293], [-0.1104, -0.2437, 0.1293], [0.0972, -0.257, 0.0852], [0.1148, -0.2393, 0.0587], [0.1104, -0.2393, 0.0896], [-0.1148, -0.2393, 0.0587], [-0.0972, -0.257, 0.0852], [-0.1104, -0.2393, 0.0896], [-0.0, -0.2349, 0.2044], [0.0618, -0.1598, 0.2221], [-0.0, -0.1554, 0.1912], [-0.0618, -0.1598, 0.2221], [-0.0, -0.2349, 0.2044], [-0.0, -0.1554, 0.1912], [0.0353, -0.2393, 0.2397], [0.1104, -0.1643, 0.3369], [0.0618, -0.1598, 0.2221], [-0.1104, -0.1643, 0.3369], [-0.0353, -0.2393, 0.2397], [-0.0618, -0.1598, 0.2221], [0.1811, -0.2305, 0.3899], [0.1104, -0.1643, 0.3369], [0.0883, -0.2437, 0.3678], [-0.1811, -0.2305, 0.3899], [-0.1104, -0.1643, 0.3369], [-0.1899, -0.151, 0.3501], [0.2782, -0.204, 0.3016], [0.1899, -0.151, 0.3501], [0.1811, -0.2305, 0.3899], [-0.2782, -0.204, 0.3016], [-0.1899, -0.151, 0.3501], [-0.2738, -0.1289, 0.2751], [0.4019, -0.1687, 0.2353], [0.2738, -0.1289, 0.2751], [0.2782, -0.204, 0.3016], [-0.4019, -0.1687, 0.2353], [-0.2738, -0.1289, 0.2751], [-0.3842, -0.0936, 0.2177], [0.4019, -0.1687, 0.2353], [0.4505, -0.0759, 0.1912], [0.3842, -0.0936, 0.2177], [-0.4505, -0.0759, 0.1912], [-0.4019, -0.1687, 0.2353], [-0.3842, -0.0936, 0.2177], [0.4681, -0.0671, 0.0454], [0.4505, -0.0759, 0.1912], [0.4858, -0.151, 0.2044], [-0.4681, -0.0671, 0.0454], [-0.4505, -0.0759, 0.1912], [-0.4372, -0.0274, 0.0543], [0.4681, -0.0671, 0.0454], [0.34, -0.0494, -0.0385], [0.4372, -0.0274, 0.0543], [-0.34, -0.0494, -0.0385], [-0.4681, -0.0671, 0.0454], [-0.4372, -0.0274, 0.0543], [0.3577, -0.1201, -0.0606], [0.2473, -0.0803, -0.0915], [0.34, -0.0494, -0.0385], [-0.2473, -0.0803, -0.0915], [-0.3577, -0.1201, -0.0606], [-0.34, -0.0494, -0.0385], [-0.0, 0.0256, -0.3123], [0.0707, -0.0185, -0.3432], [-0.0, 0.0036, -0.3609], [-0.0, 0.0256, -0.3123], [-0.0707, -0.0185, -0.3432], [-0.1016, 0.0389, -0.2725], [-0.0, 0.0036, -0.3609], [0.0795, -0.0229, -0.4669], [-0.0, -0.0097, -0.4934], [-0.0, 0.0036, -0.3609], [-0.0795, -0.0229, -0.4669], [-0.0707, -0.0185, -0.3432], [-0.0, -0.0097, -0.4934], [0.0927, -0.0627, -0.5728], [-0.0, -0.0759, -0.5905], [-0.0, -0.0097, -0.4934], [-0.0927, -0.0627, -0.5728], [-0.0795, -0.0229, -0.4669], [0.1016, -0.1289, -0.5861], [-0.0, -0.0759, -0.5905], [0.0927, -0.0627, -0.5728], [-0.0, -0.0759, -0.5905], [-0.1016, -0.1289, -0.5861], [-0.0927, -0.0627, -0.5728], [0.1855, -0.1113, -0.5728], [0.0927, -0.0627, -0.5728], [0.1855, -0.0406, -0.5552], [-0.0927, -0.0627, -0.5728], [-0.1855, -0.1113, -0.5728], [-0.1855, -0.0406, -0.5552], [0.2076, -0.1157, -0.5419], [0.1855, -0.0406, -0.5552], [0.1634, -0.0318, -0.4404], [-0.1855, -0.0406, -0.5552], [-0.2076, -0.1157, -0.5419], [-0.1634, -0.0318, -0.4404], [0.1987, -0.1378, -0.4315], [0.1634, -0.0318, -0.4404], [0.1413, -0.0362, -0.3211], [-0.1634, -0.0318, -0.4404], [-0.1987, -0.1378, -0.4315], [-0.1413, -0.0362, -0.3211], [0.1634, -0.0318, -0.4404], [0.0707, -0.0185, -0.3432], [0.1413, -0.0362, -0.3211], [-0.0707, -0.0185, -0.3432], [-0.1634, -0.0318, -0.4404], [-0.1413, -0.0362, -0.3211], [0.1855, -0.0406, -0.5552], [0.0795, -0.0229, -0.4669], [0.1634, -0.0318, -0.4404], [-0.1855, -0.0406, -0.5552], [-0.0795, -0.0229, -0.4669], [-0.0927, -0.0627, -0.5728], [0.1413, -0.0362, -0.3211], [0.1016, 0.0389, -0.2725], [0.1325, -0.045, -0.2372], [-0.1413, -0.0362, -0.3211], [-0.1016, 0.0389, -0.2725], [-0.0707, -0.0185, -0.3432], [0.1766, -0.1378, -0.2858], [0.1413, -0.0362, -0.3211], [0.1325, -0.045, -0.2372], [-0.1413, -0.0362, -0.3211], [-0.1766, -0.1378, -0.2858], [-0.1325, -0.045, -0.2372], [0.1237, -0.0583, -0.1975], [0.1325, -0.1289, -0.1798], [0.1457, -0.1289, -0.2151], [-0.1237, -0.0583, -0.1975], [-0.1325, -0.1289, -0.1798], [-0.1192, -0.0803, -0.1666], [0.1325, -0.045, -0.2372], [0.1457, -0.1289, -0.2151], [0.1766, -0.1378, -0.2858], [-0.1325, -0.045, -0.2372], [-0.1457, -0.1289, -0.2151], [-0.1237, -0.0583, -0.1975], [0.1325, -0.1289, -0.1798], [0.1148, -0.098, -0.1356], [0.1148, -0.1333, -0.1445], [-0.1325, -0.1289, -0.1798], [-0.1148, -0.098, -0.1356], [-0.1192, -0.0803, -0.1666], [0.1148, -0.098, -0.1356], [0.2473, -0.1157, -0.118], [0.1148, -0.1333, -0.1445], [-0.1148, -0.098, -0.1356], [-0.2473, -0.1157, -0.118], [-0.2473, -0.0803, -0.0915], [0.1899, 0.56, -0.0076], [-0.0, 0.5644, -0.1489], [-0.0, 0.6527, 0.0013], [-0.1899, 0.56, -0.0076], [-0.0, 0.5644, -0.1489], [-0.1943, 0.4893, -0.1224], [0.1943, 0.4893, -0.1224], [-0.0, 0.3834, -0.2549], [-0.0, 0.5644, -0.1489], [-0.1943, 0.4893, -0.1224], [-0.0, 0.3834, -0.2549], [-0.1678, 0.3348, -0.2151], [-0.0, 0.3834, -0.2549], [0.1192, 0.0919, -0.2593], [-0.0, 0.0786, -0.299], [-0.1192, 0.0919, -0.2593], [-0.0, 0.3834, -0.2549], [-0.0, 0.0786, -0.299], [-0.0, 0.0786, -0.299], [0.1016, 0.0389, -0.2725], [-0.0, 0.0256, -0.3123], [-0.1016, 0.0389, -0.2725], [-0.0, 0.0786, -0.299], [-0.0, 0.0256, -0.3123], [0.1016, 0.0389, -0.2725], [0.1237, -0.0583, -0.1975], [0.1325, -0.045, -0.2372], [-0.1016, 0.0389, -0.2725], [-0.1237, -0.0583, -0.1975], [-0.1192, 0.0919, -0.2593], [0.4372, -0.0274, 0.0543], [0.4151, 0.1449, -0.065], [0.4814, 0.1537, 0.094], [-0.4151, 0.1449, -0.065], [-0.4372, -0.0274, 0.0543], [-0.4814, 0.1537, 0.094], [0.2606, 0.5821, 0.2088], [-0.0, 0.6527, 0.0013], [-0.0, 0.666, 0.2795], [-0.2606, 0.5821, 0.2088], [-0.0, 0.6527, 0.0013], [-0.1899, 0.56, -0.0076], [0.2561, 0.0521, 0.4429], [-0.0, 0.2288, 0.518], [-0.0, 0.0212, 0.4694], [-0.2561, 0.0521, 0.4429], [-0.0, 0.2288, 0.518], [-0.2561, 0.2244, 0.487], [-0.0, 0.2288, 0.518], [0.2561, 0.401, 0.4517], [-0.0, 0.4938, 0.4694], [-0.2561, 0.401, 0.4517], [-0.0, 0.2288, 0.518], [-0.0, 0.4938, 0.4694], [-0.0, 0.4938, 0.4694], [0.2606, 0.5821, 0.2088], [-0.0, 0.666, 0.2795], [-0.2606, 0.5821, 0.2088], [-0.0, 0.4938, 0.4694], [-0.0, 0.666, 0.2795], [0.3842, -0.0936, 0.2177], [0.4107, -0.0053, 0.1912], [0.3577, 0.0256, 0.2177], [-0.4107, -0.0053, 0.1912], [-0.3842, -0.0936, 0.2177], [-0.3577, 0.0256, 0.2177], [0.3577, 0.0256, 0.2177], [0.4505, 0.114, 0.2795], [0.3621, 0.1537, 0.359], [-0.4505, 0.114, 0.2795], [-0.3577, 0.0256, 0.2177], [-0.3621, 0.1537, 0.359], [0.3621, 0.1537, 0.359], [0.4505, 0.2509, 0.3104], [0.3621, 0.295, 0.3855], [-0.4505, 0.2509, 0.3104], [-0.3621, 0.1537, 0.359], [-0.3621, 0.295, 0.3855], [0.3621, 0.295, 0.3855], [0.4505, 0.3878, 0.2662], [0.3621, 0.4364, 0.3457], [-0.4505, 0.3878, 0.2662], [-0.3621, 0.295, 0.3855], [-0.3621, 0.4364, 0.3457], [0.3489, 0.5158, 0.147], [0.4505, 0.3878, 0.2662], [0.4372, 0.4319, 0.1117], [-0.3489, 0.5158, 0.147], [-0.4505, 0.3878, 0.2662], [-0.3621, 0.4364, 0.3457], [0.2606, 0.5821, 0.2088], [0.3621, 0.4364, 0.3457], [0.3489, 0.5158, 0.147], [-0.3621, 0.4364, 0.3457], [-0.2606, 0.5821, 0.2088], [-0.3489, 0.5158, 0.147], [0.2561, 0.401, 0.4517], [0.3621, 0.295, 0.3855], [0.3621, 0.4364, 0.3457], [-0.3621, 0.295, 0.3855], [-0.2561, 0.401, 0.4517], [-0.3621, 0.4364, 0.3457], [0.2561, 0.2244, 0.487], [0.3621, 0.1537, 0.359], [0.3621, 0.295, 0.3855], [-0.3621, 0.1537, 0.359], [-0.2561, 0.2244, 0.487], [-0.3621, 0.295, 0.3855], [0.2561, 0.0521, 0.4429], [0.3577, 0.0256, 0.2177], [0.3621, 0.1537, 0.359], [-0.3577, 0.0256, 0.2177], [-0.2561, 0.0521, 0.4429], [-0.3621, 0.1537, 0.359], [0.3842, -0.0936, 0.2177], [0.2606, -0.0583, 0.2574], [0.2738, -0.1289, 0.2751], [-0.3842, -0.0936, 0.2177], [-0.2606, -0.0583, 0.2574], [-0.3577, 0.0256, 0.2177], [0.2606, -0.0583, 0.2574], [-0.0, 0.0212, 0.4694], [-0.0, -0.1378, 0.2839], [-0.2606, -0.0583, 0.2574], [-0.0, 0.0212, 0.4694], [-0.2561, 0.0521, 0.4429], [0.0618, -0.1598, 0.2221], [0.1899, -0.151, 0.3501], [0.2738, -0.1289, 0.2751], [-0.1899, -0.151, 0.3501], [-0.0618, -0.1598, 0.2221], [-0.2738, -0.1289, 0.2751], [0.0618, -0.1598, 0.2221], [0.2606, -0.0583, 0.2574], [-0.0, -0.1378, 0.2839], [-0.2606, -0.0583, 0.2574], [-0.0618, -0.1598, 0.2221], [-0.0, -0.1378, 0.2839], [-0.0, -0.1554, 0.1912], [0.0618, -0.1598, 0.2221], [-0.0, -0.1378, 0.2839], [-0.0, -0.1378, 0.2839], [-0.0618, -0.1598, 0.2221], [-0.0, -0.1554, 0.1912], [0.4372, -0.0274, 0.0543], [0.4107, -0.0053, 0.1912], [0.4505, -0.0759, 0.1912], [-0.4372, -0.0274, 0.0543], [-0.4107, -0.0053, 0.1912], [-0.4814, 0.1537, 0.094], [0.4814, 0.1537, 0.094], [0.4505, 0.114, 0.2795], [0.4107, -0.0053, 0.1912], [-0.4505, 0.114, 0.2795], [-0.4814, 0.1537, 0.094], [-0.4107, -0.0053, 0.1912], [0.4858, 0.2111, 0.1426], [0.4505, 0.2509, 0.3104], [0.4505, 0.114, 0.2795], [-0.4505, 0.2509, 0.3104], [-0.4858, 0.2111, 0.1426], [-0.4505, 0.114, 0.2795], [0.4505, 0.3878, 0.2662], [0.4637, 0.2994, 0.147], [0.4372, 0.4319, 0.1117], [-0.4505, 0.3878, 0.2662], [-0.4637, 0.2994, 0.147], [-0.4505, 0.2509, 0.3104], [0.1678, 0.3348, -0.2151], [0.2296, 0.1007, -0.1356], [0.1192, 0.0919, -0.2593], [-0.1678, 0.3348, -0.2151], [-0.2296, 0.1007, -0.1356], [-0.2429, 0.3039, -0.1489], [0.2296, 0.1007, -0.1356], [0.3356, 0.2774, -0.1091], [0.4151, 0.1449, -0.065], [-0.2296, 0.1007, -0.1356], [-0.3356, 0.2774, -0.1091], [-0.2429, 0.3039, -0.1489], [0.34, -0.0494, -0.0385], [0.2296, 0.1007, -0.1356], [0.4151, 0.1449, -0.065], [-0.2296, 0.1007, -0.1356], [-0.34, -0.0494, -0.0385], [-0.4151, 0.1449, -0.065], [0.2473, -0.0803, -0.0915], [0.1237, -0.0583, -0.1975], [0.2296, 0.1007, -0.1356], [-0.1237, -0.0583, -0.1975], [-0.2473, -0.0803, -0.0915], [-0.2296, 0.1007, -0.1356], [0.1237, -0.0583, -0.1975], [0.1192, 0.0919, -0.2593], [0.2296, 0.1007, -0.1356], [-0.2296, 0.1007, -0.1356], [-0.1192, 0.0919, -0.2593], [-0.1237, -0.0583, -0.1975], [0.2473, -0.0803, -0.0915], [0.1148, -0.098, -0.1356], [0.1192, -0.0803, -0.1666], [-0.1192, -0.0803, -0.1666], [-0.1148, -0.098, -0.1356], [-0.2473, -0.0803, -0.0915], [0.3621, 0.4275, -0.0429], [0.3489, 0.5158, 0.147], [0.4372, 0.4319, 0.1117], [-0.3621, 0.4275, -0.0429], [-0.3489, 0.5158, 0.147], [-0.2738, 0.4938, -0.0252], [0.3489, 0.5158, 0.147], [0.1899, 0.56, -0.0076], [0.2606, 0.5821, 0.2088], [-0.3489, 0.5158, 0.147], [-0.1899, 0.56, -0.0076], [-0.2738, 0.4938, -0.0252], [0.2429, 0.3039, -0.1489], [0.3621, 0.4275, -0.0429], [0.3356, 0.2774, -0.1091], [-0.2429, 0.3039, -0.1489], [-0.3621, 0.4275, -0.0429], [-0.2738, 0.4938, -0.0252], [0.1943, 0.4893, -0.1224], [0.2429, 0.3039, -0.1489], [0.1678, 0.3348, -0.2151], [-0.1943, 0.4893, -0.1224], [-0.2429, 0.3039, -0.1489], [-0.2738, 0.4938, -0.0252], [0.1899, 0.56, -0.0076], [0.2738, 0.4938, -0.0252], [0.1943, 0.4893, -0.1224], [-0.1943, 0.4893, -0.1224], [-0.2738, 0.4938, -0.0252], [-0.1899, 0.56, -0.0076], [0.5034, 0.3171, 0.1912], [0.5741, 0.348, 0.1956], [0.5785, 0.3613, 0.2309], [-0.5034, 0.3171, 0.1912], [-0.5741, 0.348, 0.1956], [-0.5211, 0.3083, 0.1647], [0.5785, 0.3613, 0.2309], [0.6713, 0.4054, 0.2088], [0.6978, 0.4231, 0.2486], [-0.6713, 0.4054, 0.2088], [-0.5785, 0.3613, 0.2309], [-0.6978, 0.4231, 0.2486], [0.6713, 0.4054, 0.2088], [0.764, 0.4231, 0.1426], [0.6978, 0.4231, 0.2486], [-0.6713, 0.4054, 0.2088], [-0.764, 0.4231, 0.1426], [-0.7154, 0.4143, 0.1249], [0.7154, 0.4143, 0.1249], [0.7243, 0.4275, -0.0076], [0.764, 0.4231, 0.1426], [-0.7154, 0.4143, 0.1249], [-0.7243, 0.4275, -0.0076], [-0.6845, 0.4143, 0.0057], [0.6845, 0.4143, 0.0057], [0.5874, 0.3701, -0.0959], [0.7243, 0.4275, -0.0076], [-0.6845, 0.4143, 0.0057], [-0.5874, 0.3701, -0.0959], [-0.5829, 0.3569, -0.0606], [0.5874, 0.3701, -0.0959], [0.4681, 0.2597, -0.0782], [0.4372, 0.2553, -0.118], [-0.4681, 0.2597, -0.0782], [-0.5874, 0.3701, -0.0959], [-0.4372, 0.2553, -0.118], [0.5829, 0.3569, -0.0606], [0.499, 0.3039, -0.0517], [0.4681, 0.2597, -0.0782], [-0.499, 0.3039, -0.0517], [-0.5829, 0.3569, -0.0606], [-0.4681, 0.2597, -0.0782], [0.6845, 0.4143, 0.0057], [0.5874, 0.3922, -0.0385], [0.5829, 0.3569, -0.0606], [-0.5874, 0.3922, -0.0385], [-0.6845, 0.4143, 0.0057], [-0.5829, 0.3569, -0.0606], [0.6978, 0.4364, 0.1028], [0.6845, 0.4143, 0.0057], [0.7154, 0.4143, 0.1249], [-0.6978, 0.4364, 0.1028], [-0.6845, 0.4143, 0.0057], [-0.6713, 0.4364, 0.0145], [0.6624, 0.4319, 0.1647], [0.7154, 0.4143, 0.1249], [0.6713, 0.4054, 0.2088], [-0.6624, 0.4319, 0.1647], [-0.7154, 0.4143, 0.1249], [-0.6978, 0.4364, 0.1028], [0.5785, 0.3878, 0.1558], [0.6713, 0.4054, 0.2088], [0.5741, 0.348, 0.1956], [-0.5785, 0.3878, 0.1558], [-0.6713, 0.4054, 0.2088], [-0.6624, 0.4319, 0.1647], [0.5741, 0.348, 0.1956], [0.5344, 0.348, 0.1337], [0.5785, 0.3878, 0.1558], [-0.5344, 0.348, 0.1337], [-0.5741, 0.348, 0.1956], [-0.5785, 0.3878, 0.1558], [0.3356, 0.2774, -0.1091], [0.4107, 0.2244, -0.0385], [0.4151, 0.1449, -0.065], [-0.3356, 0.2774, -0.1091], [-0.4107, 0.2244, -0.0385], [-0.4063, 0.2818, -0.0517], [0.4372, 0.2553, -0.118], [0.4063, 0.2818, -0.0517], [0.3356, 0.2774, -0.1091], [-0.4372, 0.2553, -0.118], [-0.4063, 0.2818, -0.0517], [-0.4681, 0.2597, -0.0782], [0.4814, 0.1537, 0.094], [0.4107, 0.2244, -0.0385], [0.4858, 0.2111, 0.1426], [-0.4107, 0.2244, -0.0385], [-0.4814, 0.1537, 0.094], [-0.4858, 0.2111, 0.1426], [0.4637, 0.2994, 0.147], [0.5211, 0.3083, 0.1647], [0.5034, 0.3171, 0.1912], [-0.5211, 0.3083, 0.1647], [-0.4637, 0.2994, 0.147], [-0.5034, 0.3171, 0.1912], [0.4681, 0.2597, -0.0782], [0.4593, 0.3392, -0.0473], [0.4063, 0.2818, -0.0517], [-0.4593, 0.3392, -0.0473], [-0.4681, 0.2597, -0.0782], [-0.4063, 0.2818, -0.0517], [0.4063, 0.2906, -0.0164], [0.4593, 0.3392, -0.0473], [0.4769, 0.3392, -0.0297], [-0.4063, 0.2906, -0.0164], [-0.4593, 0.3392, -0.0473], [-0.4063, 0.2818, -0.0517], [0.4284, 0.3392, 0.0145], [0.4769, 0.3392, -0.0297], [0.4637, 0.3392, 0.0101], [-0.477, 0.3392, -0.0297], [-0.4284, 0.3392, 0.0145], [-0.4637, 0.3392, 0.0101], [0.4505, 0.3039, 0.0763], [0.4284, 0.3392, 0.0145], [0.4725, 0.3392, 0.0587], [-0.4505, 0.3039, 0.0763], [-0.4284, 0.3392, 0.0145], [-0.4063, 0.2906, -0.0164], [0.4505, 0.3039, 0.0763], [0.5034, 0.3348, 0.0984], [0.4769, 0.3039, 0.1249], [-0.4505, 0.3039, 0.0763], [-0.5034, 0.3348, 0.0984], [-0.4725, 0.3392, 0.0587], [0.4769, 0.3039, 0.1249], [0.5344, 0.348, 0.1337], [0.5211, 0.3083, 0.1647], [-0.477, 0.3039, 0.1249], [-0.5344, 0.348, 0.1337], [-0.5034, 0.3348, 0.0984], [0.4858, 0.2111, 0.1426], [0.4769, 0.3039, 0.1249], [0.4637, 0.2994, 0.147], [-0.477, 0.3039, 0.1249], [-0.4858, 0.2111, 0.1426], [-0.4637, 0.2994, 0.147], [0.4107, 0.2244, -0.0385], [0.4505, 0.3039, 0.0763], [0.4858, 0.2111, 0.1426], [-0.4107, 0.2244, -0.0385], [-0.4505, 0.3039, 0.0763], [-0.4063, 0.2906, -0.0164], [0.4107, 0.2244, -0.0385], [0.4063, 0.2818, -0.0517], [0.4063, 0.2906, -0.0164], [-0.4063, 0.2906, -0.0164], [-0.4063, 0.2818, -0.0517], [-0.4107, 0.2244, -0.0385], [0.5344, 0.348, 0.1337], [0.5034, 0.3657, 0.094], [0.5388, 0.3789, 0.1249], [-0.5034, 0.3657, 0.094], [-0.5344, 0.348, 0.1337], [-0.5388, 0.3789, 0.1249], [0.4725, 0.3392, 0.0587], [0.5034, 0.3657, 0.094], [0.5034, 0.3348, 0.0984], [-0.4725, 0.3392, 0.0587], [-0.5034, 0.3657, 0.094], [-0.477, 0.3657, 0.0587], [0.4725, 0.3392, 0.0587], [0.4328, 0.3657, 0.0145], [0.4769, 0.3657, 0.0587], [-0.4328, 0.3657, 0.0145], [-0.4725, 0.3392, 0.0587], [-0.477, 0.3657, 0.0587], [0.4637, 0.3392, 0.0101], [0.4328, 0.3657, 0.0145], [0.4284, 0.3392, 0.0145], [-0.4637, 0.3392, 0.0101], [-0.4328, 0.3657, 0.0145], [-0.4681, 0.3657, 0.0057], [0.4769, 0.3392, -0.0297], [0.4681, 0.3657, 0.0057], [0.4637, 0.3392, 0.0101], [-0.477, 0.3392, -0.0297], [-0.4681, 0.3657, 0.0057], [-0.4814, 0.3657, -0.0297], [0.4769, 0.3392, -0.0297], [0.4593, 0.3657, -0.0473], [0.4814, 0.3657, -0.0297], [-0.4593, 0.3657, -0.0473], [-0.477, 0.3392, -0.0297], [-0.4814, 0.3657, -0.0297], [0.4593, 0.3392, -0.0473], [0.499, 0.3348, -0.0473], [0.4593, 0.3657, -0.0473], [-0.499, 0.3348, -0.0473], [-0.4593, 0.3392, -0.0473], [-0.4593, 0.3657, -0.0473], [0.5785, 0.3878, 0.1558], [0.5388, 0.3789, 0.1249], [0.5874, 0.4187, 0.147], [-0.5388, 0.3789, 0.1249], [-0.5785, 0.3878, 0.1558], [-0.5874, 0.4187, 0.147], [0.6624, 0.4319, 0.1647], [0.5874, 0.4187, 0.147], [0.6713, 0.4584, 0.1558], [-0.5874, 0.4187, 0.147], [-0.6624, 0.4319, 0.1647], [-0.6713, 0.4584, 0.1558], [0.6978, 0.4364, 0.1028], [0.6713, 0.4584, 0.1558], [0.711, 0.4628, 0.0984], [-0.6713, 0.4584, 0.1558], [-0.6978, 0.4364, 0.1028], [-0.711, 0.4628, 0.0984], [0.6978, 0.4364, 0.1028], [0.6845, 0.4584, 0.0101], [0.6713, 0.4364, 0.0145], [-0.6978, 0.4364, 0.1028], [-0.6845, 0.4584, 0.0101], [-0.711, 0.4628, 0.0984], [0.6713, 0.4364, 0.0145], [0.5918, 0.4231, -0.0385], [0.5874, 0.3922, -0.0385], [-0.6713, 0.4364, 0.0145], [-0.5918, 0.4231, -0.0385], [-0.6845, 0.4584, 0.0101], [0.5874, 0.3922, -0.0385], [0.499, 0.3348, -0.0473], [0.499, 0.3039, -0.0517], [-0.5874, 0.3922, -0.0385], [-0.499, 0.3348, -0.0473], [-0.5918, 0.4231, -0.0385], [0.4814, 0.3657, -0.0297], [0.5034, 0.3701, 0.0233], [0.4681, 0.3657, 0.0057], [-0.4814, 0.3657, -0.0297], [-0.5034, 0.3701, 0.0233], [-0.5299, 0.3745, -0.0032], [0.5299, 0.3745, -0.0032], [0.5432, 0.3834, 0.0587], [0.5034, 0.3701, 0.0233], [-0.5299, 0.3745, -0.0032], [-0.5432, 0.3834, 0.0587], [-0.5653, 0.3922, 0.0322], [0.5432, 0.3834, 0.0587], [0.5962, 0.401, 0.0675], [0.5741, 0.3966, 0.094], [-0.5962, 0.401, 0.0675], [-0.5432, 0.3834, 0.0587], [-0.5741, 0.3966, 0.094], [0.5962, 0.401, 0.0675], [0.6139, 0.4054, 0.1161], [0.5741, 0.3966, 0.094], [-0.5962, 0.401, 0.0675], [-0.6139, 0.4054, 0.1161], [-0.6271, 0.4054, 0.0808], [0.5874, 0.4187, 0.147], [0.5741, 0.3966, 0.094], [0.6139, 0.4054, 0.1161], [-0.5741, 0.3966, 0.094], [-0.5874, 0.4187, 0.147], [-0.6139, 0.4054, 0.1161], [0.5432, 0.3834, 0.0587], [0.5388, 0.3789, 0.1249], [0.5034, 0.3657, 0.094], [-0.5432, 0.3834, 0.0587], [-0.5388, 0.3789, 0.1249], [-0.5741, 0.3966, 0.094], [0.4769, 0.3657, 0.0587], [0.5432, 0.3834, 0.0587], [0.5034, 0.3657, 0.094], [-0.477, 0.3657, 0.0587], [-0.5432, 0.3834, 0.0587], [-0.5034, 0.3701, 0.0233], [0.4681, 0.3657, 0.0057], [0.4769, 0.3657, 0.0587], [0.4328, 0.3657, 0.0145], [-0.477, 0.3657, 0.0587], [-0.4681, 0.3657, 0.0057], [-0.4328, 0.3657, 0.0145], [0.499, 0.3348, -0.0473], [0.4814, 0.3657, -0.0297], [0.4593, 0.3657, -0.0473], [-0.499, 0.3348, -0.0473], [-0.4814, 0.3657, -0.0297], [-0.5299, 0.3745, -0.0032], [0.5918, 0.4231, -0.0385], [0.5299, 0.3745, -0.0032], [0.499, 0.3348, -0.0473], [-0.5299, 0.3745, -0.0032], [-0.5918, 0.4231, -0.0385], [-0.499, 0.3348, -0.0473], [0.5962, 0.401, 0.0675], [0.5918, 0.4231, -0.0385], [0.6845, 0.4584, 0.0101], [-0.5962, 0.401, 0.0675], [-0.5918, 0.4231, -0.0385], [-0.5653, 0.3922, 0.0322], [0.6271, 0.4054, 0.0808], [0.6845, 0.4584, 0.0101], [0.711, 0.4628, 0.0984], [-0.6271, 0.4054, 0.0808], [-0.6845, 0.4584, 0.0101], [-0.5962, 0.401, 0.0675], [0.6713, 0.4584, 0.1558], [0.6271, 0.4054, 0.0808], [0.711, 0.4628, 0.0984], [-0.6271, 0.4054, 0.0808], [-0.6713, 0.4584, 0.1558], [-0.711, 0.4628, 0.0984], [0.5874, 0.4187, 0.147], [0.6139, 0.4054, 0.1161], [0.6713, 0.4584, 0.1558], [-0.6713, 0.4584, 0.1558], [-0.6139, 0.4054, 0.1161], [-0.5874, 0.4187, 0.147], [0.5874, 0.3701, -0.0959], [0.446, 0.3701, -0.1091], [0.5874, 0.4628, -0.0871], [-0.446, 0.3701, -0.1091], [-0.5874, 0.3701, -0.0959], [-0.5874, 0.4628, -0.0871], [0.7243, 0.4275, -0.0076], [0.5874, 0.4628, -0.0871], [0.7419, 0.4849, -0.0076], [-0.5874, 0.4628, -0.0871], [-0.7243, 0.4275, -0.0076], [-0.7419, 0.4849, -0.0076], [0.7243, 0.4275, -0.0076], [0.7728, 0.4673, 0.1293], [0.764, 0.4231, 0.1426], [-0.7243, 0.4275, -0.0076], [-0.7728, 0.4673, 0.1293], [-0.7419, 0.4849, -0.0076], [0.764, 0.4231, 0.1426], [0.7066, 0.4938, 0.2265], [0.6978, 0.4231, 0.2486], [-0.764, 0.4231, 0.1426], [-0.7066, 0.4938, 0.2265], [-0.7728, 0.4673, 0.1293], [0.6978, 0.4231, 0.2486], [0.5785, 0.4584, 0.2088], [0.5785, 0.3613, 0.2309], [-0.6978, 0.4231, 0.2486], [-0.5785, 0.4584, 0.2088], [-0.7066, 0.4938, 0.2265], [0.5785, 0.3613, 0.2309], [0.4858, 0.401, 0.1779], [0.5034, 0.3171, 0.1912], [-0.5785, 0.3613, 0.2309], [-0.4858, 0.401, 0.1779], [-0.5785, 0.4584, 0.2088], [0.5874, 0.4628, -0.0871], [0.4858, 0.401, 0.1779], [0.5785, 0.4584, 0.2088], [-0.5874, 0.4628, -0.0871], [-0.4858, 0.401, 0.1779], [-0.446, 0.3701, -0.1091], [0.5785, 0.4584, 0.2088], [0.7419, 0.4849, -0.0076], [0.5874, 0.4628, -0.0871], [-0.7419, 0.4849, -0.0076], [-0.5785, 0.4584, 0.2088], [-0.5874, 0.4628, -0.0871], [0.7066, 0.4938, 0.2265], [0.7728, 0.4673, 0.1293], [0.7419, 0.4849, -0.0076], [-0.7419, 0.4849, -0.0076], [-0.7728, 0.4673, 0.1293], [-0.7066, 0.4938, 0.2265], [0.4637, 0.2994, 0.147], [0.4858, 0.401, 0.1779], [0.4372, 0.4319, 0.1117], [-0.4637, 0.2994, 0.147], [-0.4858, 0.401, 0.1779], [-0.5034, 0.3171, 0.1912], [0.4372, 0.4319, 0.1117], [0.446, 0.3701, -0.1091], [0.3621, 0.4275, -0.0429], [-0.446, 0.3701, -0.1091], [-0.4372, 0.4319, 0.1117], [-0.3621, 0.4275, -0.0429], [0.3356, 0.2774, -0.1091], [0.446, 0.3701, -0.1091], [0.4372, 0.2553, -0.118], [-0.446, 0.3701, -0.1091], [-0.3356, 0.2774, -0.1091], [-0.4372, 0.2553, -0.118], [0.265, -0.2437, 0.0984], [0.2473, -0.2482, 0.0543], [0.2826, -0.204, 0.0145], [-0.2826, -0.204, 0.0145], [-0.2473, -0.2482, 0.0543], [-0.265, -0.2437, 0.0984], [0.318, -0.1952, 0.0984], [0.2826, -0.204, 0.0145], [0.3091, -0.1422, -0.0076], [-0.3091, -0.1422, -0.0076], [-0.2826, -0.204, 0.0145], [-0.318, -0.1952, 0.0984], [0.2826, -0.204, 0.0145], [0.1987, -0.2217, -0.0208], [0.1987, -0.1643, -0.0517], [-0.1987, -0.1643, -0.0517], [-0.1987, -0.2217, -0.0208], [-0.2826, -0.204, 0.0145], [0.2473, -0.2482, 0.0543], [0.1987, -0.257, 0.0366], [0.1987, -0.2217, -0.0208], [-0.1987, -0.2217, -0.0208], [-0.1987, -0.257, 0.0366], [-0.2473, -0.2482, 0.0543], [0.1987, -0.257, 0.0366], [0.1546, -0.2658, 0.0543], [0.1148, -0.2349, 0.0145], [-0.1148, -0.2349, 0.0145], [-0.1546, -0.2658, 0.0543], [-0.1987, -0.257, 0.0366], [0.1987, -0.2217, -0.0208], [0.1148, -0.2349, 0.0145], [0.0883, -0.1819, -0.0076], [-0.0883, -0.1819, -0.0076], [-0.1148, -0.2349, 0.0145], [-0.1987, -0.2217, -0.0208], [0.0795, -0.2349, 0.0984], [0.0442, -0.1863, 0.0984], [0.0883, -0.1819, -0.0076], [-0.0795, -0.2349, 0.0984], [-0.1148, -0.2349, 0.0145], [-0.0883, -0.1819, -0.0076], [0.1546, -0.2658, 0.0543], [0.1369, -0.2658, 0.0984], [0.0795, -0.2349, 0.0984], [-0.0795, -0.2349, 0.0984], [-0.1369, -0.2658, 0.0984], [-0.1546, -0.2658, 0.0543], [0.1369, -0.2658, 0.0984], [0.1546, -0.2658, 0.147], [0.1148, -0.2349, 0.1823], [-0.1148, -0.2349, 0.1823], [-0.1546, -0.2658, 0.147], [-0.1369, -0.2658, 0.0984], [0.1148, -0.2349, 0.1823], [0.0883, -0.1819, 0.2088], [0.0442, -0.1863, 0.0984], [-0.1148, -0.2349, 0.1823], [-0.0795, -0.2349, 0.0984], [-0.0442, -0.1863, 0.0984], [0.1987, -0.2217, 0.2177], [0.1987, -0.1643, 0.253], [0.0883, -0.1819, 0.2088], [-0.1987, -0.2217, 0.2177], [-0.1148, -0.2349, 0.1823], [-0.0883, -0.1819, 0.2088], [0.1987, -0.257, 0.1647], [0.1987, -0.2217, 0.2177], [0.1148, -0.2349, 0.1823], [-0.1987, -0.257, 0.1647], [-0.1546, -0.2658, 0.147], [-0.1148, -0.2349, 0.1823], [0.2473, -0.2482, 0.147], [0.2826, -0.204, 0.1823], [0.1987, -0.2217, 0.2177], [-0.2473, -0.2482, 0.147], [-0.1987, -0.257, 0.1647], [-0.1987, -0.2217, 0.2177], [0.2826, -0.204, 0.1823], [0.3091, -0.1422, 0.2088], [0.1987, -0.1643, 0.253], [-0.2826, -0.204, 0.1823], [-0.1987, -0.2217, 0.2177], [-0.1987, -0.1643, 0.253], [0.318, -0.1952, 0.0984], [0.3533, -0.1333, 0.0984], [0.3091, -0.1422, 0.2088], [-0.318, -0.1952, 0.0984], [-0.2826, -0.204, 0.1823], [-0.3091, -0.1422, 0.2088], [0.265, -0.2437, 0.0984], [0.318, -0.1952, 0.0984], [0.2826, -0.204, 0.1823], [-0.265, -0.2437, 0.0984], [-0.2473, -0.2482, 0.147], [-0.2826, -0.204, 0.1823], [0.2473, -0.2482, 0.147], [0.2517, -0.257, 0.1514], [0.2694, -0.2526, 0.0984], [-0.2473, -0.2482, 0.147], [-0.265, -0.2437, 0.0984], [-0.2694, -0.2526, 0.0984], [0.1987, -0.257, 0.1647], [0.1987, -0.2702, 0.1735], [0.2517, -0.257, 0.1514], [-0.1987, -0.257, 0.1647], [-0.2473, -0.2482, 0.147], [-0.2517, -0.257, 0.1514], [0.1546, -0.2658, 0.147], [0.1502, -0.2791, 0.1514], [0.1987, -0.2702, 0.1735], [-0.1546, -0.2658, 0.147], [-0.1987, -0.257, 0.1647], [-0.1987, -0.2702, 0.1735], [0.1369, -0.2658, 0.0984], [0.1281, -0.2791, 0.0984], [0.1502, -0.2791, 0.1514], [-0.1369, -0.2658, 0.0984], [-0.1546, -0.2658, 0.147], [-0.1502, -0.2791, 0.1514], [0.1369, -0.2658, 0.0984], [0.1546, -0.2658, 0.0543], [0.1502, -0.2791, 0.0498], [-0.1502, -0.2791, 0.0498], [-0.1546, -0.2658, 0.0543], [-0.1369, -0.2658, 0.0984], [0.1546, -0.2658, 0.0543], [0.1987, -0.257, 0.0366], [0.1987, -0.2702, 0.0278], [-0.1987, -0.2702, 0.0278], [-0.1987, -0.257, 0.0366], [-0.1546, -0.2658, 0.0543], [0.1987, -0.257, 0.0366], [0.2473, -0.2482, 0.0543], [0.2517, -0.257, 0.0498], [-0.2517, -0.257, 0.0498], [-0.2473, -0.2482, 0.0543], [-0.1987, -0.257, 0.0366], [0.2473, -0.2482, 0.0543], [0.265, -0.2437, 0.0984], [0.2694, -0.2526, 0.0984], [-0.2694, -0.2526, 0.0984], [-0.265, -0.2437, 0.0984], [-0.2473, -0.2482, 0.0543], [0.0927, -0.1731, -0.564], [-0.0, -0.1775, -0.5728], [-0.0, -0.1422, -0.5949], [-0.0927, -0.1731, -0.564], [-0.1016, -0.1289, -0.5861], [-0.0, -0.1422, -0.5949], [0.1325, -0.1731, -0.5552], [0.0927, -0.1731, -0.564], [0.1016, -0.1289, -0.5861], [-0.1325, -0.1731, -0.5552], [-0.1855, -0.1113, -0.5728], [-0.1016, -0.1289, -0.5861], [0.2076, -0.1157, -0.5419], [0.1502, -0.1908, -0.5022], [0.1325, -0.1731, -0.5552], [-0.1325, -0.1731, -0.5552], [-0.1502, -0.1908, -0.5022], [-0.2076, -0.1157, -0.5419], [0.1987, -0.1378, -0.4315], [0.1413, -0.204, -0.4359], [0.1502, -0.1908, -0.5022], [-0.1502, -0.1908, -0.5022], [-0.1413, -0.204, -0.4359], [-0.1987, -0.1378, -0.4315], [0.1766, -0.1378, -0.2858], [0.1192, -0.2172, -0.2902], [0.1413, -0.204, -0.4359], [-0.1413, -0.204, -0.4359], [-0.1192, -0.2172, -0.2902], [-0.1766, -0.1378, -0.2858], [0.1148, -0.1333, -0.1445], [0.2473, -0.1157, -0.118], [0.2252, -0.1952, -0.065], [-0.2252, -0.1952, -0.065], [-0.2473, -0.1157, -0.118], [-0.1148, -0.1333, -0.1445], [0.3577, -0.1201, -0.0606], [0.3489, -0.1687, -0.0076], [0.2252, -0.1952, -0.065], [-0.3577, -0.1201, -0.0606], [-0.2473, -0.1157, -0.118], [-0.2252, -0.1952, -0.065], [0.3577, -0.1201, -0.0606], [0.4681, -0.0671, 0.0454], [0.4107, -0.1554, 0.0763], [-0.4107, -0.1554, 0.0763], [-0.4681, -0.0671, 0.0454], [-0.3577, -0.1201, -0.0606], [0.4858, -0.151, 0.2044], [0.4195, -0.1863, 0.1735], [0.4107, -0.1554, 0.0763], [-0.4858, -0.151, 0.2044], [-0.4681, -0.0671, 0.0454], [-0.4107, -0.1554, 0.0763], [0.4019, -0.1687, 0.2353], [0.3886, -0.2261, 0.1956], [0.4195, -0.1863, 0.1735], [-0.4019, -0.1687, 0.2353], [-0.4858, -0.151, 0.2044], [-0.4195, -0.1863, 0.1735], [0.2782, -0.204, 0.3016], [0.2473, -0.2658, 0.2707], [0.3886, -0.2261, 0.1956], [-0.2782, -0.204, 0.3016], [-0.4019, -0.1687, 0.2353], [-0.3886, -0.2261, 0.1956], [0.2782, -0.204, 0.3016], [0.1811, -0.2305, 0.3899], [0.1766, -0.2879, 0.3236], [-0.1766, -0.2879, 0.3236], [-0.1811, -0.2305, 0.3899], [-0.2782, -0.204, 0.3016], [0.0883, -0.2437, 0.3678], [0.1148, -0.2967, 0.3104], [0.1766, -0.2879, 0.3236], [-0.0883, -0.2437, 0.3678], [-0.1811, -0.2305, 0.3899], [-0.1766, -0.2879, 0.3236], [0.0353, -0.2393, 0.2397], [0.0574, -0.2923, 0.2044], [0.1148, -0.2967, 0.3104], [-0.0353, -0.2393, 0.2397], [-0.0883, -0.2437, 0.3678], [-0.1148, -0.2967, 0.3104], [-0.0, -0.2349, 0.2044], [-0.0, -0.2791, 0.1602], [0.0574, -0.2923, 0.2044], [-0.0, -0.2349, 0.2044], [-0.0353, -0.2393, 0.2397], [-0.0574, -0.2923, 0.2044], [0.1413, -0.2437, 0.2265], [0.1148, -0.2967, 0.3104], [0.0574, -0.2923, 0.2044], [-0.1413, -0.2437, 0.2265], [-0.0927, -0.2526, 0.1956], [-0.0574, -0.2923, 0.2044], [0.1413, -0.2437, 0.2265], [0.1855, -0.2349, 0.2309], [0.1766, -0.2879, 0.3236], [-0.1766, -0.2879, 0.3236], [-0.1855, -0.2349, 0.2309], [-0.1413, -0.2437, 0.2265], [0.2473, -0.2658, 0.2707], [0.1766, -0.2879, 0.3236], [0.1855, -0.2349, 0.2309], [-0.2473, -0.2658, 0.2707], [-0.2429, -0.2217, 0.2088], [-0.1855, -0.2349, 0.2309], [0.3886, -0.2261, 0.1956], [0.2473, -0.2658, 0.2707], [0.2429, -0.2217, 0.2088], [-0.3886, -0.2261, 0.1956], [-0.34, -0.1908, 0.1735], [-0.2429, -0.2217, 0.2088], [0.4195, -0.1863, 0.1735], [0.3886, -0.2261, 0.1956], [0.34, -0.1908, 0.1735], [-0.4195, -0.1863, 0.1735], [-0.3621, -0.1819, 0.1293], [-0.34, -0.1908, 0.1735], [0.4107, -0.1554, 0.0763], [0.4195, -0.1863, 0.1735], [0.3621, -0.1819, 0.1293], [-0.4107, -0.1554, 0.0763], [-0.3533, -0.1819, 0.0675], [-0.3621, -0.1819, 0.1293], [0.3489, -0.1687, -0.0076], [0.4107, -0.1554, 0.0763], [0.3533, -0.1819, 0.0675], [-0.3489, -0.1687, -0.0076], [-0.2782, -0.1952, -0.0032], [-0.3533, -0.1819, 0.0675], [0.2252, -0.1952, -0.065], [0.3489, -0.1687, -0.0076], [0.2782, -0.1952, -0.0032], [-0.2252, -0.1952, -0.065], [-0.212, -0.2128, -0.0297], [-0.2782, -0.1952, -0.0032], [0.0707, -0.2747, -0.0959], [0.2252, -0.1952, -0.065], [0.212, -0.2128, -0.0297], [-0.0707, -0.2747, -0.0959], [-0.1148, -0.2349, 0.0145], [-0.212, -0.2128, -0.0297], [0.1148, -0.2349, 0.0145], [0.0927, -0.2393, 0.041], [-0.0, -0.2261, -0.012], [-0.0, -0.2261, -0.012], [-0.0927, -0.2393, 0.041], [-0.1148, -0.2349, 0.0145], [0.0574, -0.2923, 0.2044], [-0.0, -0.2791, 0.1602], [0.0707, -0.2482, 0.1337], [-0.0574, -0.2923, 0.2044], [-0.0927, -0.2526, 0.1956], [-0.0707, -0.2482, 0.1337], [0.0707, -0.2482, 0.1337], [-0.0, -0.2791, 0.1602], [-0.0, -0.2482, 0.0808], [-0.0, -0.2482, 0.0808], [-0.0, -0.2791, 0.1602], [-0.0707, -0.2482, 0.1337], [0.0927, -0.2393, 0.041], [0.0751, -0.2437, 0.0808], [-0.0, -0.2482, 0.0808], [-0.0927, -0.2393, 0.041], [-0.0, -0.2261, -0.012], [-0.0, -0.2482, 0.0808], [0.0353, -0.2084, -0.5375], [-0.0, -0.204, -0.5419], [-0.0, -0.1775, -0.5728], [-0.0, -0.1775, -0.5728], [-0.0, -0.204, -0.5419], [-0.0353, -0.2084, -0.5375], [0.0662, -0.2172, -0.511], [0.0353, -0.2084, -0.5375], [0.0927, -0.1731, -0.564], [-0.0927, -0.1731, -0.564], [-0.0353, -0.2084, -0.5375], [-0.0662, -0.2172, -0.511], [0.0662, -0.2172, -0.511], [0.1325, -0.1731, -0.5552], [0.1502, -0.1908, -0.5022], [-0.0662, -0.2172, -0.511], [-0.0618, -0.2305, -0.4448], [-0.1502, -0.1908, -0.5022], [0.1192, -0.2172, -0.2902], [0.0442, -0.2393, -0.2902], [0.0662, -0.2305, -0.4271], [-0.0662, -0.2305, -0.4271], [-0.0442, -0.2393, -0.2902], [-0.1192, -0.2172, -0.2902], [0.0618, -0.2305, -0.4448], [0.1502, -0.1908, -0.5022], [0.1413, -0.204, -0.4359], [-0.1413, -0.204, -0.4359], [-0.1502, -0.1908, -0.5022], [-0.0618, -0.2305, -0.4448], [-0.0, -0.2349, -0.224], [-0.0, -0.2393, -0.2902], [0.0442, -0.2393, -0.2902], [-0.0, -0.2349, -0.224], [-0.0486, -0.2349, -0.2019], [-0.0442, -0.2393, -0.2902], [0.0442, -0.2393, -0.2902], [-0.0, -0.2393, -0.2902], [-0.0, -0.2305, -0.4227], [-0.0442, -0.2393, -0.2902], [-0.0662, -0.2305, -0.4271], [-0.0, -0.2305, -0.4227], [0.0618, -0.2305, -0.4448], [0.0662, -0.2305, -0.4271], [-0.0, -0.2305, -0.4227], [-0.0618, -0.2305, -0.4448], [-0.0, -0.2305, -0.4713], [-0.0, -0.2305, -0.4227], [0.0707, -0.2393, -0.1666], [0.0751, -0.2658, -0.1666], [0.053, -0.257, -0.1931], [-0.053, -0.257, -0.1931], [-0.0751, -0.2658, -0.1666], [-0.0707, -0.2393, -0.1666], [0.0574, -0.2349, -0.1224], [0.0618, -0.257, -0.1136], [0.0751, -0.2658, -0.1666], [-0.0751, -0.2658, -0.1666], [-0.0618, -0.257, -0.1136], [-0.0574, -0.2349, -0.1224], [0.0221, -0.257, -0.1091], [0.0618, -0.257, -0.1136], [0.0574, -0.2349, -0.1224], [-0.0221, -0.257, -0.1091], [-0.0, -0.2349, -0.118], [-0.0574, -0.2349, -0.1224], [-0.0, -0.2658, -0.1445], [0.0221, -0.257, -0.1091], [-0.0, -0.2349, -0.118], [-0.0, -0.2658, -0.1445], [-0.0, -0.2393, -0.1489], [-0.0, -0.2349, -0.118], [0.0486, -0.2349, -0.2019], [0.053, -0.257, -0.1931], [-0.0, -0.257, -0.2195], [-0.0486, -0.2349, -0.2019], [-0.0, -0.2349, -0.224], [-0.0, -0.257, -0.2195], [0.053, -0.257, -0.1931], [0.0442, -0.2702, -0.1798], [-0.0, -0.2702, -0.2019], [-0.053, -0.257, -0.1931], [-0.0, -0.257, -0.2195], [-0.0, -0.2702, -0.2019], [-0.0, -0.2658, -0.1445], [-0.0, -0.2835, -0.1533], [0.0265, -0.2747, -0.1224], [-0.0265, -0.2747, -0.1224], [-0.0, -0.2835, -0.1533], [-0.0, -0.2658, -0.1445], [0.0221, -0.257, -0.1091], [0.0265, -0.2747, -0.1224], [0.053, -0.2747, -0.1268], [-0.053, -0.2747, -0.1268], [-0.0265, -0.2747, -0.1224], [-0.0221, -0.257, -0.1091], [0.053, -0.2747, -0.1268], [0.0618, -0.2835, -0.1666], [0.0751, -0.2658, -0.1666], [-0.053, -0.2747, -0.1268], [-0.0618, -0.257, -0.1136], [-0.0751, -0.2658, -0.1666], [0.0751, -0.2658, -0.1666], [0.0618, -0.2835, -0.1666], [0.0442, -0.2702, -0.1798], [-0.0442, -0.2702, -0.1798], [-0.0618, -0.2835, -0.1666], [-0.0751, -0.2658, -0.1666], [0.0618, -0.2835, -0.1666], [0.053, -0.2747, -0.1268], [0.0265, -0.2747, -0.1224], [-0.0618, -0.2835, -0.1666], [-0.0, -0.2835, -0.1533], [-0.0265, -0.2747, -0.1224], [-0.0, -0.2835, -0.1533], [-0.0, -0.2702, -0.2019], [0.0442, -0.2702, -0.1798], [-0.0442, -0.2702, -0.1798], [-0.0, -0.2702, -0.2019], [-0.0, -0.2835, -0.1533], [-0.0, -0.2349, -0.118], [0.0574, -0.2349, -0.1224], [0.0707, -0.2747, -0.0959], [-0.0707, -0.2747, -0.0959], [-0.0574, -0.2349, -0.1224], [-0.0, -0.2349, -0.118], [0.0574, -0.2349, -0.1224], [0.0707, -0.2393, -0.1666], [0.0927, -0.2172, -0.1754], [-0.0927, -0.2172, -0.1754], [-0.0707, -0.2393, -0.1666], [-0.0574, -0.2349, -0.1224], [0.0486, -0.2349, -0.2019], [0.1016, -0.2172, -0.2151], [0.0927, -0.2172, -0.1754], [-0.0486, -0.2349, -0.2019], [-0.0707, -0.2393, -0.1666], [-0.0927, -0.2172, -0.1754], [0.0442, -0.2393, -0.2902], [0.1192, -0.2172, -0.2902], [0.1016, -0.2172, -0.2151], [-0.0442, -0.2393, -0.2902], [-0.0486, -0.2349, -0.2019], [-0.1016, -0.2172, -0.2151], [0.1457, -0.1289, -0.2151], [0.1016, -0.2172, -0.2151], [0.1192, -0.2172, -0.2902], [-0.1457, -0.1289, -0.2151], [-0.1766, -0.1378, -0.2858], [-0.1192, -0.2172, -0.2902], [0.1325, -0.1289, -0.1798], [0.0927, -0.2172, -0.1754], [0.1016, -0.2172, -0.2151], [-0.1325, -0.1289, -0.1798], [-0.1457, -0.1289, -0.2151], [-0.1016, -0.2172, -0.2151], [0.1148, -0.1333, -0.1445], [0.0707, -0.2747, -0.0959], [0.0927, -0.2172, -0.1754], [-0.0927, -0.2172, -0.1754], [-0.0707, -0.2747, -0.0959], [-0.1148, -0.1333, -0.1445], [-0.0, -0.2305, -0.4713], [-0.0, -0.2217, -0.4757], [0.053, -0.2261, -0.458], [-0.0, -0.2305, -0.4713], [-0.0618, -0.2305, -0.4448], [-0.053, -0.2261, -0.458], [0.0662, -0.2172, -0.511], [0.0618, -0.2305, -0.4448], [0.053, -0.2261, -0.458], [-0.053, -0.2261, -0.458], [-0.0618, -0.2305, -0.4448], [-0.0662, -0.2172, -0.511], [0.0353, -0.2084, -0.5375], [0.0662, -0.2172, -0.511], [0.053, -0.2172, -0.5022], [-0.053, -0.2172, -0.5022], [-0.0662, -0.2172, -0.511], [-0.0353, -0.2084, -0.5375], [-0.0, -0.204, -0.5419], [0.0353, -0.2084, -0.5375], [0.0265, -0.204, -0.5287], [-0.0265, -0.204, -0.5287], [-0.0353, -0.2084, -0.5375], [-0.0, -0.204, -0.5419], [0.0265, -0.204, -0.5287], [0.0265, -0.1731, -0.5198], [-0.0, -0.1731, -0.5243], [-0.0265, -0.204, -0.5287], [-0.0, -0.204, -0.5331], [-0.0, -0.1731, -0.5243], [0.0265, -0.204, -0.5287], [0.053, -0.2172, -0.5022], [0.053, -0.1775, -0.4978], [-0.053, -0.1775, -0.4978], [-0.053, -0.2172, -0.5022], [-0.0265, -0.204, -0.5287], [0.053, -0.2172, -0.5022], [0.053, -0.2261, -0.458], [0.053, -0.1908, -0.4624], [-0.053, -0.1908, -0.4624], [-0.053, -0.2261, -0.458], [-0.053, -0.2172, -0.5022], [-0.0, -0.2217, -0.4757], [-0.0, -0.1863, -0.4801], [0.053, -0.1908, -0.4624], [-0.0, -0.2217, -0.4757], [-0.053, -0.2261, -0.458], [-0.053, -0.1908, -0.4624], [-0.0, -0.1863, -0.4801], [-0.0, -0.1731, -0.5243], [0.0265, -0.1731, -0.5198], [-0.0265, -0.1731, -0.5198], [-0.0, -0.1731, -0.5243], [-0.0, -0.1863, -0.4801], [0.0751, -0.2437, 0.0808], [0.0927, -0.2393, 0.041], [0.106, -0.2526, 0.0498], [-0.106, -0.2526, 0.0498], [-0.0927, -0.2393, 0.041], [-0.0751, -0.2437, 0.0808], [0.0707, -0.2482, 0.1337], [0.0751, -0.2437, 0.0808], [0.0972, -0.257, 0.0852], [-0.0972, -0.257, 0.0852], [-0.0751, -0.2437, 0.0808], [-0.0707, -0.2482, 0.1337], [0.0707, -0.2482, 0.1337], [0.1016, -0.257, 0.1293], [0.1192, -0.257, 0.1735], [-0.0707, -0.2482, 0.1337], [-0.0927, -0.2526, 0.1956], [-0.1192, -0.257, 0.1735], [0.1148, -0.2349, 0.0145], [0.1281, -0.257, 0.0233], [0.106, -0.2526, 0.0498], [-0.1148, -0.2349, 0.0145], [-0.0927, -0.2393, 0.041], [-0.106, -0.2526, 0.0498], [0.1148, -0.2349, 0.0145], [0.212, -0.2128, -0.0297], [0.212, -0.2349, -0.0032], [-0.212, -0.2349, -0.0032], [-0.212, -0.2128, -0.0297], [-0.1148, -0.2349, 0.0145], [0.212, -0.2128, -0.0297], [0.2782, -0.1952, -0.0032], [0.2694, -0.2217, 0.0189], [-0.2694, -0.2217, 0.0189], [-0.2782, -0.1952, -0.0032], [-0.212, -0.2128, -0.0297], [0.2782, -0.1952, -0.0032], [0.3533, -0.1819, 0.0675], [0.3268, -0.1996, 0.0719], [-0.3268, -0.1996, 0.0719], [-0.3533, -0.1819, 0.0675], [-0.2782, -0.1952, -0.0032], [0.3533, -0.1819, 0.0675], [0.3621, -0.1819, 0.1293], [0.3312, -0.204, 0.1249], [-0.3312, -0.204, 0.1249], [-0.3621, -0.1819, 0.1293], [-0.3533, -0.1819, 0.0675], [0.34, -0.1908, 0.1735], [0.318, -0.2084, 0.1602], [0.3312, -0.204, 0.1249], [-0.34, -0.1908, 0.1735], [-0.3621, -0.1819, 0.1293], [-0.3312, -0.204, 0.1249], [0.2429, -0.2217, 0.2088], [0.2385, -0.2526, 0.1867], [0.318, -0.2084, 0.1602], [-0.2429, -0.2217, 0.2088], [-0.34, -0.1908, 0.1735], [-0.318, -0.2084, 0.1602], [0.2429, -0.2217, 0.2088], [0.1855, -0.2349, 0.2309], [0.1899, -0.2437, 0.2044], [-0.1899, -0.2437, 0.2044], [-0.1855, -0.2349, 0.2309], [-0.2429, -0.2217, 0.2088], [0.1855, -0.2349, 0.2309], [0.1413, -0.2437, 0.2265], [0.1546, -0.2526, 0.2], [-0.1546, -0.2526, 0.2], [-0.1413, -0.2437, 0.2265], [-0.1855, -0.2349, 0.2309], [0.1413, -0.2437, 0.2265], [0.0927, -0.2526, 0.1956], [0.1192, -0.257, 0.1735], [-0.1192, -0.257, 0.1735], [-0.0927, -0.2526, 0.1956], [-0.1413, -0.2437, 0.2265], [0.1192, -0.257, 0.1735], [0.1325, -0.2437, 0.1647], [0.159, -0.2482, 0.1867], [-0.1192, -0.257, 0.1735], [-0.1546, -0.2526, 0.2], [-0.159, -0.2482, 0.1867], [0.1899, -0.2437, 0.2044], [0.1546, -0.2526, 0.2], [0.159, -0.2482, 0.1867], [-0.159, -0.2482, 0.1867], [-0.1546, -0.2526, 0.2], [-0.1899, -0.2437, 0.2044], [0.1899, -0.2437, 0.2044], [0.1899, -0.2393, 0.1912], [0.2341, -0.2393, 0.1823], [-0.1899, -0.2437, 0.2044], [-0.2385, -0.2526, 0.1867], [-0.2341, -0.2393, 0.1823], [0.2385, -0.2526, 0.1867], [0.2341, -0.2393, 0.1823], [0.3003, -0.1996, 0.1514], [-0.2385, -0.2526, 0.1867], [-0.318, -0.2084, 0.1602], [-0.3003, -0.1996, 0.1514], [0.3312, -0.204, 0.1249], [0.318, -0.2084, 0.1602], [0.3003, -0.1996, 0.1514], [-0.3003, -0.1996, 0.1514], [-0.318, -0.2084, 0.1602], [-0.3312, -0.204, 0.1249], [0.3312, -0.204, 0.1249], [0.3135, -0.1952, 0.1205], [0.3091, -0.1952, 0.0808], [-0.3312, -0.204, 0.1249], [-0.3268, -0.1996, 0.0719], [-0.3091, -0.1952, 0.0808], [0.2694, -0.2217, 0.0189], [0.3268, -0.1996, 0.0719], [0.3091, -0.1952, 0.0808], [-0.3091, -0.1952, 0.0808], [-0.3268, -0.1996, 0.0719], [-0.2694, -0.2217, 0.0189], [0.2694, -0.2217, 0.0189], [0.2606, -0.2128, 0.0278], [0.212, -0.2261, 0.0101], [-0.2694, -0.2217, 0.0189], [-0.212, -0.2349, -0.0032], [-0.212, -0.2261, 0.0101], [0.212, -0.2349, -0.0032], [0.212, -0.2261, 0.0101], [0.1369, -0.2437, 0.0322], [-0.212, -0.2349, -0.0032], [-0.1281, -0.257, 0.0233], [-0.1369, -0.2437, 0.0322], [0.106, -0.2526, 0.0498], [0.1281, -0.257, 0.0233], [0.1369, -0.2437, 0.0322], [-0.1369, -0.2437, 0.0322], [-0.1281, -0.257, 0.0233], [-0.106, -0.2526, 0.0498], [0.1192, -0.257, 0.1735], [0.1016, -0.257, 0.1293], [0.1104, -0.2437, 0.1293], [-0.1104, -0.2437, 0.1293], [-0.1016, -0.257, 0.1293], [-0.1192, -0.257, 0.1735], [0.1016, -0.257, 0.1293], [0.0972, -0.257, 0.0852], [0.1104, -0.2393, 0.0896], [-0.1104, -0.2393, 0.0896], [-0.0972, -0.257, 0.0852], [-0.1016, -0.257, 0.1293], [0.0972, -0.257, 0.0852], [0.106, -0.2526, 0.0498], [0.1148, -0.2393, 0.0587], [-0.1148, -0.2393, 0.0587], [-0.106, -0.2526, 0.0498], [-0.0972, -0.257, 0.0852], [-0.0, -0.2349, 0.2044], [0.0353, -0.2393, 0.2397], [0.0618, -0.1598, 0.2221], [-0.0618, -0.1598, 0.2221], [-0.0353, -0.2393, 0.2397], [-0.0, -0.2349, 0.2044], [0.0353, -0.2393, 0.2397], [0.0883, -0.2437, 0.3678], [0.1104, -0.1643, 0.3369], [-0.1104, -0.1643, 0.3369], [-0.0883, -0.2437, 0.3678], [-0.0353, -0.2393, 0.2397], [0.1811, -0.2305, 0.3899], [0.1899, -0.151, 0.3501], [0.1104, -0.1643, 0.3369], [-0.1811, -0.2305, 0.3899], [-0.0883, -0.2437, 0.3678], [-0.1104, -0.1643, 0.3369], [0.2782, -0.204, 0.3016], [0.2738, -0.1289, 0.2751], [0.1899, -0.151, 0.3501], [-0.2782, -0.204, 0.3016], [-0.1811, -0.2305, 0.3899], [-0.1899, -0.151, 0.3501], [0.4019, -0.1687, 0.2353], [0.3842, -0.0936, 0.2177], [0.2738, -0.1289, 0.2751], [-0.4019, -0.1687, 0.2353], [-0.2782, -0.204, 0.3016], [-0.2738, -0.1289, 0.2751], [0.4019, -0.1687, 0.2353], [0.4858, -0.151, 0.2044], [0.4505, -0.0759, 0.1912], [-0.4505, -0.0759, 0.1912], [-0.4858, -0.151, 0.2044], [-0.4019, -0.1687, 0.2353], [0.4681, -0.0671, 0.0454], [0.4372, -0.0274, 0.0543], [0.4505, -0.0759, 0.1912], [-0.4681, -0.0671, 0.0454], [-0.4858, -0.151, 0.2044], [-0.4505, -0.0759, 0.1912], [0.4681, -0.0671, 0.0454], [0.3577, -0.1201, -0.0606], [0.34, -0.0494, -0.0385], [-0.34, -0.0494, -0.0385], [-0.3577, -0.1201, -0.0606], [-0.4681, -0.0671, 0.0454], [0.3577, -0.1201, -0.0606], [0.2473, -0.1157, -0.118], [0.2473, -0.0803, -0.0915], [-0.2473, -0.0803, -0.0915], [-0.2473, -0.1157, -0.118], [-0.3577, -0.1201, -0.0606], [-0.0, 0.0256, -0.3123], [0.1016, 0.0389, -0.2725], [0.0707, -0.0185, -0.3432], [-0.0, 0.0256, -0.3123], [-0.0, 0.0036, -0.3609], [-0.0707, -0.0185, -0.3432], [-0.0, 0.0036, -0.3609], [0.0707, -0.0185, -0.3432], [0.0795, -0.0229, -0.4669], [-0.0, 0.0036, -0.3609], [-0.0, -0.0097, -0.4934], [-0.0795, -0.0229, -0.4669], [-0.0, -0.0097, -0.4934], [0.0795, -0.0229, -0.4669], [0.0927, -0.0627, -0.5728], [-0.0, -0.0097, -0.4934], [-0.0, -0.0759, -0.5905], [-0.0927, -0.0627, -0.5728], [0.1016, -0.1289, -0.5861], [-0.0, -0.1422, -0.5949], [-0.0, -0.0759, -0.5905], [-0.0, -0.0759, -0.5905], [-0.0, -0.1422, -0.5949], [-0.1016, -0.1289, -0.5861], [0.1855, -0.1113, -0.5728], [0.1016, -0.1289, -0.5861], [0.0927, -0.0627, -0.5728], [-0.0927, -0.0627, -0.5728], [-0.1016, -0.1289, -0.5861], [-0.1855, -0.1113, -0.5728], [0.2076, -0.1157, -0.5419], [0.1855, -0.1113, -0.5728], [0.1855, -0.0406, -0.5552], [-0.1855, -0.0406, -0.5552], [-0.1855, -0.1113, -0.5728], [-0.2076, -0.1157, -0.5419], [0.1987, -0.1378, -0.4315], [0.2076, -0.1157, -0.5419], [0.1634, -0.0318, -0.4404], [-0.1634, -0.0318, -0.4404], [-0.2076, -0.1157, -0.5419], [-0.1987, -0.1378, -0.4315], [0.1634, -0.0318, -0.4404], [0.0795, -0.0229, -0.4669], [0.0707, -0.0185, -0.3432], [-0.0707, -0.0185, -0.3432], [-0.0795, -0.0229, -0.4669], [-0.1634, -0.0318, -0.4404], [0.1855, -0.0406, -0.5552], [0.0927, -0.0627, -0.5728], [0.0795, -0.0229, -0.4669], [-0.1855, -0.0406, -0.5552], [-0.1634, -0.0318, -0.4404], [-0.0795, -0.0229, -0.4669], [0.1413, -0.0362, -0.3211], [0.0707, -0.0185, -0.3432], [0.1016, 0.0389, -0.2725], [-0.1413, -0.0362, -0.3211], [-0.1325, -0.045, -0.2372], [-0.1016, 0.0389, -0.2725], [0.1766, -0.1378, -0.2858], [0.1987, -0.1378, -0.4315], [0.1413, -0.0362, -0.3211], [-0.1413, -0.0362, -0.3211], [-0.1987, -0.1378, -0.4315], [-0.1766, -0.1378, -0.2858], [0.1237, -0.0583, -0.1975], [0.1192, -0.0803, -0.1666], [0.1325, -0.1289, -0.1798], [-0.1237, -0.0583, -0.1975], [-0.1457, -0.1289, -0.2151], [-0.1325, -0.1289, -0.1798], [0.1325, -0.045, -0.2372], [0.1237, -0.0583, -0.1975], [0.1457, -0.1289, -0.2151], [-0.1325, -0.045, -0.2372], [-0.1766, -0.1378, -0.2858], [-0.1457, -0.1289, -0.2151], [0.1325, -0.1289, -0.1798], [0.1192, -0.0803, -0.1666], [0.1148, -0.098, -0.1356], [-0.1325, -0.1289, -0.1798], [-0.1148, -0.1333, -0.1445], [-0.1148, -0.098, -0.1356], [0.1148, -0.098, -0.1356], [0.2473, -0.0803, -0.0915], [0.2473, -0.1157, -0.118], [-0.1148, -0.098, -0.1356], [-0.1148, -0.1333, -0.1445], [-0.2473, -0.1157, -0.118], [0.1899, 0.56, -0.0076], [0.1943, 0.4893, -0.1224], [-0.0, 0.5644, -0.1489], [-0.1899, 0.56, -0.0076], [-0.0, 0.6527, 0.0013], [-0.0, 0.5644, -0.1489], [0.1943, 0.4893, -0.1224], [0.1678, 0.3348, -0.2151], [-0.0, 0.3834, -0.2549], [-0.1943, 0.4893, -0.1224], [-0.0, 0.5644, -0.1489], [-0.0, 0.3834, -0.2549], [-0.0, 0.3834, -0.2549], [0.1678, 0.3348, -0.2151], [0.1192, 0.0919, -0.2593], [-0.1192, 0.0919, -0.2593], [-0.1678, 0.3348, -0.2151], [-0.0, 0.3834, -0.2549], [-0.0, 0.0786, -0.299], [0.1192, 0.0919, -0.2593], [0.1016, 0.0389, -0.2725], [-0.1016, 0.0389, -0.2725], [-0.1192, 0.0919, -0.2593], [-0.0, 0.0786, -0.299], [0.1016, 0.0389, -0.2725], [0.1192, 0.0919, -0.2593], [0.1237, -0.0583, -0.1975], [-0.1016, 0.0389, -0.2725], [-0.1325, -0.045, -0.2372], [-0.1237, -0.0583, -0.1975], [0.4372, -0.0274, 0.0543], [0.34, -0.0494, -0.0385], [0.4151, 0.1449, -0.065], [-0.4151, 0.1449, -0.065], [-0.34, -0.0494, -0.0385], [-0.4372, -0.0274, 0.0543], [0.2606, 0.5821, 0.2088], [0.1899, 0.56, -0.0076], [-0.0, 0.6527, 0.0013], [-0.2606, 0.5821, 0.2088], [-0.0, 0.666, 0.2795], [-0.0, 0.6527, 0.0013], [0.2561, 0.0521, 0.4429], [0.2561, 0.2244, 0.487], [-0.0, 0.2288, 0.518], [-0.2561, 0.0521, 0.4429], [-0.0, 0.0212, 0.4694], [-0.0, 0.2288, 0.518], [-0.0, 0.2288, 0.518], [0.2561, 0.2244, 0.487], [0.2561, 0.401, 0.4517], [-0.2561, 0.401, 0.4517], [-0.2561, 0.2244, 0.487], [-0.0, 0.2288, 0.518], [-0.0, 0.4938, 0.4694], [0.2561, 0.401, 0.4517], [0.2606, 0.5821, 0.2088], [-0.2606, 0.5821, 0.2088], [-0.2561, 0.401, 0.4517], [-0.0, 0.4938, 0.4694], [0.3842, -0.0936, 0.2177], [0.4505, -0.0759, 0.1912], [0.4107, -0.0053, 0.1912], [-0.4107, -0.0053, 0.1912], [-0.4505, -0.0759, 0.1912], [-0.3842, -0.0936, 0.2177], [0.3577, 0.0256, 0.2177], [0.4107, -0.0053, 0.1912], [0.4505, 0.114, 0.2795], [-0.4505, 0.114, 0.2795], [-0.4107, -0.0053, 0.1912], [-0.3577, 0.0256, 0.2177], [0.3621, 0.1537, 0.359], [0.4505, 0.114, 0.2795], [0.4505, 0.2509, 0.3104], [-0.4505, 0.2509, 0.3104], [-0.4505, 0.114, 0.2795], [-0.3621, 0.1537, 0.359], [0.3621, 0.295, 0.3855], [0.4505, 0.2509, 0.3104], [0.4505, 0.3878, 0.2662], [-0.4505, 0.3878, 0.2662], [-0.4505, 0.2509, 0.3104], [-0.3621, 0.295, 0.3855], [0.3489, 0.5158, 0.147], [0.3621, 0.4364, 0.3457], [0.4505, 0.3878, 0.2662], [-0.3489, 0.5158, 0.147], [-0.4372, 0.4319, 0.1117], [-0.4505, 0.3878, 0.2662], [0.2606, 0.5821, 0.2088], [0.2561, 0.401, 0.4517], [0.3621, 0.4364, 0.3457], [-0.3621, 0.4364, 0.3457], [-0.2561, 0.401, 0.4517], [-0.2606, 0.5821, 0.2088], [0.2561, 0.401, 0.4517], [0.2561, 0.2244, 0.487], [0.3621, 0.295, 0.3855], [-0.3621, 0.295, 0.3855], [-0.2561, 0.2244, 0.487], [-0.2561, 0.401, 0.4517], [0.2561, 0.2244, 0.487], [0.2561, 0.0521, 0.4429], [0.3621, 0.1537, 0.359], [-0.3621, 0.1537, 0.359], [-0.2561, 0.0521, 0.4429], [-0.2561, 0.2244, 0.487], [0.2561, 0.0521, 0.4429], [0.2606, -0.0583, 0.2574], [0.3577, 0.0256, 0.2177], [-0.3577, 0.0256, 0.2177], [-0.2606, -0.0583, 0.2574], [-0.2561, 0.0521, 0.4429], [0.3842, -0.0936, 0.2177], [0.3577, 0.0256, 0.2177], [0.2606, -0.0583, 0.2574], [-0.3842, -0.0936, 0.2177], [-0.2738, -0.1289, 0.2751], [-0.2606, -0.0583, 0.2574], [0.2606, -0.0583, 0.2574], [0.2561, 0.0521, 0.4429], [-0.0, 0.0212, 0.4694], [-0.2606, -0.0583, 0.2574], [-0.0, -0.1378, 0.2839], [-0.0, 0.0212, 0.4694], [0.0618, -0.1598, 0.2221], [0.1104, -0.1643, 0.3369], [0.1899, -0.151, 0.3501], [-0.1899, -0.151, 0.3501], [-0.1104, -0.1643, 0.3369], [-0.0618, -0.1598, 0.2221], [0.0618, -0.1598, 0.2221], [0.2738, -0.1289, 0.2751], [0.2606, -0.0583, 0.2574], [-0.2606, -0.0583, 0.2574], [-0.2738, -0.1289, 0.2751], [-0.0618, -0.1598, 0.2221], [0.4372, -0.0274, 0.0543], [0.4814, 0.1537, 0.094], [0.4107, -0.0053, 0.1912], [-0.4372, -0.0274, 0.0543], [-0.4505, -0.0759, 0.1912], [-0.4107, -0.0053, 0.1912], [0.4814, 0.1537, 0.094], [0.4858, 0.2111, 0.1426], [0.4505, 0.114, 0.2795], [-0.4505, 0.114, 0.2795], [-0.4858, 0.2111, 0.1426], [-0.4814, 0.1537, 0.094], [0.4858, 0.2111, 0.1426], [0.4637, 0.2994, 0.147], [0.4505, 0.2509, 0.3104], [-0.4505, 0.2509, 0.3104], [-0.4637, 0.2994, 0.147], [-0.4858, 0.2111, 0.1426], [0.4505, 0.3878, 0.2662], [0.4505, 0.2509, 0.3104], [0.4637, 0.2994, 0.147], [-0.4505, 0.3878, 0.2662], [-0.4372, 0.4319, 0.1117], [-0.4637, 0.2994, 0.147], [0.1678, 0.3348, -0.2151], [0.2429, 0.3039, -0.1489], [0.2296, 0.1007, -0.1356], [-0.1678, 0.3348, -0.2151], [-0.1192, 0.0919, -0.2593], [-0.2296, 0.1007, -0.1356], [0.2296, 0.1007, -0.1356], [0.2429, 0.3039, -0.1489], [0.3356, 0.2774, -0.1091], [-0.2296, 0.1007, -0.1356], [-0.4151, 0.1449, -0.065], [-0.3356, 0.2774, -0.1091], [0.34, -0.0494, -0.0385], [0.2473, -0.0803, -0.0915], [0.2296, 0.1007, -0.1356], [-0.2296, 0.1007, -0.1356], [-0.2473, -0.0803, -0.0915], [-0.34, -0.0494, -0.0385], [0.2473, -0.0803, -0.0915], [0.1192, -0.0803, -0.1666], [0.1237, -0.0583, -0.1975], [-0.1237, -0.0583, -0.1975], [-0.1192, -0.0803, -0.1666], [-0.2473, -0.0803, -0.0915], [0.3621, 0.4275, -0.0429], [0.2738, 0.4938, -0.0252], [0.3489, 0.5158, 0.147], [-0.3621, 0.4275, -0.0429], [-0.4372, 0.4319, 0.1117], [-0.3489, 0.5158, 0.147], [0.3489, 0.5158, 0.147], [0.2738, 0.4938, -0.0252], [0.1899, 0.56, -0.0076], [-0.3489, 0.5158, 0.147], [-0.2606, 0.5821, 0.2088], [-0.1899, 0.56, -0.0076], [0.2429, 0.3039, -0.1489], [0.2738, 0.4938, -0.0252], [0.3621, 0.4275, -0.0429], [-0.2429, 0.3039, -0.1489], [-0.3356, 0.2774, -0.1091], [-0.3621, 0.4275, -0.0429], [0.1943, 0.4893, -0.1224], [0.2738, 0.4938, -0.0252], [0.2429, 0.3039, -0.1489], [-0.1943, 0.4893, -0.1224], [-0.1678, 0.3348, -0.2151], [-0.2429, 0.3039, -0.1489], [0.5034, 0.3171, 0.1912], [0.5211, 0.3083, 0.1647], [0.5741, 0.348, 0.1956], [-0.5034, 0.3171, 0.1912], [-0.5785, 0.3613, 0.2309], [-0.5741, 0.348, 0.1956], [0.5785, 0.3613, 0.2309], [0.5741, 0.348, 0.1956], [0.6713, 0.4054, 0.2088], [-0.6713, 0.4054, 0.2088], [-0.5741, 0.348, 0.1956], [-0.5785, 0.3613, 0.2309], [0.6713, 0.4054, 0.2088], [0.7154, 0.4143, 0.1249], [0.764, 0.4231, 0.1426], [-0.6713, 0.4054, 0.2088], [-0.6978, 0.4231, 0.2486], [-0.764, 0.4231, 0.1426], [0.7154, 0.4143, 0.1249], [0.6845, 0.4143, 0.0057], [0.7243, 0.4275, -0.0076], [-0.7154, 0.4143, 0.1249], [-0.764, 0.4231, 0.1426], [-0.7243, 0.4275, -0.0076], [0.6845, 0.4143, 0.0057], [0.5829, 0.3569, -0.0606], [0.5874, 0.3701, -0.0959], [-0.6845, 0.4143, 0.0057], [-0.7243, 0.4275, -0.0076], [-0.5874, 0.3701, -0.0959], [0.5874, 0.3701, -0.0959], [0.5829, 0.3569, -0.0606], [0.4681, 0.2597, -0.0782], [-0.4681, 0.2597, -0.0782], [-0.5829, 0.3569, -0.0606], [-0.5874, 0.3701, -0.0959], [0.5829, 0.3569, -0.0606], [0.5874, 0.3922, -0.0385], [0.499, 0.3039, -0.0517], [-0.499, 0.3039, -0.0517], [-0.5874, 0.3922, -0.0385], [-0.5829, 0.3569, -0.0606], [0.6845, 0.4143, 0.0057], [0.6713, 0.4364, 0.0145], [0.5874, 0.3922, -0.0385], [-0.5874, 0.3922, -0.0385], [-0.6713, 0.4364, 0.0145], [-0.6845, 0.4143, 0.0057], [0.6978, 0.4364, 0.1028], [0.6713, 0.4364, 0.0145], [0.6845, 0.4143, 0.0057], [-0.6978, 0.4364, 0.1028], [-0.7154, 0.4143, 0.1249], [-0.6845, 0.4143, 0.0057], [0.6624, 0.4319, 0.1647], [0.6978, 0.4364, 0.1028], [0.7154, 0.4143, 0.1249], [-0.6624, 0.4319, 0.1647], [-0.6713, 0.4054, 0.2088], [-0.7154, 0.4143, 0.1249], [0.5785, 0.3878, 0.1558], [0.6624, 0.4319, 0.1647], [0.6713, 0.4054, 0.2088], [-0.5785, 0.3878, 0.1558], [-0.5741, 0.348, 0.1956], [-0.6713, 0.4054, 0.2088], [0.5741, 0.348, 0.1956], [0.5211, 0.3083, 0.1647], [0.5344, 0.348, 0.1337], [-0.5344, 0.348, 0.1337], [-0.5211, 0.3083, 0.1647], [-0.5741, 0.348, 0.1956], [0.3356, 0.2774, -0.1091], [0.4063, 0.2818, -0.0517], [0.4107, 0.2244, -0.0385], [-0.3356, 0.2774, -0.1091], [-0.4151, 0.1449, -0.065], [-0.4107, 0.2244, -0.0385], [0.4372, 0.2553, -0.118], [0.4681, 0.2597, -0.0782], [0.4063, 0.2818, -0.0517], [-0.4372, 0.2553, -0.118], [-0.3356, 0.2774, -0.1091], [-0.4063, 0.2818, -0.0517], [0.4814, 0.1537, 0.094], [0.4151, 0.1449, -0.065], [0.4107, 0.2244, -0.0385], [-0.4107, 0.2244, -0.0385], [-0.4151, 0.1449, -0.065], [-0.4814, 0.1537, 0.094], [0.4637, 0.2994, 0.147], [0.4769, 0.3039, 0.1249], [0.5211, 0.3083, 0.1647], [-0.5211, 0.3083, 0.1647], [-0.477, 0.3039, 0.1249], [-0.4637, 0.2994, 0.147], [0.4681, 0.2597, -0.0782], [0.499, 0.3039, -0.0517], [0.4593, 0.3392, -0.0473], [-0.4593, 0.3392, -0.0473], [-0.499, 0.3039, -0.0517], [-0.4681, 0.2597, -0.0782], [0.4063, 0.2906, -0.0164], [0.4063, 0.2818, -0.0517], [0.4593, 0.3392, -0.0473], [-0.4063, 0.2906, -0.0164], [-0.477, 0.3392, -0.0297], [-0.4593, 0.3392, -0.0473], [0.4284, 0.3392, 0.0145], [0.4063, 0.2906, -0.0164], [0.4769, 0.3392, -0.0297], [-0.477, 0.3392, -0.0297], [-0.4063, 0.2906, -0.0164], [-0.4284, 0.3392, 0.0145], [0.4505, 0.3039, 0.0763], [0.4063, 0.2906, -0.0164], [0.4284, 0.3392, 0.0145], [-0.4505, 0.3039, 0.0763], [-0.4725, 0.3392, 0.0587], [-0.4284, 0.3392, 0.0145], [0.4505, 0.3039, 0.0763], [0.4725, 0.3392, 0.0587], [0.5034, 0.3348, 0.0984], [-0.4505, 0.3039, 0.0763], [-0.477, 0.3039, 0.1249], [-0.5034, 0.3348, 0.0984], [0.4769, 0.3039, 0.1249], [0.5034, 0.3348, 0.0984], [0.5344, 0.348, 0.1337], [-0.477, 0.3039, 0.1249], [-0.5211, 0.3083, 0.1647], [-0.5344, 0.348, 0.1337], [0.4858, 0.2111, 0.1426], [0.4505, 0.3039, 0.0763], [0.4769, 0.3039, 0.1249], [-0.477, 0.3039, 0.1249], [-0.4505, 0.3039, 0.0763], [-0.4858, 0.2111, 0.1426], [0.4107, 0.2244, -0.0385], [0.4063, 0.2906, -0.0164], [0.4505, 0.3039, 0.0763], [-0.4107, 0.2244, -0.0385], [-0.4858, 0.2111, 0.1426], [-0.4505, 0.3039, 0.0763], [0.5344, 0.348, 0.1337], [0.5034, 0.3348, 0.0984], [0.5034, 0.3657, 0.094], [-0.5034, 0.3657, 0.094], [-0.5034, 0.3348, 0.0984], [-0.5344, 0.348, 0.1337], [0.4725, 0.3392, 0.0587], [0.4769, 0.3657, 0.0587], [0.5034, 0.3657, 0.094], [-0.4725, 0.3392, 0.0587], [-0.5034, 0.3348, 0.0984], [-0.5034, 0.3657, 0.094], [0.4725, 0.3392, 0.0587], [0.4284, 0.3392, 0.0145], [0.4328, 0.3657, 0.0145], [-0.4328, 0.3657, 0.0145], [-0.4284, 0.3392, 0.0145], [-0.4725, 0.3392, 0.0587], [0.4637, 0.3392, 0.0101], [0.4681, 0.3657, 0.0057], [0.4328, 0.3657, 0.0145], [-0.4637, 0.3392, 0.0101], [-0.4284, 0.3392, 0.0145], [-0.4328, 0.3657, 0.0145], [0.4769, 0.3392, -0.0297], [0.4814, 0.3657, -0.0297], [0.4681, 0.3657, 0.0057], [-0.477, 0.3392, -0.0297], [-0.4637, 0.3392, 0.0101], [-0.4681, 0.3657, 0.0057], [0.4769, 0.3392, -0.0297], [0.4593, 0.3392, -0.0473], [0.4593, 0.3657, -0.0473], [-0.4593, 0.3657, -0.0473], [-0.4593, 0.3392, -0.0473], [-0.477, 0.3392, -0.0297], [0.4593, 0.3392, -0.0473], [0.499, 0.3039, -0.0517], [0.499, 0.3348, -0.0473], [-0.499, 0.3348, -0.0473], [-0.499, 0.3039, -0.0517], [-0.4593, 0.3392, -0.0473], [0.5785, 0.3878, 0.1558], [0.5344, 0.348, 0.1337], [0.5388, 0.3789, 0.1249], [-0.5388, 0.3789, 0.1249], [-0.5344, 0.348, 0.1337], [-0.5785, 0.3878, 0.1558], [0.6624, 0.4319, 0.1647], [0.5785, 0.3878, 0.1558], [0.5874, 0.4187, 0.147], [-0.5874, 0.4187, 0.147], [-0.5785, 0.3878, 0.1558], [-0.6624, 0.4319, 0.1647], [0.6978, 0.4364, 0.1028], [0.6624, 0.4319, 0.1647], [0.6713, 0.4584, 0.1558], [-0.6713, 0.4584, 0.1558], [-0.6624, 0.4319, 0.1647], [-0.6978, 0.4364, 0.1028], [0.6978, 0.4364, 0.1028], [0.711, 0.4628, 0.0984], [0.6845, 0.4584, 0.0101], [-0.6978, 0.4364, 0.1028], [-0.6713, 0.4364, 0.0145], [-0.6845, 0.4584, 0.0101], [0.6713, 0.4364, 0.0145], [0.6845, 0.4584, 0.0101], [0.5918, 0.4231, -0.0385], [-0.6713, 0.4364, 0.0145], [-0.5874, 0.3922, -0.0385], [-0.5918, 0.4231, -0.0385], [0.5874, 0.3922, -0.0385], [0.5918, 0.4231, -0.0385], [0.499, 0.3348, -0.0473], [-0.5874, 0.3922, -0.0385], [-0.499, 0.3039, -0.0517], [-0.499, 0.3348, -0.0473], [0.4814, 0.3657, -0.0297], [0.5299, 0.3745, -0.0032], [0.5034, 0.3701, 0.0233], [-0.4814, 0.3657, -0.0297], [-0.4681, 0.3657, 0.0057], [-0.5034, 0.3701, 0.0233], [0.5299, 0.3745, -0.0032], [0.5653, 0.3922, 0.0322], [0.5432, 0.3834, 0.0587], [-0.5299, 0.3745, -0.0032], [-0.5034, 0.3701, 0.0233], [-0.5432, 0.3834, 0.0587], [0.5432, 0.3834, 0.0587], [0.5653, 0.3922, 0.0322], [0.5962, 0.401, 0.0675], [-0.5962, 0.401, 0.0675], [-0.5653, 0.3922, 0.0322], [-0.5432, 0.3834, 0.0587], [0.5962, 0.401, 0.0675], [0.6271, 0.4054, 0.0808], [0.6139, 0.4054, 0.1161], [-0.5962, 0.401, 0.0675], [-0.5741, 0.3966, 0.094], [-0.6139, 0.4054, 0.1161], [0.5874, 0.4187, 0.147], [0.5388, 0.3789, 0.1249], [0.5741, 0.3966, 0.094], [-0.5741, 0.3966, 0.094], [-0.5388, 0.3789, 0.1249], [-0.5874, 0.4187, 0.147], [0.5432, 0.3834, 0.0587], [0.5741, 0.3966, 0.094], [0.5388, 0.3789, 0.1249], [-0.5432, 0.3834, 0.0587], [-0.5034, 0.3657, 0.094], [-0.5388, 0.3789, 0.1249], [0.4769, 0.3657, 0.0587], [0.5034, 0.3701, 0.0233], [0.5432, 0.3834, 0.0587], [-0.477, 0.3657, 0.0587], [-0.5034, 0.3657, 0.094], [-0.5432, 0.3834, 0.0587], [0.4681, 0.3657, 0.0057], [0.5034, 0.3701, 0.0233], [0.4769, 0.3657, 0.0587], [-0.477, 0.3657, 0.0587], [-0.5034, 0.3701, 0.0233], [-0.4681, 0.3657, 0.0057], [0.499, 0.3348, -0.0473], [0.5299, 0.3745, -0.0032], [0.4814, 0.3657, -0.0297], [-0.499, 0.3348, -0.0473], [-0.4593, 0.3657, -0.0473], [-0.4814, 0.3657, -0.0297], [0.5918, 0.4231, -0.0385], [0.5653, 0.3922, 0.0322], [0.5299, 0.3745, -0.0032], [-0.5299, 0.3745, -0.0032], [-0.5653, 0.3922, 0.0322], [-0.5918, 0.4231, -0.0385], [0.5962, 0.401, 0.0675], [0.5653, 0.3922, 0.0322], [0.5918, 0.4231, -0.0385], [-0.5962, 0.401, 0.0675], [-0.6845, 0.4584, 0.0101], [-0.5918, 0.4231, -0.0385], [0.6271, 0.4054, 0.0808], [0.5962, 0.401, 0.0675], [0.6845, 0.4584, 0.0101], [-0.6271, 0.4054, 0.0808], [-0.711, 0.4628, 0.0984], [-0.6845, 0.4584, 0.0101], [0.6713, 0.4584, 0.1558], [0.6139, 0.4054, 0.1161], [0.6271, 0.4054, 0.0808], [-0.6271, 0.4054, 0.0808], [-0.6139, 0.4054, 0.1161], [-0.6713, 0.4584, 0.1558], [0.5874, 0.3701, -0.0959], [0.4372, 0.2553, -0.118], [0.446, 0.3701, -0.1091], [-0.446, 0.3701, -0.1091], [-0.4372, 0.2553, -0.118], [-0.5874, 0.3701, -0.0959], [0.7243, 0.4275, -0.0076], [0.5874, 0.3701, -0.0959], [0.5874, 0.4628, -0.0871], [-0.5874, 0.4628, -0.0871], [-0.5874, 0.3701, -0.0959], [-0.7243, 0.4275, -0.0076], [0.7243, 0.4275, -0.0076], [0.7419, 0.4849, -0.0076], [0.7728, 0.4673, 0.1293], [-0.7243, 0.4275, -0.0076], [-0.764, 0.4231, 0.1426], [-0.7728, 0.4673, 0.1293], [0.764, 0.4231, 0.1426], [0.7728, 0.4673, 0.1293], [0.7066, 0.4938, 0.2265], [-0.764, 0.4231, 0.1426], [-0.6978, 0.4231, 0.2486], [-0.7066, 0.4938, 0.2265], [0.6978, 0.4231, 0.2486], [0.7066, 0.4938, 0.2265], [0.5785, 0.4584, 0.2088], [-0.6978, 0.4231, 0.2486], [-0.5785, 0.3613, 0.2309], [-0.5785, 0.4584, 0.2088], [0.5785, 0.3613, 0.2309], [0.5785, 0.4584, 0.2088], [0.4858, 0.401, 0.1779], [-0.5785, 0.3613, 0.2309], [-0.5034, 0.3171, 0.1912], [-0.4858, 0.401, 0.1779], [0.5874, 0.4628, -0.0871], [0.446, 0.3701, -0.1091], [0.4858, 0.401, 0.1779], [-0.5874, 0.4628, -0.0871], [-0.5785, 0.4584, 0.2088], [-0.4858, 0.401, 0.1779], [0.5785, 0.4584, 0.2088], [0.7066, 0.4938, 0.2265], [0.7419, 0.4849, -0.0076], [-0.7419, 0.4849, -0.0076], [-0.7066, 0.4938, 0.2265], [-0.5785, 0.4584, 0.2088], [0.4637, 0.2994, 0.147], [0.5034, 0.3171, 0.1912], [0.4858, 0.401, 0.1779], [-0.4637, 0.2994, 0.147], [-0.4372, 0.4319, 0.1117], [-0.4858, 0.401, 0.1779], [0.4372, 0.4319, 0.1117], [0.4858, 0.401, 0.1779], [0.446, 0.3701, -0.1091], [-0.446, 0.3701, -0.1091], [-0.4858, 0.401, 0.1779], [-0.4372, 0.4319, 0.1117], [0.3356, 0.2774, -0.1091], [0.3621, 0.4275, -0.0429], [0.446, 0.3701, -0.1091], [-0.446, 0.3701, -0.1091], [-0.3621, 0.4275, -0.0429], [-0.3356, 0.2774, -0.1091]], "Sphere_GizmoGroup_": [[0.0, 0.3536, -0.3536], [0.0732, 0.1768, -0.4619], [0.0, 0.1913, -0.4619], [0.0, 0.5, -0.0], [0.1768, 0.4268, -0.1913], [0.0, 0.4619, -0.1913], [0.0, 0.3536, 0.3536], [0.1768, 0.4268, 0.1913], [0.0, 0.4619, 0.1913], [0.0, 0.1913, 0.4619], [-0.0, -0.0, 0.5], [0.0732, 0.1768, 0.4619], [0.0, -0.0, -0.5], [0.0, 0.1913, -0.4619], [0.0732, 0.1768, -0.4619], [0.0, 0.3536, -0.3536], [0.1768, 0.4268, -0.1913], [0.1353, 0.3266, -0.3536], [0.0, 0.5, -0.0], [0.1768, 0.4268, 0.1913], [0.1913, 0.4619, -0.0], [0.0, 0.1913, 0.4619], [0.1353, 0.3266, 0.3536], [0.0, 0.3536, 0.3536], [0.1353, 0.3266, 0.3536], [0.3266, 0.3266, 0.1913], [0.1768, 0.4268, 0.1913], [0.0732, 0.1768, 0.4619], [-0.0, -0.0, 0.5], [0.1353, 0.1353, 0.4619], [0.0, -0.0, -0.5], [0.0732, 0.1768, -0.4619], [0.1353, 0.1353, -0.4619], [0.1768, 0.4268, -0.1913], [0.25, 0.25, -0.3536], [0.1353, 0.3266, -0.3536], [0.1768, 0.4268, 0.1913], [0.3536, 0.3536, -0.0], [0.1913, 0.4619, -0.0], [0.0732, 0.1768, 0.4619], [0.25, 0.25, 0.3536], [0.1353, 0.3266, 0.3536], [0.1353, 0.3266, -0.3536], [0.1353, 0.1353, -0.4619], [0.0732, 0.1768, -0.4619], [0.1913, 0.4619, -0.0], [0.3266, 0.3266, -0.1913], [0.1768, 0.4268, -0.1913], [0.0, -0.0, -0.5], [0.1353, 0.1353, -0.4619], [0.1768, 0.0732, -0.4619], [0.3266, 0.3266, -0.1913], [0.3266, 0.1353, -0.3536], [0.25, 0.25, -0.3536], [0.3266, 0.3266, 0.1913], [0.4619, 0.1913, -0.0], [0.3536, 0.3536, -0.0], [0.1353, 0.1353, 0.4619], [0.3266, 0.1353, 0.3536], [0.25, 0.25, 0.3536], [0.25, 0.25, -0.3536], [0.1768, 0.0732, -0.4619], [0.1353, 0.1353, -0.4619], [0.3536, 0.3536, -0.0], [0.4268, 0.1768, -0.1913], [0.3266, 0.3266, -0.1913], [0.25, 0.25, 0.3536], [0.4268, 0.1768, 0.1913], [0.3266, 0.3266, 0.1913], [0.1353, 0.1353, 0.4619], [-0.0, -0.0, 0.5], [0.1768, 0.0732, 0.4619], [0.3266, 0.1353, 0.3536], [0.1913, -0.0, 0.4619], [0.3536, -0.0, 0.3536], [0.3266, 0.1353, -0.3536], [0.1913, -0.0, -0.4619], [0.1768, 0.0732, -0.4619], [0.4619, 0.1913, -0.0], [0.4619, -0.0, -0.1913], [0.4268, 0.1768, -0.1913], [0.3266, 0.1353, 0.3536], [0.4619, -0.0, 0.1913], [0.4268, 0.1768, 0.1913], [0.1768, 0.0732, 0.4619], [-0.0, -0.0, 0.5], [0.1913, -0.0, 0.4619], [0.0, -0.0, -0.5], [0.1768, 0.0732, -0.4619], [0.1913, -0.0, -0.4619], [0.4268, 0.1768, -0.1913], [0.3536, -0.0, -0.3536], [0.3266, 0.1353, -0.3536], [0.4619, 0.1913, -0.0], [0.4619, -0.0, 0.1913], [0.5, -0.0, -0.0], [0.1913, -0.0, -0.4619], [0.3266, -0.1353, -0.3536], [0.1768, -0.0732, -0.4619], [0.5, -0.0, -0.0], [0.4268, -0.1768, -0.1913], [0.4619, -0.0, -0.1913], [0.4619, -0.0, 0.1913], [0.3266, -0.1353, 0.3536], [0.4268, -0.1768, 0.1913], [0.1913, -0.0, 0.4619], [-0.0, -0.0, 0.5], [0.1768, -0.0732, 0.4619], [0.0, -0.0, -0.5], [0.1913, -0.0, -0.4619], [0.1768, -0.0732, -0.4619], [0.4619, -0.0, -0.1913], [0.3266, -0.1353, -0.3536], [0.3536, -0.0, -0.3536], [0.4619, -0.0, 0.1913], [0.4619, -0.1913, -0.0], [0.5, -0.0, -0.0], [0.1913, -0.0, 0.4619], [0.3266, -0.1353, 0.3536], [0.3536, -0.0, 0.3536], [0.1768, -0.0732, 0.4619], [-0.0, -0.0, 0.5], [0.1353, -0.1353, 0.4619], [0.0, -0.0, -0.5], [0.1768, -0.0732, -0.4619], [0.1353, -0.1353, -0.4619], [0.4268, -0.1768, -0.1913], [0.25, -0.25, -0.3536], [0.3266, -0.1353, -0.3536], [0.4268, -0.1768, 0.1913], [0.3536, -0.3536, -0.0], [0.4619, -0.1913, -0.0], [0.1768, -0.0732, 0.4619], [0.25, -0.25, 0.3536], [0.3266, -0.1353, 0.3536], [0.3266, -0.1353, -0.3536], [0.1353, -0.1353, -0.4619], [0.1768, -0.0732, -0.4619], [0.4619, -0.1913, -0.0], [0.3266, -0.3266, -0.1913], [0.4268, -0.1768, -0.1913], [0.4268, -0.1768, 0.1913], [0.25, -0.25, 0.3536], [0.3266, -0.3266, 0.1913], [0.3266, -0.3266, -0.1913], [0.1353, -0.3266, -0.3536], [0.25, -0.25, -0.3536], [0.3266, -0.3266, 0.1913], [0.1913, -0.4619, -0.0], [0.3536, -0.3536, -0.0], [0.1353, -0.1353, 0.4619], [0.1353, -0.3266, 0.3536], [0.25, -0.25, 0.3536], [0.1353, -0.1353, -0.4619], [0.1353, -0.3266, -0.3536], [0.0732, -0.1768, -0.4619], [0.3266, -0.3266, -0.1913], [0.1913, -0.4619, -0.0], [0.1768, -0.4268, -0.1913], [0.3266, -0.3266, 0.1913], [0.1353, -0.3266, 0.3536], [0.1768, -0.4268, 0.1913], [0.1353, -0.1353, 0.4619], [-0.0, -0.0, 0.5], [0.0732, -0.1768, 0.4619], [0.0, -0.0, -0.5], [0.1353, -0.1353, -0.4619], [0.0732, -0.1768, -0.4619], [0.0732, -0.1768, -0.4619], [-0.0, -0.3536, -0.3536], [-0.0, -0.1913, -0.4619], [0.1913, -0.4619, -0.0], [-0.0, -0.4619, -0.1913], [0.1768, -0.4268, -0.1913], [0.1353, -0.3266, 0.3536], [-0.0, -0.4619, 0.1913], [0.1768, -0.4268, 0.1913], [0.0732, -0.1768, 0.4619], [-0.0, -0.0, 0.5], [-0.0, -0.1913, 0.4619], [0.0, -0.0, -0.5], [0.0732, -0.1768, -0.4619], [-0.0, -0.1913, -0.4619], [0.1768, -0.4268, -0.1913], [-0.0, -0.3536, -0.3536], [0.1353, -0.3266, -0.3536], [0.1768, -0.4268, 0.1913], [-0.0, -0.5, -0.0], [0.1913, -0.4619, -0.0], [0.0732, -0.1768, 0.4619], [-0.0, -0.3536, 0.3536], [0.1353, -0.3266, 0.3536], [-0.0, -0.4619, -0.1913], [-0.1913, -0.4619, -0.0], [-0.1768, -0.4268, -0.1913], [-0.0, -0.3536, 0.3536], [-0.1768, -0.4268, 0.1913], [-0.0, -0.4619, 0.1913], [-0.0, -0.1913, 0.4619], [-0.0, -0.0, 0.5], [-0.0732, -0.1768, 0.4619], [0.0, -0.0, -0.5], [-0.0, -0.1913, -0.4619], [-0.0732, -0.1768, -0.4619], [-0.0, -0.4619, -0.1913], [-0.1353, -0.3266, -0.3536], [-0.0, -0.3536, -0.3536], [-0.0, -0.5, -0.0], [-0.1768, -0.4268, 0.1913], [-0.1913, -0.4619, -0.0], [-0.0, -0.1913, 0.4619], [-0.1353, -0.3266, 0.3536], [-0.0, -0.3536, 0.3536], [-0.0, -0.3536, -0.3536], [-0.0732, -0.1768, -0.4619], [-0.0, -0.1913, -0.4619], [0.0, -0.0, -0.5], [-0.0732, -0.1768, -0.4619], [-0.1353, -0.1353, -0.4619], [-0.1768, -0.4268, -0.1913], [-0.25, -0.25, -0.3536], [-0.1353, -0.3266, -0.3536], [-0.1768, -0.4268, 0.1913], [-0.3536, -0.3536, -0.0], [-0.1913, -0.4619, -0.0], [-0.0732, -0.1768, 0.4619], [-0.25, -0.25, 0.3536], [-0.1353, -0.3266, 0.3536], [-0.0732, -0.1768, -0.4619], [-0.25, -0.25, -0.3536], [-0.1353, -0.1353, -0.4619], [-0.1913, -0.4619, -0.0], [-0.3266, -0.3266, -0.1913], [-0.1768, -0.4268, -0.1913], [-0.1353, -0.3266, 0.3536], [-0.3266, -0.3266, 0.1913], [-0.1768, -0.4268, 0.1913], [-0.0732, -0.1768, 0.4619], [-0.0, -0.0, 0.5], [-0.1353, -0.1353, 0.4619], [-0.3266, -0.3266, 0.1913], [-0.4619, -0.1913, -0.0], [-0.3536, -0.3536, -0.0], [-0.1353, -0.1353, 0.4619], [-0.3266, -0.1353, 0.3536], [-0.25, -0.25, 0.3536], [-0.1353, -0.1353, -0.4619], [-0.3266, -0.1353, -0.3536], [-0.1768, -0.0732, -0.4619], [-0.3536, -0.3536, -0.0], [-0.4268, -0.1768, -0.1913], [-0.3266, -0.3266, -0.1913], [-0.25, -0.25, 0.3536], [-0.4268, -0.1768, 0.1913], [-0.3266, -0.3266, 0.1913], [-0.1353, -0.1353, 0.4619], [-0.0, -0.0, 0.5], [-0.1768, -0.0732, 0.4619], [0.0, -0.0, -0.5], [-0.1353, -0.1353, -0.4619], [-0.1768, -0.0732, -0.4619], [-0.3266, -0.3266, -0.1913], [-0.3266, -0.1353, -0.3536], [-0.25, -0.25, -0.3536], [-0.3266, -0.1353, -0.3536], [-0.1913, 0.0, -0.4619], [-0.1768, -0.0732, -0.4619], [-0.4619, -0.1913, -0.0], [-0.4619, 0.0, -0.1913], [-0.4268, -0.1768, -0.1913], [-0.4268, -0.1768, 0.1913], [-0.3536, 0.0, 0.3536], [-0.4619, 0.0, 0.1913], [-0.1768, -0.0732, 0.4619], [-0.0, -0.0, 0.5], [-0.1913, 0.0, 0.4619], [0.0, -0.0, -0.5], [-0.1768, -0.0732, -0.4619], [-0.1913, 0.0, -0.4619], [-0.4268, -0.1768, -0.1913], [-0.3536, 0.0, -0.3536], [-0.3266, -0.1353, -0.3536], [-0.4619, -0.1913, -0.0], [-0.4619, 0.0, 0.1913], [-0.5, 0.0, -0.0], [-0.1768, -0.0732, 0.4619], [-0.3536, 0.0, 0.3536], [-0.3266, -0.1353, 0.3536], [-0.4619, 0.0, 0.1913], [-0.3266, 0.1353, 0.3536], [-0.4268, 0.1768, 0.1913], [-0.1913, 0.0, 0.4619], [-0.0, -0.0, 0.5], [-0.1768, 0.0732, 0.4619], [0.0, -0.0, -0.5], [-0.1913, 0.0, -0.4619], [-0.1768, 0.0732, -0.4619], [-0.4619, 0.0, -0.1913], [-0.3266, 0.1353, -0.3536], [-0.3536, 0.0, -0.3536], [-0.5, 0.0, -0.0], [-0.4268, 0.1768, 0.1913], [-0.4619, 0.1913, -0.0], [-0.1913, 0.0, 0.4619], [-0.3266, 0.1353, 0.3536], [-0.3536, 0.0, 0.3536], [-0.3536, 0.0, -0.3536], [-0.1768, 0.0732, -0.4619], [-0.1913, 0.0, -0.4619], [-0.5, 0.0, -0.0], [-0.4268, 0.1768, -0.1913], [-0.4619, 0.0, -0.1913], [0.0, -0.0, -0.5], [-0.1768, 0.0732, -0.4619], [-0.1353, 0.1353, -0.4619], [-0.4268, 0.1768, -0.1913], [-0.25, 0.25, -0.3536], [-0.3266, 0.1353, -0.3536], [-0.4619, 0.1913, -0.0], [-0.3266, 0.3266, 0.1913], [-0.3536, 0.3536, -0.0], [-0.1768, 0.0732, 0.4619], [-0.25, 0.25, 0.3536], [-0.3266, 0.1353, 0.3536], [-0.3266, 0.1353, -0.3536], [-0.1353, 0.1353, -0.4619], [-0.1768, 0.0732, -0.4619], [-0.4619, 0.1913, -0.0], [-0.3266, 0.3266, -0.1913], [-0.4268, 0.1768, -0.1913], [-0.4268, 0.1768, 0.1913], [-0.25, 0.25, 0.3536], [-0.3266, 0.3266, 0.1913], [-0.1768, 0.0732, 0.4619], [-0.0, -0.0, 0.5], [-0.1353, 0.1353, 0.4619], [-0.1353, 0.1353, 0.4619], [-0.1353, 0.3266, 0.3536], [-0.25, 0.25, 0.3536], [-0.25, 0.25, -0.3536], [-0.0732, 0.1768, -0.4619], [-0.1353, 0.1353, -0.4619], [-0.3536, 0.3536, -0.0], [-0.1768, 0.4268, -0.1913], [-0.3266, 0.3266, -0.1913], [-0.3266, 0.3266, 0.1913], [-0.1353, 0.3266, 0.3536], [-0.1768, 0.4268, 0.1913], [-0.1353, 0.1353, 0.4619], [-0.0, -0.0, 0.5], [-0.0732, 0.1768, 0.4619], [0.0, -0.0, -0.5], [-0.1353, 0.1353, -0.4619], [-0.0732, 0.1768, -0.4619], [-0.3266, 0.3266, -0.1913], [-0.1353, 0.3266, -0.3536], [-0.25, 0.25, -0.3536], [-0.3536, 0.3536, -0.0], [-0.1768, 0.4268, 0.1913], [-0.1913, 0.4619, -0.0], [-0.1353, 0.3266, -0.3536], [0.0, 0.1913, -0.4619], [-0.0732, 0.1768, -0.4619], [-0.1913, 0.4619, -0.0], [0.0, 0.4619, -0.1913], [-0.1768, 0.4268, -0.1913], [-0.1768, 0.4268, 0.1913], [0.0, 0.3536, 0.3536], [0.0, 0.4619, 0.1913], [-0.0732, 0.1768, 0.4619], [-0.0, -0.0, 0.5], [0.0, 0.1913, 0.4619], [0.0, -0.0, -0.5], [-0.0732, 0.1768, -0.4619], [0.0, 0.1913, -0.4619], [-0.1768, 0.4268, -0.1913], [0.0, 0.3536, -0.3536], [-0.1353, 0.3266, -0.3536], [-0.1913, 0.4619, -0.0], [0.0, 0.4619, 0.1913], [0.0, 0.5, -0.0], [-0.0732, 0.1768, 0.4619], [0.0, 0.3536, 0.3536], [-0.1353, 0.3266, 0.3536], [0.0, 0.3536, -0.3536], [0.1353, 0.3266, -0.3536], [0.0732, 0.1768, -0.4619], [0.0, 0.5, -0.0], [0.1913, 0.4619, -0.0], [0.1768, 0.4268, -0.1913], [0.0, 0.3536, 0.3536], [0.1353, 0.3266, 0.3536], [0.1768, 0.4268, 0.1913], [0.0, 0.3536, -0.3536], [0.0, 0.4619, -0.1913], [0.1768, 0.4268, -0.1913], [0.0, 0.5, -0.0], [0.0, 0.4619, 0.1913], [0.1768, 0.4268, 0.1913], [0.0, 0.1913, 0.4619], [0.0732, 0.1768, 0.4619], [0.1353, 0.3266, 0.3536], [0.1353, 0.3266, 0.3536], [0.25, 0.25, 0.3536], [0.3266, 0.3266, 0.1913], [0.1768, 0.4268, -0.1913], [0.3266, 0.3266, -0.1913], [0.25, 0.25, -0.3536], [0.1768, 0.4268, 0.1913], [0.3266, 0.3266, 0.1913], [0.3536, 0.3536, -0.0], [0.0732, 0.1768, 0.4619], [0.1353, 0.1353, 0.4619], [0.25, 0.25, 0.3536], [0.1353, 0.3266, -0.3536], [0.25, 0.25, -0.3536], [0.1353, 0.1353, -0.4619], [0.1913, 0.4619, -0.0], [0.3536, 0.3536, -0.0], [0.3266, 0.3266, -0.1913], [0.3266, 0.3266, -0.1913], [0.4268, 0.1768, -0.1913], [0.3266, 0.1353, -0.3536], [0.3266, 0.3266, 0.1913], [0.4268, 0.1768, 0.1913], [0.4619, 0.1913, -0.0], [0.1353, 0.1353, 0.4619], [0.1768, 0.0732, 0.4619], [0.3266, 0.1353, 0.3536], [0.25, 0.25, -0.3536], [0.3266, 0.1353, -0.3536], [0.1768, 0.0732, -0.4619], [0.3536, 0.3536, -0.0], [0.4619, 0.1913, -0.0], [0.4268, 0.1768, -0.1913], [0.25, 0.25, 0.3536], [0.3266, 0.1353, 0.3536], [0.4268, 0.1768, 0.1913], [0.3266, 0.1353, 0.3536], [0.1768, 0.0732, 0.4619], [0.1913, -0.0, 0.4619], [0.3266, 0.1353, -0.3536], [0.3536, -0.0, -0.3536], [0.1913, -0.0, -0.4619], [0.4619, 0.1913, -0.0], [0.5, -0.0, -0.0], [0.4619, -0.0, -0.1913], [0.3266, 0.1353, 0.3536], [0.3536, -0.0, 0.3536], [0.4619, -0.0, 0.1913], [0.4268, 0.1768, -0.1913], [0.4619, -0.0, -0.1913], [0.3536, -0.0, -0.3536], [0.4619, 0.1913, -0.0], [0.4268, 0.1768, 0.1913], [0.4619, -0.0, 0.1913], [0.1913, -0.0, -0.4619], [0.3536, -0.0, -0.3536], [0.3266, -0.1353, -0.3536], [0.5, -0.0, -0.0], [0.4619, -0.1913, -0.0], [0.4268, -0.1768, -0.1913], [0.4619, -0.0, 0.1913], [0.3536, -0.0, 0.3536], [0.3266, -0.1353, 0.3536], [0.4619, -0.0, -0.1913], [0.4268, -0.1768, -0.1913], [0.3266, -0.1353, -0.3536], [0.4619, -0.0, 0.1913], [0.4268, -0.1768, 0.1913], [0.4619, -0.1913, -0.0], [0.1913, -0.0, 0.4619], [0.1768, -0.0732, 0.4619], [0.3266, -0.1353, 0.3536], [0.4268, -0.1768, -0.1913], [0.3266, -0.3266, -0.1913], [0.25, -0.25, -0.3536], [0.4268, -0.1768, 0.1913], [0.3266, -0.3266, 0.1913], [0.3536, -0.3536, -0.0], [0.1768, -0.0732, 0.4619], [0.1353, -0.1353, 0.4619], [0.25, -0.25, 0.3536], [0.3266, -0.1353, -0.3536], [0.25, -0.25, -0.3536], [0.1353, -0.1353, -0.4619], [0.4619, -0.1913, -0.0], [0.3536, -0.3536, -0.0], [0.3266, -0.3266, -0.1913], [0.4268, -0.1768, 0.1913], [0.3266, -0.1353, 0.3536], [0.25, -0.25, 0.3536], [0.3266, -0.3266, -0.1913], [0.1768, -0.4268, -0.1913], [0.1353, -0.3266, -0.3536], [0.3266, -0.3266, 0.1913], [0.1768, -0.4268, 0.1913], [0.1913, -0.4619, -0.0], [0.1353, -0.1353, 0.4619], [0.0732, -0.1768, 0.4619], [0.1353, -0.3266, 0.3536], [0.1353, -0.1353, -0.4619], [0.25, -0.25, -0.3536], [0.1353, -0.3266, -0.3536], [0.3266, -0.3266, -0.1913], [0.3536, -0.3536, -0.0], [0.1913, -0.4619, -0.0], [0.3266, -0.3266, 0.1913], [0.25, -0.25, 0.3536], [0.1353, -0.3266, 0.3536], [0.0732, -0.1768, -0.4619], [0.1353, -0.3266, -0.3536], [-0.0, -0.3536, -0.3536], [0.1913, -0.4619, -0.0], [-0.0, -0.5, -0.0], [-0.0, -0.4619, -0.1913], [0.1353, -0.3266, 0.3536], [-0.0, -0.3536, 0.3536], [-0.0, -0.4619, 0.1913], [0.1768, -0.4268, -0.1913], [-0.0, -0.4619, -0.1913], [-0.0, -0.3536, -0.3536], [0.1768, -0.4268, 0.1913], [-0.0, -0.4619, 0.1913], [-0.0, -0.5, -0.0], [0.0732, -0.1768, 0.4619], [-0.0, -0.1913, 0.4619], [-0.0, -0.3536, 0.3536], [-0.0, -0.4619, -0.1913], [-0.0, -0.5, -0.0], [-0.1913, -0.4619, -0.0], [-0.0, -0.3536, 0.3536], [-0.1353, -0.3266, 0.3536], [-0.1768, -0.4268, 0.1913], [-0.0, -0.4619, -0.1913], [-0.1768, -0.4268, -0.1913], [-0.1353, -0.3266, -0.3536], [-0.0, -0.5, -0.0], [-0.0, -0.4619, 0.1913], [-0.1768, -0.4268, 0.1913], [-0.0, -0.1913, 0.4619], [-0.0732, -0.1768, 0.4619], [-0.1353, -0.3266, 0.3536], [-0.0, -0.3536, -0.3536], [-0.1353, -0.3266, -0.3536], [-0.0732, -0.1768, -0.4619], [-0.1768, -0.4268, -0.1913], [-0.3266, -0.3266, -0.1913], [-0.25, -0.25, -0.3536], [-0.1768, -0.4268, 0.1913], [-0.3266, -0.3266, 0.1913], [-0.3536, -0.3536, -0.0], [-0.0732, -0.1768, 0.4619], [-0.1353, -0.1353, 0.4619], [-0.25, -0.25, 0.3536], [-0.0732, -0.1768, -0.4619], [-0.1353, -0.3266, -0.3536], [-0.25, -0.25, -0.3536], [-0.1913, -0.4619, -0.0], [-0.3536, -0.3536, -0.0], [-0.3266, -0.3266, -0.1913], [-0.1353, -0.3266, 0.3536], [-0.25, -0.25, 0.3536], [-0.3266, -0.3266, 0.1913], [-0.3266, -0.3266, 0.1913], [-0.4268, -0.1768, 0.1913], [-0.4619, -0.1913, -0.0], [-0.1353, -0.1353, 0.4619], [-0.1768, -0.0732, 0.4619], [-0.3266, -0.1353, 0.3536], [-0.1353, -0.1353, -0.4619], [-0.25, -0.25, -0.3536], [-0.3266, -0.1353, -0.3536], [-0.3536, -0.3536, -0.0], [-0.4619, -0.1913, -0.0], [-0.4268, -0.1768, -0.1913], [-0.25, -0.25, 0.3536], [-0.3266, -0.1353, 0.3536], [-0.4268, -0.1768, 0.1913], [-0.3266, -0.3266, -0.1913], [-0.4268, -0.1768, -0.1913], [-0.3266, -0.1353, -0.3536], [-0.3266, -0.1353, -0.3536], [-0.3536, 0.0, -0.3536], [-0.1913, 0.0, -0.4619], [-0.4619, -0.1913, -0.0], [-0.5, 0.0, -0.0], [-0.4619, 0.0, -0.1913], [-0.4268, -0.1768, 0.1913], [-0.3266, -0.1353, 0.3536], [-0.3536, 0.0, 0.3536], [-0.4268, -0.1768, -0.1913], [-0.4619, 0.0, -0.1913], [-0.3536, 0.0, -0.3536], [-0.4619, -0.1913, -0.0], [-0.4268, -0.1768, 0.1913], [-0.4619, 0.0, 0.1913], [-0.1768, -0.0732, 0.4619], [-0.1913, 0.0, 0.4619], [-0.3536, 0.0, 0.3536], [-0.4619, 0.0, 0.1913], [-0.3536, 0.0, 0.3536], [-0.3266, 0.1353, 0.3536], [-0.4619, 0.0, -0.1913], [-0.4268, 0.1768, -0.1913], [-0.3266, 0.1353, -0.3536], [-0.5, 0.0, -0.0], [-0.4619, 0.0, 0.1913], [-0.4268, 0.1768, 0.1913], [-0.1913, 0.0, 0.4619], [-0.1768, 0.0732, 0.4619], [-0.3266, 0.1353, 0.3536], [-0.3536, 0.0, -0.3536], [-0.3266, 0.1353, -0.3536], [-0.1768, 0.0732, -0.4619], [-0.5, 0.0, -0.0], [-0.4619, 0.1913, -0.0], [-0.4268, 0.1768, -0.1913], [-0.4268, 0.1768, -0.1913], [-0.3266, 0.3266, -0.1913], [-0.25, 0.25, -0.3536], [-0.4619, 0.1913, -0.0], [-0.4268, 0.1768, 0.1913], [-0.3266, 0.3266, 0.1913], [-0.1768, 0.0732, 0.4619], [-0.1353, 0.1353, 0.4619], [-0.25, 0.25, 0.3536], [-0.3266, 0.1353, -0.3536], [-0.25, 0.25, -0.3536], [-0.1353, 0.1353, -0.4619], [-0.4619, 0.1913, -0.0], [-0.3536, 0.3536, -0.0], [-0.3266, 0.3266, -0.1913], [-0.4268, 0.1768, 0.1913], [-0.3266, 0.1353, 0.3536], [-0.25, 0.25, 0.3536], [-0.1353, 0.1353, 0.4619], [-0.0732, 0.1768, 0.4619], [-0.1353, 0.3266, 0.3536], [-0.25, 0.25, -0.3536], [-0.1353, 0.3266, -0.3536], [-0.0732, 0.1768, -0.4619], [-0.3536, 0.3536, -0.0], [-0.1913, 0.4619, -0.0], [-0.1768, 0.4268, -0.1913], [-0.3266, 0.3266, 0.1913], [-0.25, 0.25, 0.3536], [-0.1353, 0.3266, 0.3536], [-0.3266, 0.3266, -0.1913], [-0.1768, 0.4268, -0.1913], [-0.1353, 0.3266, -0.3536], [-0.3536, 0.3536, -0.0], [-0.3266, 0.3266, 0.1913], [-0.1768, 0.4268, 0.1913], [-0.1353, 0.3266, -0.3536], [0.0, 0.3536, -0.3536], [0.0, 0.1913, -0.4619], [-0.1913, 0.4619, -0.0], [0.0, 0.5, -0.0], [0.0, 0.4619, -0.1913], [-0.1768, 0.4268, 0.1913], [-0.1353, 0.3266, 0.3536], [0.0, 0.3536, 0.3536], [-0.1768, 0.4268, -0.1913], [0.0, 0.4619, -0.1913], [0.0, 0.3536, -0.3536], [-0.1913, 0.4619, -0.0], [-0.1768, 0.4268, 0.1913], [0.0, 0.4619, 0.1913], [-0.0732, 0.1768, 0.4619], [0.0, 0.1913, 0.4619], [0.0, 0.3536, 0.3536]], "SimpleDeform_GizmoGroup_": [[-0.5418, -0.9516, -0.7729], [0.5408, -0.9609, -0.961], [0.5411, -0.9515, -0.7726], [-0.5418, 0.0521, 0.7324], [0.544, -0.1063, 0.6365], [0.5443, 0.0554, 0.7334], [-0.5418, -0.815, -0.2267], [-0.3252, -0.8783, -0.4038], [-0.3252, -0.8149, -0.2265], [-0.5418, 0.2221, 0.8132], [0.5443, 0.0554, 0.7334], [0.5446, 0.2259, 0.8139], [-0.5418, -0.3997, 0.3962], [-0.3252, -0.5256, 0.2568], [-0.3252, -0.3993, 0.3965], [-0.5418, 0.4276, -0.313], [-0.5418, -0.1093, 0.6353], [-0.5418, 0.4936, -0.2639], [-0.5418, 0.4936, -0.2639], [-0.5418, 0.0521, 0.7324], [-0.5418, 0.5641, -0.2215], [-0.5418, 0.6384, -0.1862], [-0.5418, 0.0521, 0.7324], [-0.5418, 0.2221, 0.8132], [-0.5418, 0.1217, -0.961], [-0.5418, -0.9516, -0.7729], [-0.5418, 0.1257, -0.8789], [-0.5418, 0.7157, -0.1583], [-0.5418, 0.5819, 0.9231], [-0.5418, 0.7955, -0.1382], [0.3243, -0.8145, -0.2258], [0.5418, -0.8779, -0.4032], [0.5421, -0.8143, -0.2256], [-0.5418, -0.7347, -0.0564], [-0.3252, -0.8149, -0.2265], [-0.3252, -0.7344, -0.0561], [-0.5418, 0.7681, 0.9512], [0.5452, 0.5863, 0.9231], [0.5455, 0.7728, 0.9507], [0.5408, -0.9609, -0.961], [-0.5418, 0.1217, -0.961], [0.5408, 0.1217, -0.961], [0.3243, -0.9392, -0.6896], [-0.3252, -0.9392, -0.6892], [-0.5418, -0.9516, -0.7729], [-0.5418, 0.5819, 0.9231], [0.5449, 0.4034, 0.8774], [0.5452, 0.5863, 0.9231], [-0.5418, -0.8784, -0.404], [-0.3252, -0.924, -0.5866], [-0.3252, -0.8783, -0.4038], [0.5408, 0.7955, -0.1382], [-0.5418, 0.7157, -0.1583], [-0.5418, 0.7955, -0.1382], [0.5408, 0.9589, -0.1217], [-0.5418, 0.9561, 0.9609], [0.5459, 0.9611, 0.9599], [0.5408, 0.4936, -0.2639], [-0.5418, 0.5641, -0.2215], [0.5408, 0.5641, -0.2215], [0.5408, 0.4276, -0.313], [-0.5418, 0.4936, -0.2639], [0.5408, 0.4936, -0.2639], [0.5408, 0.6384, -0.1862], [-0.5418, 0.7157, -0.1583], [0.5408, 0.7157, -0.1583], [-0.5418, 0.1378, -0.7975], [-0.5418, -0.8784, -0.404], [-0.5418, 0.1577, -0.7178], [0.5408, 0.2205, -0.5659], [-0.5418, 0.2627, -0.4954], [0.5408, 0.2627, -0.4954], [-0.5418, 0.1854, -0.6403], [-0.5418, -0.7347, -0.0564], [-0.5418, 0.2205, -0.5659], [-0.5418, 0.7955, -0.1382], [-0.5418, 0.7681, 0.9512], [-0.5418, 0.8768, -0.1259], [-0.5418, 0.1257, -0.8789], [-0.5418, -0.9241, -0.5867], [-0.5418, 0.1378, -0.7975], [-0.5418, 0.2627, -0.4954], [-0.5418, -0.526, 0.2566], [-0.5418, 0.3116, -0.4293], [0.5408, 0.5641, -0.2215], [-0.5418, 0.6384, -0.1862], [0.5408, 0.6384, -0.1862], [-0.5418, 0.6384, -0.1862], [-0.5418, 0.3993, 0.877], [-0.5418, 0.7157, -0.1583], [-0.5418, 0.1854, -0.6403], [-0.5418, -0.8784, -0.404], [-0.5418, -0.815, -0.2267], [0.5408, 0.2627, -0.4954], [-0.5418, 0.3116, -0.4293], [0.5408, 0.3116, -0.4293], [0.5408, 0.8768, -0.1259], [-0.5418, 0.7955, -0.1382], [-0.5418, 0.8768, -0.1259], [0.5408, 0.3116, -0.4293], [-0.5418, 0.3668, -0.3683], [0.5408, 0.3668, -0.3683], [0.5408, 0.1217, -0.961], [-0.5418, 0.1257, -0.8789], [0.5408, 0.1257, -0.8789], [0.5408, 0.8768, -0.1259], [-0.5418, 0.9589, -0.1217], [0.5408, 0.9589, -0.1217], [0.5408, 0.1378, -0.7975], [-0.5418, 0.1577, -0.7178], [0.5408, 0.1577, -0.7178], [0.5408, 0.1854, -0.6403], [-0.5418, 0.2205, -0.5659], [0.5408, 0.2205, -0.5659], [0.3243, -0.398, 0.3974], [0.543, -0.5242, 0.258], [0.5433, -0.3976, 0.3976], [0.5408, 0.1378, -0.7975], [-0.5418, 0.1257, -0.8789], [-0.5418, 0.1378, -0.7975], [0.5408, 0.4276, -0.313], [-0.5418, 0.3668, -0.3683], [-0.5418, 0.4276, -0.313], [-0.5418, 0.2627, -0.4954], [-0.5418, -0.7347, -0.0564], [-0.5418, -0.638, 0.1052], [-0.5418, 0.9561, 0.9609], [0.5455, 0.7728, 0.9507], [0.5459, 0.9611, 0.9599], [-0.5418, -0.638, 0.1052], [-0.3252, -0.7344, -0.0561], [-0.3252, -0.6377, 0.1055], [-0.5418, -0.526, 0.2566], [-0.3252, -0.6377, 0.1055], [-0.3252, -0.5256, 0.2568], [0.3243, -0.5246, 0.2577], [0.5427, -0.6366, 0.1065], [0.543, -0.5242, 0.258], [-0.5418, -0.1093, 0.6353], [0.5437, -0.2578, 0.5242], [0.544, -0.1063, 0.6365], [0.5408, 0.1577, -0.7178], [-0.5418, 0.1854, -0.6403], [0.5408, 0.1854, -0.6403], [-0.3252, -0.2897, 0.4961], [0.3243, -0.2897, 0.4955], [0.5437, -0.2578, 0.5242], [0.3243, -0.7338, -0.0554], [0.5421, -0.8143, -0.2256], [0.5424, -0.7336, -0.0552], [0.3243, -0.6369, 0.1063], [0.5424, -0.7336, -0.0552], [0.5427, -0.6366, 0.1065], [-0.5418, 0.3993, 0.877], [0.5446, 0.2259, 0.8139], [0.5449, 0.4034, 0.8774], [-0.5418, 0.3116, -0.4293], [-0.5418, -0.3997, 0.3962], [-0.5418, 0.3668, -0.3683], [-0.5418, 0.8768, -0.1259], [-0.5418, 0.9561, 0.9609], [-0.5418, 0.9589, -0.1217], [-0.5418, 0.4276, -0.313], [-0.5418, -0.3997, 0.3962], [-0.5418, -0.2603, 0.5229], [0.3243, -0.878, -0.4033], [0.5414, -0.9238, -0.5861], [0.5418, -0.8779, -0.4032], [0.3243, -0.9392, 0.9524], [0.3243, -0.7338, -0.0554], [0.3243, -0.6369, 0.1063], [0.3243, -0.2897, 0.9524], [-0.3252, -0.9392, 0.9524], [0.3243, -0.9392, 0.9524], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.6377, 0.1055], [-0.3252, -0.7344, -0.0561], [0.3243, -0.9392, 0.9524], [-0.3252, -0.9392, -0.6892], [0.3243, -0.9392, -0.6896], [-0.3252, -0.2897, 0.4961], [0.3243, -0.2897, 0.9524], [0.3243, -0.2897, 0.4955], [0.5408, 0.3116, -0.4293], [0.5427, -0.6366, 0.1065], [0.5408, 0.2627, -0.4954], [-0.5418, -0.9516, -0.7729], [-0.5418, -0.9609, -0.961], [0.5408, -0.9609, -0.961], [-0.5418, 0.0521, 0.7324], [-0.5418, -0.1093, 0.6353], [0.544, -0.1063, 0.6365], [-0.5418, -0.815, -0.2267], [-0.5418, -0.8784, -0.404], [-0.3252, -0.8783, -0.4038], [-0.5418, 0.2221, 0.8132], [-0.5418, 0.0521, 0.7324], [0.5443, 0.0554, 0.7334], [-0.5418, -0.3997, 0.3962], [-0.5418, -0.526, 0.2566], [-0.3252, -0.5256, 0.2568], [-0.5418, 0.4276, -0.313], [-0.5418, -0.2603, 0.5229], [-0.5418, -0.1093, 0.6353], [-0.5418, 0.4936, -0.2639], [-0.5418, -0.1093, 0.6353], [-0.5418, 0.0521, 0.7324], [-0.5418, 0.6384, -0.1862], [-0.5418, 0.5641, -0.2215], [-0.5418, 0.0521, 0.7324], [-0.5418, 0.1217, -0.961], [-0.5418, -0.9609, -0.961], [-0.5418, -0.9516, -0.7729], [-0.5418, 0.7157, -0.1583], [-0.5418, 0.3993, 0.877], [-0.5418, 0.5819, 0.9231], [0.3243, -0.8145, -0.2258], [0.3243, -0.878, -0.4033], [0.5418, -0.8779, -0.4032], [-0.5418, -0.7347, -0.0564], [-0.5418, -0.815, -0.2267], [-0.3252, -0.8149, -0.2265], [-0.5418, 0.7681, 0.9512], [-0.5418, 0.5819, 0.9231], [0.5452, 0.5863, 0.9231], [0.5408, -0.9609, -0.961], [-0.5418, -0.9609, -0.961], [-0.5418, 0.1217, -0.961], [0.5411, -0.9515, -0.7726], [0.5414, -0.9238, -0.5861], [0.3243, -0.9392, -0.6896], [0.5414, -0.9238, -0.5861], [0.3243, -0.9239, -0.5862], [0.3243, -0.9392, -0.6896], [-0.3252, -0.924, -0.5866], [-0.5418, -0.9241, -0.5867], [-0.3252, -0.9392, -0.6892], [-0.5418, -0.9241, -0.5867], [-0.5418, -0.9516, -0.7729], [-0.3252, -0.9392, -0.6892], [0.5411, -0.9515, -0.7726], [0.3243, -0.9392, -0.6896], [-0.5418, -0.9516, -0.7729], [-0.5418, 0.5819, 0.9231], [-0.5418, 0.3993, 0.877], [0.5449, 0.4034, 0.8774], [-0.5418, -0.8784, -0.404], [-0.5418, -0.9241, -0.5867], [-0.3252, -0.924, -0.5866], [0.5408, 0.7955, -0.1382], [0.5408, 0.7157, -0.1583], [-0.5418, 0.7157, -0.1583], [0.5408, 0.9589, -0.1217], [-0.5418, 0.9589, -0.1217], [-0.5418, 0.9561, 0.9609], [0.5408, 0.4936, -0.2639], [-0.5418, 0.4936, -0.2639], [-0.5418, 0.5641, -0.2215], [0.5408, 0.4276, -0.313], [-0.5418, 0.4276, -0.313], [-0.5418, 0.4936, -0.2639], [0.5408, 0.6384, -0.1862], [-0.5418, 0.6384, -0.1862], [-0.5418, 0.7157, -0.1583], [-0.5418, 0.1378, -0.7975], [-0.5418, -0.9241, -0.5867], [-0.5418, -0.8784, -0.404], [0.5408, 0.2205, -0.5659], [-0.5418, 0.2205, -0.5659], [-0.5418, 0.2627, -0.4954], [-0.5418, 0.1854, -0.6403], [-0.5418, -0.815, -0.2267], [-0.5418, -0.7347, -0.0564], [-0.5418, 0.7955, -0.1382], [-0.5418, 0.5819, 0.9231], [-0.5418, 0.7681, 0.9512], [-0.5418, 0.1257, -0.8789], [-0.5418, -0.9516, -0.7729], [-0.5418, -0.9241, -0.5867], [-0.5418, 0.2627, -0.4954], [-0.5418, -0.638, 0.1052], [-0.5418, -0.526, 0.2566], [0.5408, 0.5641, -0.2215], [-0.5418, 0.5641, -0.2215], [-0.5418, 0.6384, -0.1862], [-0.5418, 0.6384, -0.1862], [-0.5418, 0.2221, 0.8132], [-0.5418, 0.3993, 0.877], [-0.5418, 0.1854, -0.6403], [-0.5418, 0.1577, -0.7178], [-0.5418, -0.8784, -0.404], [0.5408, 0.2627, -0.4954], [-0.5418, 0.2627, -0.4954], [-0.5418, 0.3116, -0.4293], [0.5408, 0.8768, -0.1259], [0.5408, 0.7955, -0.1382], [-0.5418, 0.7955, -0.1382], [0.5408, 0.3116, -0.4293], [-0.5418, 0.3116, -0.4293], [-0.5418, 0.3668, -0.3683], [0.5408, 0.1217, -0.961], [-0.5418, 0.1217, -0.961], [-0.5418, 0.1257, -0.8789], [0.5408, 0.8768, -0.1259], [-0.5418, 0.8768, -0.1259], [-0.5418, 0.9589, -0.1217], [0.5408, 0.1378, -0.7975], [-0.5418, 0.1378, -0.7975], [-0.5418, 0.1577, -0.7178], [0.5408, 0.1854, -0.6403], [-0.5418, 0.1854, -0.6403], [-0.5418, 0.2205, -0.5659], [0.3243, -0.398, 0.3974], [0.3243, -0.5246, 0.2577], [0.543, -0.5242, 0.258], [0.5408, 0.1378, -0.7975], [0.5408, 0.1257, -0.8789], [-0.5418, 0.1257, -0.8789], [0.5408, 0.4276, -0.313], [0.5408, 0.3668, -0.3683], [-0.5418, 0.3668, -0.3683], [-0.5418, 0.2627, -0.4954], [-0.5418, 0.2205, -0.5659], [-0.5418, -0.7347, -0.0564], [-0.5418, 0.9561, 0.9609], [-0.5418, 0.7681, 0.9512], [0.5455, 0.7728, 0.9507], [-0.5418, -0.638, 0.1052], [-0.5418, -0.7347, -0.0564], [-0.3252, -0.7344, -0.0561], [-0.5418, -0.526, 0.2566], [-0.5418, -0.638, 0.1052], [-0.3252, -0.6377, 0.1055], [0.3243, -0.5246, 0.2577], [0.3243, -0.6369, 0.1063], [0.5427, -0.6366, 0.1065], [-0.5418, -0.1093, 0.6353], [-0.5418, -0.2603, 0.5229], [0.5437, -0.2578, 0.5242], [0.5408, 0.1577, -0.7178], [-0.5418, 0.1577, -0.7178], [-0.5418, 0.1854, -0.6403], [0.3243, -0.2897, 0.4955], [0.3243, -0.398, 0.3974], [0.5433, -0.3976, 0.3976], [-0.5418, -0.2603, 0.5229], [-0.5418, -0.3997, 0.3962], [-0.3252, -0.2897, 0.4961], [-0.5418, -0.3997, 0.3962], [-0.3252, -0.3993, 0.3965], [-0.3252, -0.2897, 0.4961], [0.3243, -0.2897, 0.4955], [0.5433, -0.3976, 0.3976], [0.5437, -0.2578, 0.5242], [-0.5418, -0.2603, 0.5229], [-0.3252, -0.2897, 0.4961], [0.5437, -0.2578, 0.5242], [0.3243, -0.7338, -0.0554], [0.3243, -0.8145, -0.2258], [0.5421, -0.8143, -0.2256], [0.3243, -0.6369, 0.1063], [0.3243, -0.7338, -0.0554], [0.5424, -0.7336, -0.0552], [-0.5418, 0.3993, 0.877], [-0.5418, 0.2221, 0.8132], [0.5446, 0.2259, 0.8139], [-0.5418, 0.3116, -0.4293], [-0.5418, -0.526, 0.2566], [-0.5418, -0.3997, 0.3962], [-0.5418, 0.8768, -0.1259], [-0.5418, 0.7681, 0.9512], [-0.5418, 0.9561, 0.9609], [-0.5418, 0.4276, -0.313], [-0.5418, 0.3668, -0.3683], [-0.5418, -0.3997, 0.3962], [0.3243, -0.878, -0.4033], [0.3243, -0.9239, -0.5862], [0.5414, -0.9238, -0.5861], [0.3243, -0.398, 0.3974], [0.3243, -0.2897, 0.4955], [0.3243, -0.2897, 0.9524], [0.3243, -0.9392, 0.9524], [0.3243, -0.9392, -0.6896], [0.3243, -0.9239, -0.5862], [0.3243, -0.9392, 0.9524], [0.3243, -0.9239, -0.5862], [0.3243, -0.878, -0.4033], [0.3243, -0.398, 0.3974], [0.3243, -0.2897, 0.9524], [0.3243, -0.9392, 0.9524], [0.3243, -0.5246, 0.2577], [0.3243, -0.398, 0.3974], [0.3243, -0.9392, 0.9524], [0.3243, -0.9392, 0.9524], [0.3243, -0.878, -0.4033], [0.3243, -0.8145, -0.2258], [0.3243, -0.9392, 0.9524], [0.3243, -0.8145, -0.2258], [0.3243, -0.7338, -0.0554], [0.3243, -0.6369, 0.1063], [0.3243, -0.5246, 0.2577], [0.3243, -0.9392, 0.9524], [0.3243, -0.2897, 0.9524], [-0.3252, -0.2897, 0.9524], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.924, -0.5866], [-0.3252, -0.9392, -0.6892], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.2897, 0.9524], [-0.3252, -0.3993, 0.3965], [-0.3252, -0.2897, 0.9524], [-0.3252, -0.2897, 0.4961], [-0.3252, -0.3993, 0.3965], [-0.3252, -0.8783, -0.4038], [-0.3252, -0.924, -0.5866], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.8149, -0.2265], [-0.3252, -0.8783, -0.4038], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.3993, 0.3965], [-0.3252, -0.5256, 0.2568], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.5256, 0.2568], [-0.3252, -0.6377, 0.1055], [-0.3252, -0.7344, -0.0561], [-0.3252, -0.8149, -0.2265], [-0.3252, -0.9392, 0.9524], [0.3243, -0.9392, 0.9524], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.9392, -0.6892], [-0.3252, -0.2897, 0.4961], [-0.3252, -0.2897, 0.9524], [0.3243, -0.2897, 0.9524], [0.5408, 0.8768, -0.1259], [0.5408, 0.9589, -0.1217], [0.5455, 0.7728, 0.9507], [0.5408, 0.9589, -0.1217], [0.5459, 0.9611, 0.9599], [0.5455, 0.7728, 0.9507], [0.5455, 0.7728, 0.9507], [0.5452, 0.5863, 0.9231], [0.5408, 0.8768, -0.1259], [0.5408, 0.7157, -0.1583], [0.5449, 0.4034, 0.8774], [0.5446, 0.2259, 0.8139], [0.5452, 0.5863, 0.9231], [0.5449, 0.4034, 0.8774], [0.5408, 0.7955, -0.1382], [0.5408, 0.6384, -0.1862], [0.5446, 0.2259, 0.8139], [0.5443, 0.0554, 0.7334], [0.5443, 0.0554, 0.7334], [0.544, -0.1063, 0.6365], [0.5408, 0.5641, -0.2215], [0.544, -0.1063, 0.6365], [0.5437, -0.2578, 0.5242], [0.5408, 0.4936, -0.2639], [0.5437, -0.2578, 0.5242], [0.5433, -0.3976, 0.3976], [0.5408, 0.4276, -0.313], [0.544, -0.1063, 0.6365], [0.5408, 0.4936, -0.2639], [0.5408, 0.5641, -0.2215], [0.5433, -0.3976, 0.3976], [0.543, -0.5242, 0.258], [0.5408, 0.3668, -0.3683], [0.543, -0.5242, 0.258], [0.5427, -0.6366, 0.1065], [0.5408, 0.3116, -0.4293], [0.5427, -0.6366, 0.1065], [0.5424, -0.7336, -0.0552], [0.5408, 0.2627, -0.4954], [0.5424, -0.7336, -0.0552], [0.5421, -0.8143, -0.2256], [0.5408, 0.2205, -0.5659], [0.5421, -0.8143, -0.2256], [0.5418, -0.8779, -0.4032], [0.5408, 0.1854, -0.6403], [0.5418, -0.8779, -0.4032], [0.5414, -0.9238, -0.5861], [0.5408, 0.1577, -0.7178], [0.5414, -0.9238, -0.5861], [0.5411, -0.9515, -0.7726], [0.5408, 0.1378, -0.7975], [0.5411, -0.9515, -0.7726], [0.5408, -0.9609, -0.961], [0.5408, 0.1257, -0.8789], [0.5408, -0.9609, -0.961], [0.5408, 0.1217, -0.961], [0.5408, 0.1257, -0.8789], [0.5408, 0.1257, -0.8789], [0.5408, 0.1378, -0.7975], [0.5411, -0.9515, -0.7726], [0.5424, -0.7336, -0.0552], [0.5408, 0.2205, -0.5659], [0.5408, 0.2627, -0.4954], [0.5418, -0.8779, -0.4032], [0.5408, 0.1577, -0.7178], [0.5408, 0.1854, -0.6403], [0.5437, -0.2578, 0.5242], [0.5408, 0.4276, -0.313], [0.5408, 0.4936, -0.2639], [0.543, -0.5242, 0.258], [0.5408, 0.3116, -0.4293], [0.5408, 0.3668, -0.3683], [0.5408, 0.4276, -0.313], [0.5433, -0.3976, 0.3976], [0.5408, 0.3668, -0.3683], [0.5443, 0.0554, 0.7334], [0.5408, 0.5641, -0.2215], [0.5408, 0.6384, -0.1862], [0.5449, 0.4034, 0.8774], [0.5408, 0.7157, -0.1583], [0.5408, 0.7955, -0.1382], [0.5446, 0.2259, 0.8139], [0.5408, 0.6384, -0.1862], [0.5408, 0.7157, -0.1583], [0.5408, 0.7955, -0.1382], [0.5408, 0.8768, -0.1259], [0.5452, 0.5863, 0.9231], [0.5408, 0.1378, -0.7975], [0.5408, 0.1577, -0.7178], [0.5414, -0.9238, -0.5861], [0.5408, 0.1854, -0.6403], [0.5408, 0.2205, -0.5659], [0.5421, -0.8143, -0.2256]], "SimpleDeform_Bend_Direction_": [[-1.8493, -0.0163, 0.6596], [-2.1691, -0.1102, 0.8577], [-1.8493, -0.0326, 0.6596], [-1.8493, -0.0, 0.6596], [-2.3369, -0.0551, 0.9858], [-1.8493, -0.0163, 0.6596], [-2.4913, -0.0, 1.1231], [-2.7242, -0.0939, 1.3802], [-2.3369, -0.0551, 0.9858], [-2.3369, -0.0551, 0.9858], [-2.4513, -0.1878, 1.0855], [-2.1691, -0.1102, 0.8577], [2.7242, 0.0939, 1.3802], [2.4913, -0.0, 1.1231], [2.9343, -0.0, 1.7025], [2.4513, 0.1878, 1.0855], [2.3369, 0.0551, 0.9858], [2.7242, 0.0939, 1.3802], [2.1691, 0.1102, 0.8577], [1.8493, 0.0163, 0.6596], [2.3369, 0.0551, 0.9858], [2.3369, 0.0551, 0.9858], [1.8493, -0.0, 0.6596], [2.4913, -0.0, 1.1231], [-1.8493, -0.0, 0.6596], [-2.3369, 0.0551, 0.9858], [-2.4913, -0.0, 1.1231], [-1.8493, 0.0163, 0.6596], [-2.1691, 0.1102, 0.8577], [-2.3369, 0.0551, 0.9858], [-2.3369, 0.0551, 0.9858], [-2.4513, 0.1878, 1.0855], [-2.7242, 0.0939, 1.3802], [-2.4913, -0.0, 1.1231], [-2.7242, 0.0939, 1.3802], [-2.9343, -0.0, 1.7025], [2.4513, -0.1878, 1.0855], [2.3369, -0.0551, 0.9858], [2.1691, -0.1102, 0.8577], [2.7242, -0.0939, 1.3802], [2.4913, -0.0, 1.1231], [2.3369, -0.0551, 0.9858], [2.3369, -0.0551, 0.9858], [1.8493, -0.0, 0.6596], [1.8493, -0.0163, 0.6596], [2.1691, -0.1102, 0.8577], [1.8493, -0.0163, 0.6596], [1.8493, -0.0326, 0.6596], [-1.8493, -0.0, 0.6596], [-1.6437, -0.0163, 0.5574], [-1.6437, -0.0, 0.5574], [-1.8493, 0.0163, 0.6596], [-1.6437, -0.0, 0.5574], [-1.6437, 0.0163, 0.5574], [-1.8493, -0.0163, 0.6596], [-1.6437, -0.0326, 0.5574], [-1.6437, -0.0163, 0.5574], [-1.8493, 0.0326, 0.6596], [-1.6437, 0.0163, 0.5574], [-1.6437, 0.0326, 0.5574], [1.6437, 0.0326, 0.5574], [1.8493, 0.0163, 0.6596], [1.8493, 0.0326, 0.6596], [1.428, 0.0326, 0.4674], [1.6437, 0.0163, 0.5574], [1.6437, 0.0326, 0.5574], [1.2036, 0.0326, 0.3904], [1.428, 0.0163, 0.4674], [1.428, 0.0326, 0.4674], [0.9718, 0.0326, 0.3267], [1.2036, 0.0163, 0.3904], [1.2036, 0.0326, 0.3904], [0.7341, 0.0326, 0.2768], [0.9718, 0.0163, 0.3267], [0.9718, 0.0326, 0.3267], [0.4919, 0.0326, 0.2409], [0.7341, 0.0163, 0.2768], [0.7341, 0.0326, 0.2768], [0.2467, 0.0326, 0.2192], [0.4919, 0.0163, 0.2409], [0.4919, 0.0326, 0.2409], [0.0, 0.0326, 0.212], [0.2467, 0.0163, 0.2192], [0.2467, 0.0326, 0.2192], [-0.2467, 0.0326, 0.2192], [0.0, 0.0163, 0.212], [0.0, 0.0326, 0.212], [-0.4919, 0.0326, 0.2409], [-0.2467, 0.0163, 0.2192], [-0.2467, 0.0326, 0.2192], [-0.7341, 0.0326, 0.2768], [-0.4919, 0.0163, 0.2409], [-0.4919, 0.0326, 0.2409], [-0.9718, 0.0326, 0.3267], [-0.7341, 0.0163, 0.2768], [-0.7341, 0.0326, 0.2768], [-1.2036, 0.0326, 0.3904], [-0.9718, 0.0163, 0.3267], [-0.9718, 0.0326, 0.3267], [-1.428, 0.0326, 0.4674], [-1.2036, 0.0163, 0.3904], [-1.2036, 0.0326, 0.3904], [-1.6437, 0.0326, 0.5574], [-1.428, 0.0163, 0.4674], [-1.428, 0.0326, 0.4674], [1.6437, -0.0163, 0.5574], [1.8493, -0.0326, 0.6596], [1.8493, -0.0163, 0.6596], [1.428, -0.0163, 0.4674], [1.6437, -0.0326, 0.5574], [1.6437, -0.0163, 0.5574], [1.2036, -0.0163, 0.3904], [1.428, -0.0326, 0.4674], [1.428, -0.0163, 0.4674], [0.9718, -0.0163, 0.3267], [1.2036, -0.0326, 0.3904], [1.2036, -0.0163, 0.3904], [0.7341, -0.0163, 0.2768], [0.9718, -0.0326, 0.3267], [0.9718, -0.0163, 0.3267], [0.4919, -0.0163, 0.2409], [0.7341, -0.0326, 0.2768], [0.7341, -0.0163, 0.2768], [0.2467, -0.0163, 0.2192], [0.4919, -0.0326, 0.2409], [0.4919, -0.0163, 0.2409], [0.0, -0.0163, 0.212], [0.2467, -0.0326, 0.2192], [0.2467, -0.0163, 0.2192], [-0.2467, -0.0163, 0.2192], [0.0, -0.0326, 0.212], [0.0, -0.0163, 0.212], [-0.4919, -0.0163, 0.2409], [-0.2467, -0.0326, 0.2192], [-0.2467, -0.0163, 0.2192], [-0.7341, -0.0163, 0.2768], [-0.4919, -0.0326, 0.2409], [-0.4919, -0.0163, 0.2409], [-0.9718, -0.0163, 0.3267], [-0.7341, -0.0326, 0.2768], [-0.7341, -0.0163, 0.2768], [-1.2036, -0.0163, 0.3904], [-0.9718, -0.0326, 0.3267], [-0.9718, -0.0163, 0.3267], [-1.428, -0.0163, 0.4674], [-1.2036, -0.0326, 0.3904], [-1.2036, -0.0163, 0.3904], [-1.6437, -0.0163, 0.5574], [-1.428, -0.0326, 0.4674], [-1.428, -0.0163, 0.4674], [1.6437, 0.0163, 0.5574], [1.8493, -0.0, 0.6596], [1.8493, 0.0163, 0.6596], [1.428, 0.0163, 0.4674], [1.6437, -0.0, 0.5574], [1.6437, 0.0163, 0.5574], [1.2036, 0.0163, 0.3904], [1.428, -0.0, 0.4674], [1.428, 0.0163, 0.4674], [0.9718, 0.0163, 0.3267], [1.2036, -0.0, 0.3904], [1.2036, 0.0163, 0.3904], [0.7341, 0.0163, 0.2768], [0.9718, -0.0, 0.3267], [0.9718, 0.0163, 0.3267], [0.4919, 0.0163, 0.2409], [0.7341, -0.0, 0.2768], [0.7341, 0.0163, 0.2768], [0.2467, 0.0163, 0.2192], [0.4919, -0.0, 0.2409], [0.4919, 0.0163, 0.2409], [0.0, 0.0163, 0.212], [0.2467, -0.0, 0.2192], [0.2467, 0.0163, 0.2192], [-0.2467, 0.0163, 0.2192], [0.0, -0.0, 0.212], [0.0, 0.0163, 0.212], [-0.4919, 0.0163, 0.2409], [-0.2467, -0.0, 0.2192], [-0.2467, 0.0163, 0.2192], [-0.7341, 0.0163, 0.2768], [-0.4919, -0.0, 0.2409], [-0.4919, 0.0163, 0.2409], [-0.9718, 0.0163, 0.3267], [-0.7341, -0.0, 0.2768], [-0.7341, 0.0163, 0.2768], [-1.2036, 0.0163, 0.3904], [-0.9718, -0.0, 0.3267], [-0.9718, 0.0163, 0.3267], [-1.428, 0.0163, 0.4674], [-1.2036, -0.0, 0.3904], [-1.2036, 0.0163, 0.3904], [-1.6437, 0.0163, 0.5574], [-1.428, -0.0, 0.4674], [-1.428, 0.0163, 0.4674], [1.6437, -0.0, 0.5574], [1.8493, -0.0163, 0.6596], [1.8493, -0.0, 0.6596], [1.428, -0.0, 0.4674], [1.6437, -0.0163, 0.5574], [1.6437, -0.0, 0.5574], [1.2036, -0.0, 0.3904], [1.428, -0.0163, 0.4674], [1.428, -0.0, 0.4674], [0.9718, -0.0, 0.3267], [1.2036, -0.0163, 0.3904], [1.2036, -0.0, 0.3904], [0.7341, -0.0, 0.2768], [0.9718, -0.0163, 0.3267], [0.9718, -0.0, 0.3267], [0.4919, -0.0, 0.2409], [0.7341, -0.0163, 0.2768], [0.7341, -0.0, 0.2768], [0.2467, -0.0, 0.2192], [0.4919, -0.0163, 0.2409], [0.4919, -0.0, 0.2409], [0.0, -0.0, 0.212], [0.2467, -0.0163, 0.2192], [0.2467, -0.0, 0.2192], [-0.2467, -0.0, 0.2192], [0.0, -0.0163, 0.212], [0.0, -0.0, 0.212], [-0.4919, -0.0, 0.2409], [-0.2467, -0.0163, 0.2192], [-0.2467, -0.0, 0.2192], [-0.7341, -0.0, 0.2768], [-0.4919, -0.0163, 0.2409], [-0.4919, -0.0, 0.2409], [-0.9718, -0.0, 0.3267], [-0.7341, -0.0163, 0.2768], [-0.7341, -0.0, 0.2768], [-1.2036, -0.0, 0.3904], [-0.9718, -0.0163, 0.3267], [-0.9718, -0.0, 0.3267], [-1.428, -0.0, 0.4674], [-1.2036, -0.0163, 0.3904], [-1.2036, -0.0, 0.3904], [-1.6437, -0.0, 0.5574], [-1.428, -0.0163, 0.4674], [-1.428, -0.0, 0.4674], [-1.8493, -0.0163, 0.6596], [-2.3369, -0.0551, 0.9858], [-2.1691, -0.1102, 0.8577], [-1.8493, -0.0, 0.6596], [-2.4913, -0.0, 1.1231], [-2.3369, -0.0551, 0.9858], [-2.4913, -0.0, 1.1231], [-2.9343, -0.0, 1.7025], [-2.7242, -0.0939, 1.3802], [-2.3369, -0.0551, 0.9858], [-2.7242, -0.0939, 1.3802], [-2.4513, -0.1878, 1.0855], [2.7242, 0.0939, 1.3802], [2.3369, 0.0551, 0.9858], [2.4913, -0.0, 1.1231], [2.4513, 0.1878, 1.0855], [2.1691, 0.1102, 0.8577], [2.3369, 0.0551, 0.9858], [2.1691, 0.1102, 0.8577], [1.8493, 0.0326, 0.6596], [1.8493, 0.0163, 0.6596], [2.3369, 0.0551, 0.9858], [1.8493, 0.0163, 0.6596], [1.8493, -0.0, 0.6596], [-1.8493, -0.0, 0.6596], [-1.8493, 0.0163, 0.6596], [-2.3369, 0.0551, 0.9858], [-1.8493, 0.0163, 0.6596], [-1.8493, 0.0326, 0.6596], [-2.1691, 0.1102, 0.8577], [-2.3369, 0.0551, 0.9858], [-2.1691, 0.1102, 0.8577], [-2.4513, 0.1878, 1.0855], [-2.4913, -0.0, 1.1231], [-2.3369, 0.0551, 0.9858], [-2.7242, 0.0939, 1.3802], [2.4513, -0.1878, 1.0855], [2.7242, -0.0939, 1.3802], [2.3369, -0.0551, 0.9858], [2.7242, -0.0939, 1.3802], [2.9343, -0.0, 1.7025], [2.4913, -0.0, 1.1231], [2.3369, -0.0551, 0.9858], [2.4913, -0.0, 1.1231], [1.8493, -0.0, 0.6596], [2.1691, -0.1102, 0.8577], [2.3369, -0.0551, 0.9858], [1.8493, -0.0163, 0.6596], [-1.8493, -0.0, 0.6596], [-1.8493, -0.0163, 0.6596], [-1.6437, -0.0163, 0.5574], [-1.8493, 0.0163, 0.6596], [-1.8493, -0.0, 0.6596], [-1.6437, -0.0, 0.5574], [-1.8493, -0.0163, 0.6596], [-1.8493, -0.0326, 0.6596], [-1.6437, -0.0326, 0.5574], [-1.8493, 0.0326, 0.6596], [-1.8493, 0.0163, 0.6596], [-1.6437, 0.0163, 0.5574], [1.6437, 0.0326, 0.5574], [1.6437, 0.0163, 0.5574], [1.8493, 0.0163, 0.6596], [1.428, 0.0326, 0.4674], [1.428, 0.0163, 0.4674], [1.6437, 0.0163, 0.5574], [1.2036, 0.0326, 0.3904], [1.2036, 0.0163, 0.3904], [1.428, 0.0163, 0.4674], [0.9718, 0.0326, 0.3267], [0.9718, 0.0163, 0.3267], [1.2036, 0.0163, 0.3904], [0.7341, 0.0326, 0.2768], [0.7341, 0.0163, 0.2768], [0.9718, 0.0163, 0.3267], [0.4919, 0.0326, 0.2409], [0.4919, 0.0163, 0.2409], [0.7341, 0.0163, 0.2768], [0.2467, 0.0326, 0.2192], [0.2467, 0.0163, 0.2192], [0.4919, 0.0163, 0.2409], [0.0, 0.0326, 0.212], [0.0, 0.0163, 0.212], [0.2467, 0.0163, 0.2192], [-0.2467, 0.0326, 0.2192], [-0.2467, 0.0163, 0.2192], [0.0, 0.0163, 0.212], [-0.4919, 0.0326, 0.2409], [-0.4919, 0.0163, 0.2409], [-0.2467, 0.0163, 0.2192], [-0.7341, 0.0326, 0.2768], [-0.7341, 0.0163, 0.2768], [-0.4919, 0.0163, 0.2409], [-0.9718, 0.0326, 0.3267], [-0.9718, 0.0163, 0.3267], [-0.7341, 0.0163, 0.2768], [-1.2036, 0.0326, 0.3904], [-1.2036, 0.0163, 0.3904], [-0.9718, 0.0163, 0.3267], [-1.428, 0.0326, 0.4674], [-1.428, 0.0163, 0.4674], [-1.2036, 0.0163, 0.3904], [-1.6437, 0.0326, 0.5574], [-1.6437, 0.0163, 0.5574], [-1.428, 0.0163, 0.4674], [1.6437, -0.0163, 0.5574], [1.6437, -0.0326, 0.5574], [1.8493, -0.0326, 0.6596], [1.428, -0.0163, 0.4674], [1.428, -0.0326, 0.4674], [1.6437, -0.0326, 0.5574], [1.2036, -0.0163, 0.3904], [1.2036, -0.0326, 0.3904], [1.428, -0.0326, 0.4674], [0.9718, -0.0163, 0.3267], [0.9718, -0.0326, 0.3267], [1.2036, -0.0326, 0.3904], [0.7341, -0.0163, 0.2768], [0.7341, -0.0326, 0.2768], [0.9718, -0.0326, 0.3267], [0.4919, -0.0163, 0.2409], [0.4919, -0.0326, 0.2409], [0.7341, -0.0326, 0.2768], [0.2467, -0.0163, 0.2192], [0.2467, -0.0326, 0.2192], [0.4919, -0.0326, 0.2409], [0.0, -0.0163, 0.212], [0.0, -0.0326, 0.212], [0.2467, -0.0326, 0.2192], [-0.2467, -0.0163, 0.2192], [-0.2467, -0.0326, 0.2192], [0.0, -0.0326, 0.212], [-0.4919, -0.0163, 0.2409], [-0.4919, -0.0326, 0.2409], [-0.2467, -0.0326, 0.2192], [-0.7341, -0.0163, 0.2768], [-0.7341, -0.0326, 0.2768], [-0.4919, -0.0326, 0.2409], [-0.9718, -0.0163, 0.3267], [-0.9718, -0.0326, 0.3267], [-0.7341, -0.0326, 0.2768], [-1.2036, -0.0163, 0.3904], [-1.2036, -0.0326, 0.3904], [-0.9718, -0.0326, 0.3267], [-1.428, -0.0163, 0.4674], [-1.428, -0.0326, 0.4674], [-1.2036, -0.0326, 0.3904], [-1.6437, -0.0163, 0.5574], [-1.6437, -0.0326, 0.5574], [-1.428, -0.0326, 0.4674], [1.6437, 0.0163, 0.5574], [1.6437, -0.0, 0.5574], [1.8493, -0.0, 0.6596], [1.428, 0.0163, 0.4674], [1.428, -0.0, 0.4674], [1.6437, -0.0, 0.5574], [1.2036, 0.0163, 0.3904], [1.2036, -0.0, 0.3904], [1.428, -0.0, 0.4674], [0.9718, 0.0163, 0.3267], [0.9718, -0.0, 0.3267], [1.2036, -0.0, 0.3904], [0.7341, 0.0163, 0.2768], [0.7341, -0.0, 0.2768], [0.9718, -0.0, 0.3267], [0.4919, 0.0163, 0.2409], [0.4919, -0.0, 0.2409], [0.7341, -0.0, 0.2768], [0.2467, 0.0163, 0.2192], [0.2467, -0.0, 0.2192], [0.4919, -0.0, 0.2409], [0.0, 0.0163, 0.212], [0.0, -0.0, 0.212], [0.2467, -0.0, 0.2192], [-0.2467, 0.0163, 0.2192], [-0.2467, -0.0, 0.2192], [0.0, -0.0, 0.212], [-0.4919, 0.0163, 0.2409], [-0.4919, -0.0, 0.2409], [-0.2467, -0.0, 0.2192], [-0.7341, 0.0163, 0.2768], [-0.7341, -0.0, 0.2768], [-0.4919, -0.0, 0.2409], [-0.9718, 0.0163, 0.3267], [-0.9718, -0.0, 0.3267], [-0.7341, -0.0, 0.2768], [-1.2036, 0.0163, 0.3904], [-1.2036, -0.0, 0.3904], [-0.9718, -0.0, 0.3267], [-1.428, 0.0163, 0.4674], [-1.428, -0.0, 0.4674], [-1.2036, -0.0, 0.3904], [-1.6437, 0.0163, 0.5574], [-1.6437, -0.0, 0.5574], [-1.428, -0.0, 0.4674], [1.6437, -0.0, 0.5574], [1.6437, -0.0163, 0.5574], [1.8493, -0.0163, 0.6596], [1.428, -0.0, 0.4674], [1.428, -0.0163, 0.4674], [1.6437, -0.0163, 0.5574], [1.2036, -0.0, 0.3904], [1.2036, -0.0163, 0.3904], [1.428, -0.0163, 0.4674], [0.9718, -0.0, 0.3267], [0.9718, -0.0163, 0.3267], [1.2036, -0.0163, 0.3904], [0.7341, -0.0, 0.2768], [0.7341, -0.0163, 0.2768], [0.9718, -0.0163, 0.3267], [0.4919, -0.0, 0.2409], [0.4919, -0.0163, 0.2409], [0.7341, -0.0163, 0.2768], [0.2467, -0.0, 0.2192], [0.2467, -0.0163, 0.2192], [0.4919, -0.0163, 0.2409], [0.0, -0.0, 0.212], [0.0, -0.0163, 0.212], [0.2467, -0.0163, 0.2192], [-0.2467, -0.0, 0.2192], [-0.2467, -0.0163, 0.2192], [0.0, -0.0163, 0.212], [-0.4919, -0.0, 0.2409], [-0.4919, -0.0163, 0.2409], [-0.2467, -0.0163, 0.2192], [-0.7341, -0.0, 0.2768], [-0.7341, -0.0163, 0.2768], [-0.4919, -0.0163, 0.2409], [-0.9718, -0.0, 0.3267], [-0.9718, -0.0163, 0.3267], [-0.7341, -0.0163, 0.2768], [-1.2036, -0.0, 0.3904], [-1.2036, -0.0163, 0.3904], [-0.9718, -0.0163, 0.3267], [-1.428, -0.0, 0.4674], [-1.428, -0.0163, 0.4674], [-1.2036, -0.0163, 0.3904], [-1.6437, -0.0, 0.5574], [-1.6437, -0.0163, 0.5574], [-1.428, -0.0163, 0.4674]], "SimpleDeform_A_": [[-0.0, -0.0339, 0.9015], [0.0063, -0.057, 0.9464], [-0.0, -0.0569, 0.9448], [0.0285, -0.0337, 0.9093], [0.0111, -0.0572, 0.9509], [0.0063, -0.057, 0.9464], [0.0491, -0.0331, 0.9303], [0.0131, -0.0576, 0.9573], [0.0111, -0.0572, 0.9509], [0.0563, -0.0324, 0.9587], [0.0116, -0.0579, 0.964], [0.0131, -0.0576, 0.9573], [0.0484, -0.0316, 0.9867], [0.0068, -0.0582, 0.9691], [0.0116, -0.0579, 0.964], [0.0278, -0.031, 1.0069], [-0.0, -0.0583, 0.971], [0.0068, -0.0582, 0.9691], [-0.0, -0.0583, 0.971], [-0.0278, -0.031, 1.0069], [-0.0068, -0.0582, 0.9691], [-0.0068, -0.0582, 0.9691], [-0.0484, -0.0316, 0.9867], [-0.0116, -0.0579, 0.964], [-0.0116, -0.0579, 0.964], [-0.0563, -0.0324, 0.9587], [-0.0131, -0.0576, 0.9573], [-0.0131, -0.0576, 0.9573], [-0.0491, -0.0331, 0.9303], [-0.0111, -0.0572, 0.9509], [0.0285, -0.0337, 0.9093], [-0.0, 0.0317, 0.9542], [0.0021, 0.0317, 0.9547], [-0.0111, -0.0572, 0.9509], [-0.0285, -0.0337, 0.9093], [-0.0063, -0.057, 0.9464], [-0.0063, -0.057, 0.9464], [-0.0, -0.0339, 0.9015], [-0.0, -0.0569, 0.9448], [-0.0278, -0.031, 1.0069], [-0.0035, 0.0318, 0.9604], [-0.0484, -0.0316, 0.9867], [-0.0063, -0.057, -0.9179], [-0.0, -0.0339, -0.873], [-0.0285, -0.0337, -0.8807], [-0.0063, -0.057, -0.9179], [-0.0, -0.1151, -0.9203], [-0.0, -0.0569, -0.9162], [-0.0024, -0.1151, -0.9209], [-0.0, -0.1632, -0.914], [-0.0, -0.1151, -0.9203], [-0.0024, -0.2109, -0.906], [-0.0, -0.1632, -0.914], [-0.0024, -0.1633, -0.9147], [-0.0024, -0.258, -0.8949], [-0.0, -0.2108, -0.9054], [-0.0024, -0.2109, -0.906], [-0.0024, -0.3045, -0.8813], [-0.0, -0.2579, -0.8943], [-0.0024, -0.258, -0.8949], [-0.0024, -0.3502, -0.8654], [-0.0, -0.3043, -0.8807], [-0.0024, -0.3045, -0.8813], [-0.0024, -0.3951, -0.8472], [-0.0, -0.35, -0.8648], [-0.0024, -0.3502, -0.8654], [-0.0024, -0.4389, -0.8267], [-0.0, -0.3948, -0.8466], [-0.0024, -0.3951, -0.8472], [-0.0024, -0.4817, -0.8039], [-0.0, -0.4386, -0.8261], [-0.0024, -0.4389, -0.8267], [-0.0024, -0.5232, -0.779], [-0.0, -0.4814, -0.8034], [-0.0024, -0.4817, -0.8039], [-0.0024, -0.5633, -0.752], [-0.0, -0.5228, -0.7785], [-0.0024, -0.5232, -0.779], [-0.0024, -0.6021, -0.7229], [-0.0, -0.563, -0.7515], [-0.0024, -0.5633, -0.752], [-0.0024, -0.6392, -0.6919], [-0.0, -0.6017, -0.7224], [-0.0024, -0.6021, -0.7229], [-0.0024, -0.6748, -0.659], [-0.0, -0.6388, -0.6914], [-0.0024, -0.6392, -0.6919], [-0.0024, -0.7086, -0.6243], [-0.0, -0.6743, -0.6586], [-0.0024, -0.6748, -0.659], [-0.0024, -0.7405, -0.588], [-0.0, -0.7081, -0.6239], [-0.0024, -0.7086, -0.6243], [-0.0024, -0.7706, -0.55], [-0.0, -0.74, -0.5876], [-0.0024, -0.7405, -0.588], [-0.0024, -0.7986, -0.5105], [-0.0, -0.7701, -0.5496], [-0.0024, -0.7706, -0.55], [-0.0024, -0.8246, -0.4697], [-0.0, -0.7981, -0.5102], [-0.0024, -0.7986, -0.5105], [-0.0024, -0.8484, -0.4276], [-0.0, -0.8241, -0.4694], [-0.0024, -0.8246, -0.4697], [-0.0024, -0.8701, -0.3843], [-0.0, -0.8479, -0.4273], [-0.0024, -0.8484, -0.4276], [-0.0024, -0.8895, -0.3399], [-0.0, -0.8695, -0.384], [-0.0024, -0.8701, -0.3843], [-0.0024, -0.9066, -0.2946], [-0.0, -0.8889, -0.3397], [-0.0024, -0.8895, -0.3399], [-0.0024, -0.9213, -0.2485], [-0.0, -0.906, -0.2944], [-0.0024, -0.9066, -0.2946], [-0.0024, -0.9336, -0.2017], [-0.0, -0.9207, -0.2483], [-0.0024, -0.9213, -0.2485], [-0.0024, -0.9435, -0.1543], [-0.0, -0.933, -0.2015], [-0.0024, -0.9336, -0.2017], [-0.0024, -0.951, -0.1064], [-0.0, -0.9429, -0.1542], [-0.0024, -0.9435, -0.1543], [-0.0024, -0.9559, -0.0583], [-0.0, -0.9503, -0.1063], [-0.0024, -0.951, -0.1064], [-0.0024, -0.9584, -0.0099], [-0.0, -0.9553, -0.0582], [-0.0024, -0.9559, -0.0583], [-0.0024, -0.9584, 0.0385], [-0.0, -0.9578, -0.0099], [-0.0024, -0.9584, -0.0099], [-0.0024, -0.9559, 0.0868], [-0.0, -0.9578, 0.0385], [-0.0024, -0.9584, 0.0385], [-0.0024, -0.951, 0.135], [-0.0, -0.9553, 0.0868], [-0.0024, -0.9559, 0.0868], [-0.0024, -0.9435, 0.1828], [-0.0, -0.9503, 0.1349], [-0.0024, -0.951, 0.135], [-0.0024, -0.9336, 0.2302], [-0.0, -0.9429, 0.1827], [-0.0024, -0.9435, 0.1828], [-0.0024, -0.9213, 0.277], [-0.0, -0.933, 0.2301], [-0.0024, -0.9336, 0.2302], [-0.0024, -0.9066, 0.3232], [-0.0, -0.9207, 0.2769], [-0.0024, -0.9213, 0.277], [-0.0024, -0.8895, 0.3685], [-0.0, -0.906, 0.323], [-0.0024, -0.9066, 0.3232], [-0.0024, -0.8701, 0.4128], [-0.0, -0.8889, 0.3682], [-0.0024, -0.8895, 0.3685], [-0.0024, -0.8484, 0.4561], [-0.0, -0.8695, 0.4126], [-0.0024, -0.8701, 0.4128], [-0.0024, -0.8246, 0.4983], [-0.0, -0.8479, 0.4558], [-0.0024, -0.8484, 0.4561], [-0.0024, -0.7986, 0.5391], [-0.0, -0.8241, 0.498], [-0.0024, -0.8246, 0.4983], [-0.0024, -0.7706, 0.5786], [-0.0, -0.7981, 0.5388], [-0.0024, -0.7986, 0.5391], [-0.0024, -0.7405, 0.6165], [-0.0, -0.7701, 0.5782], [-0.0024, -0.7706, 0.5786], [-0.0024, -0.7086, 0.6529], [-0.0, -0.74, 0.6161], [-0.0024, -0.7405, 0.6165], [-0.0024, -0.6748, 0.6876], [-0.0, -0.7081, 0.6525], [-0.0024, -0.7086, 0.6529], [-0.0024, -0.6392, 0.7205], [-0.0, -0.6743, 0.6871], [-0.0024, -0.6748, 0.6876], [-0.0024, -0.6021, 0.7515], [-0.0, -0.6388, 0.72], [-0.0024, -0.6392, 0.7205], [-0.0024, -0.5633, 0.7805], [-0.0, -0.6017, 0.751], [-0.0024, -0.6021, 0.7515], [-0.0024, -0.5232, 0.8076], [-0.0, -0.563, 0.78], [-0.0024, -0.5633, 0.7805], [-0.0024, -0.4817, 0.8325], [-0.0, -0.5228, 0.807], [-0.0024, -0.5232, 0.8076], [-0.0024, -0.4389, 0.8552], [-0.0, -0.4814, 0.8319], [-0.0024, -0.4817, 0.8325], [-0.0024, -0.3951, 0.8758], [-0.0, -0.4386, 0.8547], [-0.0024, -0.4389, 0.8552], [-0.0024, -0.3502, 0.894], [-0.0, -0.3948, 0.8752], [-0.0024, -0.3951, 0.8758], [-0.0024, -0.3045, 0.9099], [-0.0, -0.35, 0.8934], [-0.0024, -0.3502, 0.894], [-0.0024, -0.258, 0.9234], [-0.0, -0.3043, 0.9093], [-0.0024, -0.3045, 0.9099], [-0.0024, -0.2109, 0.9346], [-0.0, -0.2579, 0.9228], [-0.0024, -0.258, 0.9234], [-0.0024, -0.1633, 0.9432], [-0.0, -0.2108, 0.934], [-0.0024, -0.2109, 0.9346], [-0.0024, -0.1151, 0.9495], [-0.0, -0.1632, 0.9426], [-0.0024, -0.1633, 0.9432], [-0.0063, -0.057, 0.9464], [-0.0, -0.115, 0.9489], [-0.0024, -0.1151, 0.9495], [-0.0111, -0.0572, -0.9223], [-0.0285, -0.0337, -0.8807], [-0.0491, -0.0331, -0.9017], [-0.0111, -0.0572, -0.9223], [-0.0024, -0.1151, -0.9209], [-0.0063, -0.057, -0.9179], [-0.0043, -0.1153, -0.9226], [-0.0024, -0.1633, -0.9147], [-0.0024, -0.1151, -0.9209], [-0.0043, -0.1635, -0.9164], [-0.0024, -0.2109, -0.906], [-0.0024, -0.1633, -0.9147], [-0.0043, -0.2113, -0.9077], [-0.0024, -0.258, -0.8949], [-0.0024, -0.2109, -0.906], [-0.0043, -0.2585, -0.8965], [-0.0024, -0.3045, -0.8813], [-0.0024, -0.258, -0.8949], [-0.0043, -0.305, -0.883], [-0.0024, -0.3502, -0.8654], [-0.0024, -0.3045, -0.8813], [-0.0043, -0.3508, -0.867], [-0.0024, -0.3951, -0.8472], [-0.0024, -0.3502, -0.8654], [-0.0043, -0.3958, -0.8488], [-0.0024, -0.4389, -0.8267], [-0.0024, -0.3951, -0.8472], [-0.0043, -0.4825, -0.8054], [-0.0024, -0.4389, -0.8267], [-0.0043, -0.4397, -0.8282], [-0.0043, -0.4825, -0.8054], [-0.0024, -0.5232, -0.779], [-0.0024, -0.4817, -0.8039], [-0.0043, -0.5241, -0.7805], [-0.0024, -0.5633, -0.752], [-0.0024, -0.5232, -0.779], [-0.0043, -0.6031, -0.7243], [-0.0024, -0.5633, -0.752], [-0.0043, -0.5643, -0.7534], [-0.0043, -0.6404, -0.6932], [-0.0024, -0.6021, -0.7229], [-0.0043, -0.6031, -0.7243], [-0.0043, -0.676, -0.6602], [-0.0024, -0.6392, -0.6919], [-0.0043, -0.6404, -0.6932], [-0.0043, -0.676, -0.6602], [-0.0024, -0.7086, -0.6243], [-0.0024, -0.6748, -0.659], [-0.0043, -0.7098, -0.6255], [-0.0024, -0.7405, -0.588], [-0.0024, -0.7086, -0.6243], [-0.0043, -0.7418, -0.5891], [-0.0024, -0.7706, -0.55], [-0.0024, -0.7405, -0.588], [-0.0043, -0.7719, -0.551], [-0.0024, -0.7986, -0.5105], [-0.0024, -0.7706, -0.55], [-0.0043, -0.8001, -0.5115], [-0.0024, -0.8246, -0.4697], [-0.0024, -0.7986, -0.5105], [-0.0043, -0.8261, -0.4706], [-0.0024, -0.8484, -0.4276], [-0.0024, -0.8246, -0.4697], [-0.0043, -0.8717, -0.385], [-0.0024, -0.8484, -0.4276], [-0.0043, -0.85, -0.4284], [-0.0043, -0.8911, -0.3405], [-0.0024, -0.8701, -0.3843], [-0.0043, -0.8717, -0.385], [-0.0043, -0.9082, -0.2952], [-0.0024, -0.8895, -0.3399], [-0.0043, -0.8911, -0.3405], [-0.0043, -0.9229, -0.249], [-0.0024, -0.9066, -0.2946], [-0.0043, -0.9082, -0.2952], [-0.0043, -0.9229, -0.249], [-0.0024, -0.9336, -0.2017], [-0.0024, -0.9213, -0.2485], [-0.0043, -0.9452, -0.1546], [-0.0024, -0.9336, -0.2017], [-0.0043, -0.9353, -0.2021], [-0.0043, -0.9527, -0.1066], [-0.0024, -0.9435, -0.1543], [-0.0043, -0.9452, -0.1546], [-0.0043, -0.9577, -0.0584], [-0.0024, -0.951, -0.1064], [-0.0043, -0.9527, -0.1066], [-0.0043, -0.9602, -0.01], [-0.0024, -0.9559, -0.0583], [-0.0043, -0.9577, -0.0584], [-0.0043, -0.9602, 0.0385], [-0.0024, -0.9584, -0.0099], [-0.0043, -0.9602, -0.01], [-0.0043, -0.9577, 0.087], [-0.0024, -0.9584, 0.0385], [-0.0043, -0.9602, 0.0385], [-0.0043, -0.9577, 0.087], [-0.0024, -0.951, 0.135], [-0.0024, -0.9559, 0.0868], [-0.0043, -0.9452, 0.1832], [-0.0024, -0.951, 0.135], [-0.0043, -0.9527, 0.1352], [-0.0043, -0.9353, 0.2306], [-0.0024, -0.9435, 0.1828], [-0.0043, -0.9452, 0.1832], [-0.0043, -0.9229, 0.2775], [-0.0024, -0.9336, 0.2302], [-0.0043, -0.9353, 0.2306], [-0.0043, -0.9082, 0.3237], [-0.0024, -0.9213, 0.277], [-0.0043, -0.9229, 0.2775], [-0.0043, -0.8911, 0.3691], [-0.0024, -0.9066, 0.3232], [-0.0043, -0.9082, 0.3237], [-0.0043, -0.8717, 0.4136], [-0.0024, -0.8895, 0.3685], [-0.0043, -0.8911, 0.3691], [-0.0043, -0.85, 0.457], [-0.0024, -0.8701, 0.4128], [-0.0043, -0.8717, 0.4136], [-0.0043, -0.8261, 0.4992], [-0.0024, -0.8484, 0.4561], [-0.0043, -0.85, 0.457], [-0.0043, -0.8001, 0.5401], [-0.0024, -0.8246, 0.4983], [-0.0043, -0.8261, 0.4992], [-0.0043, -0.7719, 0.5796], [-0.0024, -0.7986, 0.5391], [-0.0043, -0.8001, 0.5401], [-0.0043, -0.7418, 0.6177], [-0.0024, -0.7706, 0.5786], [-0.0043, -0.7719, 0.5796], [-0.0043, -0.7418, 0.6177], [-0.0024, -0.7086, 0.6529], [-0.0024, -0.7405, 0.6165], [-0.0043, -0.676, 0.6888], [-0.0024, -0.7086, 0.6529], [-0.0043, -0.7098, 0.6541], [-0.0043, -0.6404, 0.7218], [-0.0024, -0.6748, 0.6876], [-0.0043, -0.676, 0.6888], [-0.0043, -0.6031, 0.7528], [-0.0024, -0.6392, 0.7205], [-0.0043, -0.6404, 0.7218], [-0.0043, -0.5643, 0.782], [-0.0024, -0.6021, 0.7515], [-0.0043, -0.6031, 0.7528], [-0.0043, -0.5241, 0.809], [-0.0024, -0.5633, 0.7805], [-0.0043, -0.5643, 0.782], [-0.0043, -0.4825, 0.834], [-0.0024, -0.5232, 0.8076], [-0.0043, -0.5241, 0.809], [-0.0043, -0.4825, 0.834], [-0.0024, -0.4389, 0.8552], [-0.0024, -0.4817, 0.8325], [-0.0043, -0.4397, 0.8568], [-0.0024, -0.3951, 0.8758], [-0.0024, -0.4389, 0.8552], [-0.0043, -0.3958, 0.8774], [-0.0024, -0.3502, 0.894], [-0.0024, -0.3951, 0.8758], [-0.0043, -0.305, 0.9116], [-0.0024, -0.3502, 0.894], [-0.0043, -0.3508, 0.8956], [-0.0043, -0.2585, 0.9251], [-0.0024, -0.3045, 0.9099], [-0.0043, -0.305, 0.9116], [-0.0043, -0.2113, 0.9363], [-0.0024, -0.258, 0.9234], [-0.0043, -0.2585, 0.9251], [-0.0043, -0.1635, 0.945], [-0.0024, -0.2109, 0.9346], [-0.0043, -0.2113, 0.9363], [-0.0043, -0.1153, 0.9512], [-0.0024, -0.1633, 0.9432], [-0.0043, -0.1635, 0.945], [-0.0111, -0.0572, 0.9509], [-0.0024, -0.1151, 0.9495], [-0.0043, -0.1153, 0.9512], [-0.0131, -0.0576, -0.9287], [-0.0491, -0.0331, -0.9017], [-0.0563, -0.0324, -0.9301], [-0.0131, -0.0576, -0.9287], [-0.0043, -0.1153, -0.9226], [-0.0111, -0.0572, -0.9223], [-0.0051, -0.1156, -0.9251], [-0.0043, -0.1635, -0.9164], [-0.0043, -0.1153, -0.9226], [-0.0051, -0.1639, -0.9188], [-0.0043, -0.2113, -0.9077], [-0.0043, -0.1635, -0.9164], [-0.0051, -0.2118, -0.9101], [-0.0043, -0.2585, -0.8965], [-0.0043, -0.2113, -0.9077], [-0.0051, -0.3058, -0.8853], [-0.0043, -0.2585, -0.8965], [-0.0051, -0.2591, -0.8989], [-0.0051, -0.3517, -0.8694], [-0.0043, -0.305, -0.883], [-0.0051, -0.3058, -0.8853], [-0.0051, -0.3517, -0.8694], [-0.0043, -0.3958, -0.8488], [-0.0043, -0.3508, -0.867], [-0.0051, -0.4408, -0.8304], [-0.0043, -0.3958, -0.8488], [-0.0051, -0.3968, -0.851], [-0.0051, -0.4837, -0.8076], [-0.0043, -0.4397, -0.8282], [-0.0051, -0.4408, -0.8304], [-0.0051, -0.5254, -0.7825], [-0.0043, -0.4825, -0.8054], [-0.0051, -0.4837, -0.8076], [-0.0051, -0.5658, -0.7554], [-0.0043, -0.5241, -0.7805], [-0.0051, -0.5254, -0.7825], [-0.0051, -0.5658, -0.7554], [-0.0043, -0.6031, -0.7243], [-0.0043, -0.5643, -0.7534], [-0.0051, -0.642, -0.695], [-0.0043, -0.6031, -0.7243], [-0.0051, -0.6047, -0.7262], [-0.0051, -0.642, -0.695], [-0.0043, -0.676, -0.6602], [-0.0043, -0.6404, -0.6932], [-0.0051, -0.7116, -0.6272], [-0.0043, -0.676, -0.6602], [-0.0051, -0.6777, -0.662], [-0.0051, -0.7116, -0.6272], [-0.0043, -0.7418, -0.5891], [-0.0043, -0.7098, -0.6255], [-0.0051, -0.7437, -0.5907], [-0.0043, -0.7719, -0.551], [-0.0043, -0.7418, -0.5891], [-0.0051, -0.7739, -0.5525], [-0.0043, -0.8001, -0.5115], [-0.0043, -0.7719, -0.551], [-0.0051, -0.8282, -0.4719], [-0.0043, -0.8001, -0.5115], [-0.0051, -0.8021, -0.5129], [-0.0051, -0.8522, -0.4295], [-0.0043, -0.8261, -0.4706], [-0.0051, -0.8282, -0.4719], [-0.0051, -0.8522, -0.4295], [-0.0043, -0.8717, -0.385], [-0.0043, -0.85, -0.4284], [-0.0051, -0.8739, -0.386], [-0.0043, -0.8911, -0.3405], [-0.0043, -0.8717, -0.385], [-0.0051, -0.8934, -0.3415], [-0.0043, -0.9082, -0.2952], [-0.0043, -0.8911, -0.3405], [-0.0051, -0.9253, -0.2496], [-0.0043, -0.9082, -0.2952], [-0.0051, -0.9105, -0.296], [-0.0051, -0.9377, -0.2026], [-0.0043, -0.9229, -0.249], [-0.0051, -0.9253, -0.2496], [-0.0051, -0.9476, -0.155], [-0.0043, -0.9353, -0.2021], [-0.0051, -0.9377, -0.2026], [-0.0051, -0.9551, -0.107], [-0.0043, -0.9452, -0.1546], [-0.0051, -0.9476, -0.155], [-0.0051, -0.9601, -0.0586], [-0.0043, -0.9527, -0.1066], [-0.0051, -0.9551, -0.107], [-0.0051, -0.9601, -0.0586], [-0.0043, -0.9602, -0.01], [-0.0043, -0.9577, -0.0584], [-0.0051, -0.9626, 0.0386], [-0.0043, -0.9602, -0.01], [-0.0051, -0.9626, -0.01], [-0.0051, -0.9601, 0.0872], [-0.0043, -0.9602, 0.0385], [-0.0051, -0.9626, 0.0386], [-0.0051, -0.9601, 0.0872], [-0.0043, -0.9527, 0.1352], [-0.0043, -0.9577, 0.087], [-0.0051, -0.9551, 0.1355], [-0.0043, -0.9452, 0.1832], [-0.0043, -0.9527, 0.1352], [-0.0051, -0.9377, 0.2312], [-0.0043, -0.9452, 0.1832], [-0.0051, -0.9476, 0.1836], [-0.0051, -0.9377, 0.2312], [-0.0043, -0.9229, 0.2775], [-0.0043, -0.9353, 0.2306], [-0.0051, -0.9253, 0.2782], [-0.0043, -0.9082, 0.3237], [-0.0043, -0.9229, 0.2775], [-0.0051, -0.9105, 0.3245], [-0.0043, -0.8911, 0.3691], [-0.0043, -0.9082, 0.3237], [-0.0051, -0.8934, 0.3701], [-0.0043, -0.8717, 0.4136], [-0.0043, -0.8911, 0.3691], [-0.0051, -0.8522, 0.4581], [-0.0043, -0.8717, 0.4136], [-0.0051, -0.8739, 0.4146], [-0.0051, -0.8282, 0.5004], [-0.0043, -0.85, 0.457], [-0.0051, -0.8522, 0.4581], [-0.0051, -0.8021, 0.5415], [-0.0043, -0.8261, 0.4992], [-0.0051, -0.8282, 0.5004], [-0.0051, -0.8021, 0.5415], [-0.0043, -0.7719, 0.5796], [-0.0043, -0.8001, 0.5401], [-0.0051, -0.7437, 0.6192], [-0.0043, -0.7719, 0.5796], [-0.0051, -0.7739, 0.5811], [-0.0051, -0.7437, 0.6192], [-0.0043, -0.7098, 0.6541], [-0.0043, -0.7418, 0.6177], [-0.0051, -0.7116, 0.6558], [-0.0043, -0.676, 0.6888], [-0.0043, -0.7098, 0.6541], [-0.0051, -0.6777, 0.6906], [-0.0043, -0.6404, 0.7218], [-0.0043, -0.676, 0.6888], [-0.0051, -0.642, 0.7236], [-0.0043, -0.6031, 0.7528], [-0.0043, -0.6404, 0.7218], [-0.0051, -0.6047, 0.7548], [-0.0043, -0.5643, 0.782], [-0.0043, -0.6031, 0.7528], [-0.0051, -0.5658, 0.784], [-0.0043, -0.5241, 0.809], [-0.0043, -0.5643, 0.782], [-0.0051, -0.5254, 0.8111], [-0.0043, -0.4825, 0.834], [-0.0043, -0.5241, 0.809], [-0.0051, -0.4837, 0.8361], [-0.0043, -0.4397, 0.8568], [-0.0043, -0.4825, 0.834], [-0.0051, -0.4408, 0.859], [-0.0043, -0.3958, 0.8774], [-0.0043, -0.4397, 0.8568], [-0.0051, -0.3968, 0.8796], [-0.0043, -0.3508, 0.8956], [-0.0043, -0.3958, 0.8774], [-0.0051, -0.3058, 0.9139], [-0.0043, -0.3508, 0.8956], [-0.0051, -0.3517, 0.8979], [-0.0051, -0.3058, 0.9139], [-0.0043, -0.2585, 0.9251], [-0.0043, -0.305, 0.9116], [-0.0051, -0.2591, 0.9275], [-0.0043, -0.2113, 0.9363], [-0.0043, -0.2585, 0.9251], [-0.0051, -0.1639, 0.9474], [-0.0043, -0.2113, 0.9363], [-0.0051, -0.2118, 0.9387], [-0.0051, -0.1156, 0.9536], [-0.0043, -0.1635, 0.945], [-0.0051, -0.1639, 0.9474], [-0.0131, -0.0576, 0.9573], [-0.0043, -0.1153, 0.9512], [-0.0051, -0.1156, 0.9536], [-0.0116, -0.0579, -0.9354], [-0.0563, -0.0324, -0.9301], [-0.0484, -0.0316, -0.9581], [-0.0116, -0.0579, -0.9354], [-0.0051, -0.1156, -0.9251], [-0.0131, -0.0576, -0.9287], [-0.0045, -0.1158, -0.9277], [-0.0051, -0.1639, -0.9188], [-0.0051, -0.1156, -0.9251], [-0.0045, -0.2123, -0.9126], [-0.0051, -0.1639, -0.9188], [-0.0045, -0.1643, -0.9214], [-0.0045, -0.2598, -0.9014], [-0.0051, -0.2118, -0.9101], [-0.0045, -0.2123, -0.9126], [-0.0045, -0.3066, -0.8878], [-0.0051, -0.2591, -0.8989], [-0.0045, -0.2598, -0.9014], [-0.0045, -0.3526, -0.8718], [-0.0051, -0.3058, -0.8853], [-0.0045, -0.3066, -0.8878], [-0.0045, -0.3978, -0.8534], [-0.0051, -0.3517, -0.8694], [-0.0045, -0.3526, -0.8718], [-0.0045, -0.442, -0.8327], [-0.0051, -0.3968, -0.851], [-0.0045, -0.3978, -0.8534], [-0.0045, -0.485, -0.8098], [-0.0051, -0.4408, -0.8304], [-0.0045, -0.442, -0.8327], [-0.0045, -0.485, -0.8098], [-0.0051, -0.5254, -0.7825], [-0.0051, -0.4837, -0.8076], [-0.0045, -0.5268, -0.7847], [-0.0051, -0.5658, -0.7554], [-0.0051, -0.5254, -0.7825], [-0.0045, -0.6063, -0.7282], [-0.0051, -0.5658, -0.7554], [-0.0045, -0.5673, -0.7575], [-0.0045, -0.6063, -0.7282], [-0.0051, -0.642, -0.695], [-0.0051, -0.6047, -0.7262], [-0.0045, -0.6795, -0.6639], [-0.0051, -0.642, -0.695], [-0.0045, -0.6437, -0.697], [-0.0045, -0.7135, -0.6289], [-0.0051, -0.6777, -0.662], [-0.0045, -0.6795, -0.6639], [-0.0045, -0.7457, -0.5923], [-0.0051, -0.7116, -0.6272], [-0.0045, -0.7135, -0.6289], [-0.0045, -0.776, -0.5541], [-0.0051, -0.7437, -0.5907], [-0.0045, -0.7457, -0.5923], [-0.0045, -0.8043, -0.5143], [-0.0051, -0.7739, -0.5525], [-0.0045, -0.776, -0.5541], [-0.0045, -0.8043, -0.5143], [-0.0051, -0.8282, -0.4719], [-0.0051, -0.8021, -0.5129], [-0.0045, -0.8544, -0.4308], [-0.0051, -0.8282, -0.4719], [-0.0045, -0.8304, -0.4732], [-0.0045, -0.8762, -0.3871], [-0.0051, -0.8522, -0.4295], [-0.0045, -0.8544, -0.4308], [-0.0045, -0.8762, -0.3871], [-0.0051, -0.8934, -0.3415], [-0.0051, -0.8739, -0.386], [-0.0045, -0.913, -0.2968], [-0.0051, -0.8934, -0.3415], [-0.0045, -0.8958, -0.3425], [-0.0045, -0.9278, -0.2504], [-0.0051, -0.9105, -0.296], [-0.0045, -0.913, -0.2968], [-0.0045, -0.9402, -0.2032], [-0.0051, -0.9253, -0.2496], [-0.0045, -0.9278, -0.2504], [-0.0045, -0.9502, -0.1555], [-0.0051, -0.9377, -0.2026], [-0.0045, -0.9402, -0.2032], [-0.0045, -0.9502, -0.1555], [-0.0051, -0.9551, -0.107], [-0.0051, -0.9476, -0.155], [-0.0045, -0.9627, -0.0588], [-0.0051, -0.9551, -0.107], [-0.0045, -0.9577, -0.1073], [-0.0045, -0.9627, -0.0588], [-0.0051, -0.9626, -0.01], [-0.0051, -0.9601, -0.0586], [-0.0045, -0.9652, 0.0387], [-0.0051, -0.9626, -0.01], [-0.0045, -0.9652, -0.0101], [-0.0045, -0.9652, 0.0387], [-0.0051, -0.9601, 0.0872], [-0.0051, -0.9626, 0.0386], [-0.0045, -0.9577, 0.1359], [-0.0051, -0.9601, 0.0872], [-0.0045, -0.9627, 0.0874], [-0.0045, -0.9502, 0.1841], [-0.0051, -0.9551, 0.1355], [-0.0045, -0.9577, 0.1359], [-0.0045, -0.9402, 0.2318], [-0.0051, -0.9476, 0.1836], [-0.0045, -0.9502, 0.1841], [-0.0045, -0.9402, 0.2318], [-0.0051, -0.9253, 0.2782], [-0.0051, -0.9377, 0.2312], [-0.0045, -0.9278, 0.2789], [-0.0051, -0.9105, 0.3245], [-0.0051, -0.9253, 0.2782], [-0.0045, -0.8958, 0.371], [-0.0051, -0.9105, 0.3245], [-0.0045, -0.913, 0.3254], [-0.0045, -0.8762, 0.4157], [-0.0051, -0.8934, 0.3701], [-0.0045, -0.8958, 0.371], [-0.0045, -0.8762, 0.4157], [-0.0051, -0.8522, 0.4581], [-0.0051, -0.8739, 0.4146], [-0.0045, -0.8544, 0.4593], [-0.0051, -0.8282, 0.5004], [-0.0051, -0.8522, 0.4581], [-0.0045, -0.8304, 0.5018], [-0.0051, -0.8021, 0.5415], [-0.0051, -0.8282, 0.5004], [-0.0045, -0.8043, 0.5429], [-0.0051, -0.7739, 0.5811], [-0.0051, -0.8021, 0.5415], [-0.0045, -0.776, 0.5827], [-0.0051, -0.7437, 0.6192], [-0.0051, -0.7739, 0.5811], [-0.0045, -0.7135, 0.6575], [-0.0051, -0.7437, 0.6192], [-0.0045, -0.7457, 0.6209], [-0.0045, -0.6795, 0.6924], [-0.0051, -0.7116, 0.6558], [-0.0045, -0.7135, 0.6575], [-0.0045, -0.6437, 0.7256], [-0.0051, -0.6777, 0.6906], [-0.0045, -0.6795, 0.6924], [-0.0045, -0.6437, 0.7256], [-0.0051, -0.6047, 0.7548], [-0.0051, -0.642, 0.7236], [-0.0045, -0.6063, 0.7568], [-0.0051, -0.5658, 0.784], [-0.0051, -0.6047, 0.7548], [-0.0045, -0.5673, 0.7861], [-0.0051, -0.5254, 0.8111], [-0.0051, -0.5658, 0.784], [-0.0045, -0.485, 0.8384], [-0.0051, -0.5254, 0.8111], [-0.0045, -0.5268, 0.8133], [-0.0045, -0.442, 0.8613], [-0.0051, -0.4837, 0.8361], [-0.0045, -0.485, 0.8384], [-0.0045, -0.442, 0.8613], [-0.0051, -0.3968, 0.8796], [-0.0051, -0.4408, 0.859], [-0.0045, -0.3526, 0.9004], [-0.0051, -0.3968, 0.8796], [-0.0045, -0.3978, 0.882], [-0.0045, -0.3066, 0.9164], [-0.0051, -0.3517, 0.8979], [-0.0045, -0.3526, 0.9004], [-0.0045, -0.2598, 0.93], [-0.0051, -0.3058, 0.9139], [-0.0045, -0.3066, 0.9164], [-0.0045, -0.2598, 0.93], [-0.0051, -0.2118, 0.9387], [-0.0051, -0.2591, 0.9275], [-0.0045, -0.2123, 0.9412], [-0.0051, -0.1639, 0.9474], [-0.0051, -0.2118, 0.9387], [-0.0045, -0.1158, 0.9562], [-0.0051, -0.1639, 0.9474], [-0.0045, -0.1643, 0.95], [-0.0116, -0.0579, 0.964], [-0.0051, -0.1156, 0.9536], [-0.0045, -0.1158, 0.9562], [-0.0068, -0.0582, -0.9405], [-0.0484, -0.0316, -0.9581], [-0.0278, -0.031, -0.9783], [-0.0068, -0.0582, -0.9405], [-0.0045, -0.1158, -0.9277], [-0.0116, -0.0579, -0.9354], [-0.0027, -0.116, -0.9296], [-0.0045, -0.1643, -0.9214], [-0.0045, -0.1158, -0.9277], [-0.0026, -0.1646, -0.9233], [-0.0045, -0.2123, -0.9126], [-0.0045, -0.1643, -0.9214], [-0.0026, -0.2127, -0.9146], [-0.0045, -0.2598, -0.9014], [-0.0045, -0.2123, -0.9126], [-0.0026, -0.2603, -0.9034], [-0.0045, -0.3066, -0.8878], [-0.0045, -0.2598, -0.9014], [-0.0026, -0.3072, -0.8897], [-0.0045, -0.3526, -0.8718], [-0.0045, -0.3066, -0.8878], [-0.0026, -0.3533, -0.8736], [-0.0045, -0.3978, -0.8534], [-0.0045, -0.3526, -0.8718], [-0.0026, -0.4428, -0.8345], [-0.0045, -0.3978, -0.8534], [-0.0026, -0.3986, -0.8552], [-0.0026, -0.486, -0.8115], [-0.0045, -0.442, -0.8327], [-0.0026, -0.4428, -0.8345], [-0.0026, -0.486, -0.8115], [-0.0045, -0.5268, -0.7847], [-0.0045, -0.485, -0.8098], [-0.0026, -0.5279, -0.7864], [-0.0045, -0.5673, -0.7575], [-0.0045, -0.5268, -0.7847], [-0.0026, -0.5684, -0.7591], [-0.0045, -0.6063, -0.7282], [-0.0045, -0.5673, -0.7575], [-0.0026, -0.6075, -0.7298], [-0.0045, -0.6437, -0.697], [-0.0045, -0.6063, -0.7282], [-0.0026, -0.645, -0.6985], [-0.0045, -0.6795, -0.6639], [-0.0045, -0.6437, -0.697], [-0.0026, -0.6809, -0.6653], [-0.0045, -0.7135, -0.6289], [-0.0045, -0.6795, -0.6639], [-0.0026, -0.7473, -0.5936], [-0.0045, -0.7135, -0.6289], [-0.0026, -0.715, -0.6303], [-0.0026, -0.7776, -0.5553], [-0.0045, -0.7457, -0.5923], [-0.0026, -0.7473, -0.5936], [-0.0026, -0.8059, -0.5154], [-0.0045, -0.776, -0.5541], [-0.0026, -0.7776, -0.5553], [-0.0026, -0.8321, -0.4742], [-0.0045, -0.8043, -0.5143], [-0.0026, -0.8059, -0.5154], [-0.0026, -0.8321, -0.4742], [-0.0045, -0.8544, -0.4308], [-0.0045, -0.8304, -0.4732], [-0.0026, -0.8562, -0.4317], [-0.0045, -0.8762, -0.3871], [-0.0045, -0.8544, -0.4308], [-0.0026, -0.878, -0.388], [-0.0045, -0.8958, -0.3425], [-0.0045, -0.8762, -0.3871], [-0.0026, -0.8976, -0.3432], [-0.0045, -0.913, -0.2968], [-0.0045, -0.8958, -0.3425], [-0.0026, -0.9148, -0.2975], [-0.0045, -0.9278, -0.2504], [-0.0045, -0.913, -0.2968], [-0.0026, -0.9297, -0.2509], [-0.0045, -0.9402, -0.2032], [-0.0045, -0.9278, -0.2504], [-0.0026, -0.9521, -0.1558], [-0.0045, -0.9402, -0.2032], [-0.0026, -0.9421, -0.2037], [-0.0026, -0.9521, -0.1558], [-0.0045, -0.9577, -0.1073], [-0.0045, -0.9502, -0.1555], [-0.0026, -0.9647, -0.0589], [-0.0045, -0.9577, -0.1073], [-0.0026, -0.9597, -0.1076], [-0.0026, -0.9647, -0.0589], [-0.0045, -0.9652, -0.0101], [-0.0045, -0.9627, -0.0588], [-0.0026, -0.9672, 0.0387], [-0.0045, -0.9652, -0.0101], [-0.0026, -0.9672, -0.0101], [-0.0026, -0.9672, 0.0387], [-0.0045, -0.9627, 0.0874], [-0.0045, -0.9652, 0.0387], [-0.0026, -0.9597, 0.1361], [-0.0045, -0.9627, 0.0874], [-0.0026, -0.9647, 0.0875], [-0.0026, -0.9521, 0.1844], [-0.0045, -0.9577, 0.1359], [-0.0026, -0.9597, 0.1361], [-0.0026, -0.9521, 0.1844], [-0.0045, -0.9402, 0.2318], [-0.0045, -0.9502, 0.1841], [-0.0026, -0.9297, 0.2795], [-0.0045, -0.9402, 0.2318], [-0.0026, -0.9421, 0.2322], [-0.0026, -0.9297, 0.2795], [-0.0045, -0.913, 0.3254], [-0.0045, -0.9278, 0.2789], [-0.0026, -0.8976, 0.3718], [-0.0045, -0.913, 0.3254], [-0.0026, -0.9148, 0.3261], [-0.0026, -0.8976, 0.3718], [-0.0045, -0.8762, 0.4157], [-0.0045, -0.8958, 0.371], [-0.0026, -0.8562, 0.4603], [-0.0045, -0.8762, 0.4157], [-0.0026, -0.878, 0.4166], [-0.0026, -0.8321, 0.5028], [-0.0045, -0.8544, 0.4593], [-0.0026, -0.8562, 0.4603], [-0.0026, -0.8059, 0.544], [-0.0045, -0.8304, 0.5018], [-0.0026, -0.8321, 0.5028], [-0.0026, -0.7776, 0.5838], [-0.0045, -0.8043, 0.5429], [-0.0026, -0.8059, 0.544], [-0.0026, -0.7473, 0.6222], [-0.0045, -0.776, 0.5827], [-0.0026, -0.7776, 0.5838], [-0.0026, -0.715, 0.6589], [-0.0045, -0.7457, 0.6209], [-0.0026, -0.7473, 0.6222], [-0.0026, -0.6809, 0.6939], [-0.0045, -0.7135, 0.6575], [-0.0026, -0.715, 0.6589], [-0.0026, -0.645, 0.7271], [-0.0045, -0.6795, 0.6924], [-0.0026, -0.6809, 0.6939], [-0.0026, -0.6075, 0.7584], [-0.0045, -0.6437, 0.7256], [-0.0026, -0.645, 0.7271], [-0.0026, -0.5684, 0.7877], [-0.0045, -0.6063, 0.7568], [-0.0026, -0.6075, 0.7584], [-0.0026, -0.5279, 0.815], [-0.0045, -0.5673, 0.7861], [-0.0026, -0.5684, 0.7877], [-0.0026, -0.5279, 0.815], [-0.0045, -0.485, 0.8384], [-0.0045, -0.5268, 0.8133], [-0.0026, -0.486, 0.8401], [-0.0045, -0.442, 0.8613], [-0.0045, -0.485, 0.8384], [-0.0026, -0.4429, 0.8631], [-0.0045, -0.3978, 0.882], [-0.0045, -0.442, 0.8613], [-0.0026, -0.3986, 0.8838], [-0.0045, -0.3526, 0.9004], [-0.0045, -0.3978, 0.882], [-0.0026, -0.3533, 0.9022], [-0.0045, -0.3066, 0.9164], [-0.0045, -0.3526, 0.9004], [-0.0026, -0.2603, 0.9319], [-0.0045, -0.3066, 0.9164], [-0.0026, -0.3072, 0.9183], [-0.0026, -0.2127, 0.9432], [-0.0045, -0.2598, 0.93], [-0.0026, -0.2603, 0.9319], [-0.0026, -0.2127, 0.9432], [-0.0045, -0.1643, 0.95], [-0.0045, -0.2123, 0.9412], [-0.0027, -0.116, 0.9582], [-0.0045, -0.1643, 0.95], [-0.0026, -0.1646, 0.9519], [-0.0068, -0.0582, 0.9691], [-0.0045, -0.1158, 0.9562], [-0.0027, -0.116, 0.9582], [-0.0, -0.0583, -0.9424], [-0.0278, -0.031, -0.9783], [-0.0, -0.0308, -0.9856], [-0.0, -0.0583, -0.9424], [-0.0027, -0.116, -0.9296], [-0.0068, -0.0582, -0.9405], [-0.0, -0.1161, -0.9304], [-0.0026, -0.1646, -0.9233], [-0.0027, -0.116, -0.9296], [-0.0, -0.1647, -0.9241], [-0.0026, -0.2127, -0.9146], [-0.0026, -0.1646, -0.9233], [-0.0, -0.2604, -0.9041], [-0.0026, -0.2127, -0.9146], [-0.0, -0.2128, -0.9153], [-0.0, -0.3074, -0.8904], [-0.0026, -0.2603, -0.9034], [-0.0, -0.2604, -0.9041], [-0.0, -0.3536, -0.8743], [-0.0026, -0.3072, -0.8897], [-0.0, -0.3074, -0.8904], [-0.0, -0.3989, -0.8559], [-0.0026, -0.3533, -0.8736], [-0.0, -0.3536, -0.8743], [-0.0, -0.3989, -0.8559], [-0.0026, -0.4428, -0.8345], [-0.0026, -0.3986, -0.8552], [-0.0, -0.4432, -0.8352], [-0.0026, -0.486, -0.8115], [-0.0026, -0.4428, -0.8345], [-0.0, -0.5283, -0.787], [-0.0026, -0.486, -0.8115], [-0.0, -0.4863, -0.8122], [-0.0, -0.5283, -0.787], [-0.0026, -0.5684, -0.7591], [-0.0026, -0.5279, -0.7864], [-0.0, -0.5688, -0.7597], [-0.0026, -0.6075, -0.7298], [-0.0026, -0.5684, -0.7591], [-0.0, -0.608, -0.7304], [-0.0026, -0.645, -0.6985], [-0.0026, -0.6075, -0.7298], [-0.0, -0.6814, -0.6658], [-0.0026, -0.645, -0.6985], [-0.0, -0.6455, -0.699], [-0.0, -0.7155, -0.6308], [-0.0026, -0.6809, -0.6653], [-0.0, -0.6814, -0.6658], [-0.0, -0.7155, -0.6308], [-0.0026, -0.7473, -0.5936], [-0.0026, -0.715, -0.6303], [-0.0, -0.7478, -0.5941], [-0.0026, -0.7776, -0.5553], [-0.0026, -0.7473, -0.5936], [-0.0, -0.7782, -0.5557], [-0.0026, -0.8059, -0.5154], [-0.0026, -0.7776, -0.5553], [-0.0, -0.8328, -0.4746], [-0.0026, -0.8059, -0.5154], [-0.0, -0.8065, -0.5159], [-0.0, -0.8568, -0.432], [-0.0026, -0.8321, -0.4742], [-0.0, -0.8328, -0.4746], [-0.0, -0.8787, -0.3883], [-0.0026, -0.8562, -0.4317], [-0.0, -0.8568, -0.432], [-0.0, -0.8983, -0.3435], [-0.0026, -0.878, -0.388], [-0.0, -0.8787, -0.3883], [-0.0, -0.9155, -0.2977], [-0.0026, -0.8976, -0.3432], [-0.0, -0.8983, -0.3435], [-0.0, -0.9304, -0.2511], [-0.0026, -0.9148, -0.2975], [-0.0, -0.9155, -0.2977], [-0.0, -0.9429, -0.2038], [-0.0026, -0.9297, -0.2509], [-0.0, -0.9304, -0.2511], [-0.0, -0.9529, -0.156], [-0.0026, -0.9421, -0.2037], [-0.0, -0.9429, -0.2038], [-0.0, -0.9529, -0.156], [-0.0026, -0.9597, -0.1076], [-0.0026, -0.9521, -0.1558], [-0.0, -0.9654, -0.059], [-0.0026, -0.9597, -0.1076], [-0.0, -0.9604, -0.1076], [-0.0, -0.9679, -0.0102], [-0.0026, -0.9647, -0.0589], [-0.0, -0.9654, -0.059], [-0.0, -0.9679, 0.0387], [-0.0026, -0.9672, -0.0101], [-0.0, -0.9679, -0.0102], [-0.0, -0.9679, 0.0387], [-0.0026, -0.9647, 0.0875], [-0.0026, -0.9672, 0.0387], [-0.0, -0.9604, 0.1362], [-0.0026, -0.9647, 0.0875], [-0.0, -0.9654, 0.0876], [-0.0, -0.9529, 0.1845], [-0.0026, -0.9597, 0.1361], [-0.0, -0.9604, 0.1362], [-0.0, -0.9529, 0.1845], [-0.0026, -0.9421, 0.2322], [-0.0026, -0.9521, 0.1844], [-0.0, -0.9429, 0.2324], [-0.0026, -0.9297, 0.2795], [-0.0026, -0.9421, 0.2322], [-0.0, -0.9155, 0.3263], [-0.0026, -0.9297, 0.2795], [-0.0, -0.9304, 0.2797], [-0.0, -0.9155, 0.3263], [-0.0026, -0.8976, 0.3718], [-0.0026, -0.9148, 0.3261], [-0.0, -0.8787, 0.4169], [-0.0026, -0.8976, 0.3718], [-0.0, -0.8983, 0.3721], [-0.0, -0.8568, 0.4606], [-0.0026, -0.878, 0.4166], [-0.0, -0.8787, 0.4169], [-0.0, -0.8568, 0.4606], [-0.0026, -0.8321, 0.5028], [-0.0026, -0.8562, 0.4603], [-0.0, -0.8328, 0.5032], [-0.0026, -0.8059, 0.544], [-0.0026, -0.8321, 0.5028], [-0.0, -0.8065, 0.5444], [-0.0026, -0.7776, 0.5838], [-0.0026, -0.8059, 0.544], [-0.0, -0.7478, 0.6226], [-0.0026, -0.7776, 0.5838], [-0.0, -0.7782, 0.5843], [-0.0, -0.7155, 0.6594], [-0.0026, -0.7473, 0.6222], [-0.0, -0.7478, 0.6226], [-0.0, -0.7155, 0.6594], [-0.0026, -0.6809, 0.6939], [-0.0026, -0.715, 0.6589], [-0.0, -0.6814, 0.6944], [-0.0026, -0.645, 0.7271], [-0.0026, -0.6809, 0.6939], [-0.0, -0.6455, 0.7276], [-0.0026, -0.6075, 0.7584], [-0.0026, -0.645, 0.7271], [-0.0, -0.5688, 0.7883], [-0.0026, -0.6075, 0.7584], [-0.0, -0.608, 0.7589], [-0.0, -0.5283, 0.8156], [-0.0026, -0.5684, 0.7877], [-0.0, -0.5688, 0.7883], [-0.0, -0.4863, 0.8408], [-0.0026, -0.5279, 0.815], [-0.0, -0.5283, 0.8156], [-0.0, -0.4432, 0.8638], [-0.0026, -0.486, 0.8401], [-0.0, -0.4863, 0.8408], [-0.0, -0.3989, 0.8845], [-0.0026, -0.4429, 0.8631], [-0.0, -0.4432, 0.8638], [-0.0, -0.3536, 0.9029], [-0.0026, -0.3986, 0.8838], [-0.0, -0.3989, 0.8845], [-0.0, -0.3536, 0.9029], [-0.0026, -0.3072, 0.9183], [-0.0026, -0.3533, 0.9022], [-0.0, -0.3074, 0.919], [-0.0026, -0.2603, 0.9319], [-0.0026, -0.3072, 0.9183], [-0.0, -0.2128, 0.9439], [-0.0026, -0.2603, 0.9319], [-0.0, -0.2604, 0.9326], [-0.0, -0.1647, 0.9526], [-0.0026, -0.2127, 0.9432], [-0.0, -0.2128, 0.9439], [-0.0, -0.1161, 0.9589], [-0.0026, -0.1646, 0.9519], [-0.0, -0.1647, 0.9526], [-0.0, -0.0583, 0.971], [-0.0027, -0.116, 0.9582], [-0.0, -0.1161, 0.9589], [0.0278, -0.031, -0.9783], [-0.0, -0.0583, -0.9424], [-0.0, -0.0308, -0.9856], [0.0027, -0.116, -0.9296], [-0.0, -0.0583, -0.9424], [0.0068, -0.0582, -0.9405], [0.0026, -0.1646, -0.9233], [-0.0, -0.1161, -0.9304], [0.0027, -0.116, -0.9296], [0.0026, -0.2127, -0.9146], [-0.0, -0.1647, -0.9241], [0.0026, -0.1646, -0.9233], [0.0026, -0.2603, -0.9034], [-0.0, -0.2128, -0.9153], [0.0026, -0.2127, -0.9146], [0.0026, -0.2603, -0.9034], [-0.0, -0.3074, -0.8904], [-0.0, -0.2604, -0.9041], [0.0026, -0.3072, -0.8897], [-0.0, -0.3536, -0.8743], [-0.0, -0.3074, -0.8904], [0.0026, -0.3533, -0.8736], [-0.0, -0.3989, -0.8559], [-0.0, -0.3536, -0.8743], [0.0026, -0.4428, -0.8345], [-0.0, -0.3989, -0.8559], [0.0026, -0.3986, -0.8552], [0.0026, -0.486, -0.8115], [-0.0, -0.4432, -0.8352], [0.0026, -0.4428, -0.8345], [0.0026, -0.486, -0.8115], [-0.0, -0.5283, -0.787], [-0.0, -0.4863, -0.8122], [0.0026, -0.5279, -0.7864], [-0.0, -0.5688, -0.7597], [-0.0, -0.5283, -0.787], [0.0026, -0.5684, -0.7591], [-0.0, -0.608, -0.7304], [-0.0, -0.5688, -0.7597], [0.0026, -0.645, -0.6985], [-0.0, -0.608, -0.7304], [0.0026, -0.6075, -0.7298], [0.0026, -0.6809, -0.6653], [-0.0, -0.6455, -0.699], [0.0026, -0.645, -0.6985], [0.0026, -0.715, -0.6303], [-0.0, -0.6814, -0.6658], [0.0026, -0.6809, -0.6653], [0.0026, -0.7473, -0.5936], [-0.0, -0.7155, -0.6308], [0.0026, -0.715, -0.6303], [0.0026, -0.7776, -0.5553], [-0.0, -0.7478, -0.5941], [0.0026, -0.7473, -0.5936], [0.0026, -0.8059, -0.5154], [-0.0, -0.7782, -0.5557], [0.0026, -0.7776, -0.5553], [0.0026, -0.8321, -0.4742], [-0.0, -0.8065, -0.5159], [0.0026, -0.8059, -0.5154], [0.0026, -0.8321, -0.4742], [-0.0, -0.8568, -0.432], [-0.0, -0.8328, -0.4746], [0.0026, -0.878, -0.388], [-0.0, -0.8568, -0.432], [0.0026, -0.8562, -0.4317], [0.0026, -0.8976, -0.3432], [-0.0, -0.8787, -0.3883], [0.0026, -0.878, -0.388], [0.0026, -0.8976, -0.3432], [-0.0, -0.9155, -0.2977], [-0.0, -0.8983, -0.3435], [0.0026, -0.9148, -0.2975], [-0.0, -0.9304, -0.2511], [-0.0, -0.9155, -0.2977], [0.0026, -0.9421, -0.2037], [-0.0, -0.9304, -0.2511], [0.0026, -0.9297, -0.2509], [0.0026, -0.9521, -0.1558], [-0.0, -0.9429, -0.2038], [0.0026, -0.9421, -0.2037], [0.0026, -0.9597, -0.1076], [-0.0, -0.9529, -0.156], [0.0026, -0.9521, -0.1558], [0.0026, -0.9647, -0.0589], [-0.0, -0.9604, -0.1076], [0.0026, -0.9597, -0.1076], [0.0026, -0.9672, -0.0101], [-0.0, -0.9654, -0.059], [0.0026, -0.9647, -0.0589], [0.0026, -0.9672, 0.0387], [-0.0, -0.9679, -0.0102], [0.0026, -0.9672, -0.0101], [0.0026, -0.9647, 0.0875], [-0.0, -0.9679, 0.0387], [0.0026, -0.9672, 0.0387], [0.0026, -0.9597, 0.1361], [-0.0, -0.9654, 0.0876], [0.0026, -0.9647, 0.0875], [0.0026, -0.9597, 0.1361], [-0.0, -0.9529, 0.1845], [-0.0, -0.9604, 0.1362], [0.0026, -0.9421, 0.2322], [-0.0, -0.9529, 0.1845], [0.0026, -0.9521, 0.1844], [0.0026, -0.9421, 0.2322], [-0.0, -0.9304, 0.2797], [-0.0, -0.9429, 0.2324], [0.0026, -0.9148, 0.3261], [-0.0, -0.9304, 0.2797], [0.0026, -0.9297, 0.2795], [0.0026, -0.9148, 0.3261], [-0.0, -0.8983, 0.3721], [-0.0, -0.9155, 0.3263], [0.0026, -0.8976, 0.3718], [-0.0, -0.8787, 0.4169], [-0.0, -0.8983, 0.3721], [0.0026, -0.878, 0.4166], [-0.0, -0.8568, 0.4606], [-0.0, -0.8787, 0.4169], [0.0026, -0.8321, 0.5028], [-0.0, -0.8568, 0.4606], [0.0026, -0.8562, 0.4603], [0.0026, -0.8059, 0.544], [-0.0, -0.8328, 0.5032], [0.0026, -0.8321, 0.5028], [0.0026, -0.8059, 0.544], [-0.0, -0.7782, 0.5843], [-0.0, -0.8065, 0.5444], [0.0026, -0.7776, 0.5838], [-0.0, -0.7478, 0.6226], [-0.0, -0.7782, 0.5843], [0.0026, -0.7473, 0.6222], [-0.0, -0.7155, 0.6594], [-0.0, -0.7478, 0.6226], [0.0026, -0.6809, 0.6939], [-0.0, -0.7155, 0.6594], [0.0026, -0.715, 0.6589], [0.0026, -0.6809, 0.6939], [-0.0, -0.6455, 0.7276], [-0.0, -0.6814, 0.6944], [0.0026, -0.645, 0.7271], [-0.0, -0.608, 0.7589], [-0.0, -0.6455, 0.7276], [0.0026, -0.6075, 0.7584], [-0.0, -0.5688, 0.7883], [-0.0, -0.608, 0.7589], [0.0026, -0.5684, 0.7877], [-0.0, -0.5283, 0.8156], [-0.0, -0.5688, 0.7883], [0.0026, -0.5279, 0.815], [-0.0, -0.4863, 0.8408], [-0.0, -0.5283, 0.8156], [0.0026, -0.486, 0.8401], [-0.0, -0.4432, 0.8638], [-0.0, -0.4863, 0.8408], [0.0026, -0.4429, 0.8631], [-0.0, -0.3989, 0.8845], [-0.0, -0.4432, 0.8638], [0.0026, -0.3533, 0.9022], [-0.0, -0.3989, 0.8845], [0.0026, -0.3986, 0.8838], [0.0026, -0.3072, 0.9183], [-0.0, -0.3536, 0.9029], [0.0026, -0.3533, 0.9022], [0.0026, -0.2603, 0.9319], [-0.0, -0.3074, 0.919], [0.0026, -0.3072, 0.9183], [0.0026, -0.2603, 0.9319], [-0.0, -0.2128, 0.9439], [-0.0, -0.2604, 0.9326], [0.0026, -0.2127, 0.9432], [-0.0, -0.1647, 0.9526], [-0.0, -0.2128, 0.9439], [0.0026, -0.1646, 0.9519], [-0.0, -0.1161, 0.9589], [-0.0, -0.1647, 0.9526], [0.0027, -0.116, 0.9582], [-0.0, -0.0583, 0.971], [-0.0, -0.1161, 0.9589], [0.0484, -0.0316, -0.9581], [0.0068, -0.0582, -0.9405], [0.0278, -0.031, -0.9783], [0.0045, -0.1158, -0.9277], [0.0068, -0.0582, -0.9405], [0.0116, -0.0579, -0.9354], [0.0045, -0.1643, -0.9214], [0.0027, -0.116, -0.9296], [0.0045, -0.1158, -0.9277], [0.0045, -0.1643, -0.9214], [0.0026, -0.2127, -0.9146], [0.0026, -0.1646, -0.9233], [0.0045, -0.2598, -0.9014], [0.0026, -0.2127, -0.9146], [0.0045, -0.2123, -0.9126], [0.0045, -0.2598, -0.9014], [0.0026, -0.3072, -0.8897], [0.0026, -0.2603, -0.9034], [0.0045, -0.3066, -0.8878], [0.0026, -0.3533, -0.8736], [0.0026, -0.3072, -0.8897], [0.0045, -0.3526, -0.8718], [0.0026, -0.3986, -0.8552], [0.0026, -0.3533, -0.8736], [0.0045, -0.3978, -0.8534], [0.0026, -0.4428, -0.8345], [0.0026, -0.3986, -0.8552], [0.0045, -0.442, -0.8327], [0.0026, -0.486, -0.8115], [0.0026, -0.4428, -0.8345], [0.0045, -0.5268, -0.7847], [0.0026, -0.486, -0.8115], [0.0045, -0.485, -0.8098], [0.0045, -0.5673, -0.7575], [0.0026, -0.5279, -0.7864], [0.0045, -0.5268, -0.7847], [0.0045, -0.6063, -0.7282], [0.0026, -0.5684, -0.7591], [0.0045, -0.5673, -0.7575], [0.0045, -0.6437, -0.697], [0.0026, -0.6075, -0.7298], [0.0045, -0.6063, -0.7282], [0.0045, -0.6795, -0.6639], [0.0026, -0.645, -0.6985], [0.0045, -0.6437, -0.697], [0.0045, -0.7135, -0.6289], [0.0026, -0.6809, -0.6653], [0.0045, -0.6795, -0.6639], [0.0045, -0.7457, -0.5923], [0.0026, -0.715, -0.6303], [0.0045, -0.7135, -0.6289], [0.0045, -0.776, -0.5541], [0.0026, -0.7473, -0.5936], [0.0045, -0.7457, -0.5923], [0.0045, -0.776, -0.5541], [0.0026, -0.8059, -0.5154], [0.0026, -0.7776, -0.5553], [0.0045, -0.8043, -0.5143], [0.0026, -0.8321, -0.4742], [0.0026, -0.8059, -0.5154], [0.0045, -0.8544, -0.4308], [0.0026, -0.8321, -0.4742], [0.0045, -0.8304, -0.4732], [0.0045, -0.8544, -0.4308], [0.0026, -0.878, -0.388], [0.0026, -0.8562, -0.4317], [0.0045, -0.8958, -0.3425], [0.0026, -0.878, -0.388], [0.0045, -0.8762, -0.3871], [0.0045, -0.913, -0.2968], [0.0026, -0.8976, -0.3432], [0.0045, -0.8958, -0.3425], [0.0045, -0.9278, -0.2504], [0.0026, -0.9148, -0.2975], [0.0045, -0.913, -0.2968], [0.0045, -0.9402, -0.2032], [0.0026, -0.9297, -0.2509], [0.0045, -0.9278, -0.2504], [0.0045, -0.9402, -0.2032], [0.0026, -0.9521, -0.1558], [0.0026, -0.9421, -0.2037], [0.0045, -0.9502, -0.1555], [0.0026, -0.9597, -0.1076], [0.0026, -0.9521, -0.1558], [0.0045, -0.9577, -0.1073], [0.0026, -0.9647, -0.0589], [0.0026, -0.9597, -0.1076], [0.0045, -0.9652, -0.0101], [0.0026, -0.9647, -0.0589], [0.0045, -0.9627, -0.0588], [0.0045, -0.9652, 0.0387], [0.0026, -0.9672, -0.0101], [0.0045, -0.9652, -0.0101], [0.0045, -0.9627, 0.0874], [0.0026, -0.9672, 0.0387], [0.0045, -0.9652, 0.0387], [0.0045, -0.9627, 0.0874], [0.0026, -0.9597, 0.1361], [0.0026, -0.9647, 0.0875], [0.0045, -0.9577, 0.1359], [0.0026, -0.9521, 0.1844], [0.0026, -0.9597, 0.1361], [0.0045, -0.9502, 0.1841], [0.0026, -0.9421, 0.2322], [0.0026, -0.9521, 0.1844], [0.0045, -0.9278, 0.2789], [0.0026, -0.9421, 0.2322], [0.0045, -0.9402, 0.2318], [0.0045, -0.913, 0.3254], [0.0026, -0.9297, 0.2795], [0.0045, -0.9278, 0.2789], [0.0045, -0.913, 0.3254], [0.0026, -0.8976, 0.3718], [0.0026, -0.9148, 0.3261], [0.0045, -0.8762, 0.4157], [0.0026, -0.8976, 0.3718], [0.0045, -0.8958, 0.371], [0.0045, -0.8544, 0.4593], [0.0026, -0.878, 0.4166], [0.0045, -0.8762, 0.4157], [0.0045, -0.8544, 0.4593], [0.0026, -0.8321, 0.5028], [0.0026, -0.8562, 0.4603], [0.0045, -0.8304, 0.5018], [0.0026, -0.8059, 0.544], [0.0026, -0.8321, 0.5028], [0.0045, -0.8043, 0.5429], [0.0026, -0.7776, 0.5838], [0.0026, -0.8059, 0.544], [0.0045, -0.776, 0.5827], [0.0026, -0.7473, 0.6222], [0.0026, -0.7776, 0.5838], [0.0045, -0.7457, 0.6209], [0.0026, -0.715, 0.6589], [0.0026, -0.7473, 0.6222], [0.0045, -0.7135, 0.6575], [0.0026, -0.6809, 0.6939], [0.0026, -0.715, 0.6589], [0.0045, -0.6437, 0.7256], [0.0026, -0.6809, 0.6939], [0.0045, -0.6795, 0.6924], [0.0045, -0.6063, 0.7568], [0.0026, -0.645, 0.7271], [0.0045, -0.6437, 0.7256], [0.0045, -0.5673, 0.7861], [0.0026, -0.6075, 0.7584], [0.0045, -0.6063, 0.7568], [0.0045, -0.5268, 0.8133], [0.0026, -0.5684, 0.7877], [0.0045, -0.5673, 0.7861], [0.0045, -0.485, 0.8384], [0.0026, -0.5279, 0.815], [0.0045, -0.5268, 0.8133], [0.0045, -0.442, 0.8613], [0.0026, -0.486, 0.8401], [0.0045, -0.485, 0.8384], [0.0045, -0.3978, 0.882], [0.0026, -0.4429, 0.8631], [0.0045, -0.442, 0.8613], [0.0045, -0.3526, 0.9004], [0.0026, -0.3986, 0.8838], [0.0045, -0.3978, 0.882], [0.0045, -0.3066, 0.9164], [0.0026, -0.3533, 0.9022], [0.0045, -0.3526, 0.9004], [0.0045, -0.2598, 0.93], [0.0026, -0.3072, 0.9183], [0.0045, -0.3066, 0.9164], [0.0045, -0.2598, 0.93], [0.0026, -0.2127, 0.9432], [0.0026, -0.2603, 0.9319], [0.0045, -0.1643, 0.95], [0.0026, -0.2127, 0.9432], [0.0045, -0.2123, 0.9412], [0.0045, -0.1643, 0.95], [0.0027, -0.116, 0.9582], [0.0026, -0.1646, 0.9519], [0.0045, -0.1158, 0.9562], [0.0068, -0.0582, 0.9691], [0.0027, -0.116, 0.9582], [0.0563, -0.0324, -0.9301], [0.0116, -0.0579, -0.9354], [0.0484, -0.0316, -0.9581], [0.0051, -0.1156, -0.9251], [0.0116, -0.0579, -0.9354], [0.0131, -0.0576, -0.9287], [0.0051, -0.1639, -0.9188], [0.0045, -0.1158, -0.9277], [0.0051, -0.1156, -0.9251], [0.0051, -0.1639, -0.9188], [0.0045, -0.2123, -0.9126], [0.0045, -0.1643, -0.9214], [0.0051, -0.2591, -0.8989], [0.0045, -0.2123, -0.9126], [0.0051, -0.2118, -0.9101], [0.0051, -0.3058, -0.8853], [0.0045, -0.2598, -0.9014], [0.0051, -0.2591, -0.8989], [0.0051, -0.3058, -0.8853], [0.0045, -0.3526, -0.8718], [0.0045, -0.3066, -0.8878], [0.0051, -0.3968, -0.851], [0.0045, -0.3526, -0.8718], [0.0051, -0.3517, -0.8694], [0.0051, -0.4408, -0.8304], [0.0045, -0.3978, -0.8534], [0.0051, -0.3968, -0.851], [0.0051, -0.4837, -0.8076], [0.0045, -0.442, -0.8327], [0.0051, -0.4408, -0.8304], [0.0051, -0.5254, -0.7825], [0.0045, -0.485, -0.8098], [0.0051, -0.4837, -0.8076], [0.0051, -0.5658, -0.7554], [0.0045, -0.5268, -0.7847], [0.0051, -0.5254, -0.7825], [0.0051, -0.5658, -0.7554], [0.0045, -0.6063, -0.7282], [0.0045, -0.5673, -0.7575], [0.0051, -0.6047, -0.7262], [0.0045, -0.6437, -0.697], [0.0045, -0.6063, -0.7282], [0.0051, -0.642, -0.695], [0.0045, -0.6795, -0.6639], [0.0045, -0.6437, -0.697], [0.0051, -0.6777, -0.662], [0.0045, -0.7135, -0.6289], [0.0045, -0.6795, -0.6639], [0.0051, -0.7116, -0.6272], [0.0045, -0.7457, -0.5923], [0.0045, -0.7135, -0.6289], [0.0051, -0.7437, -0.5907], [0.0045, -0.776, -0.5541], [0.0045, -0.7457, -0.5923], [0.0051, -0.8021, -0.5129], [0.0045, -0.776, -0.5541], [0.0051, -0.7739, -0.5525], [0.0051, -0.8282, -0.4719], [0.0045, -0.8043, -0.5143], [0.0051, -0.8021, -0.5129], [0.0051, -0.8282, -0.4719], [0.0045, -0.8544, -0.4308], [0.0045, -0.8304, -0.4732], [0.0051, -0.8739, -0.386], [0.0045, -0.8544, -0.4308], [0.0051, -0.8522, -0.4295], [0.0051, -0.8934, -0.3415], [0.0045, -0.8762, -0.3871], [0.0051, -0.8739, -0.386], [0.0051, -0.8934, -0.3415], [0.0045, -0.913, -0.2968], [0.0045, -0.8958, -0.3425], [0.0051, -0.9105, -0.296], [0.0045, -0.9278, -0.2504], [0.0045, -0.913, -0.2968], [0.0051, -0.9377, -0.2026], [0.0045, -0.9278, -0.2504], [0.0051, -0.9253, -0.2496], [0.0051, -0.9476, -0.155], [0.0045, -0.9402, -0.2032], [0.0051, -0.9377, -0.2026], [0.0051, -0.9551, -0.107], [0.0045, -0.9502, -0.1555], [0.0051, -0.9476, -0.155], [0.0051, -0.9601, -0.0586], [0.0045, -0.9577, -0.1073], [0.0051, -0.9551, -0.107], [0.0051, -0.9626, -0.01], [0.0045, -0.9627, -0.0588], [0.0051, -0.9601, -0.0586], [0.0051, -0.9626, 0.0386], [0.0045, -0.9652, -0.0101], [0.0051, -0.9626, -0.01], [0.0051, -0.9626, 0.0386], [0.0045, -0.9627, 0.0874], [0.0045, -0.9652, 0.0387], [0.0051, -0.9601, 0.0872], [0.0045, -0.9577, 0.1359], [0.0045, -0.9627, 0.0874], [0.0051, -0.9476, 0.1836], [0.0045, -0.9577, 0.1359], [0.0051, -0.9551, 0.1355], [0.0051, -0.9377, 0.2312], [0.0045, -0.9502, 0.1841], [0.0051, -0.9476, 0.1836], [0.0051, -0.9377, 0.2312], [0.0045, -0.9278, 0.2789], [0.0045, -0.9402, 0.2318], [0.0051, -0.9105, 0.3245], [0.0045, -0.9278, 0.2789], [0.0051, -0.9253, 0.2782], [0.0051, -0.9105, 0.3245], [0.0045, -0.8958, 0.371], [0.0045, -0.913, 0.3254], [0.0051, -0.8934, 0.3701], [0.0045, -0.8762, 0.4157], [0.0045, -0.8958, 0.371], [0.0051, -0.8522, 0.4581], [0.0045, -0.8762, 0.4157], [0.0051, -0.8739, 0.4146], [0.0051, -0.8282, 0.5004], [0.0045, -0.8544, 0.4593], [0.0051, -0.8522, 0.4581], [0.0051, -0.8021, 0.5415], [0.0045, -0.8304, 0.5018], [0.0051, -0.8282, 0.5004], [0.0051, -0.7739, 0.5811], [0.0045, -0.8043, 0.5429], [0.0051, -0.8021, 0.5415], [0.0051, -0.7739, 0.5811], [0.0045, -0.7457, 0.6209], [0.0045, -0.776, 0.5827], [0.0051, -0.7437, 0.6192], [0.0045, -0.7135, 0.6575], [0.0045, -0.7457, 0.6209], [0.0051, -0.6777, 0.6906], [0.0045, -0.7135, 0.6575], [0.0051, -0.7116, 0.6558], [0.0051, -0.6777, 0.6906], [0.0045, -0.6437, 0.7256], [0.0045, -0.6795, 0.6924], [0.0051, -0.6047, 0.7548], [0.0045, -0.6437, 0.7256], [0.0051, -0.642, 0.7236], [0.0051, -0.6047, 0.7548], [0.0045, -0.5673, 0.7861], [0.0045, -0.6063, 0.7568], [0.0051, -0.5658, 0.784], [0.0045, -0.5268, 0.8133], [0.0045, -0.5673, 0.7861], [0.0051, -0.5254, 0.8111], [0.0045, -0.485, 0.8384], [0.0045, -0.5268, 0.8133], [0.0051, -0.4408, 0.859], [0.0045, -0.485, 0.8384], [0.0051, -0.4837, 0.8361], [0.0051, -0.3968, 0.8796], [0.0045, -0.442, 0.8613], [0.0051, -0.4408, 0.859], [0.0051, -0.3968, 0.8796], [0.0045, -0.3526, 0.9004], [0.0045, -0.3978, 0.882], [0.0051, -0.3517, 0.8979], [0.0045, -0.3066, 0.9164], [0.0045, -0.3526, 0.9004], [0.0051, -0.3058, 0.9139], [0.0045, -0.2598, 0.93], [0.0045, -0.3066, 0.9164], [0.0051, -0.2118, 0.9387], [0.0045, -0.2598, 0.93], [0.0051, -0.2591, 0.9275], [0.0051, -0.1639, 0.9474], [0.0045, -0.2123, 0.9412], [0.0051, -0.2118, 0.9387], [0.0051, -0.1639, 0.9474], [0.0045, -0.1158, 0.9562], [0.0045, -0.1643, 0.95], [0.0051, -0.1156, 0.9536], [0.0116, -0.0579, 0.964], [0.0045, -0.1158, 0.9562], [0.0491, -0.0331, -0.9017], [0.0131, -0.0576, -0.9287], [0.0563, -0.0324, -0.9301], [0.0043, -0.1153, -0.9226], [0.0131, -0.0576, -0.9287], [0.0111, -0.0572, -0.9223], [0.0043, -0.1635, -0.9164], [0.0051, -0.1156, -0.9251], [0.0043, -0.1153, -0.9226], [0.0043, -0.2113, -0.9077], [0.0051, -0.1639, -0.9188], [0.0043, -0.1635, -0.9164], [0.0043, -0.2585, -0.8965], [0.0051, -0.2118, -0.9101], [0.0043, -0.2113, -0.9077], [0.0043, -0.2585, -0.8965], [0.0051, -0.3058, -0.8853], [0.0051, -0.2591, -0.8989], [0.0043, -0.305, -0.883], [0.0051, -0.3517, -0.8694], [0.0051, -0.3058, -0.8853], [0.0043, -0.3958, -0.8488], [0.0051, -0.3517, -0.8694], [0.0043, -0.3508, -0.867], [0.0043, -0.4397, -0.8282], [0.0051, -0.3968, -0.851], [0.0043, -0.3958, -0.8488], [0.0043, -0.4397, -0.8282], [0.0051, -0.4837, -0.8076], [0.0051, -0.4408, -0.8304], [0.0043, -0.4825, -0.8054], [0.0051, -0.5254, -0.7825], [0.0051, -0.4837, -0.8076], [0.0043, -0.5241, -0.7805], [0.0051, -0.5658, -0.7554], [0.0051, -0.5254, -0.7825], [0.0043, -0.5643, -0.7534], [0.0051, -0.6047, -0.7262], [0.0051, -0.5658, -0.7554], [0.0043, -0.6031, -0.7243], [0.0051, -0.642, -0.695], [0.0051, -0.6047, -0.7262], [0.0043, -0.6404, -0.6932], [0.0051, -0.6777, -0.662], [0.0051, -0.642, -0.695], [0.0043, -0.676, -0.6602], [0.0051, -0.7116, -0.6272], [0.0051, -0.6777, -0.662], [0.0043, -0.7418, -0.5891], [0.0051, -0.7116, -0.6272], [0.0043, -0.7098, -0.6255], [0.0043, -0.7719, -0.551], [0.0051, -0.7437, -0.5907], [0.0043, -0.7418, -0.5891], [0.0043, -0.7719, -0.551], [0.0051, -0.8021, -0.5129], [0.0051, -0.7739, -0.5525], [0.0043, -0.8001, -0.5115], [0.0051, -0.8282, -0.4719], [0.0051, -0.8021, -0.5129], [0.0043, -0.85, -0.4284], [0.0051, -0.8282, -0.4719], [0.0043, -0.8261, -0.4706], [0.0043, -0.8717, -0.385], [0.0051, -0.8522, -0.4295], [0.0043, -0.85, -0.4284], [0.0043, -0.8911, -0.3405], [0.0051, -0.8739, -0.386], [0.0043, -0.8717, -0.385], [0.0043, -0.9082, -0.2952], [0.0051, -0.8934, -0.3415], [0.0043, -0.8911, -0.3405], [0.0043, -0.9082, -0.2952], [0.0051, -0.9253, -0.2496], [0.0051, -0.9105, -0.296], [0.0043, -0.9229, -0.249], [0.0051, -0.9377, -0.2026], [0.0051, -0.9253, -0.2496], [0.0043, -0.9353, -0.2021], [0.0051, -0.9476, -0.155], [0.0051, -0.9377, -0.2026], [0.0043, -0.9452, -0.1546], [0.0051, -0.9551, -0.107], [0.0051, -0.9476, -0.155], [0.0043, -0.9527, -0.1066], [0.0051, -0.9601, -0.0586], [0.0051, -0.9551, -0.107], [0.0043, -0.9602, -0.01], [0.0051, -0.9601, -0.0586], [0.0043, -0.9577, -0.0584], [0.0043, -0.9602, -0.01], [0.0051, -0.9626, 0.0386], [0.0051, -0.9626, -0.01], [0.0043, -0.9602, 0.0385], [0.0051, -0.9601, 0.0872], [0.0051, -0.9626, 0.0386], [0.0043, -0.9527, 0.1352], [0.0051, -0.9601, 0.0872], [0.0043, -0.9577, 0.087], [0.0043, -0.9452, 0.1832], [0.0051, -0.9551, 0.1355], [0.0043, -0.9527, 0.1352], [0.0043, -0.9452, 0.1832], [0.0051, -0.9377, 0.2312], [0.0051, -0.9476, 0.1836], [0.0043, -0.9353, 0.2306], [0.0051, -0.9253, 0.2782], [0.0051, -0.9377, 0.2312], [0.0043, -0.9082, 0.3237], [0.0051, -0.9253, 0.2782], [0.0043, -0.9229, 0.2775], [0.0043, -0.9082, 0.3237], [0.0051, -0.8934, 0.3701], [0.0051, -0.9105, 0.3245], [0.0043, -0.8911, 0.3691], [0.0051, -0.8739, 0.4146], [0.0051, -0.8934, 0.3701], [0.0043, -0.8717, 0.4136], [0.0051, -0.8522, 0.4581], [0.0051, -0.8739, 0.4146], [0.0043, -0.85, 0.457], [0.0051, -0.8282, 0.5004], [0.0051, -0.8522, 0.4581], [0.0043, -0.8261, 0.4992], [0.0051, -0.8021, 0.5415], [0.0051, -0.8282, 0.5004], [0.0043, -0.8001, 0.5401], [0.0051, -0.7739, 0.5811], [0.0051, -0.8021, 0.5415], [0.0043, -0.7719, 0.5796], [0.0051, -0.7437, 0.6192], [0.0051, -0.7739, 0.5811], [0.0043, -0.7418, 0.6177], [0.0051, -0.7116, 0.6558], [0.0051, -0.7437, 0.6192], [0.0043, -0.676, 0.6888], [0.0051, -0.7116, 0.6558], [0.0043, -0.7098, 0.6541], [0.0043, -0.6404, 0.7218], [0.0051, -0.6777, 0.6906], [0.0043, -0.676, 0.6888], [0.0043, -0.6031, 0.7528], [0.0051, -0.642, 0.7236], [0.0043, -0.6404, 0.7218], [0.0043, -0.6031, 0.7528], [0.0051, -0.5658, 0.784], [0.0051, -0.6047, 0.7548], [0.0043, -0.5241, 0.809], [0.0051, -0.5658, 0.784], [0.0043, -0.5643, 0.782], [0.0043, -0.4825, 0.834], [0.0051, -0.5254, 0.8111], [0.0043, -0.5241, 0.809], [0.0043, -0.4397, 0.8568], [0.0051, -0.4837, 0.8361], [0.0043, -0.4825, 0.834], [0.0043, -0.3958, 0.8774], [0.0051, -0.4408, 0.859], [0.0043, -0.4397, 0.8568], [0.0043, -0.3508, 0.8956], [0.0051, -0.3968, 0.8796], [0.0043, -0.3958, 0.8774], [0.0043, -0.305, 0.9116], [0.0051, -0.3517, 0.8979], [0.0043, -0.3508, 0.8956], [0.0043, -0.2585, 0.9251], [0.0051, -0.3058, 0.9139], [0.0043, -0.305, 0.9116], [0.0043, -0.2113, 0.9363], [0.0051, -0.2591, 0.9275], [0.0043, -0.2585, 0.9251], [0.0043, -0.2113, 0.9363], [0.0051, -0.1639, 0.9474], [0.0051, -0.2118, 0.9387], [0.0043, -0.1635, 0.945], [0.0051, -0.1156, 0.9536], [0.0051, -0.1639, 0.9474], [0.0043, -0.1153, 0.9512], [0.0131, -0.0576, 0.9573], [0.0051, -0.1156, 0.9536], [0.0285, -0.0337, -0.8807], [0.0111, -0.0572, -0.9223], [0.0491, -0.0331, -0.9017], [0.0024, -0.1151, -0.9209], [0.0111, -0.0572, -0.9223], [0.0063, -0.057, -0.9179], [0.0024, -0.1633, -0.9147], [0.0043, -0.1153, -0.9226], [0.0024, -0.1151, -0.9209], [0.0024, -0.2109, -0.906], [0.0043, -0.1635, -0.9164], [0.0024, -0.1633, -0.9147], [0.0024, -0.258, -0.8949], [0.0043, -0.2113, -0.9077], [0.0024, -0.2109, -0.906], [0.0024, -0.3045, -0.8813], [0.0043, -0.2585, -0.8965], [0.0024, -0.258, -0.8949], [0.0024, -0.3502, -0.8654], [0.0043, -0.305, -0.883], [0.0024, -0.3045, -0.8813], [0.0024, -0.3951, -0.8472], [0.0043, -0.3508, -0.867], [0.0024, -0.3502, -0.8654], [0.0024, -0.3951, -0.8472], [0.0043, -0.4397, -0.8282], [0.0043, -0.3958, -0.8488], [0.0024, -0.4389, -0.8267], [0.0043, -0.4825, -0.8054], [0.0043, -0.4397, -0.8282], [0.0024, -0.5232, -0.779], [0.0043, -0.4825, -0.8054], [0.0024, -0.4817, -0.8039], [0.0024, -0.5633, -0.752], [0.0043, -0.5241, -0.7805], [0.0024, -0.5232, -0.779], [0.0024, -0.6021, -0.7229], [0.0043, -0.5643, -0.7534], [0.0024, -0.5633, -0.752], [0.0024, -0.6392, -0.6919], [0.0043, -0.6031, -0.7243], [0.0024, -0.6021, -0.7229], [0.0024, -0.6748, -0.659], [0.0043, -0.6404, -0.6932], [0.0024, -0.6392, -0.6919], [0.0024, -0.7086, -0.6243], [0.0043, -0.676, -0.6602], [0.0024, -0.6748, -0.659], [0.0024, -0.7086, -0.6243], [0.0043, -0.7418, -0.5891], [0.0043, -0.7098, -0.6255], [0.0024, -0.7706, -0.55], [0.0043, -0.7418, -0.5891], [0.0024, -0.7405, -0.588], [0.0024, -0.7986, -0.5105], [0.0043, -0.7719, -0.551], [0.0024, -0.7706, -0.55], [0.0024, -0.8246, -0.4697], [0.0043, -0.8001, -0.5115], [0.0024, -0.7986, -0.5105], [0.0024, -0.8484, -0.4276], [0.0043, -0.8261, -0.4706], [0.0024, -0.8246, -0.4697], [0.0024, -0.8484, -0.4276], [0.0043, -0.8717, -0.385], [0.0043, -0.85, -0.4284], [0.0024, -0.8701, -0.3843], [0.0043, -0.8911, -0.3405], [0.0043, -0.8717, -0.385], [0.0024, -0.8895, -0.3399], [0.0043, -0.9082, -0.2952], [0.0043, -0.8911, -0.3405], [0.0024, -0.9213, -0.2485], [0.0043, -0.9082, -0.2952], [0.0024, -0.9066, -0.2946], [0.0024, -0.9336, -0.2017], [0.0043, -0.9229, -0.249], [0.0024, -0.9213, -0.2485], [0.0024, -0.9435, -0.1543], [0.0043, -0.9353, -0.2021], [0.0024, -0.9336, -0.2017], [0.0024, -0.9435, -0.1543], [0.0043, -0.9527, -0.1066], [0.0043, -0.9452, -0.1546], [0.0024, -0.951, -0.1064], [0.0043, -0.9577, -0.0584], [0.0043, -0.9527, -0.1066], [0.0024, -0.9584, -0.0099], [0.0043, -0.9577, -0.0584], [0.0024, -0.9559, -0.0583], [0.0024, -0.9584, -0.0099], [0.0043, -0.9602, 0.0385], [0.0043, -0.9602, -0.01], [0.0024, -0.9584, 0.0385], [0.0043, -0.9577, 0.087], [0.0043, -0.9602, 0.0385], [0.0024, -0.951, 0.135], [0.0043, -0.9577, 0.087], [0.0024, -0.9559, 0.0868], [0.0024, -0.9435, 0.1828], [0.0043, -0.9527, 0.1352], [0.0024, -0.951, 0.135], [0.0024, -0.9336, 0.2302], [0.0043, -0.9452, 0.1832], [0.0024, -0.9435, 0.1828], [0.0024, -0.9336, 0.2302], [0.0043, -0.9229, 0.2775], [0.0043, -0.9353, 0.2306], [0.0024, -0.9213, 0.277], [0.0043, -0.9082, 0.3237], [0.0043, -0.9229, 0.2775], [0.0024, -0.9066, 0.3232], [0.0043, -0.8911, 0.3691], [0.0043, -0.9082, 0.3237], [0.0024, -0.8895, 0.3685], [0.0043, -0.8717, 0.4136], [0.0043, -0.8911, 0.3691], [0.0024, -0.8484, 0.4561], [0.0043, -0.8717, 0.4136], [0.0024, -0.8701, 0.4128], [0.0024, -0.8484, 0.4561], [0.0043, -0.8261, 0.4992], [0.0043, -0.85, 0.457], [0.0024, -0.7986, 0.5391], [0.0043, -0.8261, 0.4992], [0.0024, -0.8246, 0.4983], [0.0024, -0.7706, 0.5786], [0.0043, -0.8001, 0.5401], [0.0024, -0.7986, 0.5391], [0.0024, -0.7706, 0.5786], [0.0043, -0.7418, 0.6177], [0.0043, -0.7719, 0.5796], [0.0024, -0.7086, 0.6529], [0.0043, -0.7418, 0.6177], [0.0024, -0.7405, 0.6165], [0.0024, -0.7086, 0.6529], [0.0043, -0.676, 0.6888], [0.0043, -0.7098, 0.6541], [0.0024, -0.6748, 0.6876], [0.0043, -0.6404, 0.7218], [0.0043, -0.676, 0.6888], [0.0024, -0.6392, 0.7205], [0.0043, -0.6031, 0.7528], [0.0043, -0.6404, 0.7218], [0.0024, -0.6021, 0.7515], [0.0043, -0.5643, 0.782], [0.0043, -0.6031, 0.7528], [0.0024, -0.5633, 0.7805], [0.0043, -0.5241, 0.809], [0.0043, -0.5643, 0.782], [0.0024, -0.5232, 0.8076], [0.0043, -0.4825, 0.834], [0.0043, -0.5241, 0.809], [0.0024, -0.4389, 0.8552], [0.0043, -0.4825, 0.834], [0.0024, -0.4817, 0.8325], [0.0024, -0.3951, 0.8758], [0.0043, -0.4397, 0.8568], [0.0024, -0.4389, 0.8552], [0.0024, -0.3502, 0.894], [0.0043, -0.3958, 0.8774], [0.0024, -0.3951, 0.8758], [0.0024, -0.3502, 0.894], [0.0043, -0.305, 0.9116], [0.0043, -0.3508, 0.8956], [0.0024, -0.3045, 0.9099], [0.0043, -0.2585, 0.9251], [0.0043, -0.305, 0.9116], [0.0024, -0.258, 0.9234], [0.0043, -0.2113, 0.9363], [0.0043, -0.2585, 0.9251], [0.0024, -0.2109, 0.9346], [0.0043, -0.1635, 0.945], [0.0043, -0.2113, 0.9363], [0.0024, -0.1633, 0.9432], [0.0043, -0.1153, 0.9512], [0.0043, -0.1635, 0.945], [0.0024, -0.1151, 0.9495], [0.0111, -0.0572, 0.9509], [0.0043, -0.1153, 0.9512], [-0.0, -0.0339, -0.873], [0.0063, -0.057, -0.9179], [0.0285, -0.0337, -0.8807], [-0.0, -0.1151, -0.9203], [0.0063, -0.057, -0.9179], [-0.0, -0.0569, -0.9162], [-0.0, -0.1632, -0.914], [0.0024, -0.1151, -0.9209], [-0.0, -0.1151, -0.9203], [-0.0, -0.1632, -0.914], [0.0024, -0.2109, -0.906], [0.0024, -0.1633, -0.9147], [-0.0, -0.2108, -0.9054], [0.0024, -0.258, -0.8949], [0.0024, -0.2109, -0.906], [-0.0, -0.2579, -0.8943], [0.0024, -0.3045, -0.8813], [0.0024, -0.258, -0.8949], [-0.0, -0.3043, -0.8807], [0.0024, -0.3502, -0.8654], [0.0024, -0.3045, -0.8813], [-0.0, -0.35, -0.8648], [0.0024, -0.3951, -0.8472], [0.0024, -0.3502, -0.8654], [-0.0, -0.3948, -0.8466], [0.0024, -0.4389, -0.8267], [0.0024, -0.3951, -0.8472], [-0.0, -0.4386, -0.8261], [0.0024, -0.4817, -0.8039], [0.0024, -0.4389, -0.8267], [-0.0, -0.4814, -0.8034], [0.0024, -0.5232, -0.779], [0.0024, -0.4817, -0.8039], [-0.0, -0.5228, -0.7785], [0.0024, -0.5633, -0.752], [0.0024, -0.5232, -0.779], [-0.0, -0.563, -0.7515], [0.0024, -0.6021, -0.7229], [0.0024, -0.5633, -0.752], [-0.0, -0.6017, -0.7224], [0.0024, -0.6392, -0.6919], [0.0024, -0.6021, -0.7229], [-0.0, -0.6388, -0.6914], [0.0024, -0.6748, -0.659], [0.0024, -0.6392, -0.6919], [-0.0, -0.6743, -0.6586], [0.0024, -0.7086, -0.6243], [0.0024, -0.6748, -0.659], [-0.0, -0.7081, -0.6239], [0.0024, -0.7405, -0.588], [0.0024, -0.7086, -0.6243], [-0.0, -0.74, -0.5876], [0.0024, -0.7706, -0.55], [0.0024, -0.7405, -0.588], [-0.0, -0.7701, -0.5496], [0.0024, -0.7986, -0.5105], [0.0024, -0.7706, -0.55], [-0.0, -0.7981, -0.5102], [0.0024, -0.8246, -0.4697], [0.0024, -0.7986, -0.5105], [-0.0, -0.8241, -0.4694], [0.0024, -0.8484, -0.4276], [0.0024, -0.8246, -0.4697], [-0.0, -0.8479, -0.4273], [0.0024, -0.8701, -0.3843], [0.0024, -0.8484, -0.4276], [-0.0, -0.8695, -0.384], [0.0024, -0.8895, -0.3399], [0.0024, -0.8701, -0.3843], [-0.0, -0.8889, -0.3397], [0.0024, -0.9066, -0.2946], [0.0024, -0.8895, -0.3399], [-0.0, -0.906, -0.2944], [0.0024, -0.9213, -0.2485], [0.0024, -0.9066, -0.2946], [-0.0, -0.9207, -0.2483], [0.0024, -0.9336, -0.2017], [0.0024, -0.9213, -0.2485], [-0.0, -0.933, -0.2015], [0.0024, -0.9435, -0.1543], [0.0024, -0.9336, -0.2017], [-0.0, -0.9429, -0.1542], [0.0024, -0.951, -0.1064], [0.0024, -0.9435, -0.1543], [-0.0, -0.9503, -0.1063], [0.0024, -0.9559, -0.0583], [0.0024, -0.951, -0.1064], [-0.0, -0.9553, -0.0582], [0.0024, -0.9584, -0.0099], [0.0024, -0.9559, -0.0583], [-0.0, -0.9578, -0.0099], [0.0024, -0.9584, 0.0385], [0.0024, -0.9584, -0.0099], [-0.0, -0.9578, 0.0385], [0.0024, -0.9559, 0.0868], [0.0024, -0.9584, 0.0385], [-0.0, -0.9553, 0.0868], [0.0024, -0.951, 0.135], [0.0024, -0.9559, 0.0868], [-0.0, -0.9503, 0.1349], [0.0024, -0.9435, 0.1828], [0.0024, -0.951, 0.135], [-0.0, -0.9429, 0.1827], [0.0024, -0.9336, 0.2302], [0.0024, -0.9435, 0.1828], [-0.0, -0.933, 0.2301], [0.0024, -0.9213, 0.277], [0.0024, -0.9336, 0.2302], [-0.0, -0.9207, 0.2769], [0.0024, -0.9066, 0.3232], [0.0024, -0.9213, 0.277], [-0.0, -0.906, 0.323], [0.0024, -0.8895, 0.3685], [0.0024, -0.9066, 0.3232], [-0.0, -0.8889, 0.3682], [0.0024, -0.8701, 0.4128], [0.0024, -0.8895, 0.3685], [-0.0, -0.8695, 0.4126], [0.0024, -0.8484, 0.4561], [0.0024, -0.8701, 0.4128], [-0.0, -0.8479, 0.4558], [0.0024, -0.8246, 0.4983], [0.0024, -0.8484, 0.4561], [-0.0, -0.8241, 0.498], [0.0024, -0.7986, 0.5391], [0.0024, -0.8246, 0.4983], [-0.0, -0.7981, 0.5388], [0.0024, -0.7706, 0.5786], [0.0024, -0.7986, 0.5391], [-0.0, -0.7701, 0.5782], [0.0024, -0.7405, 0.6165], [0.0024, -0.7706, 0.5786], [-0.0, -0.74, 0.6161], [0.0024, -0.7086, 0.6529], [0.0024, -0.7405, 0.6165], [-0.0, -0.7081, 0.6525], [0.0024, -0.6748, 0.6876], [0.0024, -0.7086, 0.6529], [-0.0, -0.6743, 0.6871], [0.0024, -0.6392, 0.7205], [0.0024, -0.6748, 0.6876], [-0.0, -0.6388, 0.72], [0.0024, -0.6021, 0.7515], [0.0024, -0.6392, 0.7205], [-0.0, -0.6017, 0.751], [0.0024, -0.5633, 0.7805], [0.0024, -0.6021, 0.7515], [-0.0, -0.563, 0.78], [0.0024, -0.5232, 0.8076], [0.0024, -0.5633, 0.7805], [-0.0, -0.5228, 0.807], [0.0024, -0.4817, 0.8325], [0.0024, -0.5232, 0.8076], [-0.0, -0.4814, 0.8319], [0.0024, -0.4389, 0.8552], [0.0024, -0.4817, 0.8325], [-0.0, -0.4386, 0.8547], [0.0024, -0.3951, 0.8758], [0.0024, -0.4389, 0.8552], [-0.0, -0.3948, 0.8752], [0.0024, -0.3502, 0.894], [0.0024, -0.3951, 0.8758], [-0.0, -0.35, 0.8934], [0.0024, -0.3045, 0.9099], [0.0024, -0.3502, 0.894], [-0.0, -0.3043, 0.9093], [0.0024, -0.258, 0.9234], [0.0024, -0.3045, 0.9099], [-0.0, -0.2579, 0.9228], [0.0024, -0.2109, 0.9346], [0.0024, -0.258, 0.9234], [-0.0, -0.2108, 0.934], [0.0024, -0.1633, 0.9432], [0.0024, -0.2109, 0.9346], [-0.0, -0.1632, 0.9426], [0.0024, -0.1151, 0.9495], [0.0024, -0.1633, 0.9432], [-0.0, -0.115, 0.9489], [0.0063, -0.057, 0.9464], [0.0024, -0.1151, 0.9495], [0.0035, 0.0318, 0.9604], [0.0036, 0.0317, 0.9563], [-0.0036, 0.0317, 0.9563], [-0.0041, 0.0318, -0.9297], [-0.0021, 0.0317, -0.9261], [0.0041, 0.0318, -0.9297], [-0.0, -0.0308, -0.9856], [0.002, 0.0319, -0.9333], [0.0278, -0.031, -0.9783], [-0.0491, -0.0331, -0.9017], [-0.0021, 0.0317, -0.9261], [-0.0036, 0.0317, -0.9277], [-0.0, -0.0308, 1.0142], [0.002, 0.0319, 0.9618], [-0.0, 0.0319, 0.9624], [-0.0491, -0.0331, 0.9303], [-0.0021, 0.0317, 0.9547], [-0.0285, -0.0337, 0.9093], [0.0484, -0.0316, -0.9581], [0.0041, 0.0318, -0.9297], [0.0563, -0.0324, -0.9301], [-0.0484, -0.0316, -0.9581], [-0.0041, 0.0318, -0.9297], [-0.0035, 0.0318, -0.9318], [0.0484, -0.0316, 0.9867], [0.0041, 0.0318, 0.9583], [0.0035, 0.0318, 0.9604], [-0.0484, -0.0316, 0.9867], [-0.0041, 0.0318, 0.9583], [-0.0563, -0.0324, 0.9587], [0.0491, -0.0331, -0.9017], [0.0021, 0.0317, -0.9261], [0.0285, -0.0337, -0.8807], [-0.0, -0.0308, -0.9856], [-0.002, 0.0319, -0.9333], [-0.0, 0.0319, -0.9338], [-0.0285, -0.0337, -0.8807], [-0.0, 0.0317, -0.9256], [-0.0021, 0.0317, -0.9261], [0.0491, -0.0331, 0.9303], [0.0021, 0.0317, 0.9547], [0.0036, 0.0317, 0.9563], [-0.0, -0.0308, 1.0142], [-0.002, 0.0319, 0.9618], [-0.0278, -0.031, 1.0069], [-0.0285, -0.0337, 0.9093], [-0.0, 0.0317, 0.9542], [-0.0, -0.0339, 0.9015], [0.0278, -0.031, -0.9783], [0.0035, 0.0318, -0.9318], [0.0484, -0.0316, -0.9581], [-0.0563, -0.0324, -0.9301], [-0.0036, 0.0317, -0.9277], [-0.0041, 0.0318, -0.9297], [0.0278, -0.031, 1.0069], [0.0035, 0.0318, 0.9604], [0.002, 0.0319, 0.9618], [-0.0563, -0.0324, 0.9587], [-0.0036, 0.0317, 0.9563], [-0.0491, -0.0331, 0.9303], [0.0563, -0.0324, -0.9301], [0.0036, 0.0317, -0.9277], [0.0491, -0.0331, -0.9017], [-0.0278, -0.031, -0.9783], [-0.0035, 0.0318, -0.9318], [-0.002, 0.0319, -0.9333], [0.0285, -0.0337, -0.8807], [-0.0, 0.0317, -0.9256], [-0.0, -0.0339, -0.873], [0.0563, -0.0324, 0.9587], [0.0036, 0.0317, 0.9563], [0.0041, 0.0318, 0.9583], [-0.0, -0.0339, 0.9015], [0.0285, -0.0337, 0.9093], [0.0063, -0.057, 0.9464], [0.0285, -0.0337, 0.9093], [0.0491, -0.0331, 0.9303], [0.0111, -0.0572, 0.9509], [0.0491, -0.0331, 0.9303], [0.0563, -0.0324, 0.9587], [0.0131, -0.0576, 0.9573], [0.0563, -0.0324, 0.9587], [0.0484, -0.0316, 0.9867], [0.0116, -0.0579, 0.964], [0.0484, -0.0316, 0.9867], [0.0278, -0.031, 1.0069], [0.0068, -0.0582, 0.9691], [0.0278, -0.031, 1.0069], [-0.0, -0.0308, 1.0142], [-0.0, -0.0583, 0.971], [-0.0, -0.0583, 0.971], [-0.0, -0.0308, 1.0142], [-0.0278, -0.031, 1.0069], [-0.0068, -0.0582, 0.9691], [-0.0278, -0.031, 1.0069], [-0.0484, -0.0316, 0.9867], [-0.0116, -0.0579, 0.964], [-0.0484, -0.0316, 0.9867], [-0.0563, -0.0324, 0.9587], [-0.0131, -0.0576, 0.9573], [-0.0563, -0.0324, 0.9587], [-0.0491, -0.0331, 0.9303], [0.0285, -0.0337, 0.9093], [-0.0, -0.0339, 0.9015], [-0.0, 0.0317, 0.9542], [-0.0111, -0.0572, 0.9509], [-0.0491, -0.0331, 0.9303], [-0.0285, -0.0337, 0.9093], [-0.0063, -0.057, 0.9464], [-0.0285, -0.0337, 0.9093], [-0.0, -0.0339, 0.9015], [-0.0278, -0.031, 1.0069], [-0.002, 0.0319, 0.9618], [-0.0035, 0.0318, 0.9604], [-0.0063, -0.057, -0.9179], [-0.0, -0.0569, -0.9162], [-0.0, -0.0339, -0.873], [-0.0063, -0.057, -0.9179], [-0.0024, -0.1151, -0.9209], [-0.0, -0.1151, -0.9203], [-0.0024, -0.1151, -0.9209], [-0.0024, -0.1633, -0.9147], [-0.0, -0.1632, -0.914], [-0.0024, -0.2109, -0.906], [-0.0, -0.2108, -0.9054], [-0.0, -0.1632, -0.914], [-0.0024, -0.258, -0.8949], [-0.0, -0.2579, -0.8943], [-0.0, -0.2108, -0.9054], [-0.0024, -0.3045, -0.8813], [-0.0, -0.3043, -0.8807], [-0.0, -0.2579, -0.8943], [-0.0024, -0.3502, -0.8654], [-0.0, -0.35, -0.8648], [-0.0, -0.3043, -0.8807], [-0.0024, -0.3951, -0.8472], [-0.0, -0.3948, -0.8466], [-0.0, -0.35, -0.8648], [-0.0024, -0.4389, -0.8267], [-0.0, -0.4386, -0.8261], [-0.0, -0.3948, -0.8466], [-0.0024, -0.4817, -0.8039], [-0.0, -0.4814, -0.8034], [-0.0, -0.4386, -0.8261], [-0.0024, -0.5232, -0.779], [-0.0, -0.5228, -0.7785], [-0.0, -0.4814, -0.8034], [-0.0024, -0.5633, -0.752], [-0.0, -0.563, -0.7515], [-0.0, -0.5228, -0.7785], [-0.0024, -0.6021, -0.7229], [-0.0, -0.6017, -0.7224], [-0.0, -0.563, -0.7515], [-0.0024, -0.6392, -0.6919], [-0.0, -0.6388, -0.6914], [-0.0, -0.6017, -0.7224], [-0.0024, -0.6748, -0.659], [-0.0, -0.6743, -0.6586], [-0.0, -0.6388, -0.6914], [-0.0024, -0.7086, -0.6243], [-0.0, -0.7081, -0.6239], [-0.0, -0.6743, -0.6586], [-0.0024, -0.7405, -0.588], [-0.0, -0.74, -0.5876], [-0.0, -0.7081, -0.6239], [-0.0024, -0.7706, -0.55], [-0.0, -0.7701, -0.5496], [-0.0, -0.74, -0.5876], [-0.0024, -0.7986, -0.5105], [-0.0, -0.7981, -0.5102], [-0.0, -0.7701, -0.5496], [-0.0024, -0.8246, -0.4697], [-0.0, -0.8241, -0.4694], [-0.0, -0.7981, -0.5102], [-0.0024, -0.8484, -0.4276], [-0.0, -0.8479, -0.4273], [-0.0, -0.8241, -0.4694], [-0.0024, -0.8701, -0.3843], [-0.0, -0.8695, -0.384], [-0.0, -0.8479, -0.4273], [-0.0024, -0.8895, -0.3399], [-0.0, -0.8889, -0.3397], [-0.0, -0.8695, -0.384], [-0.0024, -0.9066, -0.2946], [-0.0, -0.906, -0.2944], [-0.0, -0.8889, -0.3397], [-0.0024, -0.9213, -0.2485], [-0.0, -0.9207, -0.2483], [-0.0, -0.906, -0.2944], [-0.0024, -0.9336, -0.2017], [-0.0, -0.933, -0.2015], [-0.0, -0.9207, -0.2483], [-0.0024, -0.9435, -0.1543], [-0.0, -0.9429, -0.1542], [-0.0, -0.933, -0.2015], [-0.0024, -0.951, -0.1064], [-0.0, -0.9503, -0.1063], [-0.0, -0.9429, -0.1542], [-0.0024, -0.9559, -0.0583], [-0.0, -0.9553, -0.0582], [-0.0, -0.9503, -0.1063], [-0.0024, -0.9584, -0.0099], [-0.0, -0.9578, -0.0099], [-0.0, -0.9553, -0.0582], [-0.0024, -0.9584, 0.0385], [-0.0, -0.9578, 0.0385], [-0.0, -0.9578, -0.0099], [-0.0024, -0.9559, 0.0868], [-0.0, -0.9553, 0.0868], [-0.0, -0.9578, 0.0385], [-0.0024, -0.951, 0.135], [-0.0, -0.9503, 0.1349], [-0.0, -0.9553, 0.0868], [-0.0024, -0.9435, 0.1828], [-0.0, -0.9429, 0.1827], [-0.0, -0.9503, 0.1349], [-0.0024, -0.9336, 0.2302], [-0.0, -0.933, 0.2301], [-0.0, -0.9429, 0.1827], [-0.0024, -0.9213, 0.277], [-0.0, -0.9207, 0.2769], [-0.0, -0.933, 0.2301], [-0.0024, -0.9066, 0.3232], [-0.0, -0.906, 0.323], [-0.0, -0.9207, 0.2769], [-0.0024, -0.8895, 0.3685], [-0.0, -0.8889, 0.3682], [-0.0, -0.906, 0.323], [-0.0024, -0.8701, 0.4128], [-0.0, -0.8695, 0.4126], [-0.0, -0.8889, 0.3682], [-0.0024, -0.8484, 0.4561], [-0.0, -0.8479, 0.4558], [-0.0, -0.8695, 0.4126], [-0.0024, -0.8246, 0.4983], [-0.0, -0.8241, 0.498], [-0.0, -0.8479, 0.4558], [-0.0024, -0.7986, 0.5391], [-0.0, -0.7981, 0.5388], [-0.0, -0.8241, 0.498], [-0.0024, -0.7706, 0.5786], [-0.0, -0.7701, 0.5782], [-0.0, -0.7981, 0.5388], [-0.0024, -0.7405, 0.6165], [-0.0, -0.74, 0.6161], [-0.0, -0.7701, 0.5782], [-0.0024, -0.7086, 0.6529], [-0.0, -0.7081, 0.6525], [-0.0, -0.74, 0.6161], [-0.0024, -0.6748, 0.6876], [-0.0, -0.6743, 0.6871], [-0.0, -0.7081, 0.6525], [-0.0024, -0.6392, 0.7205], [-0.0, -0.6388, 0.72], [-0.0, -0.6743, 0.6871], [-0.0024, -0.6021, 0.7515], [-0.0, -0.6017, 0.751], [-0.0, -0.6388, 0.72], [-0.0024, -0.5633, 0.7805], [-0.0, -0.563, 0.78], [-0.0, -0.6017, 0.751], [-0.0024, -0.5232, 0.8076], [-0.0, -0.5228, 0.807], [-0.0, -0.563, 0.78], [-0.0024, -0.4817, 0.8325], [-0.0, -0.4814, 0.8319], [-0.0, -0.5228, 0.807], [-0.0024, -0.4389, 0.8552], [-0.0, -0.4386, 0.8547], [-0.0, -0.4814, 0.8319], [-0.0024, -0.3951, 0.8758], [-0.0, -0.3948, 0.8752], [-0.0, -0.4386, 0.8547], [-0.0024, -0.3502, 0.894], [-0.0, -0.35, 0.8934], [-0.0, -0.3948, 0.8752], [-0.0024, -0.3045, 0.9099], [-0.0, -0.3043, 0.9093], [-0.0, -0.35, 0.8934], [-0.0024, -0.258, 0.9234], [-0.0, -0.2579, 0.9228], [-0.0, -0.3043, 0.9093], [-0.0024, -0.2109, 0.9346], [-0.0, -0.2108, 0.934], [-0.0, -0.2579, 0.9228], [-0.0024, -0.1633, 0.9432], [-0.0, -0.1632, 0.9426], [-0.0, -0.2108, 0.934], [-0.0024, -0.1151, 0.9495], [-0.0, -0.115, 0.9489], [-0.0, -0.1632, 0.9426], [-0.0063, -0.057, 0.9464], [-0.0, -0.0569, 0.9448], [-0.0, -0.115, 0.9489], [-0.0111, -0.0572, -0.9223], [-0.0063, -0.057, -0.9179], [-0.0285, -0.0337, -0.8807], [-0.0111, -0.0572, -0.9223], [-0.0043, -0.1153, -0.9226], [-0.0024, -0.1151, -0.9209], [-0.0043, -0.1153, -0.9226], [-0.0043, -0.1635, -0.9164], [-0.0024, -0.1633, -0.9147], [-0.0043, -0.1635, -0.9164], [-0.0043, -0.2113, -0.9077], [-0.0024, -0.2109, -0.906], [-0.0043, -0.2113, -0.9077], [-0.0043, -0.2585, -0.8965], [-0.0024, -0.258, -0.8949], [-0.0043, -0.2585, -0.8965], [-0.0043, -0.305, -0.883], [-0.0024, -0.3045, -0.8813], [-0.0043, -0.305, -0.883], [-0.0043, -0.3508, -0.867], [-0.0024, -0.3502, -0.8654], [-0.0043, -0.3508, -0.867], [-0.0043, -0.3958, -0.8488], [-0.0024, -0.3951, -0.8472], [-0.0043, -0.3958, -0.8488], [-0.0043, -0.4397, -0.8282], [-0.0024, -0.4389, -0.8267], [-0.0043, -0.4825, -0.8054], [-0.0024, -0.4817, -0.8039], [-0.0024, -0.4389, -0.8267], [-0.0043, -0.4825, -0.8054], [-0.0043, -0.5241, -0.7805], [-0.0024, -0.5232, -0.779], [-0.0043, -0.5241, -0.7805], [-0.0043, -0.5643, -0.7534], [-0.0024, -0.5633, -0.752], [-0.0043, -0.6031, -0.7243], [-0.0024, -0.6021, -0.7229], [-0.0024, -0.5633, -0.752], [-0.0043, -0.6404, -0.6932], [-0.0024, -0.6392, -0.6919], [-0.0024, -0.6021, -0.7229], [-0.0043, -0.676, -0.6602], [-0.0024, -0.6748, -0.659], [-0.0024, -0.6392, -0.6919], [-0.0043, -0.676, -0.6602], [-0.0043, -0.7098, -0.6255], [-0.0024, -0.7086, -0.6243], [-0.0043, -0.7098, -0.6255], [-0.0043, -0.7418, -0.5891], [-0.0024, -0.7405, -0.588], [-0.0043, -0.7418, -0.5891], [-0.0043, -0.7719, -0.551], [-0.0024, -0.7706, -0.55], [-0.0043, -0.7719, -0.551], [-0.0043, -0.8001, -0.5115], [-0.0024, -0.7986, -0.5105], [-0.0043, -0.8001, -0.5115], [-0.0043, -0.8261, -0.4706], [-0.0024, -0.8246, -0.4697], [-0.0043, -0.8261, -0.4706], [-0.0043, -0.85, -0.4284], [-0.0024, -0.8484, -0.4276], [-0.0043, -0.8717, -0.385], [-0.0024, -0.8701, -0.3843], [-0.0024, -0.8484, -0.4276], [-0.0043, -0.8911, -0.3405], [-0.0024, -0.8895, -0.3399], [-0.0024, -0.8701, -0.3843], [-0.0043, -0.9082, -0.2952], [-0.0024, -0.9066, -0.2946], [-0.0024, -0.8895, -0.3399], [-0.0043, -0.9229, -0.249], [-0.0024, -0.9213, -0.2485], [-0.0024, -0.9066, -0.2946], [-0.0043, -0.9229, -0.249], [-0.0043, -0.9353, -0.2021], [-0.0024, -0.9336, -0.2017], [-0.0043, -0.9452, -0.1546], [-0.0024, -0.9435, -0.1543], [-0.0024, -0.9336, -0.2017], [-0.0043, -0.9527, -0.1066], [-0.0024, -0.951, -0.1064], [-0.0024, -0.9435, -0.1543], [-0.0043, -0.9577, -0.0584], [-0.0024, -0.9559, -0.0583], [-0.0024, -0.951, -0.1064], [-0.0043, -0.9602, -0.01], [-0.0024, -0.9584, -0.0099], [-0.0024, -0.9559, -0.0583], [-0.0043, -0.9602, 0.0385], [-0.0024, -0.9584, 0.0385], [-0.0024, -0.9584, -0.0099], [-0.0043, -0.9577, 0.087], [-0.0024, -0.9559, 0.0868], [-0.0024, -0.9584, 0.0385], [-0.0043, -0.9577, 0.087], [-0.0043, -0.9527, 0.1352], [-0.0024, -0.951, 0.135], [-0.0043, -0.9452, 0.1832], [-0.0024, -0.9435, 0.1828], [-0.0024, -0.951, 0.135], [-0.0043, -0.9353, 0.2306], [-0.0024, -0.9336, 0.2302], [-0.0024, -0.9435, 0.1828], [-0.0043, -0.9229, 0.2775], [-0.0024, -0.9213, 0.277], [-0.0024, -0.9336, 0.2302], [-0.0043, -0.9082, 0.3237], [-0.0024, -0.9066, 0.3232], [-0.0024, -0.9213, 0.277], [-0.0043, -0.8911, 0.3691], [-0.0024, -0.8895, 0.3685], [-0.0024, -0.9066, 0.3232], [-0.0043, -0.8717, 0.4136], [-0.0024, -0.8701, 0.4128], [-0.0024, -0.8895, 0.3685], [-0.0043, -0.85, 0.457], [-0.0024, -0.8484, 0.4561], [-0.0024, -0.8701, 0.4128], [-0.0043, -0.8261, 0.4992], [-0.0024, -0.8246, 0.4983], [-0.0024, -0.8484, 0.4561], [-0.0043, -0.8001, 0.5401], [-0.0024, -0.7986, 0.5391], [-0.0024, -0.8246, 0.4983], [-0.0043, -0.7719, 0.5796], [-0.0024, -0.7706, 0.5786], [-0.0024, -0.7986, 0.5391], [-0.0043, -0.7418, 0.6177], [-0.0024, -0.7405, 0.6165], [-0.0024, -0.7706, 0.5786], [-0.0043, -0.7418, 0.6177], [-0.0043, -0.7098, 0.6541], [-0.0024, -0.7086, 0.6529], [-0.0043, -0.676, 0.6888], [-0.0024, -0.6748, 0.6876], [-0.0024, -0.7086, 0.6529], [-0.0043, -0.6404, 0.7218], [-0.0024, -0.6392, 0.7205], [-0.0024, -0.6748, 0.6876], [-0.0043, -0.6031, 0.7528], [-0.0024, -0.6021, 0.7515], [-0.0024, -0.6392, 0.7205], [-0.0043, -0.5643, 0.782], [-0.0024, -0.5633, 0.7805], [-0.0024, -0.6021, 0.7515], [-0.0043, -0.5241, 0.809], [-0.0024, -0.5232, 0.8076], [-0.0024, -0.5633, 0.7805], [-0.0043, -0.4825, 0.834], [-0.0024, -0.4817, 0.8325], [-0.0024, -0.5232, 0.8076], [-0.0043, -0.4825, 0.834], [-0.0043, -0.4397, 0.8568], [-0.0024, -0.4389, 0.8552], [-0.0043, -0.4397, 0.8568], [-0.0043, -0.3958, 0.8774], [-0.0024, -0.3951, 0.8758], [-0.0043, -0.3958, 0.8774], [-0.0043, -0.3508, 0.8956], [-0.0024, -0.3502, 0.894], [-0.0043, -0.305, 0.9116], [-0.0024, -0.3045, 0.9099], [-0.0024, -0.3502, 0.894], [-0.0043, -0.2585, 0.9251], [-0.0024, -0.258, 0.9234], [-0.0024, -0.3045, 0.9099], [-0.0043, -0.2113, 0.9363], [-0.0024, -0.2109, 0.9346], [-0.0024, -0.258, 0.9234], [-0.0043, -0.1635, 0.945], [-0.0024, -0.1633, 0.9432], [-0.0024, -0.2109, 0.9346], [-0.0043, -0.1153, 0.9512], [-0.0024, -0.1151, 0.9495], [-0.0024, -0.1633, 0.9432], [-0.0111, -0.0572, 0.9509], [-0.0063, -0.057, 0.9464], [-0.0024, -0.1151, 0.9495], [-0.0131, -0.0576, -0.9287], [-0.0111, -0.0572, -0.9223], [-0.0491, -0.0331, -0.9017], [-0.0131, -0.0576, -0.9287], [-0.0051, -0.1156, -0.9251], [-0.0043, -0.1153, -0.9226], [-0.0051, -0.1156, -0.9251], [-0.0051, -0.1639, -0.9188], [-0.0043, -0.1635, -0.9164], [-0.0051, -0.1639, -0.9188], [-0.0051, -0.2118, -0.9101], [-0.0043, -0.2113, -0.9077], [-0.0051, -0.2118, -0.9101], [-0.0051, -0.2591, -0.8989], [-0.0043, -0.2585, -0.8965], [-0.0051, -0.3058, -0.8853], [-0.0043, -0.305, -0.883], [-0.0043, -0.2585, -0.8965], [-0.0051, -0.3517, -0.8694], [-0.0043, -0.3508, -0.867], [-0.0043, -0.305, -0.883], [-0.0051, -0.3517, -0.8694], [-0.0051, -0.3968, -0.851], [-0.0043, -0.3958, -0.8488], [-0.0051, -0.4408, -0.8304], [-0.0043, -0.4397, -0.8282], [-0.0043, -0.3958, -0.8488], [-0.0051, -0.4837, -0.8076], [-0.0043, -0.4825, -0.8054], [-0.0043, -0.4397, -0.8282], [-0.0051, -0.5254, -0.7825], [-0.0043, -0.5241, -0.7805], [-0.0043, -0.4825, -0.8054], [-0.0051, -0.5658, -0.7554], [-0.0043, -0.5643, -0.7534], [-0.0043, -0.5241, -0.7805], [-0.0051, -0.5658, -0.7554], [-0.0051, -0.6047, -0.7262], [-0.0043, -0.6031, -0.7243], [-0.0051, -0.642, -0.695], [-0.0043, -0.6404, -0.6932], [-0.0043, -0.6031, -0.7243], [-0.0051, -0.642, -0.695], [-0.0051, -0.6777, -0.662], [-0.0043, -0.676, -0.6602], [-0.0051, -0.7116, -0.6272], [-0.0043, -0.7098, -0.6255], [-0.0043, -0.676, -0.6602], [-0.0051, -0.7116, -0.6272], [-0.0051, -0.7437, -0.5907], [-0.0043, -0.7418, -0.5891], [-0.0051, -0.7437, -0.5907], [-0.0051, -0.7739, -0.5525], [-0.0043, -0.7719, -0.551], [-0.0051, -0.7739, -0.5525], [-0.0051, -0.8021, -0.5129], [-0.0043, -0.8001, -0.5115], [-0.0051, -0.8282, -0.4719], [-0.0043, -0.8261, -0.4706], [-0.0043, -0.8001, -0.5115], [-0.0051, -0.8522, -0.4295], [-0.0043, -0.85, -0.4284], [-0.0043, -0.8261, -0.4706], [-0.0051, -0.8522, -0.4295], [-0.0051, -0.8739, -0.386], [-0.0043, -0.8717, -0.385], [-0.0051, -0.8739, -0.386], [-0.0051, -0.8934, -0.3415], [-0.0043, -0.8911, -0.3405], [-0.0051, -0.8934, -0.3415], [-0.0051, -0.9105, -0.296], [-0.0043, -0.9082, -0.2952], [-0.0051, -0.9253, -0.2496], [-0.0043, -0.9229, -0.249], [-0.0043, -0.9082, -0.2952], [-0.0051, -0.9377, -0.2026], [-0.0043, -0.9353, -0.2021], [-0.0043, -0.9229, -0.249], [-0.0051, -0.9476, -0.155], [-0.0043, -0.9452, -0.1546], [-0.0043, -0.9353, -0.2021], [-0.0051, -0.9551, -0.107], [-0.0043, -0.9527, -0.1066], [-0.0043, -0.9452, -0.1546], [-0.0051, -0.9601, -0.0586], [-0.0043, -0.9577, -0.0584], [-0.0043, -0.9527, -0.1066], [-0.0051, -0.9601, -0.0586], [-0.0051, -0.9626, -0.01], [-0.0043, -0.9602, -0.01], [-0.0051, -0.9626, 0.0386], [-0.0043, -0.9602, 0.0385], [-0.0043, -0.9602, -0.01], [-0.0051, -0.9601, 0.0872], [-0.0043, -0.9577, 0.087], [-0.0043, -0.9602, 0.0385], [-0.0051, -0.9601, 0.0872], [-0.0051, -0.9551, 0.1355], [-0.0043, -0.9527, 0.1352], [-0.0051, -0.9551, 0.1355], [-0.0051, -0.9476, 0.1836], [-0.0043, -0.9452, 0.1832], [-0.0051, -0.9377, 0.2312], [-0.0043, -0.9353, 0.2306], [-0.0043, -0.9452, 0.1832], [-0.0051, -0.9377, 0.2312], [-0.0051, -0.9253, 0.2782], [-0.0043, -0.9229, 0.2775], [-0.0051, -0.9253, 0.2782], [-0.0051, -0.9105, 0.3245], [-0.0043, -0.9082, 0.3237], [-0.0051, -0.9105, 0.3245], [-0.0051, -0.8934, 0.3701], [-0.0043, -0.8911, 0.3691], [-0.0051, -0.8934, 0.3701], [-0.0051, -0.8739, 0.4146], [-0.0043, -0.8717, 0.4136], [-0.0051, -0.8522, 0.4581], [-0.0043, -0.85, 0.457], [-0.0043, -0.8717, 0.4136], [-0.0051, -0.8282, 0.5004], [-0.0043, -0.8261, 0.4992], [-0.0043, -0.85, 0.457], [-0.0051, -0.8021, 0.5415], [-0.0043, -0.8001, 0.5401], [-0.0043, -0.8261, 0.4992], [-0.0051, -0.8021, 0.5415], [-0.0051, -0.7739, 0.5811], [-0.0043, -0.7719, 0.5796], [-0.0051, -0.7437, 0.6192], [-0.0043, -0.7418, 0.6177], [-0.0043, -0.7719, 0.5796], [-0.0051, -0.7437, 0.6192], [-0.0051, -0.7116, 0.6558], [-0.0043, -0.7098, 0.6541], [-0.0051, -0.7116, 0.6558], [-0.0051, -0.6777, 0.6906], [-0.0043, -0.676, 0.6888], [-0.0051, -0.6777, 0.6906], [-0.0051, -0.642, 0.7236], [-0.0043, -0.6404, 0.7218], [-0.0051, -0.642, 0.7236], [-0.0051, -0.6047, 0.7548], [-0.0043, -0.6031, 0.7528], [-0.0051, -0.6047, 0.7548], [-0.0051, -0.5658, 0.784], [-0.0043, -0.5643, 0.782], [-0.0051, -0.5658, 0.784], [-0.0051, -0.5254, 0.8111], [-0.0043, -0.5241, 0.809], [-0.0051, -0.5254, 0.8111], [-0.0051, -0.4837, 0.8361], [-0.0043, -0.4825, 0.834], [-0.0051, -0.4837, 0.8361], [-0.0051, -0.4408, 0.859], [-0.0043, -0.4397, 0.8568], [-0.0051, -0.4408, 0.859], [-0.0051, -0.3968, 0.8796], [-0.0043, -0.3958, 0.8774], [-0.0051, -0.3968, 0.8796], [-0.0051, -0.3517, 0.8979], [-0.0043, -0.3508, 0.8956], [-0.0051, -0.3058, 0.9139], [-0.0043, -0.305, 0.9116], [-0.0043, -0.3508, 0.8956], [-0.0051, -0.3058, 0.9139], [-0.0051, -0.2591, 0.9275], [-0.0043, -0.2585, 0.9251], [-0.0051, -0.2591, 0.9275], [-0.0051, -0.2118, 0.9387], [-0.0043, -0.2113, 0.9363], [-0.0051, -0.1639, 0.9474], [-0.0043, -0.1635, 0.945], [-0.0043, -0.2113, 0.9363], [-0.0051, -0.1156, 0.9536], [-0.0043, -0.1153, 0.9512], [-0.0043, -0.1635, 0.945], [-0.0131, -0.0576, 0.9573], [-0.0111, -0.0572, 0.9509], [-0.0043, -0.1153, 0.9512], [-0.0116, -0.0579, -0.9354], [-0.0131, -0.0576, -0.9287], [-0.0563, -0.0324, -0.9301], [-0.0116, -0.0579, -0.9354], [-0.0045, -0.1158, -0.9277], [-0.0051, -0.1156, -0.9251], [-0.0045, -0.1158, -0.9277], [-0.0045, -0.1643, -0.9214], [-0.0051, -0.1639, -0.9188], [-0.0045, -0.2123, -0.9126], [-0.0051, -0.2118, -0.9101], [-0.0051, -0.1639, -0.9188], [-0.0045, -0.2598, -0.9014], [-0.0051, -0.2591, -0.8989], [-0.0051, -0.2118, -0.9101], [-0.0045, -0.3066, -0.8878], [-0.0051, -0.3058, -0.8853], [-0.0051, -0.2591, -0.8989], [-0.0045, -0.3526, -0.8718], [-0.0051, -0.3517, -0.8694], [-0.0051, -0.3058, -0.8853], [-0.0045, -0.3978, -0.8534], [-0.0051, -0.3968, -0.851], [-0.0051, -0.3517, -0.8694], [-0.0045, -0.442, -0.8327], [-0.0051, -0.4408, -0.8304], [-0.0051, -0.3968, -0.851], [-0.0045, -0.485, -0.8098], [-0.0051, -0.4837, -0.8076], [-0.0051, -0.4408, -0.8304], [-0.0045, -0.485, -0.8098], [-0.0045, -0.5268, -0.7847], [-0.0051, -0.5254, -0.7825], [-0.0045, -0.5268, -0.7847], [-0.0045, -0.5673, -0.7575], [-0.0051, -0.5658, -0.7554], [-0.0045, -0.6063, -0.7282], [-0.0051, -0.6047, -0.7262], [-0.0051, -0.5658, -0.7554], [-0.0045, -0.6063, -0.7282], [-0.0045, -0.6437, -0.697], [-0.0051, -0.642, -0.695], [-0.0045, -0.6795, -0.6639], [-0.0051, -0.6777, -0.662], [-0.0051, -0.642, -0.695], [-0.0045, -0.7135, -0.6289], [-0.0051, -0.7116, -0.6272], [-0.0051, -0.6777, -0.662], [-0.0045, -0.7457, -0.5923], [-0.0051, -0.7437, -0.5907], [-0.0051, -0.7116, -0.6272], [-0.0045, -0.776, -0.5541], [-0.0051, -0.7739, -0.5525], [-0.0051, -0.7437, -0.5907], [-0.0045, -0.8043, -0.5143], [-0.0051, -0.8021, -0.5129], [-0.0051, -0.7739, -0.5525], [-0.0045, -0.8043, -0.5143], [-0.0045, -0.8304, -0.4732], [-0.0051, -0.8282, -0.4719], [-0.0045, -0.8544, -0.4308], [-0.0051, -0.8522, -0.4295], [-0.0051, -0.8282, -0.4719], [-0.0045, -0.8762, -0.3871], [-0.0051, -0.8739, -0.386], [-0.0051, -0.8522, -0.4295], [-0.0045, -0.8762, -0.3871], [-0.0045, -0.8958, -0.3425], [-0.0051, -0.8934, -0.3415], [-0.0045, -0.913, -0.2968], [-0.0051, -0.9105, -0.296], [-0.0051, -0.8934, -0.3415], [-0.0045, -0.9278, -0.2504], [-0.0051, -0.9253, -0.2496], [-0.0051, -0.9105, -0.296], [-0.0045, -0.9402, -0.2032], [-0.0051, -0.9377, -0.2026], [-0.0051, -0.9253, -0.2496], [-0.0045, -0.9502, -0.1555], [-0.0051, -0.9476, -0.155], [-0.0051, -0.9377, -0.2026], [-0.0045, -0.9502, -0.1555], [-0.0045, -0.9577, -0.1073], [-0.0051, -0.9551, -0.107], [-0.0045, -0.9627, -0.0588], [-0.0051, -0.9601, -0.0586], [-0.0051, -0.9551, -0.107], [-0.0045, -0.9627, -0.0588], [-0.0045, -0.9652, -0.0101], [-0.0051, -0.9626, -0.01], [-0.0045, -0.9652, 0.0387], [-0.0051, -0.9626, 0.0386], [-0.0051, -0.9626, -0.01], [-0.0045, -0.9652, 0.0387], [-0.0045, -0.9627, 0.0874], [-0.0051, -0.9601, 0.0872], [-0.0045, -0.9577, 0.1359], [-0.0051, -0.9551, 0.1355], [-0.0051, -0.9601, 0.0872], [-0.0045, -0.9502, 0.1841], [-0.0051, -0.9476, 0.1836], [-0.0051, -0.9551, 0.1355], [-0.0045, -0.9402, 0.2318], [-0.0051, -0.9377, 0.2312], [-0.0051, -0.9476, 0.1836], [-0.0045, -0.9402, 0.2318], [-0.0045, -0.9278, 0.2789], [-0.0051, -0.9253, 0.2782], [-0.0045, -0.9278, 0.2789], [-0.0045, -0.913, 0.3254], [-0.0051, -0.9105, 0.3245], [-0.0045, -0.8958, 0.371], [-0.0051, -0.8934, 0.3701], [-0.0051, -0.9105, 0.3245], [-0.0045, -0.8762, 0.4157], [-0.0051, -0.8739, 0.4146], [-0.0051, -0.8934, 0.3701], [-0.0045, -0.8762, 0.4157], [-0.0045, -0.8544, 0.4593], [-0.0051, -0.8522, 0.4581], [-0.0045, -0.8544, 0.4593], [-0.0045, -0.8304, 0.5018], [-0.0051, -0.8282, 0.5004], [-0.0045, -0.8304, 0.5018], [-0.0045, -0.8043, 0.5429], [-0.0051, -0.8021, 0.5415], [-0.0045, -0.8043, 0.5429], [-0.0045, -0.776, 0.5827], [-0.0051, -0.7739, 0.5811], [-0.0045, -0.776, 0.5827], [-0.0045, -0.7457, 0.6209], [-0.0051, -0.7437, 0.6192], [-0.0045, -0.7135, 0.6575], [-0.0051, -0.7116, 0.6558], [-0.0051, -0.7437, 0.6192], [-0.0045, -0.6795, 0.6924], [-0.0051, -0.6777, 0.6906], [-0.0051, -0.7116, 0.6558], [-0.0045, -0.6437, 0.7256], [-0.0051, -0.642, 0.7236], [-0.0051, -0.6777, 0.6906], [-0.0045, -0.6437, 0.7256], [-0.0045, -0.6063, 0.7568], [-0.0051, -0.6047, 0.7548], [-0.0045, -0.6063, 0.7568], [-0.0045, -0.5673, 0.7861], [-0.0051, -0.5658, 0.784], [-0.0045, -0.5673, 0.7861], [-0.0045, -0.5268, 0.8133], [-0.0051, -0.5254, 0.8111], [-0.0045, -0.485, 0.8384], [-0.0051, -0.4837, 0.8361], [-0.0051, -0.5254, 0.8111], [-0.0045, -0.442, 0.8613], [-0.0051, -0.4408, 0.859], [-0.0051, -0.4837, 0.8361], [-0.0045, -0.442, 0.8613], [-0.0045, -0.3978, 0.882], [-0.0051, -0.3968, 0.8796], [-0.0045, -0.3526, 0.9004], [-0.0051, -0.3517, 0.8979], [-0.0051, -0.3968, 0.8796], [-0.0045, -0.3066, 0.9164], [-0.0051, -0.3058, 0.9139], [-0.0051, -0.3517, 0.8979], [-0.0045, -0.2598, 0.93], [-0.0051, -0.2591, 0.9275], [-0.0051, -0.3058, 0.9139], [-0.0045, -0.2598, 0.93], [-0.0045, -0.2123, 0.9412], [-0.0051, -0.2118, 0.9387], [-0.0045, -0.2123, 0.9412], [-0.0045, -0.1643, 0.95], [-0.0051, -0.1639, 0.9474], [-0.0045, -0.1158, 0.9562], [-0.0051, -0.1156, 0.9536], [-0.0051, -0.1639, 0.9474], [-0.0116, -0.0579, 0.964], [-0.0131, -0.0576, 0.9573], [-0.0051, -0.1156, 0.9536], [-0.0068, -0.0582, -0.9405], [-0.0116, -0.0579, -0.9354], [-0.0484, -0.0316, -0.9581], [-0.0068, -0.0582, -0.9405], [-0.0027, -0.116, -0.9296], [-0.0045, -0.1158, -0.9277], [-0.0027, -0.116, -0.9296], [-0.0026, -0.1646, -0.9233], [-0.0045, -0.1643, -0.9214], [-0.0026, -0.1646, -0.9233], [-0.0026, -0.2127, -0.9146], [-0.0045, -0.2123, -0.9126], [-0.0026, -0.2127, -0.9146], [-0.0026, -0.2603, -0.9034], [-0.0045, -0.2598, -0.9014], [-0.0026, -0.2603, -0.9034], [-0.0026, -0.3072, -0.8897], [-0.0045, -0.3066, -0.8878], [-0.0026, -0.3072, -0.8897], [-0.0026, -0.3533, -0.8736], [-0.0045, -0.3526, -0.8718], [-0.0026, -0.3533, -0.8736], [-0.0026, -0.3986, -0.8552], [-0.0045, -0.3978, -0.8534], [-0.0026, -0.4428, -0.8345], [-0.0045, -0.442, -0.8327], [-0.0045, -0.3978, -0.8534], [-0.0026, -0.486, -0.8115], [-0.0045, -0.485, -0.8098], [-0.0045, -0.442, -0.8327], [-0.0026, -0.486, -0.8115], [-0.0026, -0.5279, -0.7864], [-0.0045, -0.5268, -0.7847], [-0.0026, -0.5279, -0.7864], [-0.0026, -0.5684, -0.7591], [-0.0045, -0.5673, -0.7575], [-0.0026, -0.5684, -0.7591], [-0.0026, -0.6075, -0.7298], [-0.0045, -0.6063, -0.7282], [-0.0026, -0.6075, -0.7298], [-0.0026, -0.645, -0.6985], [-0.0045, -0.6437, -0.697], [-0.0026, -0.645, -0.6985], [-0.0026, -0.6809, -0.6653], [-0.0045, -0.6795, -0.6639], [-0.0026, -0.6809, -0.6653], [-0.0026, -0.715, -0.6303], [-0.0045, -0.7135, -0.6289], [-0.0026, -0.7473, -0.5936], [-0.0045, -0.7457, -0.5923], [-0.0045, -0.7135, -0.6289], [-0.0026, -0.7776, -0.5553], [-0.0045, -0.776, -0.5541], [-0.0045, -0.7457, -0.5923], [-0.0026, -0.8059, -0.5154], [-0.0045, -0.8043, -0.5143], [-0.0045, -0.776, -0.5541], [-0.0026, -0.8321, -0.4742], [-0.0045, -0.8304, -0.4732], [-0.0045, -0.8043, -0.5143], [-0.0026, -0.8321, -0.4742], [-0.0026, -0.8562, -0.4317], [-0.0045, -0.8544, -0.4308], [-0.0026, -0.8562, -0.4317], [-0.0026, -0.878, -0.388], [-0.0045, -0.8762, -0.3871], [-0.0026, -0.878, -0.388], [-0.0026, -0.8976, -0.3432], [-0.0045, -0.8958, -0.3425], [-0.0026, -0.8976, -0.3432], [-0.0026, -0.9148, -0.2975], [-0.0045, -0.913, -0.2968], [-0.0026, -0.9148, -0.2975], [-0.0026, -0.9297, -0.2509], [-0.0045, -0.9278, -0.2504], [-0.0026, -0.9297, -0.2509], [-0.0026, -0.9421, -0.2037], [-0.0045, -0.9402, -0.2032], [-0.0026, -0.9521, -0.1558], [-0.0045, -0.9502, -0.1555], [-0.0045, -0.9402, -0.2032], [-0.0026, -0.9521, -0.1558], [-0.0026, -0.9597, -0.1076], [-0.0045, -0.9577, -0.1073], [-0.0026, -0.9647, -0.0589], [-0.0045, -0.9627, -0.0588], [-0.0045, -0.9577, -0.1073], [-0.0026, -0.9647, -0.0589], [-0.0026, -0.9672, -0.0101], [-0.0045, -0.9652, -0.0101], [-0.0026, -0.9672, 0.0387], [-0.0045, -0.9652, 0.0387], [-0.0045, -0.9652, -0.0101], [-0.0026, -0.9672, 0.0387], [-0.0026, -0.9647, 0.0875], [-0.0045, -0.9627, 0.0874], [-0.0026, -0.9597, 0.1361], [-0.0045, -0.9577, 0.1359], [-0.0045, -0.9627, 0.0874], [-0.0026, -0.9521, 0.1844], [-0.0045, -0.9502, 0.1841], [-0.0045, -0.9577, 0.1359], [-0.0026, -0.9521, 0.1844], [-0.0026, -0.9421, 0.2322], [-0.0045, -0.9402, 0.2318], [-0.0026, -0.9297, 0.2795], [-0.0045, -0.9278, 0.2789], [-0.0045, -0.9402, 0.2318], [-0.0026, -0.9297, 0.2795], [-0.0026, -0.9148, 0.3261], [-0.0045, -0.913, 0.3254], [-0.0026, -0.8976, 0.3718], [-0.0045, -0.8958, 0.371], [-0.0045, -0.913, 0.3254], [-0.0026, -0.8976, 0.3718], [-0.0026, -0.878, 0.4166], [-0.0045, -0.8762, 0.4157], [-0.0026, -0.8562, 0.4603], [-0.0045, -0.8544, 0.4593], [-0.0045, -0.8762, 0.4157], [-0.0026, -0.8321, 0.5028], [-0.0045, -0.8304, 0.5018], [-0.0045, -0.8544, 0.4593], [-0.0026, -0.8059, 0.544], [-0.0045, -0.8043, 0.5429], [-0.0045, -0.8304, 0.5018], [-0.0026, -0.7776, 0.5838], [-0.0045, -0.776, 0.5827], [-0.0045, -0.8043, 0.5429], [-0.0026, -0.7473, 0.6222], [-0.0045, -0.7457, 0.6209], [-0.0045, -0.776, 0.5827], [-0.0026, -0.715, 0.6589], [-0.0045, -0.7135, 0.6575], [-0.0045, -0.7457, 0.6209], [-0.0026, -0.6809, 0.6939], [-0.0045, -0.6795, 0.6924], [-0.0045, -0.7135, 0.6575], [-0.0026, -0.645, 0.7271], [-0.0045, -0.6437, 0.7256], [-0.0045, -0.6795, 0.6924], [-0.0026, -0.6075, 0.7584], [-0.0045, -0.6063, 0.7568], [-0.0045, -0.6437, 0.7256], [-0.0026, -0.5684, 0.7877], [-0.0045, -0.5673, 0.7861], [-0.0045, -0.6063, 0.7568], [-0.0026, -0.5279, 0.815], [-0.0045, -0.5268, 0.8133], [-0.0045, -0.5673, 0.7861], [-0.0026, -0.5279, 0.815], [-0.0026, -0.486, 0.8401], [-0.0045, -0.485, 0.8384], [-0.0026, -0.486, 0.8401], [-0.0026, -0.4429, 0.8631], [-0.0045, -0.442, 0.8613], [-0.0026, -0.4429, 0.8631], [-0.0026, -0.3986, 0.8838], [-0.0045, -0.3978, 0.882], [-0.0026, -0.3986, 0.8838], [-0.0026, -0.3533, 0.9022], [-0.0045, -0.3526, 0.9004], [-0.0026, -0.3533, 0.9022], [-0.0026, -0.3072, 0.9183], [-0.0045, -0.3066, 0.9164], [-0.0026, -0.2603, 0.9319], [-0.0045, -0.2598, 0.93], [-0.0045, -0.3066, 0.9164], [-0.0026, -0.2127, 0.9432], [-0.0045, -0.2123, 0.9412], [-0.0045, -0.2598, 0.93], [-0.0026, -0.2127, 0.9432], [-0.0026, -0.1646, 0.9519], [-0.0045, -0.1643, 0.95], [-0.0027, -0.116, 0.9582], [-0.0045, -0.1158, 0.9562], [-0.0045, -0.1643, 0.95], [-0.0068, -0.0582, 0.9691], [-0.0116, -0.0579, 0.964], [-0.0045, -0.1158, 0.9562], [-0.0, -0.0583, -0.9424], [-0.0068, -0.0582, -0.9405], [-0.0278, -0.031, -0.9783], [-0.0, -0.0583, -0.9424], [-0.0, -0.1161, -0.9304], [-0.0027, -0.116, -0.9296], [-0.0, -0.1161, -0.9304], [-0.0, -0.1647, -0.9241], [-0.0026, -0.1646, -0.9233], [-0.0, -0.1647, -0.9241], [-0.0, -0.2128, -0.9153], [-0.0026, -0.2127, -0.9146], [-0.0, -0.2604, -0.9041], [-0.0026, -0.2603, -0.9034], [-0.0026, -0.2127, -0.9146], [-0.0, -0.3074, -0.8904], [-0.0026, -0.3072, -0.8897], [-0.0026, -0.2603, -0.9034], [-0.0, -0.3536, -0.8743], [-0.0026, -0.3533, -0.8736], [-0.0026, -0.3072, -0.8897], [-0.0, -0.3989, -0.8559], [-0.0026, -0.3986, -0.8552], [-0.0026, -0.3533, -0.8736], [-0.0, -0.3989, -0.8559], [-0.0, -0.4432, -0.8352], [-0.0026, -0.4428, -0.8345], [-0.0, -0.4432, -0.8352], [-0.0, -0.4863, -0.8122], [-0.0026, -0.486, -0.8115], [-0.0, -0.5283, -0.787], [-0.0026, -0.5279, -0.7864], [-0.0026, -0.486, -0.8115], [-0.0, -0.5283, -0.787], [-0.0, -0.5688, -0.7597], [-0.0026, -0.5684, -0.7591], [-0.0, -0.5688, -0.7597], [-0.0, -0.608, -0.7304], [-0.0026, -0.6075, -0.7298], [-0.0, -0.608, -0.7304], [-0.0, -0.6455, -0.699], [-0.0026, -0.645, -0.6985], [-0.0, -0.6814, -0.6658], [-0.0026, -0.6809, -0.6653], [-0.0026, -0.645, -0.6985], [-0.0, -0.7155, -0.6308], [-0.0026, -0.715, -0.6303], [-0.0026, -0.6809, -0.6653], [-0.0, -0.7155, -0.6308], [-0.0, -0.7478, -0.5941], [-0.0026, -0.7473, -0.5936], [-0.0, -0.7478, -0.5941], [-0.0, -0.7782, -0.5557], [-0.0026, -0.7776, -0.5553], [-0.0, -0.7782, -0.5557], [-0.0, -0.8065, -0.5159], [-0.0026, -0.8059, -0.5154], [-0.0, -0.8328, -0.4746], [-0.0026, -0.8321, -0.4742], [-0.0026, -0.8059, -0.5154], [-0.0, -0.8568, -0.432], [-0.0026, -0.8562, -0.4317], [-0.0026, -0.8321, -0.4742], [-0.0, -0.8787, -0.3883], [-0.0026, -0.878, -0.388], [-0.0026, -0.8562, -0.4317], [-0.0, -0.8983, -0.3435], [-0.0026, -0.8976, -0.3432], [-0.0026, -0.878, -0.388], [-0.0, -0.9155, -0.2977], [-0.0026, -0.9148, -0.2975], [-0.0026, -0.8976, -0.3432], [-0.0, -0.9304, -0.2511], [-0.0026, -0.9297, -0.2509], [-0.0026, -0.9148, -0.2975], [-0.0, -0.9429, -0.2038], [-0.0026, -0.9421, -0.2037], [-0.0026, -0.9297, -0.2509], [-0.0, -0.9529, -0.156], [-0.0026, -0.9521, -0.1558], [-0.0026, -0.9421, -0.2037], [-0.0, -0.9529, -0.156], [-0.0, -0.9604, -0.1076], [-0.0026, -0.9597, -0.1076], [-0.0, -0.9654, -0.059], [-0.0026, -0.9647, -0.0589], [-0.0026, -0.9597, -0.1076], [-0.0, -0.9679, -0.0102], [-0.0026, -0.9672, -0.0101], [-0.0026, -0.9647, -0.0589], [-0.0, -0.9679, 0.0387], [-0.0026, -0.9672, 0.0387], [-0.0026, -0.9672, -0.0101], [-0.0, -0.9679, 0.0387], [-0.0, -0.9654, 0.0876], [-0.0026, -0.9647, 0.0875], [-0.0, -0.9604, 0.1362], [-0.0026, -0.9597, 0.1361], [-0.0026, -0.9647, 0.0875], [-0.0, -0.9529, 0.1845], [-0.0026, -0.9521, 0.1844], [-0.0026, -0.9597, 0.1361], [-0.0, -0.9529, 0.1845], [-0.0, -0.9429, 0.2324], [-0.0026, -0.9421, 0.2322], [-0.0, -0.9429, 0.2324], [-0.0, -0.9304, 0.2797], [-0.0026, -0.9297, 0.2795], [-0.0, -0.9155, 0.3263], [-0.0026, -0.9148, 0.3261], [-0.0026, -0.9297, 0.2795], [-0.0, -0.9155, 0.3263], [-0.0, -0.8983, 0.3721], [-0.0026, -0.8976, 0.3718], [-0.0, -0.8787, 0.4169], [-0.0026, -0.878, 0.4166], [-0.0026, -0.8976, 0.3718], [-0.0, -0.8568, 0.4606], [-0.0026, -0.8562, 0.4603], [-0.0026, -0.878, 0.4166], [-0.0, -0.8568, 0.4606], [-0.0, -0.8328, 0.5032], [-0.0026, -0.8321, 0.5028], [-0.0, -0.8328, 0.5032], [-0.0, -0.8065, 0.5444], [-0.0026, -0.8059, 0.544], [-0.0, -0.8065, 0.5444], [-0.0, -0.7782, 0.5843], [-0.0026, -0.7776, 0.5838], [-0.0, -0.7478, 0.6226], [-0.0026, -0.7473, 0.6222], [-0.0026, -0.7776, 0.5838], [-0.0, -0.7155, 0.6594], [-0.0026, -0.715, 0.6589], [-0.0026, -0.7473, 0.6222], [-0.0, -0.7155, 0.6594], [-0.0, -0.6814, 0.6944], [-0.0026, -0.6809, 0.6939], [-0.0, -0.6814, 0.6944], [-0.0, -0.6455, 0.7276], [-0.0026, -0.645, 0.7271], [-0.0, -0.6455, 0.7276], [-0.0, -0.608, 0.7589], [-0.0026, -0.6075, 0.7584], [-0.0, -0.5688, 0.7883], [-0.0026, -0.5684, 0.7877], [-0.0026, -0.6075, 0.7584], [-0.0, -0.5283, 0.8156], [-0.0026, -0.5279, 0.815], [-0.0026, -0.5684, 0.7877], [-0.0, -0.4863, 0.8408], [-0.0026, -0.486, 0.8401], [-0.0026, -0.5279, 0.815], [-0.0, -0.4432, 0.8638], [-0.0026, -0.4429, 0.8631], [-0.0026, -0.486, 0.8401], [-0.0, -0.3989, 0.8845], [-0.0026, -0.3986, 0.8838], [-0.0026, -0.4429, 0.8631], [-0.0, -0.3536, 0.9029], [-0.0026, -0.3533, 0.9022], [-0.0026, -0.3986, 0.8838], [-0.0, -0.3536, 0.9029], [-0.0, -0.3074, 0.919], [-0.0026, -0.3072, 0.9183], [-0.0, -0.3074, 0.919], [-0.0, -0.2604, 0.9326], [-0.0026, -0.2603, 0.9319], [-0.0, -0.2128, 0.9439], [-0.0026, -0.2127, 0.9432], [-0.0026, -0.2603, 0.9319], [-0.0, -0.1647, 0.9526], [-0.0026, -0.1646, 0.9519], [-0.0026, -0.2127, 0.9432], [-0.0, -0.1161, 0.9589], [-0.0027, -0.116, 0.9582], [-0.0026, -0.1646, 0.9519], [-0.0, -0.0583, 0.971], [-0.0068, -0.0582, 0.9691], [-0.0027, -0.116, 0.9582], [0.0278, -0.031, -0.9783], [0.0068, -0.0582, -0.9405], [-0.0, -0.0583, -0.9424], [0.0027, -0.116, -0.9296], [-0.0, -0.1161, -0.9304], [-0.0, -0.0583, -0.9424], [0.0026, -0.1646, -0.9233], [-0.0, -0.1647, -0.9241], [-0.0, -0.1161, -0.9304], [0.0026, -0.2127, -0.9146], [-0.0, -0.2128, -0.9153], [-0.0, -0.1647, -0.9241], [0.0026, -0.2603, -0.9034], [-0.0, -0.2604, -0.9041], [-0.0, -0.2128, -0.9153], [0.0026, -0.2603, -0.9034], [0.0026, -0.3072, -0.8897], [-0.0, -0.3074, -0.8904], [0.0026, -0.3072, -0.8897], [0.0026, -0.3533, -0.8736], [-0.0, -0.3536, -0.8743], [0.0026, -0.3533, -0.8736], [0.0026, -0.3986, -0.8552], [-0.0, -0.3989, -0.8559], [0.0026, -0.4428, -0.8345], [-0.0, -0.4432, -0.8352], [-0.0, -0.3989, -0.8559], [0.0026, -0.486, -0.8115], [-0.0, -0.4863, -0.8122], [-0.0, -0.4432, -0.8352], [0.0026, -0.486, -0.8115], [0.0026, -0.5279, -0.7864], [-0.0, -0.5283, -0.787], [0.0026, -0.5279, -0.7864], [0.0026, -0.5684, -0.7591], [-0.0, -0.5688, -0.7597], [0.0026, -0.5684, -0.7591], [0.0026, -0.6075, -0.7298], [-0.0, -0.608, -0.7304], [0.0026, -0.645, -0.6985], [-0.0, -0.6455, -0.699], [-0.0, -0.608, -0.7304], [0.0026, -0.6809, -0.6653], [-0.0, -0.6814, -0.6658], [-0.0, -0.6455, -0.699], [0.0026, -0.715, -0.6303], [-0.0, -0.7155, -0.6308], [-0.0, -0.6814, -0.6658], [0.0026, -0.7473, -0.5936], [-0.0, -0.7478, -0.5941], [-0.0, -0.7155, -0.6308], [0.0026, -0.7776, -0.5553], [-0.0, -0.7782, -0.5557], [-0.0, -0.7478, -0.5941], [0.0026, -0.8059, -0.5154], [-0.0, -0.8065, -0.5159], [-0.0, -0.7782, -0.5557], [0.0026, -0.8321, -0.4742], [-0.0, -0.8328, -0.4746], [-0.0, -0.8065, -0.5159], [0.0026, -0.8321, -0.4742], [0.0026, -0.8562, -0.4317], [-0.0, -0.8568, -0.432], [0.0026, -0.878, -0.388], [-0.0, -0.8787, -0.3883], [-0.0, -0.8568, -0.432], [0.0026, -0.8976, -0.3432], [-0.0, -0.8983, -0.3435], [-0.0, -0.8787, -0.3883], [0.0026, -0.8976, -0.3432], [0.0026, -0.9148, -0.2975], [-0.0, -0.9155, -0.2977], [0.0026, -0.9148, -0.2975], [0.0026, -0.9297, -0.2509], [-0.0, -0.9304, -0.2511], [0.0026, -0.9421, -0.2037], [-0.0, -0.9429, -0.2038], [-0.0, -0.9304, -0.2511], [0.0026, -0.9521, -0.1558], [-0.0, -0.9529, -0.156], [-0.0, -0.9429, -0.2038], [0.0026, -0.9597, -0.1076], [-0.0, -0.9604, -0.1076], [-0.0, -0.9529, -0.156], [0.0026, -0.9647, -0.0589], [-0.0, -0.9654, -0.059], [-0.0, -0.9604, -0.1076], [0.0026, -0.9672, -0.0101], [-0.0, -0.9679, -0.0102], [-0.0, -0.9654, -0.059], [0.0026, -0.9672, 0.0387], [-0.0, -0.9679, 0.0387], [-0.0, -0.9679, -0.0102], [0.0026, -0.9647, 0.0875], [-0.0, -0.9654, 0.0876], [-0.0, -0.9679, 0.0387], [0.0026, -0.9597, 0.1361], [-0.0, -0.9604, 0.1362], [-0.0, -0.9654, 0.0876], [0.0026, -0.9597, 0.1361], [0.0026, -0.9521, 0.1844], [-0.0, -0.9529, 0.1845], [0.0026, -0.9421, 0.2322], [-0.0, -0.9429, 0.2324], [-0.0, -0.9529, 0.1845], [0.0026, -0.9421, 0.2322], [0.0026, -0.9297, 0.2795], [-0.0, -0.9304, 0.2797], [0.0026, -0.9148, 0.3261], [-0.0, -0.9155, 0.3263], [-0.0, -0.9304, 0.2797], [0.0026, -0.9148, 0.3261], [0.0026, -0.8976, 0.3718], [-0.0, -0.8983, 0.3721], [0.0026, -0.8976, 0.3718], [0.0026, -0.878, 0.4166], [-0.0, -0.8787, 0.4169], [0.0026, -0.878, 0.4166], [0.0026, -0.8562, 0.4603], [-0.0, -0.8568, 0.4606], [0.0026, -0.8321, 0.5028], [-0.0, -0.8328, 0.5032], [-0.0, -0.8568, 0.4606], [0.0026, -0.8059, 0.544], [-0.0, -0.8065, 0.5444], [-0.0, -0.8328, 0.5032], [0.0026, -0.8059, 0.544], [0.0026, -0.7776, 0.5838], [-0.0, -0.7782, 0.5843], [0.0026, -0.7776, 0.5838], [0.0026, -0.7473, 0.6222], [-0.0, -0.7478, 0.6226], [0.0026, -0.7473, 0.6222], [0.0026, -0.715, 0.6589], [-0.0, -0.7155, 0.6594], [0.0026, -0.6809, 0.6939], [-0.0, -0.6814, 0.6944], [-0.0, -0.7155, 0.6594], [0.0026, -0.6809, 0.6939], [0.0026, -0.645, 0.7271], [-0.0, -0.6455, 0.7276], [0.0026, -0.645, 0.7271], [0.0026, -0.6075, 0.7584], [-0.0, -0.608, 0.7589], [0.0026, -0.6075, 0.7584], [0.0026, -0.5684, 0.7877], [-0.0, -0.5688, 0.7883], [0.0026, -0.5684, 0.7877], [0.0026, -0.5279, 0.815], [-0.0, -0.5283, 0.8156], [0.0026, -0.5279, 0.815], [0.0026, -0.486, 0.8401], [-0.0, -0.4863, 0.8408], [0.0026, -0.486, 0.8401], [0.0026, -0.4429, 0.8631], [-0.0, -0.4432, 0.8638], [0.0026, -0.4429, 0.8631], [0.0026, -0.3986, 0.8838], [-0.0, -0.3989, 0.8845], [0.0026, -0.3533, 0.9022], [-0.0, -0.3536, 0.9029], [-0.0, -0.3989, 0.8845], [0.0026, -0.3072, 0.9183], [-0.0, -0.3074, 0.919], [-0.0, -0.3536, 0.9029], [0.0026, -0.2603, 0.9319], [-0.0, -0.2604, 0.9326], [-0.0, -0.3074, 0.919], [0.0026, -0.2603, 0.9319], [0.0026, -0.2127, 0.9432], [-0.0, -0.2128, 0.9439], [0.0026, -0.2127, 0.9432], [0.0026, -0.1646, 0.9519], [-0.0, -0.1647, 0.9526], [0.0026, -0.1646, 0.9519], [0.0027, -0.116, 0.9582], [-0.0, -0.1161, 0.9589], [0.0027, -0.116, 0.9582], [0.0068, -0.0582, 0.9691], [-0.0, -0.0583, 0.971], [0.0484, -0.0316, -0.9581], [0.0116, -0.0579, -0.9354], [0.0068, -0.0582, -0.9405], [0.0045, -0.1158, -0.9277], [0.0027, -0.116, -0.9296], [0.0068, -0.0582, -0.9405], [0.0045, -0.1643, -0.9214], [0.0026, -0.1646, -0.9233], [0.0027, -0.116, -0.9296], [0.0045, -0.1643, -0.9214], [0.0045, -0.2123, -0.9126], [0.0026, -0.2127, -0.9146], [0.0045, -0.2598, -0.9014], [0.0026, -0.2603, -0.9034], [0.0026, -0.2127, -0.9146], [0.0045, -0.2598, -0.9014], [0.0045, -0.3066, -0.8878], [0.0026, -0.3072, -0.8897], [0.0045, -0.3066, -0.8878], [0.0045, -0.3526, -0.8718], [0.0026, -0.3533, -0.8736], [0.0045, -0.3526, -0.8718], [0.0045, -0.3978, -0.8534], [0.0026, -0.3986, -0.8552], [0.0045, -0.3978, -0.8534], [0.0045, -0.442, -0.8327], [0.0026, -0.4428, -0.8345], [0.0045, -0.442, -0.8327], [0.0045, -0.485, -0.8098], [0.0026, -0.486, -0.8115], [0.0045, -0.5268, -0.7847], [0.0026, -0.5279, -0.7864], [0.0026, -0.486, -0.8115], [0.0045, -0.5673, -0.7575], [0.0026, -0.5684, -0.7591], [0.0026, -0.5279, -0.7864], [0.0045, -0.6063, -0.7282], [0.0026, -0.6075, -0.7298], [0.0026, -0.5684, -0.7591], [0.0045, -0.6437, -0.697], [0.0026, -0.645, -0.6985], [0.0026, -0.6075, -0.7298], [0.0045, -0.6795, -0.6639], [0.0026, -0.6809, -0.6653], [0.0026, -0.645, -0.6985], [0.0045, -0.7135, -0.6289], [0.0026, -0.715, -0.6303], [0.0026, -0.6809, -0.6653], [0.0045, -0.7457, -0.5923], [0.0026, -0.7473, -0.5936], [0.0026, -0.715, -0.6303], [0.0045, -0.776, -0.5541], [0.0026, -0.7776, -0.5553], [0.0026, -0.7473, -0.5936], [0.0045, -0.776, -0.5541], [0.0045, -0.8043, -0.5143], [0.0026, -0.8059, -0.5154], [0.0045, -0.8043, -0.5143], [0.0045, -0.8304, -0.4732], [0.0026, -0.8321, -0.4742], [0.0045, -0.8544, -0.4308], [0.0026, -0.8562, -0.4317], [0.0026, -0.8321, -0.4742], [0.0045, -0.8544, -0.4308], [0.0045, -0.8762, -0.3871], [0.0026, -0.878, -0.388], [0.0045, -0.8958, -0.3425], [0.0026, -0.8976, -0.3432], [0.0026, -0.878, -0.388], [0.0045, -0.913, -0.2968], [0.0026, -0.9148, -0.2975], [0.0026, -0.8976, -0.3432], [0.0045, -0.9278, -0.2504], [0.0026, -0.9297, -0.2509], [0.0026, -0.9148, -0.2975], [0.0045, -0.9402, -0.2032], [0.0026, -0.9421, -0.2037], [0.0026, -0.9297, -0.2509], [0.0045, -0.9402, -0.2032], [0.0045, -0.9502, -0.1555], [0.0026, -0.9521, -0.1558], [0.0045, -0.9502, -0.1555], [0.0045, -0.9577, -0.1073], [0.0026, -0.9597, -0.1076], [0.0045, -0.9577, -0.1073], [0.0045, -0.9627, -0.0588], [0.0026, -0.9647, -0.0589], [0.0045, -0.9652, -0.0101], [0.0026, -0.9672, -0.0101], [0.0026, -0.9647, -0.0589], [0.0045, -0.9652, 0.0387], [0.0026, -0.9672, 0.0387], [0.0026, -0.9672, -0.0101], [0.0045, -0.9627, 0.0874], [0.0026, -0.9647, 0.0875], [0.0026, -0.9672, 0.0387], [0.0045, -0.9627, 0.0874], [0.0045, -0.9577, 0.1359], [0.0026, -0.9597, 0.1361], [0.0045, -0.9577, 0.1359], [0.0045, -0.9502, 0.1841], [0.0026, -0.9521, 0.1844], [0.0045, -0.9502, 0.1841], [0.0045, -0.9402, 0.2318], [0.0026, -0.9421, 0.2322], [0.0045, -0.9278, 0.2789], [0.0026, -0.9297, 0.2795], [0.0026, -0.9421, 0.2322], [0.0045, -0.913, 0.3254], [0.0026, -0.9148, 0.3261], [0.0026, -0.9297, 0.2795], [0.0045, -0.913, 0.3254], [0.0045, -0.8958, 0.371], [0.0026, -0.8976, 0.3718], [0.0045, -0.8762, 0.4157], [0.0026, -0.878, 0.4166], [0.0026, -0.8976, 0.3718], [0.0045, -0.8544, 0.4593], [0.0026, -0.8562, 0.4603], [0.0026, -0.878, 0.4166], [0.0045, -0.8544, 0.4593], [0.0045, -0.8304, 0.5018], [0.0026, -0.8321, 0.5028], [0.0045, -0.8304, 0.5018], [0.0045, -0.8043, 0.5429], [0.0026, -0.8059, 0.544], [0.0045, -0.8043, 0.5429], [0.0045, -0.776, 0.5827], [0.0026, -0.7776, 0.5838], [0.0045, -0.776, 0.5827], [0.0045, -0.7457, 0.6209], [0.0026, -0.7473, 0.6222], [0.0045, -0.7457, 0.6209], [0.0045, -0.7135, 0.6575], [0.0026, -0.715, 0.6589], [0.0045, -0.7135, 0.6575], [0.0045, -0.6795, 0.6924], [0.0026, -0.6809, 0.6939], [0.0045, -0.6437, 0.7256], [0.0026, -0.645, 0.7271], [0.0026, -0.6809, 0.6939], [0.0045, -0.6063, 0.7568], [0.0026, -0.6075, 0.7584], [0.0026, -0.645, 0.7271], [0.0045, -0.5673, 0.7861], [0.0026, -0.5684, 0.7877], [0.0026, -0.6075, 0.7584], [0.0045, -0.5268, 0.8133], [0.0026, -0.5279, 0.815], [0.0026, -0.5684, 0.7877], [0.0045, -0.485, 0.8384], [0.0026, -0.486, 0.8401], [0.0026, -0.5279, 0.815], [0.0045, -0.442, 0.8613], [0.0026, -0.4429, 0.8631], [0.0026, -0.486, 0.8401], [0.0045, -0.3978, 0.882], [0.0026, -0.3986, 0.8838], [0.0026, -0.4429, 0.8631], [0.0045, -0.3526, 0.9004], [0.0026, -0.3533, 0.9022], [0.0026, -0.3986, 0.8838], [0.0045, -0.3066, 0.9164], [0.0026, -0.3072, 0.9183], [0.0026, -0.3533, 0.9022], [0.0045, -0.2598, 0.93], [0.0026, -0.2603, 0.9319], [0.0026, -0.3072, 0.9183], [0.0045, -0.2598, 0.93], [0.0045, -0.2123, 0.9412], [0.0026, -0.2127, 0.9432], [0.0045, -0.1643, 0.95], [0.0026, -0.1646, 0.9519], [0.0026, -0.2127, 0.9432], [0.0045, -0.1643, 0.95], [0.0045, -0.1158, 0.9562], [0.0027, -0.116, 0.9582], [0.0045, -0.1158, 0.9562], [0.0116, -0.0579, 0.964], [0.0068, -0.0582, 0.9691], [0.0563, -0.0324, -0.9301], [0.0131, -0.0576, -0.9287], [0.0116, -0.0579, -0.9354], [0.0051, -0.1156, -0.9251], [0.0045, -0.1158, -0.9277], [0.0116, -0.0579, -0.9354], [0.0051, -0.1639, -0.9188], [0.0045, -0.1643, -0.9214], [0.0045, -0.1158, -0.9277], [0.0051, -0.1639, -0.9188], [0.0051, -0.2118, -0.9101], [0.0045, -0.2123, -0.9126], [0.0051, -0.2591, -0.8989], [0.0045, -0.2598, -0.9014], [0.0045, -0.2123, -0.9126], [0.0051, -0.3058, -0.8853], [0.0045, -0.3066, -0.8878], [0.0045, -0.2598, -0.9014], [0.0051, -0.3058, -0.8853], [0.0051, -0.3517, -0.8694], [0.0045, -0.3526, -0.8718], [0.0051, -0.3968, -0.851], [0.0045, -0.3978, -0.8534], [0.0045, -0.3526, -0.8718], [0.0051, -0.4408, -0.8304], [0.0045, -0.442, -0.8327], [0.0045, -0.3978, -0.8534], [0.0051, -0.4837, -0.8076], [0.0045, -0.485, -0.8098], [0.0045, -0.442, -0.8327], [0.0051, -0.5254, -0.7825], [0.0045, -0.5268, -0.7847], [0.0045, -0.485, -0.8098], [0.0051, -0.5658, -0.7554], [0.0045, -0.5673, -0.7575], [0.0045, -0.5268, -0.7847], [0.0051, -0.5658, -0.7554], [0.0051, -0.6047, -0.7262], [0.0045, -0.6063, -0.7282], [0.0051, -0.6047, -0.7262], [0.0051, -0.642, -0.695], [0.0045, -0.6437, -0.697], [0.0051, -0.642, -0.695], [0.0051, -0.6777, -0.662], [0.0045, -0.6795, -0.6639], [0.0051, -0.6777, -0.662], [0.0051, -0.7116, -0.6272], [0.0045, -0.7135, -0.6289], [0.0051, -0.7116, -0.6272], [0.0051, -0.7437, -0.5907], [0.0045, -0.7457, -0.5923], [0.0051, -0.7437, -0.5907], [0.0051, -0.7739, -0.5525], [0.0045, -0.776, -0.5541], [0.0051, -0.8021, -0.5129], [0.0045, -0.8043, -0.5143], [0.0045, -0.776, -0.5541], [0.0051, -0.8282, -0.4719], [0.0045, -0.8304, -0.4732], [0.0045, -0.8043, -0.5143], [0.0051, -0.8282, -0.4719], [0.0051, -0.8522, -0.4295], [0.0045, -0.8544, -0.4308], [0.0051, -0.8739, -0.386], [0.0045, -0.8762, -0.3871], [0.0045, -0.8544, -0.4308], [0.0051, -0.8934, -0.3415], [0.0045, -0.8958, -0.3425], [0.0045, -0.8762, -0.3871], [0.0051, -0.8934, -0.3415], [0.0051, -0.9105, -0.296], [0.0045, -0.913, -0.2968], [0.0051, -0.9105, -0.296], [0.0051, -0.9253, -0.2496], [0.0045, -0.9278, -0.2504], [0.0051, -0.9377, -0.2026], [0.0045, -0.9402, -0.2032], [0.0045, -0.9278, -0.2504], [0.0051, -0.9476, -0.155], [0.0045, -0.9502, -0.1555], [0.0045, -0.9402, -0.2032], [0.0051, -0.9551, -0.107], [0.0045, -0.9577, -0.1073], [0.0045, -0.9502, -0.1555], [0.0051, -0.9601, -0.0586], [0.0045, -0.9627, -0.0588], [0.0045, -0.9577, -0.1073], [0.0051, -0.9626, -0.01], [0.0045, -0.9652, -0.0101], [0.0045, -0.9627, -0.0588], [0.0051, -0.9626, 0.0386], [0.0045, -0.9652, 0.0387], [0.0045, -0.9652, -0.0101], [0.0051, -0.9626, 0.0386], [0.0051, -0.9601, 0.0872], [0.0045, -0.9627, 0.0874], [0.0051, -0.9601, 0.0872], [0.0051, -0.9551, 0.1355], [0.0045, -0.9577, 0.1359], [0.0051, -0.9476, 0.1836], [0.0045, -0.9502, 0.1841], [0.0045, -0.9577, 0.1359], [0.0051, -0.9377, 0.2312], [0.0045, -0.9402, 0.2318], [0.0045, -0.9502, 0.1841], [0.0051, -0.9377, 0.2312], [0.0051, -0.9253, 0.2782], [0.0045, -0.9278, 0.2789], [0.0051, -0.9105, 0.3245], [0.0045, -0.913, 0.3254], [0.0045, -0.9278, 0.2789], [0.0051, -0.9105, 0.3245], [0.0051, -0.8934, 0.3701], [0.0045, -0.8958, 0.371], [0.0051, -0.8934, 0.3701], [0.0051, -0.8739, 0.4146], [0.0045, -0.8762, 0.4157], [0.0051, -0.8522, 0.4581], [0.0045, -0.8544, 0.4593], [0.0045, -0.8762, 0.4157], [0.0051, -0.8282, 0.5004], [0.0045, -0.8304, 0.5018], [0.0045, -0.8544, 0.4593], [0.0051, -0.8021, 0.5415], [0.0045, -0.8043, 0.5429], [0.0045, -0.8304, 0.5018], [0.0051, -0.7739, 0.5811], [0.0045, -0.776, 0.5827], [0.0045, -0.8043, 0.5429], [0.0051, -0.7739, 0.5811], [0.0051, -0.7437, 0.6192], [0.0045, -0.7457, 0.6209], [0.0051, -0.7437, 0.6192], [0.0051, -0.7116, 0.6558], [0.0045, -0.7135, 0.6575], [0.0051, -0.6777, 0.6906], [0.0045, -0.6795, 0.6924], [0.0045, -0.7135, 0.6575], [0.0051, -0.6777, 0.6906], [0.0051, -0.642, 0.7236], [0.0045, -0.6437, 0.7256], [0.0051, -0.6047, 0.7548], [0.0045, -0.6063, 0.7568], [0.0045, -0.6437, 0.7256], [0.0051, -0.6047, 0.7548], [0.0051, -0.5658, 0.784], [0.0045, -0.5673, 0.7861], [0.0051, -0.5658, 0.784], [0.0051, -0.5254, 0.8111], [0.0045, -0.5268, 0.8133], [0.0051, -0.5254, 0.8111], [0.0051, -0.4837, 0.8361], [0.0045, -0.485, 0.8384], [0.0051, -0.4408, 0.859], [0.0045, -0.442, 0.8613], [0.0045, -0.485, 0.8384], [0.0051, -0.3968, 0.8796], [0.0045, -0.3978, 0.882], [0.0045, -0.442, 0.8613], [0.0051, -0.3968, 0.8796], [0.0051, -0.3517, 0.8979], [0.0045, -0.3526, 0.9004], [0.0051, -0.3517, 0.8979], [0.0051, -0.3058, 0.9139], [0.0045, -0.3066, 0.9164], [0.0051, -0.3058, 0.9139], [0.0051, -0.2591, 0.9275], [0.0045, -0.2598, 0.93], [0.0051, -0.2118, 0.9387], [0.0045, -0.2123, 0.9412], [0.0045, -0.2598, 0.93], [0.0051, -0.1639, 0.9474], [0.0045, -0.1643, 0.95], [0.0045, -0.2123, 0.9412], [0.0051, -0.1639, 0.9474], [0.0051, -0.1156, 0.9536], [0.0045, -0.1158, 0.9562], [0.0051, -0.1156, 0.9536], [0.0131, -0.0576, 0.9573], [0.0116, -0.0579, 0.964], [0.0491, -0.0331, -0.9017], [0.0111, -0.0572, -0.9223], [0.0131, -0.0576, -0.9287], [0.0043, -0.1153, -0.9226], [0.0051, -0.1156, -0.9251], [0.0131, -0.0576, -0.9287], [0.0043, -0.1635, -0.9164], [0.0051, -0.1639, -0.9188], [0.0051, -0.1156, -0.9251], [0.0043, -0.2113, -0.9077], [0.0051, -0.2118, -0.9101], [0.0051, -0.1639, -0.9188], [0.0043, -0.2585, -0.8965], [0.0051, -0.2591, -0.8989], [0.0051, -0.2118, -0.9101], [0.0043, -0.2585, -0.8965], [0.0043, -0.305, -0.883], [0.0051, -0.3058, -0.8853], [0.0043, -0.305, -0.883], [0.0043, -0.3508, -0.867], [0.0051, -0.3517, -0.8694], [0.0043, -0.3958, -0.8488], [0.0051, -0.3968, -0.851], [0.0051, -0.3517, -0.8694], [0.0043, -0.4397, -0.8282], [0.0051, -0.4408, -0.8304], [0.0051, -0.3968, -0.851], [0.0043, -0.4397, -0.8282], [0.0043, -0.4825, -0.8054], [0.0051, -0.4837, -0.8076], [0.0043, -0.4825, -0.8054], [0.0043, -0.5241, -0.7805], [0.0051, -0.5254, -0.7825], [0.0043, -0.5241, -0.7805], [0.0043, -0.5643, -0.7534], [0.0051, -0.5658, -0.7554], [0.0043, -0.5643, -0.7534], [0.0043, -0.6031, -0.7243], [0.0051, -0.6047, -0.7262], [0.0043, -0.6031, -0.7243], [0.0043, -0.6404, -0.6932], [0.0051, -0.642, -0.695], [0.0043, -0.6404, -0.6932], [0.0043, -0.676, -0.6602], [0.0051, -0.6777, -0.662], [0.0043, -0.676, -0.6602], [0.0043, -0.7098, -0.6255], [0.0051, -0.7116, -0.6272], [0.0043, -0.7418, -0.5891], [0.0051, -0.7437, -0.5907], [0.0051, -0.7116, -0.6272], [0.0043, -0.7719, -0.551], [0.0051, -0.7739, -0.5525], [0.0051, -0.7437, -0.5907], [0.0043, -0.7719, -0.551], [0.0043, -0.8001, -0.5115], [0.0051, -0.8021, -0.5129], [0.0043, -0.8001, -0.5115], [0.0043, -0.8261, -0.4706], [0.0051, -0.8282, -0.4719], [0.0043, -0.85, -0.4284], [0.0051, -0.8522, -0.4295], [0.0051, -0.8282, -0.4719], [0.0043, -0.8717, -0.385], [0.0051, -0.8739, -0.386], [0.0051, -0.8522, -0.4295], [0.0043, -0.8911, -0.3405], [0.0051, -0.8934, -0.3415], [0.0051, -0.8739, -0.386], [0.0043, -0.9082, -0.2952], [0.0051, -0.9105, -0.296], [0.0051, -0.8934, -0.3415], [0.0043, -0.9082, -0.2952], [0.0043, -0.9229, -0.249], [0.0051, -0.9253, -0.2496], [0.0043, -0.9229, -0.249], [0.0043, -0.9353, -0.2021], [0.0051, -0.9377, -0.2026], [0.0043, -0.9353, -0.2021], [0.0043, -0.9452, -0.1546], [0.0051, -0.9476, -0.155], [0.0043, -0.9452, -0.1546], [0.0043, -0.9527, -0.1066], [0.0051, -0.9551, -0.107], [0.0043, -0.9527, -0.1066], [0.0043, -0.9577, -0.0584], [0.0051, -0.9601, -0.0586], [0.0043, -0.9602, -0.01], [0.0051, -0.9626, -0.01], [0.0051, -0.9601, -0.0586], [0.0043, -0.9602, -0.01], [0.0043, -0.9602, 0.0385], [0.0051, -0.9626, 0.0386], [0.0043, -0.9602, 0.0385], [0.0043, -0.9577, 0.087], [0.0051, -0.9601, 0.0872], [0.0043, -0.9527, 0.1352], [0.0051, -0.9551, 0.1355], [0.0051, -0.9601, 0.0872], [0.0043, -0.9452, 0.1832], [0.0051, -0.9476, 0.1836], [0.0051, -0.9551, 0.1355], [0.0043, -0.9452, 0.1832], [0.0043, -0.9353, 0.2306], [0.0051, -0.9377, 0.2312], [0.0043, -0.9353, 0.2306], [0.0043, -0.9229, 0.2775], [0.0051, -0.9253, 0.2782], [0.0043, -0.9082, 0.3237], [0.0051, -0.9105, 0.3245], [0.0051, -0.9253, 0.2782], [0.0043, -0.9082, 0.3237], [0.0043, -0.8911, 0.3691], [0.0051, -0.8934, 0.3701], [0.0043, -0.8911, 0.3691], [0.0043, -0.8717, 0.4136], [0.0051, -0.8739, 0.4146], [0.0043, -0.8717, 0.4136], [0.0043, -0.85, 0.457], [0.0051, -0.8522, 0.4581], [0.0043, -0.85, 0.457], [0.0043, -0.8261, 0.4992], [0.0051, -0.8282, 0.5004], [0.0043, -0.8261, 0.4992], [0.0043, -0.8001, 0.5401], [0.0051, -0.8021, 0.5415], [0.0043, -0.8001, 0.5401], [0.0043, -0.7719, 0.5796], [0.0051, -0.7739, 0.5811], [0.0043, -0.7719, 0.5796], [0.0043, -0.7418, 0.6177], [0.0051, -0.7437, 0.6192], [0.0043, -0.7418, 0.6177], [0.0043, -0.7098, 0.6541], [0.0051, -0.7116, 0.6558], [0.0043, -0.676, 0.6888], [0.0051, -0.6777, 0.6906], [0.0051, -0.7116, 0.6558], [0.0043, -0.6404, 0.7218], [0.0051, -0.642, 0.7236], [0.0051, -0.6777, 0.6906], [0.0043, -0.6031, 0.7528], [0.0051, -0.6047, 0.7548], [0.0051, -0.642, 0.7236], [0.0043, -0.6031, 0.7528], [0.0043, -0.5643, 0.782], [0.0051, -0.5658, 0.784], [0.0043, -0.5241, 0.809], [0.0051, -0.5254, 0.8111], [0.0051, -0.5658, 0.784], [0.0043, -0.4825, 0.834], [0.0051, -0.4837, 0.8361], [0.0051, -0.5254, 0.8111], [0.0043, -0.4397, 0.8568], [0.0051, -0.4408, 0.859], [0.0051, -0.4837, 0.8361], [0.0043, -0.3958, 0.8774], [0.0051, -0.3968, 0.8796], [0.0051, -0.4408, 0.859], [0.0043, -0.3508, 0.8956], [0.0051, -0.3517, 0.8979], [0.0051, -0.3968, 0.8796], [0.0043, -0.305, 0.9116], [0.0051, -0.3058, 0.9139], [0.0051, -0.3517, 0.8979], [0.0043, -0.2585, 0.9251], [0.0051, -0.2591, 0.9275], [0.0051, -0.3058, 0.9139], [0.0043, -0.2113, 0.9363], [0.0051, -0.2118, 0.9387], [0.0051, -0.2591, 0.9275], [0.0043, -0.2113, 0.9363], [0.0043, -0.1635, 0.945], [0.0051, -0.1639, 0.9474], [0.0043, -0.1635, 0.945], [0.0043, -0.1153, 0.9512], [0.0051, -0.1156, 0.9536], [0.0043, -0.1153, 0.9512], [0.0111, -0.0572, 0.9509], [0.0131, -0.0576, 0.9573], [0.0285, -0.0337, -0.8807], [0.0063, -0.057, -0.9179], [0.0111, -0.0572, -0.9223], [0.0024, -0.1151, -0.9209], [0.0043, -0.1153, -0.9226], [0.0111, -0.0572, -0.9223], [0.0024, -0.1633, -0.9147], [0.0043, -0.1635, -0.9164], [0.0043, -0.1153, -0.9226], [0.0024, -0.2109, -0.906], [0.0043, -0.2113, -0.9077], [0.0043, -0.1635, -0.9164], [0.0024, -0.258, -0.8949], [0.0043, -0.2585, -0.8965], [0.0043, -0.2113, -0.9077], [0.0024, -0.3045, -0.8813], [0.0043, -0.305, -0.883], [0.0043, -0.2585, -0.8965], [0.0024, -0.3502, -0.8654], [0.0043, -0.3508, -0.867], [0.0043, -0.305, -0.883], [0.0024, -0.3951, -0.8472], [0.0043, -0.3958, -0.8488], [0.0043, -0.3508, -0.867], [0.0024, -0.3951, -0.8472], [0.0024, -0.4389, -0.8267], [0.0043, -0.4397, -0.8282], [0.0024, -0.4389, -0.8267], [0.0024, -0.4817, -0.8039], [0.0043, -0.4825, -0.8054], [0.0024, -0.5232, -0.779], [0.0043, -0.5241, -0.7805], [0.0043, -0.4825, -0.8054], [0.0024, -0.5633, -0.752], [0.0043, -0.5643, -0.7534], [0.0043, -0.5241, -0.7805], [0.0024, -0.6021, -0.7229], [0.0043, -0.6031, -0.7243], [0.0043, -0.5643, -0.7534], [0.0024, -0.6392, -0.6919], [0.0043, -0.6404, -0.6932], [0.0043, -0.6031, -0.7243], [0.0024, -0.6748, -0.659], [0.0043, -0.676, -0.6602], [0.0043, -0.6404, -0.6932], [0.0024, -0.7086, -0.6243], [0.0043, -0.7098, -0.6255], [0.0043, -0.676, -0.6602], [0.0024, -0.7086, -0.6243], [0.0024, -0.7405, -0.588], [0.0043, -0.7418, -0.5891], [0.0024, -0.7706, -0.55], [0.0043, -0.7719, -0.551], [0.0043, -0.7418, -0.5891], [0.0024, -0.7986, -0.5105], [0.0043, -0.8001, -0.5115], [0.0043, -0.7719, -0.551], [0.0024, -0.8246, -0.4697], [0.0043, -0.8261, -0.4706], [0.0043, -0.8001, -0.5115], [0.0024, -0.8484, -0.4276], [0.0043, -0.85, -0.4284], [0.0043, -0.8261, -0.4706], [0.0024, -0.8484, -0.4276], [0.0024, -0.8701, -0.3843], [0.0043, -0.8717, -0.385], [0.0024, -0.8701, -0.3843], [0.0024, -0.8895, -0.3399], [0.0043, -0.8911, -0.3405], [0.0024, -0.8895, -0.3399], [0.0024, -0.9066, -0.2946], [0.0043, -0.9082, -0.2952], [0.0024, -0.9213, -0.2485], [0.0043, -0.9229, -0.249], [0.0043, -0.9082, -0.2952], [0.0024, -0.9336, -0.2017], [0.0043, -0.9353, -0.2021], [0.0043, -0.9229, -0.249], [0.0024, -0.9435, -0.1543], [0.0043, -0.9452, -0.1546], [0.0043, -0.9353, -0.2021], [0.0024, -0.9435, -0.1543], [0.0024, -0.951, -0.1064], [0.0043, -0.9527, -0.1066], [0.0024, -0.951, -0.1064], [0.0024, -0.9559, -0.0583], [0.0043, -0.9577, -0.0584], [0.0024, -0.9584, -0.0099], [0.0043, -0.9602, -0.01], [0.0043, -0.9577, -0.0584], [0.0024, -0.9584, -0.0099], [0.0024, -0.9584, 0.0385], [0.0043, -0.9602, 0.0385], [0.0024, -0.9584, 0.0385], [0.0024, -0.9559, 0.0868], [0.0043, -0.9577, 0.087], [0.0024, -0.951, 0.135], [0.0043, -0.9527, 0.1352], [0.0043, -0.9577, 0.087], [0.0024, -0.9435, 0.1828], [0.0043, -0.9452, 0.1832], [0.0043, -0.9527, 0.1352], [0.0024, -0.9336, 0.2302], [0.0043, -0.9353, 0.2306], [0.0043, -0.9452, 0.1832], [0.0024, -0.9336, 0.2302], [0.0024, -0.9213, 0.277], [0.0043, -0.9229, 0.2775], [0.0024, -0.9213, 0.277], [0.0024, -0.9066, 0.3232], [0.0043, -0.9082, 0.3237], [0.0024, -0.9066, 0.3232], [0.0024, -0.8895, 0.3685], [0.0043, -0.8911, 0.3691], [0.0024, -0.8895, 0.3685], [0.0024, -0.8701, 0.4128], [0.0043, -0.8717, 0.4136], [0.0024, -0.8484, 0.4561], [0.0043, -0.85, 0.457], [0.0043, -0.8717, 0.4136], [0.0024, -0.8484, 0.4561], [0.0024, -0.8246, 0.4983], [0.0043, -0.8261, 0.4992], [0.0024, -0.7986, 0.5391], [0.0043, -0.8001, 0.5401], [0.0043, -0.8261, 0.4992], [0.0024, -0.7706, 0.5786], [0.0043, -0.7719, 0.5796], [0.0043, -0.8001, 0.5401], [0.0024, -0.7706, 0.5786], [0.0024, -0.7405, 0.6165], [0.0043, -0.7418, 0.6177], [0.0024, -0.7086, 0.6529], [0.0043, -0.7098, 0.6541], [0.0043, -0.7418, 0.6177], [0.0024, -0.7086, 0.6529], [0.0024, -0.6748, 0.6876], [0.0043, -0.676, 0.6888], [0.0024, -0.6748, 0.6876], [0.0024, -0.6392, 0.7205], [0.0043, -0.6404, 0.7218], [0.0024, -0.6392, 0.7205], [0.0024, -0.6021, 0.7515], [0.0043, -0.6031, 0.7528], [0.0024, -0.6021, 0.7515], [0.0024, -0.5633, 0.7805], [0.0043, -0.5643, 0.782], [0.0024, -0.5633, 0.7805], [0.0024, -0.5232, 0.8076], [0.0043, -0.5241, 0.809], [0.0024, -0.5232, 0.8076], [0.0024, -0.4817, 0.8325], [0.0043, -0.4825, 0.834], [0.0024, -0.4389, 0.8552], [0.0043, -0.4397, 0.8568], [0.0043, -0.4825, 0.834], [0.0024, -0.3951, 0.8758], [0.0043, -0.3958, 0.8774], [0.0043, -0.4397, 0.8568], [0.0024, -0.3502, 0.894], [0.0043, -0.3508, 0.8956], [0.0043, -0.3958, 0.8774], [0.0024, -0.3502, 0.894], [0.0024, -0.3045, 0.9099], [0.0043, -0.305, 0.9116], [0.0024, -0.3045, 0.9099], [0.0024, -0.258, 0.9234], [0.0043, -0.2585, 0.9251], [0.0024, -0.258, 0.9234], [0.0024, -0.2109, 0.9346], [0.0043, -0.2113, 0.9363], [0.0024, -0.2109, 0.9346], [0.0024, -0.1633, 0.9432], [0.0043, -0.1635, 0.945], [0.0024, -0.1633, 0.9432], [0.0024, -0.1151, 0.9495], [0.0043, -0.1153, 0.9512], [0.0024, -0.1151, 0.9495], [0.0063, -0.057, 0.9464], [0.0111, -0.0572, 0.9509], [-0.0, -0.0339, -0.873], [-0.0, -0.0569, -0.9162], [0.0063, -0.057, -0.9179], [-0.0, -0.1151, -0.9203], [0.0024, -0.1151, -0.9209], [0.0063, -0.057, -0.9179], [-0.0, -0.1632, -0.914], [0.0024, -0.1633, -0.9147], [0.0024, -0.1151, -0.9209], [-0.0, -0.1632, -0.914], [-0.0, -0.2108, -0.9054], [0.0024, -0.2109, -0.906], [-0.0, -0.2108, -0.9054], [-0.0, -0.2579, -0.8943], [0.0024, -0.258, -0.8949], [-0.0, -0.2579, -0.8943], [-0.0, -0.3043, -0.8807], [0.0024, -0.3045, -0.8813], [-0.0, -0.3043, -0.8807], [-0.0, -0.35, -0.8648], [0.0024, -0.3502, -0.8654], [-0.0, -0.35, -0.8648], [-0.0, -0.3948, -0.8466], [0.0024, -0.3951, -0.8472], [-0.0, -0.3948, -0.8466], [-0.0, -0.4386, -0.8261], [0.0024, -0.4389, -0.8267], [-0.0, -0.4386, -0.8261], [-0.0, -0.4814, -0.8034], [0.0024, -0.4817, -0.8039], [-0.0, -0.4814, -0.8034], [-0.0, -0.5228, -0.7785], [0.0024, -0.5232, -0.779], [-0.0, -0.5228, -0.7785], [-0.0, -0.563, -0.7515], [0.0024, -0.5633, -0.752], [-0.0, -0.563, -0.7515], [-0.0, -0.6017, -0.7224], [0.0024, -0.6021, -0.7229], [-0.0, -0.6017, -0.7224], [-0.0, -0.6388, -0.6914], [0.0024, -0.6392, -0.6919], [-0.0, -0.6388, -0.6914], [-0.0, -0.6743, -0.6586], [0.0024, -0.6748, -0.659], [-0.0, -0.6743, -0.6586], [-0.0, -0.7081, -0.6239], [0.0024, -0.7086, -0.6243], [-0.0, -0.7081, -0.6239], [-0.0, -0.74, -0.5876], [0.0024, -0.7405, -0.588], [-0.0, -0.74, -0.5876], [-0.0, -0.7701, -0.5496], [0.0024, -0.7706, -0.55], [-0.0, -0.7701, -0.5496], [-0.0, -0.7981, -0.5102], [0.0024, -0.7986, -0.5105], [-0.0, -0.7981, -0.5102], [-0.0, -0.8241, -0.4694], [0.0024, -0.8246, -0.4697], [-0.0, -0.8241, -0.4694], [-0.0, -0.8479, -0.4273], [0.0024, -0.8484, -0.4276], [-0.0, -0.8479, -0.4273], [-0.0, -0.8695, -0.384], [0.0024, -0.8701, -0.3843], [-0.0, -0.8695, -0.384], [-0.0, -0.8889, -0.3397], [0.0024, -0.8895, -0.3399], [-0.0, -0.8889, -0.3397], [-0.0, -0.906, -0.2944], [0.0024, -0.9066, -0.2946], [-0.0, -0.906, -0.2944], [-0.0, -0.9207, -0.2483], [0.0024, -0.9213, -0.2485], [-0.0, -0.9207, -0.2483], [-0.0, -0.933, -0.2015], [0.0024, -0.9336, -0.2017], [-0.0, -0.933, -0.2015], [-0.0, -0.9429, -0.1542], [0.0024, -0.9435, -0.1543], [-0.0, -0.9429, -0.1542], [-0.0, -0.9503, -0.1063], [0.0024, -0.951, -0.1064], [-0.0, -0.9503, -0.1063], [-0.0, -0.9553, -0.0582], [0.0024, -0.9559, -0.0583], [-0.0, -0.9553, -0.0582], [-0.0, -0.9578, -0.0099], [0.0024, -0.9584, -0.0099], [-0.0, -0.9578, -0.0099], [-0.0, -0.9578, 0.0385], [0.0024, -0.9584, 0.0385], [-0.0, -0.9578, 0.0385], [-0.0, -0.9553, 0.0868], [0.0024, -0.9559, 0.0868], [-0.0, -0.9553, 0.0868], [-0.0, -0.9503, 0.1349], [0.0024, -0.951, 0.135], [-0.0, -0.9503, 0.1349], [-0.0, -0.9429, 0.1827], [0.0024, -0.9435, 0.1828], [-0.0, -0.9429, 0.1827], [-0.0, -0.933, 0.2301], [0.0024, -0.9336, 0.2302], [-0.0, -0.933, 0.2301], [-0.0, -0.9207, 0.2769], [0.0024, -0.9213, 0.277], [-0.0, -0.9207, 0.2769], [-0.0, -0.906, 0.323], [0.0024, -0.9066, 0.3232], [-0.0, -0.906, 0.323], [-0.0, -0.8889, 0.3682], [0.0024, -0.8895, 0.3685], [-0.0, -0.8889, 0.3682], [-0.0, -0.8695, 0.4126], [0.0024, -0.8701, 0.4128], [-0.0, -0.8695, 0.4126], [-0.0, -0.8479, 0.4558], [0.0024, -0.8484, 0.4561], [-0.0, -0.8479, 0.4558], [-0.0, -0.8241, 0.498], [0.0024, -0.8246, 0.4983], [-0.0, -0.8241, 0.498], [-0.0, -0.7981, 0.5388], [0.0024, -0.7986, 0.5391], [-0.0, -0.7981, 0.5388], [-0.0, -0.7701, 0.5782], [0.0024, -0.7706, 0.5786], [-0.0, -0.7701, 0.5782], [-0.0, -0.74, 0.6161], [0.0024, -0.7405, 0.6165], [-0.0, -0.74, 0.6161], [-0.0, -0.7081, 0.6525], [0.0024, -0.7086, 0.6529], [-0.0, -0.7081, 0.6525], [-0.0, -0.6743, 0.6871], [0.0024, -0.6748, 0.6876], [-0.0, -0.6743, 0.6871], [-0.0, -0.6388, 0.72], [0.0024, -0.6392, 0.7205], [-0.0, -0.6388, 0.72], [-0.0, -0.6017, 0.751], [0.0024, -0.6021, 0.7515], [-0.0, -0.6017, 0.751], [-0.0, -0.563, 0.78], [0.0024, -0.5633, 0.7805], [-0.0, -0.563, 0.78], [-0.0, -0.5228, 0.807], [0.0024, -0.5232, 0.8076], [-0.0, -0.5228, 0.807], [-0.0, -0.4814, 0.8319], [0.0024, -0.4817, 0.8325], [-0.0, -0.4814, 0.8319], [-0.0, -0.4386, 0.8547], [0.0024, -0.4389, 0.8552], [-0.0, -0.4386, 0.8547], [-0.0, -0.3948, 0.8752], [0.0024, -0.3951, 0.8758], [-0.0, -0.3948, 0.8752], [-0.0, -0.35, 0.8934], [0.0024, -0.3502, 0.894], [-0.0, -0.35, 0.8934], [-0.0, -0.3043, 0.9093], [0.0024, -0.3045, 0.9099], [-0.0, -0.3043, 0.9093], [-0.0, -0.2579, 0.9228], [0.0024, -0.258, 0.9234], [-0.0, -0.2579, 0.9228], [-0.0, -0.2108, 0.934], [0.0024, -0.2109, 0.9346], [-0.0, -0.2108, 0.934], [-0.0, -0.1632, 0.9426], [0.0024, -0.1633, 0.9432], [-0.0, -0.1632, 0.9426], [-0.0, -0.115, 0.9489], [0.0024, -0.1151, 0.9495], [-0.0, -0.115, 0.9489], [-0.0, -0.0569, 0.9448], [0.0063, -0.057, 0.9464], [0.0036, 0.0317, 0.9563], [0.0021, 0.0317, 0.9547], [-0.0036, 0.0317, 0.9563], [0.0021, 0.0317, 0.9547], [-0.0, 0.0317, 0.9542], [-0.0036, 0.0317, 0.9563], [-0.0, 0.0317, 0.9542], [-0.0021, 0.0317, 0.9547], [-0.0036, 0.0317, 0.9563], [-0.0036, 0.0317, 0.9563], [-0.0041, 0.0318, 0.9583], [-0.0, 0.0319, 0.9624], [-0.0041, 0.0318, 0.9583], [-0.0035, 0.0318, 0.9604], [-0.0, 0.0319, 0.9624], [-0.0035, 0.0318, 0.9604], [-0.002, 0.0319, 0.9618], [-0.0, 0.0319, 0.9624], [-0.0, 0.0319, 0.9624], [0.002, 0.0319, 0.9618], [0.0035, 0.0318, 0.9604], [0.0035, 0.0318, 0.9604], [0.0041, 0.0318, 0.9583], [0.0036, 0.0317, 0.9563], [-0.0, 0.0319, 0.9624], [0.0035, 0.0318, 0.9604], [-0.0036, 0.0317, 0.9563], [-0.0021, 0.0317, -0.9261], [-0.0, 0.0317, -0.9256], [0.0021, 0.0317, -0.9261], [0.0021, 0.0317, -0.9261], [0.0036, 0.0317, -0.9277], [-0.0021, 0.0317, -0.9261], [0.0036, 0.0317, -0.9277], [0.0041, 0.0318, -0.9297], [-0.0021, 0.0317, -0.9261], [0.0041, 0.0318, -0.9297], [0.0035, 0.0318, -0.9318], [-0.002, 0.0319, -0.9333], [0.0035, 0.0318, -0.9318], [0.002, 0.0319, -0.9333], [-0.002, 0.0319, -0.9333], [0.002, 0.0319, -0.9333], [-0.0, 0.0319, -0.9338], [-0.002, 0.0319, -0.9333], [-0.002, 0.0319, -0.9333], [-0.0035, 0.0318, -0.9318], [-0.0041, 0.0318, -0.9297], [-0.0041, 0.0318, -0.9297], [-0.0036, 0.0317, -0.9277], [-0.0021, 0.0317, -0.9261], [-0.002, 0.0319, -0.9333], [-0.0041, 0.0318, -0.9297], [0.0041, 0.0318, -0.9297], [-0.0, -0.0308, -0.9856], [-0.0, 0.0319, -0.9338], [0.002, 0.0319, -0.9333], [-0.0491, -0.0331, -0.9017], [-0.0285, -0.0337, -0.8807], [-0.0021, 0.0317, -0.9261], [-0.0, -0.0308, 1.0142], [0.0278, -0.031, 1.0069], [0.002, 0.0319, 0.9618], [-0.0491, -0.0331, 0.9303], [-0.0036, 0.0317, 0.9563], [-0.0021, 0.0317, 0.9547], [0.0484, -0.0316, -0.9581], [0.0035, 0.0318, -0.9318], [0.0041, 0.0318, -0.9297], [-0.0484, -0.0316, -0.9581], [-0.0563, -0.0324, -0.9301], [-0.0041, 0.0318, -0.9297], [0.0484, -0.0316, 0.9867], [0.0563, -0.0324, 0.9587], [0.0041, 0.0318, 0.9583], [-0.0484, -0.0316, 0.9867], [-0.0035, 0.0318, 0.9604], [-0.0041, 0.0318, 0.9583], [0.0491, -0.0331, -0.9017], [0.0036, 0.0317, -0.9277], [0.0021, 0.0317, -0.9261], [-0.0, -0.0308, -0.9856], [-0.0278, -0.031, -0.9783], [-0.002, 0.0319, -0.9333], [-0.0285, -0.0337, -0.8807], [-0.0, -0.0339, -0.873], [-0.0, 0.0317, -0.9256], [0.0491, -0.0331, 0.9303], [0.0285, -0.0337, 0.9093], [0.0021, 0.0317, 0.9547], [-0.0, -0.0308, 1.0142], [-0.0, 0.0319, 0.9624], [-0.002, 0.0319, 0.9618], [-0.0285, -0.0337, 0.9093], [-0.0021, 0.0317, 0.9547], [-0.0, 0.0317, 0.9542], [0.0278, -0.031, -0.9783], [0.002, 0.0319, -0.9333], [0.0035, 0.0318, -0.9318], [-0.0563, -0.0324, -0.9301], [-0.0491, -0.0331, -0.9017], [-0.0036, 0.0317, -0.9277], [0.0278, -0.031, 1.0069], [0.0484, -0.0316, 0.9867], [0.0035, 0.0318, 0.9604], [-0.0563, -0.0324, 0.9587], [-0.0041, 0.0318, 0.9583], [-0.0036, 0.0317, 0.9563], [0.0563, -0.0324, -0.9301], [0.0041, 0.0318, -0.9297], [0.0036, 0.0317, -0.9277], [-0.0278, -0.031, -0.9783], [-0.0484, -0.0316, -0.9581], [-0.0035, 0.0318, -0.9318], [0.0285, -0.0337, -0.8807], [0.0021, 0.0317, -0.9261], [-0.0, 0.0317, -0.9256], [0.0563, -0.0324, 0.9587], [0.0491, -0.0331, 0.9303], [0.0036, 0.0317, 0.9563]], "None_GizmoGroup_": [[0.699, 0.0128, -0.2384], [0.699, 0.0128, 0.238], [0.7675, 0.0128, 0.1765], [0.7675, 0.0128, 0.1765], [0.699, 0.0128, 0.238], [0.9694, 0.0128, 0.238], [0.7675, 0.0128, 0.1765], [0.9694, 0.0128, 0.238], [0.9694, 0.0128, 0.1765], [0.699, 0.0128, -0.2384], [0.7675, 0.0128, 0.1765], [0.7675, 0.0128, 0.0326], [0.699, 0.0128, -0.2384], [0.7675, 0.0128, 0.0326], [0.7675, 0.0128, -0.0289], [0.7675, 0.0128, -0.0289], [0.7675, 0.0128, 0.0326], [0.9624, 0.0128, 0.0326], [0.7675, 0.0128, -0.0289], [0.9624, 0.0128, 0.0326], [0.9624, 0.0128, -0.0289], [0.699, 0.0128, -0.2384], [0.7675, 0.0128, -0.0289], [0.7675, 0.0128, -0.177], [0.699, 0.0128, -0.2384], [0.7675, 0.0128, -0.177], [0.9757, 0.0128, -0.177], [0.699, 0.0128, -0.2384], [0.9757, 0.0128, -0.177], [0.9757, 0.0128, -0.2384], [0.1528, 0.0128, -0.2384], [0.1528, 0.0128, 0.238], [0.2073, 0.0128, 0.238], [0.1528, 0.0128, -0.2384], [0.2073, 0.0128, 0.238], [0.217, 0.0128, 0.1283], [0.217, 0.0128, 0.1283], [0.2073, 0.0128, 0.238], [0.53, 0.0128, -0.1309], [0.53, 0.0128, -0.1309], [0.53, 0.0128, 0.238], [0.5943, 0.0128, 0.238], [0.53, 0.0128, -0.1309], [0.5943, 0.0128, 0.238], [0.5943, 0.0128, -0.2384], [0.1528, 0.0128, -0.2384], [0.217, 0.0128, 0.1283], [0.217, 0.0128, -0.2384], [0.5356, 0.0128, -0.2384], [0.217, 0.0128, 0.1283], [0.53, 0.0128, -0.1309], [0.5356, 0.0128, -0.2384], [0.53, 0.0128, -0.1309], [0.5943, 0.0128, -0.2384], [-0.2242, 0.0128, 0.242], [-0.1867, 0.0128, 0.2443], [-0.1487, 0.0128, 0.242], [-0.2242, 0.0128, 0.242], [-0.1487, 0.0128, 0.242], [-0.1132, 0.0128, 0.2354], [-0.2593, 0.0128, 0.2353], [-0.2242, 0.0128, 0.242], [-0.1132, 0.0128, 0.2354], [-0.2593, 0.0128, 0.2353], [-0.1132, 0.0128, 0.2354], [-0.0804, 0.0128, 0.2247], [-0.2918, 0.0128, 0.2246], [-0.2593, 0.0128, 0.2353], [-0.0804, 0.0128, 0.2247], [-0.2918, 0.0128, 0.2246], [-0.0804, 0.0128, 0.2247], [-0.0504, 0.0128, 0.2104], [-0.3216, 0.0128, 0.2102], [-0.2918, 0.0128, 0.2246], [-0.0504, 0.0128, 0.2104], [-0.3216, 0.0128, 0.2102], [-0.0504, 0.0128, 0.2104], [-0.0234, 0.0128, 0.1926], [-0.3485, 0.0128, 0.1924], [-0.3216, 0.0128, 0.2102], [-0.0234, 0.0128, 0.1926], [-0.3485, 0.0128, 0.1924], [-0.0234, 0.0128, 0.1926], [0.0004, 0.0128, 0.1718], [-0.3724, 0.0128, 0.1715], [-0.3485, 0.0128, 0.1924], [-0.1867, 0.0128, 0.1814], [-0.1867, 0.0128, 0.1814], [-0.3485, 0.0128, 0.1924], [0.0004, 0.0128, 0.1718], [-0.3724, 0.0128, 0.1715], [-0.1867, 0.0128, 0.1814], [-0.2127, 0.0128, 0.1798], [-0.1606, 0.0128, 0.1798], [-0.1867, 0.0128, 0.1814], [0.0004, 0.0128, 0.1718], [-0.1358, 0.0128, 0.1752], [-0.1606, 0.0128, 0.1798], [0.0004, 0.0128, 0.1718], [-0.3724, 0.0128, 0.1715], [-0.2127, 0.0128, 0.1798], [-0.2373, 0.0128, 0.1752], [-0.1126, 0.0128, 0.1677], [-0.1358, 0.0128, 0.1752], [0.0004, 0.0128, 0.1718], [-0.3724, 0.0128, 0.1715], [-0.2373, 0.0128, 0.1752], [-0.2604, 0.0128, 0.1677], [-0.1126, 0.0128, 0.1677], [0.0004, 0.0128, 0.1718], [0.021, 0.0128, 0.1482], [-0.3931, 0.0128, 0.1479], [-0.3724, 0.0128, 0.1715], [-0.2604, 0.0128, 0.1677], [-0.091, 0.0128, 0.1576], [-0.1126, 0.0128, 0.1677], [0.021, 0.0128, 0.1482], [-0.3931, 0.0128, 0.1479], [-0.2604, 0.0128, 0.1677], [-0.2819, 0.0128, 0.1576], [-0.0714, 0.0128, 0.1449], [-0.091, 0.0128, 0.1576], [0.021, 0.0128, 0.1482], [-0.3931, 0.0128, 0.1479], [-0.2819, 0.0128, 0.1576], [-0.3015, 0.0128, 0.1449], [-0.0714, 0.0128, 0.1449], [0.021, 0.0128, 0.1482], [0.0381, 0.0128, 0.1221], [-0.4104, 0.0128, 0.1218], [-0.3931, 0.0128, 0.1479], [-0.3015, 0.0128, 0.1449], [-0.0537, 0.0128, 0.1299], [-0.0714, 0.0128, 0.1449], [0.0381, 0.0128, 0.1221], [-0.4104, 0.0128, 0.1218], [-0.3015, 0.0128, 0.1449], [-0.3191, 0.0128, 0.1299], [-0.0383, 0.0128, 0.1127], [-0.0537, 0.0128, 0.1299], [0.0381, 0.0128, 0.1221], [-0.4104, 0.0128, 0.1218], [-0.3191, 0.0128, 0.1299], [-0.3345, 0.0128, 0.1127], [-0.0383, 0.0128, 0.1127], [0.0381, 0.0128, 0.1221], [0.0517, 0.0128, 0.094], [-0.4241, 0.0128, 0.0937], [-0.4104, 0.0128, 0.1218], [-0.3345, 0.0128, 0.1127], [-0.0253, 0.0128, 0.0934], [-0.0383, 0.0128, 0.1127], [0.0517, 0.0128, 0.094], [-0.4241, 0.0128, 0.0937], [-0.3345, 0.0128, 0.1127], [-0.3474, 0.0128, 0.0934], [-0.0253, 0.0128, 0.0934], [0.0517, 0.0128, 0.094], [0.0616, 0.0128, 0.064], [-0.4342, 0.0128, 0.0637], [-0.4241, 0.0128, 0.0937], [-0.3474, 0.0128, 0.0934], [-0.0149, 0.0128, 0.0724], [-0.0253, 0.0128, 0.0934], [0.0616, 0.0128, 0.064], [-0.4342, 0.0128, 0.0637], [-0.3474, 0.0128, 0.0934], [-0.3578, 0.0128, 0.0724], [-0.0072, 0.0128, 0.0496], [-0.0149, 0.0128, 0.0724], [0.0616, 0.0128, 0.064], [-0.4342, 0.0128, 0.0637], [-0.3578, 0.0128, 0.0724], [-0.3655, 0.0128, 0.0496], [-0.0072, 0.0128, 0.0496], [0.0616, 0.0128, 0.064], [0.0676, 0.0128, 0.0325], [-0.4403, 0.0128, 0.0323], [-0.4342, 0.0128, 0.0637], [-0.3655, 0.0128, 0.0496], [-0.0025, 0.0128, 0.0254], [-0.0072, 0.0128, 0.0496], [0.0676, 0.0128, 0.0325], [-0.4403, 0.0128, 0.0323], [-0.3655, 0.0128, 0.0496], [-0.3702, 0.0128, 0.0254], [-0.0025, 0.0128, 0.0254], [0.0676, 0.0128, 0.0325], [0.0696, 0.0128, -0.0002], [-0.4424, 0.0128, -0.0002], [-0.4403, 0.0128, 0.0323], [-0.3702, 0.0128, 0.0254], [-0.0009, 0.0128, -0.0002], [-0.0025, 0.0128, 0.0254], [0.0696, 0.0128, -0.0002], [-0.4424, 0.0128, -0.0002], [-0.3702, 0.0128, 0.0254], [-0.3718, 0.0128, -0.0002], [-0.4404, 0.0128, -0.0322], [-0.4424, 0.0128, -0.0002], [-0.3718, 0.0128, -0.0002], [-0.4404, 0.0128, -0.0322], [-0.3718, 0.0128, -0.0002], [-0.3702, 0.0128, -0.0257], [-0.0025, 0.0128, -0.0257], [-0.0009, 0.0128, -0.0002], [0.0696, 0.0128, -0.0002], [-0.0025, 0.0128, -0.0257], [0.0696, 0.0128, -0.0002], [0.0677, 0.0128, -0.032], [-0.4404, 0.0128, -0.0322], [-0.3702, 0.0128, -0.0257], [-0.3655, 0.0128, -0.0498], [-0.0072, 0.0128, -0.0498], [-0.0025, 0.0128, -0.0257], [0.0677, 0.0128, -0.032], [-0.0072, 0.0128, -0.0498], [0.0677, 0.0128, -0.032], [0.0618, 0.0128, -0.063], [-0.4344, 0.0128, -0.0632], [-0.4404, 0.0128, -0.0322], [-0.3655, 0.0128, -0.0498], [-0.4344, 0.0128, -0.0632], [-0.3655, 0.0128, -0.0498], [-0.3578, 0.0128, -0.0725], [-0.0149, 0.0128, -0.0725], [-0.0072, 0.0128, -0.0498], [0.0618, 0.0128, -0.063], [-0.0149, 0.0128, -0.0725], [0.0618, 0.0128, -0.063], [0.0521, 0.0128, -0.0927], [-0.4246, 0.0128, -0.0929], [-0.4344, 0.0128, -0.0632], [-0.3578, 0.0128, -0.0725], [-0.0253, 0.0128, -0.0936], [-0.0149, 0.0128, -0.0725], [0.0521, 0.0128, -0.0927], [-0.4246, 0.0128, -0.0929], [-0.3578, 0.0128, -0.0725], [-0.3474, 0.0128, -0.0936], [-0.0253, 0.0128, -0.0936], [0.0521, 0.0128, -0.0927], [0.0387, 0.0128, -0.1207], [-0.4111, 0.0128, -0.121], [-0.4246, 0.0128, -0.0929], [-0.3474, 0.0128, -0.0936], [-0.0383, 0.0128, -0.1128], [-0.0253, 0.0128, -0.0936], [0.0387, 0.0128, -0.1207], [-0.4111, 0.0128, -0.121], [-0.3474, 0.0128, -0.0936], [-0.3345, 0.0128, -0.1128], [-0.0537, 0.0128, -0.1301], [-0.0383, 0.0128, -0.1128], [0.0387, 0.0128, -0.1207], [-0.4111, 0.0128, -0.121], [-0.3345, 0.0128, -0.1128], [-0.3191, 0.0128, -0.1301], [-0.0537, 0.0128, -0.1301], [0.0387, 0.0128, -0.1207], [0.0217, 0.0128, -0.1469], [-0.3941, 0.0128, -0.1472], [-0.4111, 0.0128, -0.121], [-0.3191, 0.0128, -0.1301], [-0.0714, 0.0128, -0.1452], [-0.0537, 0.0128, -0.1301], [0.0217, 0.0128, -0.1469], [-0.3941, 0.0128, -0.1472], [-0.3191, 0.0128, -0.1301], [-0.3015, 0.0128, -0.1452], [-0.091, 0.0128, -0.1579], [-0.0714, 0.0128, -0.1452], [0.0217, 0.0128, -0.1469], [-0.3941, 0.0128, -0.1472], [-0.3015, 0.0128, -0.1452], [-0.2819, 0.0128, -0.1579], [-0.091, 0.0128, -0.1579], [0.0217, 0.0128, -0.1469], [0.0013, 0.0128, -0.1707], [-0.3737, 0.0128, -0.1709], [-0.3941, 0.0128, -0.1472], [-0.2819, 0.0128, -0.1579], [-0.1126, 0.0128, -0.1681], [-0.091, 0.0128, -0.1579], [0.0013, 0.0128, -0.1707], [-0.3737, 0.0128, -0.1709], [-0.2819, 0.0128, -0.1579], [-0.2604, 0.0128, -0.1681], [-0.1358, 0.0128, -0.1756], [-0.1126, 0.0128, -0.1681], [0.0013, 0.0128, -0.1707], [-0.3737, 0.0128, -0.1709], [-0.2604, 0.0128, -0.1681], [-0.2373, 0.0128, -0.1756], [-0.1358, 0.0128, -0.1756], [0.0013, 0.0128, -0.1707], [-0.0225, 0.0128, -0.1918], [-0.35, 0.0128, -0.192], [-0.3737, 0.0128, -0.1709], [-0.2373, 0.0128, -0.1756], [-0.1606, 0.0128, -0.1803], [-0.1358, 0.0128, -0.1756], [-0.0225, 0.0128, -0.1918], [-0.35, 0.0128, -0.192], [-0.2373, 0.0128, -0.1756], [-0.2127, 0.0128, -0.1803], [-0.1867, 0.0128, -0.1818], [-0.1606, 0.0128, -0.1803], [-0.0225, 0.0128, -0.1918], [-0.35, 0.0128, -0.192], [-0.2127, 0.0128, -0.1803], [-0.1867, 0.0128, -0.1818], [-0.35, 0.0128, -0.192], [-0.1867, 0.0128, -0.1818], [-0.0225, 0.0128, -0.1918], [-0.35, 0.0128, -0.192], [-0.0225, 0.0128, -0.1918], [-0.0496, 0.0128, -0.2099], [-0.3233, 0.0128, -0.21], [-0.35, 0.0128, -0.192], [-0.0496, 0.0128, -0.2099], [-0.3233, 0.0128, -0.21], [-0.0496, 0.0128, -0.2099], [-0.0798, 0.0128, -0.2246], [-0.2936, 0.0128, -0.2247], [-0.3233, 0.0128, -0.21], [-0.0798, 0.0128, -0.2246], [-0.2936, 0.0128, -0.2247], [-0.0798, 0.0128, -0.2246], [-0.113, 0.0128, -0.2355], [-0.261, 0.0128, -0.2356], [-0.2936, 0.0128, -0.2247], [-0.113, 0.0128, -0.2355], [-0.261, 0.0128, -0.2356], [-0.113, 0.0128, -0.2355], [-0.1491, 0.0128, -0.2424], [-0.2258, 0.0128, -0.2424], [-0.261, 0.0128, -0.2356], [-0.1491, 0.0128, -0.2424], [-0.2258, 0.0128, -0.2424], [-0.1491, 0.0128, -0.2424], [-0.1881, 0.0128, -0.2447], [-0.9677, 0.0128, -0.2384], [-0.9677, 0.0128, 0.238], [-0.9132, 0.0128, 0.238], [-0.9677, 0.0128, -0.2384], [-0.9132, 0.0128, 0.238], [-0.9034, 0.0128, 0.1283], [-0.9034, 0.0128, 0.1283], [-0.9132, 0.0128, 0.238], [-0.5905, 0.0128, -0.1309], [-0.5905, 0.0128, -0.1309], [-0.5905, 0.0128, 0.238], [-0.5262, 0.0128, 0.238], [-0.5905, 0.0128, -0.1309], [-0.5262, 0.0128, 0.238], [-0.5262, 0.0128, -0.2384], [-0.9677, 0.0128, -0.2384], [-0.9034, 0.0128, 0.1283], [-0.9034, 0.0128, -0.2384], [-0.5849, 0.0128, -0.2384], [-0.9034, 0.0128, 0.1283], [-0.5905, 0.0128, -0.1309], [-0.5849, 0.0128, -0.2384], [-0.5905, 0.0128, -0.1309], [-0.5262, 0.0128, -0.2384], [0.699, -0.0084, -0.2384], [0.7675, -0.0084, 0.1765], [0.699, -0.0084, 0.238], [0.7675, -0.0084, 0.1765], [0.9694, -0.0084, 0.238], [0.699, -0.0084, 0.238], [0.7675, -0.0084, 0.1765], [0.9694, -0.0084, 0.1765], [0.9694, -0.0084, 0.238], [0.699, -0.0084, -0.2384], [0.7675, -0.0084, 0.0326], [0.7675, -0.0084, 0.1765], [0.699, -0.0084, -0.2384], [0.7675, -0.0084, -0.0289], [0.7675, -0.0084, 0.0326], [0.7675, -0.0084, -0.0289], [0.9624, -0.0084, 0.0326], [0.7675, -0.0084, 0.0326], [0.7675, -0.0084, -0.0289], [0.9624, -0.0084, -0.0289], [0.9624, -0.0084, 0.0326], [0.699, -0.0084, -0.2384], [0.7675, -0.0084, -0.177], [0.7675, -0.0084, -0.0289], [0.699, -0.0084, -0.2384], [0.9757, -0.0084, -0.177], [0.7675, -0.0084, -0.177], [0.699, -0.0084, -0.2384], [0.9757, -0.0084, -0.2384], [0.9757, -0.0084, -0.177], [0.1528, -0.0084, -0.2384], [0.2073, -0.0084, 0.238], [0.1528, -0.0084, 0.238], [0.1528, -0.0084, -0.2384], [0.217, -0.0084, 0.1283], [0.2073, -0.0084, 0.238], [0.217, -0.0084, 0.1283], [0.53, -0.0084, -0.1309], [0.2073, -0.0084, 0.238], [0.53, -0.0084, -0.1309], [0.5943, -0.0084, 0.238], [0.53, -0.0084, 0.238], [0.53, -0.0084, -0.1309], [0.5943, -0.0084, -0.2384], [0.5943, -0.0084, 0.238], [0.1528, -0.0084, -0.2384], [0.217, -0.0084, -0.2384], [0.217, -0.0084, 0.1283], [0.5356, -0.0084, -0.2384], [0.53, -0.0084, -0.1309], [0.217, -0.0084, 0.1283], [0.5356, -0.0084, -0.2384], [0.5943, -0.0084, -0.2384], [0.53, -0.0084, -0.1309], [-0.2242, -0.0084, 0.242], [-0.1487, -0.0084, 0.242], [-0.1867, -0.0084, 0.2443], [-0.2242, -0.0084, 0.242], [-0.1132, -0.0084, 0.2354], [-0.1487, -0.0084, 0.242], [-0.2593, -0.0084, 0.2353], [-0.1132, -0.0084, 0.2354], [-0.2242, -0.0084, 0.242], [-0.2593, -0.0084, 0.2353], [-0.0804, -0.0084, 0.2247], [-0.1132, -0.0084, 0.2354], [-0.2918, -0.0084, 0.2246], [-0.0804, -0.0084, 0.2247], [-0.2593, -0.0084, 0.2353], [-0.2918, -0.0084, 0.2246], [-0.0504, -0.0084, 0.2104], [-0.0804, -0.0084, 0.2247], [-0.3216, -0.0084, 0.2102], [-0.0504, -0.0084, 0.2104], [-0.2918, -0.0084, 0.2246], [-0.3216, -0.0084, 0.2102], [-0.0234, -0.0084, 0.1926], [-0.0504, -0.0084, 0.2104], [-0.3485, -0.0084, 0.1924], [-0.0234, -0.0084, 0.1926], [-0.3216, -0.0084, 0.2102], [-0.3485, -0.0084, 0.1924], [0.0004, -0.0084, 0.1718], [-0.0234, -0.0084, 0.1926], [-0.3724, -0.0084, 0.1715], [-0.1867, -0.0084, 0.1814], [-0.3485, -0.0084, 0.1924], [-0.1867, -0.0084, 0.1814], [0.0004, -0.0084, 0.1718], [-0.3485, -0.0084, 0.1924], [-0.3724, -0.0084, 0.1715], [-0.2127, -0.0084, 0.1798], [-0.1867, -0.0084, 0.1814], [-0.1606, -0.0084, 0.1798], [0.0004, -0.0084, 0.1718], [-0.1867, -0.0084, 0.1814], [-0.1358, -0.0084, 0.1752], [0.0004, -0.0084, 0.1718], [-0.1606, -0.0084, 0.1798], [-0.3724, -0.0084, 0.1715], [-0.2373, -0.0084, 0.1752], [-0.2127, -0.0084, 0.1798], [-0.1126, -0.0084, 0.1677], [0.0004, -0.0084, 0.1718], [-0.1358, -0.0084, 0.1752], [-0.3724, -0.0084, 0.1715], [-0.2604, -0.0084, 0.1677], [-0.2373, -0.0084, 0.1752], [-0.1126, -0.0084, 0.1677], [0.021, -0.0084, 0.1482], [0.0004, -0.0084, 0.1718], [-0.3931, -0.0084, 0.1479], [-0.2604, -0.0084, 0.1677], [-0.3724, -0.0084, 0.1715], [-0.091, -0.0084, 0.1576], [0.021, -0.0084, 0.1482], [-0.1126, -0.0084, 0.1677], [-0.3931, -0.0084, 0.1479], [-0.2819, -0.0084, 0.1576], [-0.2604, -0.0084, 0.1677], [-0.0714, -0.0084, 0.1449], [0.021, -0.0084, 0.1482], [-0.091, -0.0084, 0.1576], [-0.3931, -0.0084, 0.1479], [-0.3015, -0.0084, 0.1449], [-0.2819, -0.0084, 0.1576], [-0.0714, -0.0084, 0.1449], [0.0381, -0.0084, 0.1221], [0.021, -0.0084, 0.1482], [-0.4104, -0.0084, 0.1218], [-0.3015, -0.0084, 0.1449], [-0.3931, -0.0084, 0.1479], [-0.0537, -0.0084, 0.1299], [0.0381, -0.0084, 0.1221], [-0.0714, -0.0084, 0.1449], [-0.4104, -0.0084, 0.1218], [-0.3191, -0.0084, 0.1299], [-0.3015, -0.0084, 0.1449], [-0.0383, -0.0084, 0.1127], [0.0381, -0.0084, 0.1221], [-0.0537, -0.0084, 0.1299], [-0.4104, -0.0084, 0.1218], [-0.3345, -0.0084, 0.1127], [-0.3191, -0.0084, 0.1299], [-0.0383, -0.0084, 0.1127], [0.0517, -0.0084, 0.094], [0.0381, -0.0084, 0.1221], [-0.4241, -0.0084, 0.0937], [-0.3345, -0.0084, 0.1127], [-0.4104, -0.0084, 0.1218], [-0.0253, -0.0084, 0.0934], [0.0517, -0.0084, 0.094], [-0.0383, -0.0084, 0.1127], [-0.4241, -0.0084, 0.0937], [-0.3474, -0.0084, 0.0934], [-0.3345, -0.0084, 0.1127], [-0.0253, -0.0084, 0.0934], [0.0616, -0.0084, 0.064], [0.0517, -0.0084, 0.094], [-0.4342, -0.0084, 0.0637], [-0.3474, -0.0084, 0.0934], [-0.4241, -0.0084, 0.0937], [-0.0149, -0.0084, 0.0724], [0.0616, -0.0084, 0.064], [-0.0253, -0.0084, 0.0934], [-0.4342, -0.0084, 0.0637], [-0.3578, -0.0084, 0.0724], [-0.3474, -0.0084, 0.0934], [-0.0072, -0.0084, 0.0496], [0.0616, -0.0084, 0.064], [-0.0149, -0.0084, 0.0724], [-0.4342, -0.0084, 0.0637], [-0.3655, -0.0084, 0.0496], [-0.3578, -0.0084, 0.0724], [-0.0072, -0.0084, 0.0496], [0.0676, -0.0084, 0.0325], [0.0616, -0.0084, 0.064], [-0.4403, -0.0084, 0.0323], [-0.3655, -0.0084, 0.0496], [-0.4342, -0.0084, 0.0637], [-0.0025, -0.0084, 0.0254], [0.0676, -0.0084, 0.0325], [-0.0072, -0.0084, 0.0496], [-0.4403, -0.0084, 0.0323], [-0.3702, -0.0084, 0.0254], [-0.3655, -0.0084, 0.0496], [-0.0025, -0.0084, 0.0254], [0.0696, -0.0084, -0.0002], [0.0676, -0.0084, 0.0325], [-0.4424, -0.0084, -0.0002], [-0.3702, -0.0084, 0.0254], [-0.4403, -0.0084, 0.0323], [-0.0009, -0.0084, -0.0002], [0.0696, -0.0084, -0.0002], [-0.0025, -0.0084, 0.0254], [-0.4424, -0.0084, -0.0002], [-0.3718, -0.0084, -0.0002], [-0.3702, -0.0084, 0.0254], [-0.4404, -0.0084, -0.0322], [-0.3718, -0.0084, -0.0002], [-0.4424, -0.0084, -0.0002], [-0.4404, -0.0084, -0.0322], [-0.3702, -0.0084, -0.0257], [-0.3718, -0.0084, -0.0002], [-0.0025, -0.0084, -0.0257], [0.0696, -0.0084, -0.0002], [-0.0009, -0.0084, -0.0002], [-0.0025, -0.0084, -0.0257], [0.0677, -0.0084, -0.032], [0.0696, -0.0084, -0.0002], [-0.4404, -0.0084, -0.0322], [-0.3655, -0.0084, -0.0498], [-0.3702, -0.0084, -0.0257], [-0.0072, -0.0084, -0.0498], [0.0677, -0.0084, -0.032], [-0.0025, -0.0084, -0.0257], [-0.0072, -0.0084, -0.0498], [0.0618, -0.0084, -0.063], [0.0677, -0.0084, -0.032], [-0.4344, -0.0084, -0.0632], [-0.3655, -0.0084, -0.0498], [-0.4404, -0.0084, -0.0322], [-0.4344, -0.0084, -0.0632], [-0.3578, -0.0084, -0.0725], [-0.3655, -0.0084, -0.0498], [-0.0149, -0.0084, -0.0725], [0.0618, -0.0084, -0.063], [-0.0072, -0.0084, -0.0498], [-0.0149, -0.0084, -0.0725], [0.0521, -0.0084, -0.0927], [0.0618, -0.0084, -0.063], [-0.4246, -0.0084, -0.0929], [-0.3578, -0.0084, -0.0725], [-0.4344, -0.0084, -0.0632], [-0.0253, -0.0084, -0.0936], [0.0521, -0.0084, -0.0927], [-0.0149, -0.0084, -0.0725], [-0.4246, -0.0084, -0.0929], [-0.3474, -0.0084, -0.0936], [-0.3578, -0.0084, -0.0725], [-0.0253, -0.0084, -0.0936], [0.0387, -0.0084, -0.1207], [0.0521, -0.0084, -0.0927], [-0.4111, -0.0084, -0.121], [-0.3474, -0.0084, -0.0936], [-0.4246, -0.0084, -0.0929], [-0.0383, -0.0084, -0.1128], [0.0387, -0.0084, -0.1207], [-0.0253, -0.0084, -0.0936], [-0.4111, -0.0084, -0.121], [-0.3345, -0.0084, -0.1128], [-0.3474, -0.0084, -0.0936], [-0.0537, -0.0084, -0.1301], [0.0387, -0.0084, -0.1207], [-0.0383, -0.0084, -0.1128], [-0.4111, -0.0084, -0.121], [-0.3191, -0.0084, -0.1301], [-0.3345, -0.0084, -0.1128], [-0.0537, -0.0084, -0.1301], [0.0217, -0.0084, -0.1469], [0.0387, -0.0084, -0.1207], [-0.3941, -0.0084, -0.1472], [-0.3191, -0.0084, -0.1301], [-0.4111, -0.0084, -0.121], [-0.0714, -0.0084, -0.1452], [0.0217, -0.0084, -0.1469], [-0.0537, -0.0084, -0.1301], [-0.3941, -0.0084, -0.1472], [-0.3015, -0.0084, -0.1452], [-0.3191, -0.0084, -0.1301], [-0.091, -0.0084, -0.1579], [0.0217, -0.0084, -0.1469], [-0.0714, -0.0084, -0.1452], [-0.3941, -0.0084, -0.1472], [-0.2819, -0.0084, -0.1579], [-0.3015, -0.0084, -0.1452], [-0.091, -0.0084, -0.1579], [0.0013, -0.0084, -0.1707], [0.0217, -0.0084, -0.1469], [-0.3737, -0.0084, -0.1709], [-0.2819, -0.0084, -0.1579], [-0.3941, -0.0084, -0.1472], [-0.1126, -0.0084, -0.1681], [0.0013, -0.0084, -0.1707], [-0.091, -0.0084, -0.1579], [-0.3737, -0.0084, -0.1709], [-0.2604, -0.0084, -0.1681], [-0.2819, -0.0084, -0.1579], [-0.1358, -0.0084, -0.1756], [0.0013, -0.0084, -0.1707], [-0.1126, -0.0084, -0.1681], [-0.3737, -0.0084, -0.1709], [-0.2373, -0.0084, -0.1756], [-0.2604, -0.0084, -0.1681], [-0.1358, -0.0084, -0.1756], [-0.0225, -0.0084, -0.1918], [0.0013, -0.0084, -0.1707], [-0.35, -0.0084, -0.192], [-0.2373, -0.0084, -0.1756], [-0.3737, -0.0084, -0.1709], [-0.1606, -0.0084, -0.1803], [-0.0225, -0.0084, -0.1918], [-0.1358, -0.0084, -0.1756], [-0.35, -0.0084, -0.192], [-0.2127, -0.0084, -0.1803], [-0.2373, -0.0084, -0.1756], [-0.1867, -0.0084, -0.1818], [-0.0225, -0.0084, -0.1918], [-0.1606, -0.0084, -0.1803], [-0.35, -0.0084, -0.192], [-0.1867, -0.0084, -0.1818], [-0.2127, -0.0084, -0.1803], [-0.35, -0.0084, -0.192], [-0.0225, -0.0084, -0.1918], [-0.1867, -0.0084, -0.1818], [-0.35, -0.0084, -0.192], [-0.0496, -0.0084, -0.2099], [-0.0225, -0.0084, -0.1918], [-0.3233, -0.0084, -0.21], [-0.0496, -0.0084, -0.2099], [-0.35, -0.0084, -0.192], [-0.3233, -0.0084, -0.21], [-0.0798, -0.0084, -0.2246], [-0.0496, -0.0084, -0.2099], [-0.2936, -0.0084, -0.2247], [-0.0798, -0.0084, -0.2246], [-0.3233, -0.0084, -0.21], [-0.2936, -0.0084, -0.2247], [-0.113, -0.0084, -0.2355], [-0.0798, -0.0084, -0.2246], [-0.261, -0.0084, -0.2356], [-0.113, -0.0084, -0.2355], [-0.2936, -0.0084, -0.2247], [-0.261, -0.0084, -0.2356], [-0.1491, -0.0084, -0.2424], [-0.113, -0.0084, -0.2355], [-0.2258, -0.0084, -0.2424], [-0.1491, -0.0084, -0.2424], [-0.261, -0.0084, -0.2356], [-0.2258, -0.0084, -0.2424], [-0.1881, -0.0084, -0.2447], [-0.1491, -0.0084, -0.2424], [-0.9677, -0.0084, -0.2384], [-0.9132, -0.0084, 0.238], [-0.9677, -0.0084, 0.238], [-0.9677, -0.0084, -0.2384], [-0.9034, -0.0084, 0.1283], [-0.9132, -0.0084, 0.238], [-0.9034, -0.0084, 0.1283], [-0.5905, -0.0084, -0.1309], [-0.9132, -0.0084, 0.238], [-0.5905, -0.0084, -0.1309], [-0.5262, -0.0084, 0.238], [-0.5905, -0.0084, 0.238], [-0.5905, -0.0084, -0.1309], [-0.5262, -0.0084, -0.2384], [-0.5262, -0.0084, 0.238], [-0.9677, -0.0084, -0.2384], [-0.9034, -0.0084, -0.2384], [-0.9034, -0.0084, 0.1283], [-0.5849, -0.0084, -0.2384], [-0.5905, -0.0084, -0.1309], [-0.9034, -0.0084, 0.1283], [-0.5849, -0.0084, -0.2384], [-0.5262, -0.0084, -0.2384], [-0.5905, -0.0084, -0.1309], [0.0387, 0.0128, -0.1207], [0.0217, -0.0084, -0.1469], [0.0217, 0.0128, -0.1469], [-0.1881, 0.0128, -0.2447], [-0.2258, -0.0084, -0.2424], [-0.2258, 0.0128, -0.2424], [-0.2373, 0.0128, 0.1752], [-0.2604, -0.0084, 0.1677], [-0.2604, 0.0128, 0.1677], [-0.3941, 0.0128, -0.1472], [-0.4111, -0.0084, -0.121], [-0.4111, 0.0128, -0.121], [0.1528, 0.0128, 0.238], [0.2073, -0.0084, 0.238], [0.2073, 0.0128, 0.238], [-0.3702, 0.0128, 0.0254], [-0.3655, -0.0084, 0.0496], [-0.3702, -0.0084, 0.0254], [-0.1491, 0.0128, -0.2424], [-0.1881, -0.0084, -0.2447], [-0.1881, 0.0128, -0.2447], [-0.9677, 0.0128, -0.2384], [-0.9677, -0.0084, 0.238], [-0.9677, 0.0128, 0.238], [0.0004, 0.0128, 0.1718], [0.021, -0.0084, 0.1482], [0.021, 0.0128, 0.1482], [-0.0714, 0.0128, -0.1452], [-0.0537, -0.0084, -0.1301], [-0.0537, 0.0128, -0.1301], [0.0696, 0.0128, -0.0002], [0.0676, -0.0084, 0.0325], [0.0696, -0.0084, -0.0002], [-0.3931, 0.0128, 0.1479], [-0.3724, -0.0084, 0.1715], [-0.3724, 0.0128, 0.1715], [-0.4424, 0.0128, -0.0002], [-0.4403, -0.0084, 0.0323], [-0.4403, 0.0128, 0.0323], [-0.9677, 0.0128, 0.238], [-0.9132, -0.0084, 0.238], [-0.9132, 0.0128, 0.238], [0.2073, 0.0128, 0.238], [0.53, -0.0084, -0.1309], [0.53, 0.0128, -0.1309], [-0.091, 0.0128, 0.1576], [-0.1126, -0.0084, 0.1677], [-0.1126, 0.0128, 0.1677], [-0.3191, 0.0128, -0.1301], [-0.3015, -0.0084, -0.1452], [-0.3015, 0.0128, -0.1452], [0.53, 0.0128, -0.1309], [0.53, -0.0084, 0.238], [0.53, 0.0128, 0.238], [-0.0009, 0.0128, -0.0002], [-0.0025, -0.0084, 0.0254], [-0.0025, 0.0128, 0.0254], [-0.091, 0.0128, -0.1579], [-0.0714, -0.0084, -0.1452], [-0.0714, 0.0128, -0.1452], [0.53, 0.0128, 0.238], [0.5943, -0.0084, 0.238], [0.5943, 0.0128, 0.238], [-0.9132, 0.0128, 0.238], [-0.5905, -0.0084, -0.1309], [-0.5905, 0.0128, -0.1309], [-0.2604, 0.0128, 0.1677], [-0.2819, -0.0084, 0.1576], [-0.2819, 0.0128, 0.1576], [-0.3718, 0.0128, -0.0002], [-0.3702, -0.0084, 0.0254], [-0.3718, -0.0084, -0.0002], [-0.5905, 0.0128, -0.1309], [-0.5905, -0.0084, 0.238], [-0.5905, 0.0128, 0.238], [-0.0714, 0.0128, 0.1449], [-0.091, -0.0084, 0.1576], [-0.091, 0.0128, 0.1576], [-0.3015, 0.0128, -0.1452], [-0.2819, -0.0084, -0.1579], [-0.2819, 0.0128, -0.1579], [0.5943, 0.0128, 0.238], [0.5943, -0.0084, -0.2384], [0.5943, 0.0128, -0.2384], [-0.4404, 0.0128, -0.0322], [-0.4424, -0.0084, -0.0002], [-0.4424, 0.0128, -0.0002], [0.217, 0.0128, -0.2384], [0.1528, -0.0084, -0.2384], [0.1528, 0.0128, -0.2384], [-0.5905, 0.0128, 0.238], [-0.5262, -0.0084, 0.238], [-0.5262, 0.0128, 0.238], [0.0217, 0.0128, -0.1469], [0.0013, -0.0084, -0.1707], [0.0013, 0.0128, -0.1707], [0.217, 0.0128, 0.1283], [0.217, -0.0084, -0.2384], [0.217, 0.0128, -0.2384], [-0.2819, 0.0128, 0.1576], [-0.3015, -0.0084, 0.1449], [-0.3015, 0.0128, 0.1449], [-0.3737, 0.0128, -0.1709], [-0.3941, -0.0084, -0.1472], [-0.3941, 0.0128, -0.1472], [0.5356, 0.0128, -0.2384], [0.217, -0.0084, 0.1283], [0.217, 0.0128, 0.1283], [-0.3702, 0.0128, -0.0257], [-0.3718, -0.0084, -0.0002], [-0.3702, -0.0084, -0.0257], [-0.5262, 0.0128, 0.238], [-0.5262, -0.0084, -0.2384], [-0.5262, 0.0128, -0.2384], [-0.0025, 0.0128, -0.0257], [-0.0009, -0.0084, -0.0002], [-0.0009, 0.0128, -0.0002], [-0.9034, 0.0128, -0.2384], [-0.9677, -0.0084, -0.2384], [-0.9677, 0.0128, -0.2384], [0.0381, 0.0128, 0.1221], [0.021, -0.0084, 0.1482], [0.0381, -0.0084, 0.1221], [-0.1126, 0.0128, -0.1681], [-0.091, -0.0084, -0.1579], [-0.091, 0.0128, -0.1579], [0.5943, 0.0128, -0.2384], [0.5356, -0.0084, -0.2384], [0.5356, 0.0128, -0.2384], [-0.9034, 0.0128, 0.1283], [-0.9034, -0.0084, -0.2384], [-0.9034, 0.0128, -0.2384], [-0.4104, 0.0128, 0.1218], [-0.3931, -0.0084, 0.1479], [-0.3931, 0.0128, 0.1479], [-0.2242, 0.0128, 0.242], [-0.1867, -0.0084, 0.2443], [-0.1867, 0.0128, 0.2443], [-0.5849, 0.0128, -0.2384], [-0.9034, -0.0084, 0.1283], [-0.9034, 0.0128, 0.1283], [0.0677, 0.0128, -0.032], [0.0696, -0.0084, -0.0002], [0.0677, -0.0084, -0.032], [-0.0537, 0.0128, 0.1299], [-0.0714, -0.0084, 0.1449], [-0.0714, 0.0128, 0.1449], [-0.2819, 0.0128, -0.1579], [-0.2604, -0.0084, -0.1681], [-0.2604, 0.0128, -0.1681], [-0.1867, 0.0128, 0.2443], [-0.1487, -0.0084, 0.242], [-0.1487, 0.0128, 0.242], [-0.5262, 0.0128, -0.2384], [-0.5849, -0.0084, -0.2384], [-0.5849, 0.0128, -0.2384], [-0.1358, 0.0128, -0.1756], [-0.1126, -0.0084, -0.1681], [-0.1126, 0.0128, -0.1681], [-0.3655, 0.0128, -0.0498], [-0.3702, -0.0084, -0.0257], [-0.3655, -0.0084, -0.0498], [-0.1487, 0.0128, 0.242], [-0.1132, -0.0084, 0.2354], [-0.1132, 0.0128, 0.2354], [-0.0072, 0.0128, -0.0498], [-0.0025, -0.0084, -0.0257], [-0.0025, 0.0128, -0.0257], [-0.3015, 0.0128, 0.1449], [-0.3191, -0.0084, 0.1299], [-0.3191, 0.0128, 0.1299], [-0.2593, 0.0128, 0.2353], [-0.2242, -0.0084, 0.242], [-0.2242, 0.0128, 0.242], [-0.0383, 0.0128, 0.1127], [-0.0537, -0.0084, 0.1299], [-0.0537, 0.0128, 0.1299], [-0.2604, 0.0128, -0.1681], [-0.2373, -0.0084, -0.1756], [-0.2373, 0.0128, -0.1756], [0.0618, 0.0128, -0.063], [0.0677, -0.0084, -0.032], [0.0618, -0.0084, -0.063], [0.0013, 0.0128, -0.1707], [-0.0225, -0.0084, -0.1918], [-0.0225, 0.0128, -0.1918], [-0.1132, 0.0128, 0.2354], [-0.0804, -0.0084, 0.2247], [-0.0804, 0.0128, 0.2247], [-0.4344, 0.0128, -0.0632], [-0.4404, -0.0084, -0.0322], [-0.4404, 0.0128, -0.0322], [-0.3191, 0.0128, 0.1299], [-0.3345, -0.0084, 0.1127], [-0.3345, 0.0128, 0.1127], [-0.35, 0.0128, -0.192], [-0.3737, -0.0084, -0.1709], [-0.3737, 0.0128, -0.1709], [-0.2918, 0.0128, 0.2246], [-0.2593, -0.0084, 0.2353], [-0.2593, 0.0128, 0.2353], [0.0517, 0.0128, 0.094], [0.0381, -0.0084, 0.1221], [0.0517, -0.0084, 0.094], [-0.1606, 0.0128, -0.1803], [-0.1358, -0.0084, -0.1756], [-0.1358, 0.0128, -0.1756], [-0.3578, 0.0128, -0.0725], [-0.3655, -0.0084, -0.0498], [-0.3578, -0.0084, -0.0725], [-0.4241, 0.0128, 0.0937], [-0.4104, -0.0084, 0.1218], [-0.4104, 0.0128, 0.1218], [-0.0804, 0.0128, 0.2247], [-0.0504, -0.0084, 0.2104], [-0.0504, 0.0128, 0.2104], [-0.0149, 0.0128, -0.0725], [-0.0072, -0.0084, -0.0498], [-0.0072, 0.0128, -0.0498], [-0.3216, 0.0128, 0.2102], [-0.2918, -0.0084, 0.2246], [-0.2918, 0.0128, 0.2246], [0.699, 0.0128, -0.2384], [0.699, -0.0084, 0.238], [0.699, 0.0128, 0.238], [-0.0253, 0.0128, 0.0934], [-0.0383, -0.0084, 0.1127], [-0.0383, 0.0128, 0.1127], [-0.2373, 0.0128, -0.1756], [-0.2127, -0.0084, -0.1803], [-0.2127, 0.0128, -0.1803], [-0.1867, 0.0128, -0.1818], [-0.1606, -0.0084, -0.1803], [-0.1606, 0.0128, -0.1803], [0.0521, 0.0128, -0.0927], [0.0618, -0.0084, -0.063], [0.0521, -0.0084, -0.0927], [-0.0504, 0.0128, 0.2104], [-0.0234, -0.0084, 0.1926], [-0.0234, 0.0128, 0.1926], [-0.4246, 0.0128, -0.0929], [-0.4344, -0.0084, -0.0632], [-0.4344, 0.0128, -0.0632], [-0.3345, 0.0128, 0.1127], [-0.3474, -0.0084, 0.0934], [-0.3474, 0.0128, 0.0934], [-0.3485, 0.0128, 0.1924], [-0.3216, -0.0084, 0.2102], [-0.3216, 0.0128, 0.2102], [0.699, 0.0128, 0.238], [0.9694, -0.0084, 0.238], [0.9694, 0.0128, 0.238], [-0.2127, 0.0128, -0.1803], [-0.1867, -0.0084, -0.1818], [-0.1867, 0.0128, -0.1818], [-0.0253, 0.0128, -0.0936], [-0.0149, -0.0084, -0.0725], [-0.0149, 0.0128, -0.0725], [0.9694, 0.0128, 0.1765], [0.7675, -0.0084, 0.1765], [0.7675, 0.0128, 0.1765], [0.0517, 0.0128, 0.094], [0.0616, -0.0084, 0.064], [0.0616, 0.0128, 0.064], [0.9694, 0.0128, 0.238], [0.9694, -0.0084, 0.1765], [0.9694, 0.0128, 0.1765], [-0.4342, 0.0128, 0.0637], [-0.4241, -0.0084, 0.0937], [-0.4241, 0.0128, 0.0937], [-0.0234, 0.0128, 0.1926], [0.0004, -0.0084, 0.1718], [0.0004, 0.0128, 0.1718], [-0.0225, 0.0128, -0.1918], [-0.0496, -0.0084, -0.2099], [-0.0496, 0.0128, -0.2099], [-0.3724, 0.0128, 0.1715], [-0.3485, -0.0084, 0.1924], [-0.3485, 0.0128, 0.1924], [-0.3474, 0.0128, -0.0936], [-0.3578, -0.0084, -0.0725], [-0.3474, -0.0084, -0.0936], [0.7675, 0.0128, 0.1765], [0.7675, -0.0084, 0.0326], [0.7675, 0.0128, 0.0326], [-0.0149, 0.0128, 0.0724], [-0.0253, -0.0084, 0.0934], [-0.0253, 0.0128, 0.0934], [-0.3233, 0.0128, -0.21], [-0.35, -0.0084, -0.192], [-0.35, 0.0128, -0.192], [0.0387, 0.0128, -0.1207], [0.0521, -0.0084, -0.0927], [0.0387, -0.0084, -0.1207], [-0.4111, 0.0128, -0.121], [-0.4246, -0.0084, -0.0929], [-0.4246, 0.0128, -0.0929], [-0.3474, 0.0128, 0.0934], [-0.3578, -0.0084, 0.0724], [-0.3578, 0.0128, 0.0724], [-0.0496, 0.0128, -0.2099], [-0.0798, -0.0084, -0.2246], [-0.0798, 0.0128, -0.2246], [0.7675, 0.0128, 0.0326], [0.9624, -0.0084, 0.0326], [0.9624, 0.0128, 0.0326], [-0.0072, 0.0128, 0.0496], [-0.0149, -0.0084, 0.0724], [-0.0149, 0.0128, 0.0724], [-0.2936, 0.0128, -0.2247], [-0.3233, -0.0084, -0.21], [-0.3233, 0.0128, -0.21], [-0.1867, 0.0128, 0.1814], [-0.2127, -0.0084, 0.1798], [-0.2127, 0.0128, 0.1798], [-0.0383, 0.0128, -0.1128], [-0.0253, -0.0084, -0.0936], [-0.0253, 0.0128, -0.0936], [0.9624, 0.0128, -0.0289], [0.7675, -0.0084, -0.0289], [0.7675, 0.0128, -0.0289], [-0.1606, 0.0128, 0.1798], [-0.1867, -0.0084, 0.1814], [-0.1867, 0.0128, 0.1814], [0.9624, 0.0128, -0.0289], [0.9624, -0.0084, 0.0326], [0.9624, -0.0084, -0.0289], [-0.3655, 0.0128, 0.0496], [-0.3578, -0.0084, 0.0724], [-0.3655, -0.0084, 0.0496], [-0.0798, 0.0128, -0.2246], [-0.113, -0.0084, -0.2355], [-0.113, 0.0128, -0.2355], [-0.1358, 0.0128, 0.1752], [-0.1606, -0.0084, 0.1798], [-0.1606, 0.0128, 0.1798], [-0.3345, 0.0128, -0.1128], [-0.3474, -0.0084, -0.0936], [-0.3345, -0.0084, -0.1128], [0.7675, 0.0128, -0.177], [0.7675, -0.0084, -0.0289], [0.7675, -0.0084, -0.177], [-0.261, 0.0128, -0.2356], [-0.2936, -0.0084, -0.2247], [-0.2936, 0.0128, -0.2247], [-0.0537, 0.0128, -0.1301], [-0.0383, -0.0084, -0.1128], [-0.0383, 0.0128, -0.1128], [0.0676, 0.0128, 0.0325], [0.0616, -0.0084, 0.064], [0.0676, -0.0084, 0.0325], [0.7675, 0.0128, -0.177], [0.9757, -0.0084, -0.177], [0.9757, 0.0128, -0.177], [-0.4403, 0.0128, 0.0323], [-0.4342, -0.0084, 0.0637], [-0.4342, 0.0128, 0.0637], [-0.2127, 0.0128, 0.1798], [-0.2373, -0.0084, 0.1752], [-0.2373, 0.0128, 0.1752], [0.9757, 0.0128, -0.2384], [0.699, -0.0084, -0.2384], [0.699, 0.0128, -0.2384], [-0.113, 0.0128, -0.2355], [-0.1491, -0.0084, -0.2424], [-0.1491, 0.0128, -0.2424], [-0.1126, 0.0128, 0.1677], [-0.1358, -0.0084, 0.1752], [-0.1358, 0.0128, 0.1752], [-0.3345, 0.0128, -0.1128], [-0.3191, -0.0084, -0.1301], [-0.3191, 0.0128, -0.1301], [0.9757, 0.0128, -0.177], [0.9757, -0.0084, -0.2384], [0.9757, 0.0128, -0.2384], [-0.0025, 0.0128, 0.0254], [-0.0072, -0.0084, 0.0496], [-0.0072, 0.0128, 0.0496], [-0.2258, 0.0128, -0.2424], [-0.261, -0.0084, -0.2356], [-0.261, 0.0128, -0.2356], [0.1528, 0.0128, -0.2384], [0.1528, -0.0084, 0.238], [0.1528, 0.0128, 0.238], [0.0387, 0.0128, -0.1207], [0.0387, -0.0084, -0.1207], [0.0217, -0.0084, -0.1469], [-0.1881, 0.0128, -0.2447], [-0.1881, -0.0084, -0.2447], [-0.2258, -0.0084, -0.2424], [-0.2373, 0.0128, 0.1752], [-0.2373, -0.0084, 0.1752], [-0.2604, -0.0084, 0.1677], [-0.3941, 0.0128, -0.1472], [-0.3941, -0.0084, -0.1472], [-0.4111, -0.0084, -0.121], [0.1528, 0.0128, 0.238], [0.1528, -0.0084, 0.238], [0.2073, -0.0084, 0.238], [-0.3702, 0.0128, 0.0254], [-0.3655, 0.0128, 0.0496], [-0.3655, -0.0084, 0.0496], [-0.1491, 0.0128, -0.2424], [-0.1491, -0.0084, -0.2424], [-0.1881, -0.0084, -0.2447], [-0.9677, 0.0128, -0.2384], [-0.9677, -0.0084, -0.2384], [-0.9677, -0.0084, 0.238], [0.0004, 0.0128, 0.1718], [0.0004, -0.0084, 0.1718], [0.021, -0.0084, 0.1482], [-0.0714, 0.0128, -0.1452], [-0.0714, -0.0084, -0.1452], [-0.0537, -0.0084, -0.1301], [0.0696, 0.0128, -0.0002], [0.0676, 0.0128, 0.0325], [0.0676, -0.0084, 0.0325], [-0.3931, 0.0128, 0.1479], [-0.3931, -0.0084, 0.1479], [-0.3724, -0.0084, 0.1715], [-0.4424, 0.0128, -0.0002], [-0.4424, -0.0084, -0.0002], [-0.4403, -0.0084, 0.0323], [-0.9677, 0.0128, 0.238], [-0.9677, -0.0084, 0.238], [-0.9132, -0.0084, 0.238], [0.2073, 0.0128, 0.238], [0.2073, -0.0084, 0.238], [0.53, -0.0084, -0.1309], [-0.091, 0.0128, 0.1576], [-0.091, -0.0084, 0.1576], [-0.1126, -0.0084, 0.1677], [-0.3191, 0.0128, -0.1301], [-0.3191, -0.0084, -0.1301], [-0.3015, -0.0084, -0.1452], [0.53, 0.0128, -0.1309], [0.53, -0.0084, -0.1309], [0.53, -0.0084, 0.238], [-0.0009, 0.0128, -0.0002], [-0.0009, -0.0084, -0.0002], [-0.0025, -0.0084, 0.0254], [-0.091, 0.0128, -0.1579], [-0.091, -0.0084, -0.1579], [-0.0714, -0.0084, -0.1452], [0.53, 0.0128, 0.238], [0.53, -0.0084, 0.238], [0.5943, -0.0084, 0.238], [-0.9132, 0.0128, 0.238], [-0.9132, -0.0084, 0.238], [-0.5905, -0.0084, -0.1309], [-0.2604, 0.0128, 0.1677], [-0.2604, -0.0084, 0.1677], [-0.2819, -0.0084, 0.1576], [-0.3718, 0.0128, -0.0002], [-0.3702, 0.0128, 0.0254], [-0.3702, -0.0084, 0.0254], [-0.5905, 0.0128, -0.1309], [-0.5905, -0.0084, -0.1309], [-0.5905, -0.0084, 0.238], [-0.0714, 0.0128, 0.1449], [-0.0714, -0.0084, 0.1449], [-0.091, -0.0084, 0.1576], [-0.3015, 0.0128, -0.1452], [-0.3015, -0.0084, -0.1452], [-0.2819, -0.0084, -0.1579], [0.5943, 0.0128, 0.238], [0.5943, -0.0084, 0.238], [0.5943, -0.0084, -0.2384], [-0.4404, 0.0128, -0.0322], [-0.4404, -0.0084, -0.0322], [-0.4424, -0.0084, -0.0002], [0.217, 0.0128, -0.2384], [0.217, -0.0084, -0.2384], [0.1528, -0.0084, -0.2384], [-0.5905, 0.0128, 0.238], [-0.5905, -0.0084, 0.238], [-0.5262, -0.0084, 0.238], [0.0217, 0.0128, -0.1469], [0.0217, -0.0084, -0.1469], [0.0013, -0.0084, -0.1707], [0.217, 0.0128, 0.1283], [0.217, -0.0084, 0.1283], [0.217, -0.0084, -0.2384], [-0.2819, 0.0128, 0.1576], [-0.2819, -0.0084, 0.1576], [-0.3015, -0.0084, 0.1449], [-0.3737, 0.0128, -0.1709], [-0.3737, -0.0084, -0.1709], [-0.3941, -0.0084, -0.1472], [0.5356, 0.0128, -0.2384], [0.5356, -0.0084, -0.2384], [0.217, -0.0084, 0.1283], [-0.3702, 0.0128, -0.0257], [-0.3718, 0.0128, -0.0002], [-0.3718, -0.0084, -0.0002], [-0.5262, 0.0128, 0.238], [-0.5262, -0.0084, 0.238], [-0.5262, -0.0084, -0.2384], [-0.0025, 0.0128, -0.0257], [-0.0025, -0.0084, -0.0257], [-0.0009, -0.0084, -0.0002], [-0.9034, 0.0128, -0.2384], [-0.9034, -0.0084, -0.2384], [-0.9677, -0.0084, -0.2384], [0.0381, 0.0128, 0.1221], [0.021, 0.0128, 0.1482], [0.021, -0.0084, 0.1482], [-0.1126, 0.0128, -0.1681], [-0.1126, -0.0084, -0.1681], [-0.091, -0.0084, -0.1579], [0.5943, 0.0128, -0.2384], [0.5943, -0.0084, -0.2384], [0.5356, -0.0084, -0.2384], [-0.9034, 0.0128, 0.1283], [-0.9034, -0.0084, 0.1283], [-0.9034, -0.0084, -0.2384], [-0.4104, 0.0128, 0.1218], [-0.4104, -0.0084, 0.1218], [-0.3931, -0.0084, 0.1479], [-0.2242, 0.0128, 0.242], [-0.2242, -0.0084, 0.242], [-0.1867, -0.0084, 0.2443], [-0.5849, 0.0128, -0.2384], [-0.5849, -0.0084, -0.2384], [-0.9034, -0.0084, 0.1283], [0.0677, 0.0128, -0.032], [0.0696, 0.0128, -0.0002], [0.0696, -0.0084, -0.0002], [-0.0537, 0.0128, 0.1299], [-0.0537, -0.0084, 0.1299], [-0.0714, -0.0084, 0.1449], [-0.2819, 0.0128, -0.1579], [-0.2819, -0.0084, -0.1579], [-0.2604, -0.0084, -0.1681], [-0.1867, 0.0128, 0.2443], [-0.1867, -0.0084, 0.2443], [-0.1487, -0.0084, 0.242], [-0.5262, 0.0128, -0.2384], [-0.5262, -0.0084, -0.2384], [-0.5849, -0.0084, -0.2384], [-0.1358, 0.0128, -0.1756], [-0.1358, -0.0084, -0.1756], [-0.1126, -0.0084, -0.1681], [-0.3655, 0.0128, -0.0498], [-0.3702, 0.0128, -0.0257], [-0.3702, -0.0084, -0.0257], [-0.1487, 0.0128, 0.242], [-0.1487, -0.0084, 0.242], [-0.1132, -0.0084, 0.2354], [-0.0072, 0.0128, -0.0498], [-0.0072, -0.0084, -0.0498], [-0.0025, -0.0084, -0.0257], [-0.3015, 0.0128, 0.1449], [-0.3015, -0.0084, 0.1449], [-0.3191, -0.0084, 0.1299], [-0.2593, 0.0128, 0.2353], [-0.2593, -0.0084, 0.2353], [-0.2242, -0.0084, 0.242], [-0.0383, 0.0128, 0.1127], [-0.0383, -0.0084, 0.1127], [-0.0537, -0.0084, 0.1299], [-0.2604, 0.0128, -0.1681], [-0.2604, -0.0084, -0.1681], [-0.2373, -0.0084, -0.1756], [0.0618, 0.0128, -0.063], [0.0677, 0.0128, -0.032], [0.0677, -0.0084, -0.032], [0.0013, 0.0128, -0.1707], [0.0013, -0.0084, -0.1707], [-0.0225, -0.0084, -0.1918], [-0.1132, 0.0128, 0.2354], [-0.1132, -0.0084, 0.2354], [-0.0804, -0.0084, 0.2247], [-0.4344, 0.0128, -0.0632], [-0.4344, -0.0084, -0.0632], [-0.4404, -0.0084, -0.0322], [-0.3191, 0.0128, 0.1299], [-0.3191, -0.0084, 0.1299], [-0.3345, -0.0084, 0.1127], [-0.35, 0.0128, -0.192], [-0.35, -0.0084, -0.192], [-0.3737, -0.0084, -0.1709], [-0.2918, 0.0128, 0.2246], [-0.2918, -0.0084, 0.2246], [-0.2593, -0.0084, 0.2353], [0.0517, 0.0128, 0.094], [0.0381, 0.0128, 0.1221], [0.0381, -0.0084, 0.1221], [-0.1606, 0.0128, -0.1803], [-0.1606, -0.0084, -0.1803], [-0.1358, -0.0084, -0.1756], [-0.3578, 0.0128, -0.0725], [-0.3655, 0.0128, -0.0498], [-0.3655, -0.0084, -0.0498], [-0.4241, 0.0128, 0.0937], [-0.4241, -0.0084, 0.0937], [-0.4104, -0.0084, 0.1218], [-0.0804, 0.0128, 0.2247], [-0.0804, -0.0084, 0.2247], [-0.0504, -0.0084, 0.2104], [-0.0149, 0.0128, -0.0725], [-0.0149, -0.0084, -0.0725], [-0.0072, -0.0084, -0.0498], [-0.3216, 0.0128, 0.2102], [-0.3216, -0.0084, 0.2102], [-0.2918, -0.0084, 0.2246], [0.699, 0.0128, -0.2384], [0.699, -0.0084, -0.2384], [0.699, -0.0084, 0.238], [-0.0253, 0.0128, 0.0934], [-0.0253, -0.0084, 0.0934], [-0.0383, -0.0084, 0.1127], [-0.2373, 0.0128, -0.1756], [-0.2373, -0.0084, -0.1756], [-0.2127, -0.0084, -0.1803], [-0.1867, 0.0128, -0.1818], [-0.1867, -0.0084, -0.1818], [-0.1606, -0.0084, -0.1803], [0.0521, 0.0128, -0.0927], [0.0618, 0.0128, -0.063], [0.0618, -0.0084, -0.063], [-0.0504, 0.0128, 0.2104], [-0.0504, -0.0084, 0.2104], [-0.0234, -0.0084, 0.1926], [-0.4246, 0.0128, -0.0929], [-0.4246, -0.0084, -0.0929], [-0.4344, -0.0084, -0.0632], [-0.3345, 0.0128, 0.1127], [-0.3345, -0.0084, 0.1127], [-0.3474, -0.0084, 0.0934], [-0.3485, 0.0128, 0.1924], [-0.3485, -0.0084, 0.1924], [-0.3216, -0.0084, 0.2102], [0.699, 0.0128, 0.238], [0.699, -0.0084, 0.238], [0.9694, -0.0084, 0.238], [-0.2127, 0.0128, -0.1803], [-0.2127, -0.0084, -0.1803], [-0.1867, -0.0084, -0.1818], [-0.0253, 0.0128, -0.0936], [-0.0253, -0.0084, -0.0936], [-0.0149, -0.0084, -0.0725], [0.9694, 0.0128, 0.1765], [0.9694, -0.0084, 0.1765], [0.7675, -0.0084, 0.1765], [0.0517, 0.0128, 0.094], [0.0517, -0.0084, 0.094], [0.0616, -0.0084, 0.064], [0.9694, 0.0128, 0.238], [0.9694, -0.0084, 0.238], [0.9694, -0.0084, 0.1765], [-0.4342, 0.0128, 0.0637], [-0.4342, -0.0084, 0.0637], [-0.4241, -0.0084, 0.0937], [-0.0234, 0.0128, 0.1926], [-0.0234, -0.0084, 0.1926], [0.0004, -0.0084, 0.1718], [-0.0225, 0.0128, -0.1918], [-0.0225, -0.0084, -0.1918], [-0.0496, -0.0084, -0.2099], [-0.3724, 0.0128, 0.1715], [-0.3724, -0.0084, 0.1715], [-0.3485, -0.0084, 0.1924], [-0.3474, 0.0128, -0.0936], [-0.3578, 0.0128, -0.0725], [-0.3578, -0.0084, -0.0725], [0.7675, 0.0128, 0.1765], [0.7675, -0.0084, 0.1765], [0.7675, -0.0084, 0.0326], [-0.0149, 0.0128, 0.0724], [-0.0149, -0.0084, 0.0724], [-0.0253, -0.0084, 0.0934], [-0.3233, 0.0128, -0.21], [-0.3233, -0.0084, -0.21], [-0.35, -0.0084, -0.192], [0.0387, 0.0128, -0.1207], [0.0521, 0.0128, -0.0927], [0.0521, -0.0084, -0.0927], [-0.4111, 0.0128, -0.121], [-0.4111, -0.0084, -0.121], [-0.4246, -0.0084, -0.0929], [-0.3474, 0.0128, 0.0934], [-0.3474, -0.0084, 0.0934], [-0.3578, -0.0084, 0.0724], [-0.0496, 0.0128, -0.2099], [-0.0496, -0.0084, -0.2099], [-0.0798, -0.0084, -0.2246], [0.7675, 0.0128, 0.0326], [0.7675, -0.0084, 0.0326], [0.9624, -0.0084, 0.0326], [-0.0072, 0.0128, 0.0496], [-0.0072, -0.0084, 0.0496], [-0.0149, -0.0084, 0.0724], [-0.2936, 0.0128, -0.2247], [-0.2936, -0.0084, -0.2247], [-0.3233, -0.0084, -0.21], [-0.1867, 0.0128, 0.1814], [-0.1867, -0.0084, 0.1814], [-0.2127, -0.0084, 0.1798], [-0.0383, 0.0128, -0.1128], [-0.0383, -0.0084, -0.1128], [-0.0253, -0.0084, -0.0936], [0.9624, 0.0128, -0.0289], [0.9624, -0.0084, -0.0289], [0.7675, -0.0084, -0.0289], [-0.1606, 0.0128, 0.1798], [-0.1606, -0.0084, 0.1798], [-0.1867, -0.0084, 0.1814], [0.9624, 0.0128, -0.0289], [0.9624, 0.0128, 0.0326], [0.9624, -0.0084, 0.0326], [-0.3655, 0.0128, 0.0496], [-0.3578, 0.0128, 0.0724], [-0.3578, -0.0084, 0.0724], [-0.0798, 0.0128, -0.2246], [-0.0798, -0.0084, -0.2246], [-0.113, -0.0084, -0.2355], [-0.1358, 0.0128, 0.1752], [-0.1358, -0.0084, 0.1752], [-0.1606, -0.0084, 0.1798], [-0.3345, 0.0128, -0.1128], [-0.3474, 0.0128, -0.0936], [-0.3474, -0.0084, -0.0936], [0.7675, 0.0128, -0.177], [0.7675, 0.0128, -0.0289], [0.7675, -0.0084, -0.0289], [-0.261, 0.0128, -0.2356], [-0.261, -0.0084, -0.2356], [-0.2936, -0.0084, -0.2247], [-0.0537, 0.0128, -0.1301], [-0.0537, -0.0084, -0.1301], [-0.0383, -0.0084, -0.1128], [0.0676, 0.0128, 0.0325], [0.0616, 0.0128, 0.064], [0.0616, -0.0084, 0.064], [0.7675, 0.0128, -0.177], [0.7675, -0.0084, -0.177], [0.9757, -0.0084, -0.177], [-0.4403, 0.0128, 0.0323], [-0.4403, -0.0084, 0.0323], [-0.4342, -0.0084, 0.0637], [-0.2127, 0.0128, 0.1798], [-0.2127, -0.0084, 0.1798], [-0.2373, -0.0084, 0.1752], [0.9757, 0.0128, -0.2384], [0.9757, -0.0084, -0.2384], [0.699, -0.0084, -0.2384], [-0.113, 0.0128, -0.2355], [-0.113, -0.0084, -0.2355], [-0.1491, -0.0084, -0.2424], [-0.1126, 0.0128, 0.1677], [-0.1126, -0.0084, 0.1677], [-0.1358, -0.0084, 0.1752], [-0.3345, 0.0128, -0.1128], [-0.3345, -0.0084, -0.1128], [-0.3191, -0.0084, -0.1301], [0.9757, 0.0128, -0.177], [0.9757, -0.0084, -0.177], [0.9757, -0.0084, -0.2384], [-0.0025, 0.0128, 0.0254], [-0.0025, -0.0084, 0.0254], [-0.0072, -0.0084, 0.0496], [-0.2258, 0.0128, -0.2424], [-0.2258, -0.0084, -0.2424], [-0.261, -0.0084, -0.2356], [0.1528, 0.0128, -0.2384], [0.1528, -0.0084, -0.2384], [0.1528, -0.0084, 0.238]], "Box_GizmoGroup_": [[-0.329, -0.329, 0.329], [-0.329, 0.329, -0.329], [-0.329, -0.329, -0.329], [-0.329, 0.329, 0.329], [0.329, 0.329, -0.329], [-0.329, 0.329, -0.329], [0.329, 0.329, 0.329], [0.329, -0.329, -0.329], [0.329, 0.329, -0.329], [0.329, -0.329, 0.329], [-0.329, -0.329, -0.329], [0.329, -0.329, -0.329], [0.329, 0.329, -0.329], [-0.329, -0.329, -0.329], [-0.329, 0.329, -0.329], [-0.329, 0.329, 0.329], [0.329, -0.329, 0.329], [0.329, 0.329, 0.329], [-0.329, -0.329, 0.329], [-0.329, 0.329, 0.329], [-0.329, 0.329, -0.329], [-0.329, 0.329, 0.329], [0.329, 0.329, 0.329], [0.329, 0.329, -0.329], [0.329, 0.329, 0.329], [0.329, -0.329, 0.329], [0.329, -0.329, -0.329], [0.329, -0.329, 0.329], [-0.329, -0.329, 0.329], [-0.329, -0.329, -0.329], [0.329, 0.329, -0.329], [0.329, -0.329, -0.329], [-0.329, -0.329, -0.329], [-0.329, 0.329, 0.329], [-0.329, -0.329, 0.329], [0.329, -0.329, 0.329]]} \ No newline at end of file diff --git a/simple_deform_helper/gizmo.py b/simple_deform_helper/gizmo.py new file mode 100644 index 000000000..735e6fe4c --- /dev/null +++ b/simple_deform_helper/gizmo.py @@ -0,0 +1,619 @@ +import bpy +import math +from bpy_extras import view3d_utils +from mathutils import Vector, Euler +from bpy.types import ( + Gizmo, + GizmoGroup, +) + +from .draw import Handler +from .utils import Utils, Pref +from .data import Data + + +class CustomGizmo(Gizmo, Utils, Handler, Data): + """绘制自定义Gizmo""" + bl_idname = '_Custom_Gizmo' + + def setup(self): + self.draw_type = 'None_GizmoGroup_' + if not hasattr(self, 'custom_shape'): + self.custom_shape = {} + for i in self.G_GizmoCustomShapeDict: + self.custom_shape[i] = self.new_custom_shape( + 'TRIS', self.G_GizmoCustomShapeDict[i]) + self.add_handler() + + def draw(self, context): + self.draw_custom_shape(self.custom_shape[self.draw_type]) + + def draw_select(self, context, select_id): + self.draw_custom_shape( + self.custom_shape[self.draw_type], select_id=select_id) + + def invoke(self, context, event): + return {'RUNNING_MODAL'} + + def modal(self, context, event, tweak): + self.add_handler() + + self.update_bound_box(context.object) + self.update_empty_matrix() + return {'RUNNING_MODAL'} + + +class ViewSimpleDeformGizmo(Gizmo, Utils, Handler, Data, Pref): + """显示轴向切换拖动点Gizmo(两个点) + """ + bl_idname = 'ViewSimpleDeformGizmo' + + bl_target_properties = ( + {'id': 'up_limits', 'type': 'FLOAT', 'array_length': 1}, + {'id': 'down_limits', 'type': 'FLOAT', 'array_length': 1}, + {'id': 'angle', 'type': 'FLOAT', 'array_length': 1}, + ) + + __slots__ = ( + 'mod', + 'up', + 'down', + 'up_', + 'down_', + 'draw_type', + 'mouse_dpi', + 'ctrl_mode', + 'empty_object', + 'init_mouse_y', + 'init_mouse_x', + 'custom_shape', + 'int_value_angle', + 'value_deform_axis', + 'int_value_up_limits', + 'int_value_down_limits', + 'rotate_follow_modifier', + ) + + def update_gizmo_rotate(self, axis, mod): + if self.rotate_follow_modifier: + rot = Euler() + if axis == 'X' and (not self.is_positive(mod.angle)): + rot.z = math.pi + + elif axis == 'Y': + if self.is_positive(mod.angle): + rot.z = -(math.pi / 2) + else: + rot.z = math.pi / 2 + elif axis == 'Z': + if self.is_positive(mod.angle): + rot.x = rot.z = rot.y = math.pi / 2 + else: + rot.z = rot.y = math.pi / 2 + rot.x = -(math.pi / 2) + + rot = rot.to_matrix() + self.matrix_basis = self.matrix_basis @ rot.to_4x4() + + def update_draw_limits_bound_box(self, data, mod, axis, mat, up_, down_): + top, bottom, left, right, front, back = data + if mod.origin: + vector_axis = self.get_vector_axis(mod) + origin_mat = mod.origin.matrix_world.to_3x3() + axis_ = origin_mat @ vector_axis + point_lit = [[top, bottom], [left, right], [front, back]] + for f in range(point_lit.__len__()): + i = point_lit[f][0] + j = point_lit[f][1] + angle = self.point_to_angle(i, j, f, axis_) + if abs(angle - 180) < 0.00001: + point_lit[f][1], point_lit[f][0] = up_, down_ + elif abs(angle) < 0.00001: + point_lit[f][0], point_lit[f][1] = up_, down_ + [[top, bottom], [left, right], [front, back]] = point_lit + else: + top, bottom, left, right, front, back = self.get_up_down_return_list( + mod, axis, up_, down_, data) + data = top, bottom, left, right, front, back + (top, bottom, left, right, front, + back) = self.matrix_calculation(mat.inverted(), data) + self.G_SimpleDeformGizmoHandlerDit['draw_limits_bound_box'] = ( + mat, ((right[0], back[1], top[2]), (left[0], front[1], bottom[2],))) + + def update_matrix_basis_translation(self, co, mat, up_, down_): + if 'angle' == self.ctrl_mode: + self.matrix_basis.translation = mat @ Vector((co[1])) + elif 'up_limits' == self.ctrl_mode: + self.matrix_basis.translation = up_ + elif 'down_limits' == self.ctrl_mode: + self.matrix_basis.translation = down_ + + def update_gizmo_matrix(self, context): + ob = context.object + mat = ob.matrix_world + mod = context.object.modifiers.active + axis = mod.deform_axis + if mod.origin: + self.matrix_basis = mod.origin.matrix_world.normalized() + else: + self.matrix_basis = ob.matrix_world.normalized() + + co = self.generate_co_data() + self.update_gizmo_rotate(axis, mod) + # calculation limits position + top, bottom, left, right, front, back = self.each_face_pos(mat) + (up, down), (up_, down_) = self.get_limits_pos( + mod, (top, bottom, left, right, front, back)) + self.update_matrix_basis_translation(co, mat, up_, down_) + + self.up = up + self.down = down + self.up_ = up_ + self.down_ = down_ + self.G_SimpleDeformGizmoHandlerDit['draw_line'] = ( + (up, down), (up_, down_)) + data = top, bottom, left, right, front, back + self.update_draw_limits_bound_box(data, mod, axis, mat, up_, down_) + + def setup(self): + self.generate_co_data() + self.draw_type = 'None_GizmoGroup_' + self.ctrl_mode = 'angle' # up_limits , down_limits + self.mouse_dpi = 10 + self.rotate_follow_modifier = True + if not hasattr(self, 'custom_shape'): + self.custom_shape = {} + for i in self.G_GizmoCustomShapeDict: + item = self.G_GizmoCustomShapeDict[i] + self.custom_shape[i] = self.new_custom_shape('TRIS', item) + self.add_handler() + + def draw(self, context): + self.add_handler() + + self.update_gizmo_matrix(context) + self.draw_custom_shape(self.custom_shape[self.draw_type]) + + def draw_select(self, context, select_id): + self.update_gizmo_matrix(context) + self.draw_custom_shape( + self.custom_shape[self.draw_type], select_id=select_id) + + def invoke(self, context, event): + self.init_mouse_y = event.mouse_y + self.init_mouse_x = event.mouse_x + mod = context.object.modifiers.active + limits = mod.limits + up_limits = limits[1] + down_limits = limits[0] + + if 'angle' == self.ctrl_mode: + self.int_value_angle = self.target_get_value('angle') + elif 'up_limits' == self.ctrl_mode: + self.int_value_up_limits = up_limits + self.target_set_value('up_limits', self.int_value_up_limits) + elif 'down_limits' == self.ctrl_mode: + self.int_value_down_limits = down_limits + self.target_set_value('down_limits', self.int_value_down_limits) + return {'RUNNING_MODAL'} + + def exit(self, context, cancel): + context.area.header_text_set(None) + + if cancel: + if 'angle' == self.ctrl_mode: + self.target_set_value('angle', self.int_value_angle) + elif 'deform_axis' == self.ctrl_mode: + self.target_set_value('deform_axis', self.value_deform_axis) + elif 'up_limits' == self.ctrl_mode: + self.target_set_value('up_limits', self.int_value_up_limits) + + elif 'down_limits' == self.ctrl_mode: + self.target_set_value( + 'down_limits', self.int_value_down_limits) + + def delta_update(self, context, event, delta): + if ('draw_line' in self.G_SimpleDeformGizmoHandlerDit) and (self.ctrl_mode in ('up_limits', 'down_limits')): + x, y = view3d_utils.location_3d_to_region_2d( + context.region, context.space_data.region_3d, self.up) + x2, y2 = view3d_utils.location_3d_to_region_2d( + context.region, context.space_data.region_3d, self.down) + + mouse_line_distance = math.sqrt(((event.mouse_region_x - x2) ** 2) + + ((event.mouse_region_y - y2) ** 2)) + straight_line_distance = math.sqrt(((x2 - x) ** 2) + + ((y2 - y) ** 2)) + delta = mouse_line_distance / \ + straight_line_distance + 0 + + v_up = Vector((x, y)) + v_down = Vector((x2, y2)) + limits_angle = v_up - v_down + + mouse_v = Vector((event.mouse_region_x, event.mouse_region_y)) + + mouse_angle = mouse_v - v_down + angle_ = mouse_angle.angle(limits_angle) + if angle_ > (math.pi / 2): + delta = 0 + return delta + + def set_down_value(self, data, mu): + up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode = data + value = self.value_limit(delta, max_value=mu - + limit_scope if middle else max_value) + self.target_set_value('down_limits', value) + if event.ctrl: + self.target_set_value( + 'up_limits', value + difference_value) + elif middle: + if origin_mode == 'LIMITS_MIDDLE': + self.target_set_value('up_limits', mu - (value - mu)) + elif origin_mode == 'MIDDLE': + self.target_set_value('up_limits', 1 - value) + else: + self.target_set_value('up_limits', up_limits) + else: + self.target_set_value('up_limits', up_limits) + + def set_up_value(self, data, mu): + up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode = data + value = self.value_limit(delta, min_value=mu + + limit_scope if middle else min_value) + self.target_set_value('up_limits', value) + if event.ctrl: + self.target_set_value( + 'down_limits', value - difference_value) + elif middle: + if origin_mode == 'LIMITS_MIDDLE': + self.target_set_value('down_limits', mu - (value - mu)) + elif origin_mode == 'MIDDLE': + self.target_set_value('down_limits', 1 - value) + else: + self.target_set_value('down_limits', down_limits) + else: + self.target_set_value('down_limits', down_limits) + + def set_prop_value(self, data): + up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode = data + mu = (up_limits + down_limits) / 2 + if 'angle' == self.ctrl_mode: + value = self.int_value_angle - delta + self.target_set_value('angle', value) + elif 'up_limits' == self.ctrl_mode: + self.set_up_value(data, mu) + elif 'down_limits' == self.ctrl_mode: + self.set_down_value(data, mu) + + def update_header_text(self, context, mod, origin, up_limits, down_limits): + t = lambda a: bpy.app.translations.pgettext(a) + + if (mod.deform_method in ('TWIST', 'BEND')) and (self.ctrl_mode in ('angle',)): + text = t("Angle") + ':{}'.format(math.degrees(mod.angle)) + elif 'up_limits' == self.ctrl_mode: + text = t("Upper limit") + ':{}'.format(up_limits) + elif 'down_limits' == self.ctrl_mode: + text = t("Down limit") + ':{}'.format(down_limits) + else: + text = t("Coefficient") + ':{}'.format(mod.factor) + text += ' ' + text += t(origin.bl_rna.properties[ + 'origin_mode'].enum_items[origin.origin_mode].name) + context.area.header_text_set(text) + + def event_ops(self, event, ob, origin): + """通过输入键位来更改属性""" + # event ctrl + data_path = ('object.SimpleDeformGizmo_PropertyGroup.origin_mode', + 'object.modifiers.active.origin.SimpleDeformGizmo_PropertyGroup.origin_mode') + + if event.type in ('WHEELUPMOUSE', 'WHEELDOWNMOUSE'): + reverse = (event.type == 'WHEELUPMOUSE') + for path in data_path: + bpy.ops.wm.context_cycle_enum( + data_path=path, reverse=reverse, wrap=True) + elif event.type in ('X', 'Y', 'Z'): + ob.modifiers.active.deform_axis = event.type + elif event.type == 'A': + self.pref.display_bend_axis_switch_gizmo = True + return {'FINISHED'} + self.add_handler() + + return {'RUNNING_MODAL'} + + def modal(self, context, event, tweak): + self.update_bound_box(context.object) + + delta = (self.init_mouse_x - event.mouse_x) / self.mouse_dpi + ob = context.object + mod = ob.modifiers.active + limits = mod.limits + up_limits = limits[1] + down_limits = limits[0] + origin = self.get_origin_property_group(mod, ob) + origin_mode = origin.origin_mode + middle = origin_mode in ('LIMITS_MIDDLE', 'MIDDLE') + limit_scope = self.pref.modifiers_limits_tolerance + max_value = up_limits - limit_scope + min_value = down_limits + limit_scope + difference_value = up_limits - down_limits + + if 'SNAP' in tweak: + delta = round(delta) + if 'PRECISE' in tweak: + delta /= self.mouse_dpi + delta = self.delta_update(context, event, delta) + + if origin_mode != 'NOT' and ('draw_line' in self.G_SimpleDeformGizmoHandlerDit): + self.empty_object, _ = self.new_empty(ob, mod) + self.G_SimpleDeformGizmoHandlerDit['empty_object'] = self.empty_object + data = up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode + self.set_prop_value(data) + self.update_gizmo_matrix(context) + self.update_empty_matrix() + self.update_bound_box(context.object) + + self.update_header_text(context, mod, origin, up_limits, down_limits) + self.add_handler() + + return self.event_ops(event, ob, origin) + + +class SimpleDeformGizmoGroup(GizmoGroup, Utils, Handler, Pref, Data): + """显示Gizmo + """ + bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup' + bl_label = 'SimpleDeformGizmoGroup' + bl_space_type = 'VIEW_3D' + bl_region_type = 'WINDOW' + bl_options = {'3D', 'PERSISTENT', } + + @classmethod + def poll(cls, context): + pol = cls.simple_deform_poll(context) + pref = cls._pref() + deform_method = ( + pol and (context.object.modifiers.active.deform_method != 'BEND')) + display_gizmo = pref.display_bend_axis_switch_gizmo + switch = (not display_gizmo) + return pol and (deform_method or switch) + + def generate_gizmo_mode(self, gizmo_data): + """生成gizmo的上限下限及角度设置 + + Args: + gizmo_data (_type_): _description_ + """ + for i, j, k in gizmo_data: + setattr(self, i, self.gizmos.new(j)) + gizmo = getattr(self, i) + for f in k: + if f == 'target_set_operator': + gizmo.target_set_operator(k[f]) + elif f == 'target_set_prop': + gizmo.target_set_prop(*k[f]) + else: + setattr(gizmo, f, k[f]) + + def setup(self, context): + sd_name = ViewSimpleDeformGizmo.bl_idname + + add_data = (('up_limits', + sd_name, + {'ctrl_mode': 'up_limits', + 'draw_type': 'Sphere_GizmoGroup_', + 'mouse_dpi': 1000, + 'color': (1.0, 0, 0), + 'alpha': 0.5, + 'color_highlight': (1.0, 1.0, 1.0), + 'alpha_highlight': 0.3, + 'use_draw_modal': True, + 'scale_basis': 0.1, + 'use_draw_value': True, }), + ('down_limits', + sd_name, + {'ctrl_mode': 'down_limits', + 'draw_type': 'Sphere_GizmoGroup_', + 'mouse_dpi': 1000, + 'color': (0, 1.0, 0), + 'alpha': 0.5, + 'color_highlight': (1.0, 1.0, 1.0), + 'alpha_highlight': 0.3, + 'use_draw_modal': True, + 'scale_basis': 0.1, + 'use_draw_value': True, }), + ('angle', + sd_name, + {'ctrl_mode': 'angle', + 'draw_type': 'SimpleDeform_GizmoGroup_', + 'color': (1.0, 0.5, 1.0), + 'alpha': 0.3, + 'color_highlight': (1.0, 1.0, 1.0), + 'alpha_highlight': 0.3, + 'use_draw_modal': True, + 'scale_basis': 0.1, + 'use_draw_value': True, + 'mouse_dpi': 100, + }), + ) + + self.generate_gizmo_mode(add_data) + + data_path = 'object.modifiers.active.deform_axis' + set_enum = 'wm.context_set_enum' + + for axis in ('X', 'Y', 'Z'): + # show toggle axis button + gizmo = self.gizmos.new('GIZMO_GT_button_2d') + gizmo.icon = f'EVENT_{axis.upper()}' + gizmo.draw_options = {'BACKDROP', 'HELPLINE'} + ops = gizmo.target_set_operator(set_enum) + ops.data_path = data_path + ops.value = axis + gizmo.color = (0, 0, 0) + gizmo.alpha = 0.3 + gizmo.color_highlight = 1.0, 1.0, 1.0 + gizmo.alpha_highlight = 0.3 + gizmo.use_draw_modal = True + gizmo.use_draw_value = True + gizmo.scale_basis = 0.1 + setattr(self, f'deform_axis_{axis.lower()}', gizmo) + self.add_handler() + + def refresh(self, context): + pro = context.object.SimpleDeformGizmo_PropertyGroup + + self.angle.target_set_prop('angle', + context.object.modifiers.active, + 'angle') + self.down_limits.target_set_prop('down_limits', + pro, + 'down_limits') + self.down_limits.target_set_prop('up_limits', + pro, + 'up_limits') + self.up_limits.target_set_prop('down_limits', + pro, + 'down_limits') + self.up_limits.target_set_prop('up_limits', + pro, + 'up_limits') + self.add_handler() + + def draw_prepare(self, context): + ob = context.object + mat = ob.matrix_world + + if 'co' in self.G_SimpleDeformGizmoHandlerDit: + def _mat(f): + co = self.G_SimpleDeformGizmoHandlerDit['co'][0] + co = (co[0] + (max(ob.dimensions) * f), co[1], + co[2] - (min(ob.dimensions) * 0.3)) + return mat @ Vector(co) + + self.deform_axis_x.matrix_basis.translation = _mat(0) + self.deform_axis_y.matrix_basis.translation = _mat(0.3) + self.deform_axis_z.matrix_basis.translation = _mat(0.6) + self.add_handler() + + def invoke_prepare(self, context, gizmo): + self.add_handler() + + +class SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo(GizmoGroup, Utils, Handler, Pref): + """绘制切换变型轴的 + 变换方向 + """ + bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup_display_bend_axis_switch_gizmo' + bl_label = 'SimpleDeformGizmoGroup_display_bend_axis_switch_gizmo' + + bl_space_type = 'VIEW_3D' + bl_region_type = 'WINDOW' + bl_options = { + '3D', + 'PERSISTENT', + } + + @classmethod + def poll(cls, context): + pref = cls._pref() + simple = cls.simple_deform_poll(context) + bend = simple and ( + context.object.modifiers.active.deform_method == 'BEND') + switch_axis = (pref.display_bend_axis_switch_gizmo == True) + return switch_axis and bend + + def setup(self, context): + _draw_type = 'SimpleDeform_Bend_Direction_' + _color_a = 1, 0, 0 + _color_b = 0, 1, 0 + self.add_handler() + + for na, axis, rot, positive in ( + ('top_a', 'X', (math.radians(90), 0, math.radians(90)), True), + ('top_b', 'X', (math.radians(90), 0, 0), True), + + ('bottom_a', 'X', (math.radians(90), 0, math.radians(90)), False), + ('bottom_b', 'X', (math.radians(90), 0, 0), False), + + ('left_a', 'Y', (math.radians(90), 0, 0), False), + ('left_b', 'Y', (0, 0, 0), False), + + ('right_a', 'Y', (math.radians(90), 0, 0), True), + ('right_b', 'Y', (0, 0, 0), True), + + ('front_a', 'Z', (0, 0, 0), False), + ('front_b', 'X', (0, 0, 0), False), + + ('back_a', 'Z', (0, 0, 0), True), + ('back_b', 'X', (0, 0, 0), True),): + _a = (na.split('_')[1] == 'a') + setattr(self, na, self.gizmos.new(CustomGizmo.bl_idname)) + gizmo = getattr(self, na) + gizmo.mode = na + gizmo.draw_type = _draw_type + gizmo.color = _color_a if _a else _color_b + gizmo.alpha = 0.3 + gizmo.color_highlight = 1.0, 1.0, 1.0 + gizmo.alpha_highlight = 1 + gizmo.use_draw_modal = True + gizmo.scale_basis = 0.2 + gizmo.use_draw_value = True + ops = gizmo.target_set_operator( + 'simple_deform_gizmo.deform_axis') + ops.Deform_Axis = axis + ops.X_Value = rot[0] + ops.Y_Value = rot[1] + ops.Z_Value = rot[2] + ops.Is_Positive = positive + + def draw_prepare(self, context): + ob = context.object + mat = ob.matrix_world + top, bottom, left, right, front, back = self.each_face_pos(mat) + + rad = math.radians + for_list = ( + ('top_a', top, (0, 0, 0),), + ('top_b', top, (0, 0, rad(90)),), + + ('bottom_a', bottom, (0, rad(180), 0),), + ('bottom_b', bottom, (0, rad(180), rad(90)),), + + ('left_a', left, (rad(-90), 0, rad(90)),), + ('left_b', left, (0, rad(-90), 0),), + + ('right_a', right, (rad(90), 0, rad(90)),), + ('right_b', right, (0, rad(90), 0),), + + ('front_a', front, (rad(90), 0, 0),), + ('front_b', front, (rad(90), rad(90), 0),), + + ('back_a', back, (rad(-90), 0, 0),), + ('back_b', back, (rad(-90), rad(-90), 0),), + ) + for i, j, w, in for_list: + gizmo = getattr(self, i, False) + rot = Euler(w, 'XYZ').to_matrix().to_4x4() + + gizmo.matrix_basis = mat.to_euler().to_matrix().to_4x4() @ rot + gizmo.matrix_basis.translation = Vector(j) + + +class_list = ( + CustomGizmo, + ViewSimpleDeformGizmo, + SimpleDeformGizmoGroup, + SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo, +) + +register_class, unregister_class = bpy.utils.register_classes_factory(class_list) + + +def register(): + register_class() + + +def unregister(): + Handler.del_handler() + unregister_class() diff --git a/simple_deform_helper/image/emm.jpeg b/simple_deform_helper/image/emm.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0ecf3dce2e354bfdfae9b2c0145c6a35f9932ed5 GIT binary patch literal 158854 zcmbq*Wn7bO|Mw_qh0#dP4cX`pksdK>jDdiZG^jKZf*?{GN{>chbcxgj2#6BWC}|)l zH31c*L`t6%uKWH!*Y)Cg-u(5|*k|X?^Ei%QeB-x2@BVxSF`;zybwFffAP^bwAM|Gy zqy@bC-~Bti$p7vNz^DJb05Q{$+mKICkU>D?%w!bIWPf@=e87EDQUGs*{`-#%L{3RX zagLgXmJWE|g$YDPPDw#UO-?~YK}$sr;wK|#rl1s*q5?~wyQE=y14PXN(e%B~nnL4P z#3qA@s`q>OgO(jCtEFu=z5q*Y=-%SsOe?-DuZVRb3dtdLA53rwn_Ie0Dp)!D2Lxs` z_DpR9U&90302$Rk?g9ilM@CLTNkvTqylc)3+~n!Yb5!T(&rwj(0xNs^<~e4tpcD&m z6V$8_-}@r_I-6;P35`;mO<|&hAzDK zv(H7*5w@tXC$EKbESjrZa^<%<2E>uAYlWRRuRr&;xc&9{%8Qn2WF2ZRh`Z5SuZ&FK zi3~2RL!h=la|d$2zx}Y$n@0P7Q|~)JIh3XZF)_RS8o_R8v?DfIpMehF5J~0l{%;Hwshu)QpV_@KdVFv=O*jNYmc8Z{NQWuJ#QeYn)De5 zCX~{5aRjFdEOfgZ(^eRO$V={nh#dzecN(&z%Z~GJ$cZVv)$dK zTxLs|%99}l5!*3m+gW&|ASI<&uaBg=0ZXBw*4XaW5`=;mqcbZlZZELD^TW7bUcX$} zi@6?1rVVo&cwbygb?HHR&-HdCgsPCuI9htJ?n0*ikc?J#%+eDa)zT|;Je&3M04>@< zGYN-6e6*JsONx*SJzWEncWov+?#*BAo-A41USpkvNjI23wu75eRu~V7p>8Ec+#@a= zk|N9s*up8_H?fJ$Y9_ag-@=>OwFEuO`}Oq2>c*?Q0IYq!*M^+yeD2_N>myO0S}p)BwqGU&DHZHwFAQw0#V1O@pvKdVAbE1Yz#ECz!TNMKy-t}a4e z??!AgIhdbFe&yNBYTR8-^|1btaz3bcUA{s#zWnx0M7Y9;x%FO9Ltb#S zm1>zC1!%-!B9W%UBx~GdWL}2bQ^vs^ zZ-3ggG)x8R&RcTZkOHyp1^8%idlv_v$n(G89ZGVl*9TGL0b7PlcAa()4U$;#yayb^ zJH?f?q3v_P`h{^oJ_cBqHP_C)s+oQ7czag1DJQ>{TF@dl_@nXn?wr2_aBS-J8V6d*>dkr$>12L?_(1+0@!Ic2FhEH(xH) z))H;_NQT>ivQ|TKLPt;XMI4o~aF$20#WEb_x1zo&MO9l(Z2m?jdc0E_IulQ5PRe{LQLzi*YBFyZc+X0Y~$?s7npG( z_4pn0_0Q%X=lXHUCdOtb;tn6Sh#X;rs?nR%gAq~|d);Q&^=JhloWhEd>!E zdia@XvH3Eoo>f|I_^4X8c@4eLMDHxsTm8Kd@;kTYr85o!qid>lw@S?~c%B8@jPBCz zx*v58#@wpux-6SThwVpC-$hbfY(Jj0MBE%bQSvKAdxW16w7ersg2_raVi%(Fel=3I z68?b94LhbB$z%{&1Y!N{8Ee{y#aSGDP&C#nUAZON@(p`>d}Dn216pmkFxc<6io?K_ zR`*ysGoy}pRH6TfK|u$>-lKX(`B{;F}#Zl*S-|O<+!)~ zTYcTRqglc6IvEP7M%EQcoc3ZmPAvKEwkK9Cts_m{f$E95s_q7C+np1Z z*qwWVz+Z>3;sizoO4US%$&F(|ZYUBeZt}3^9=B^M#Q|c7U@J00@<+PzK}I1F?~UTT zfBvvI3=T)wU`>bLT7)lO-+5x6&&wz>eIO#g+tPNYig|RrY-yuA+AK$pRkglaNc$5lHb<{AWm$<+Ttn!A^L1U#M25n*ez0MtV@k!j$ z$FvTG4Cb(D)`xZH=_Hr~9mbNEYYl^{WZz&^XalmO$7l^Y^p;(A3`HsOrYDkDja~K3 z88Gm8X}==<`_gPu+0QG{*plev9CZ|`n^9fL*iRqE5&ZO+Qv{m53ayAT)blqc`mIB3 z!;A(ca@I$}^fK4K-+7YzDPPiIw?l3rcb>?Z;RVWi$?=p)y==wIu9l`ewWWzZ;Mj_FN|&)w7+}4 zi@!GhO5Ua+FKK^J`p`?o&nf}W4c_?DtBG=cPix!M7u7NumSC^!8Khhg!hW1^|DLk9 znf1iRPl?WJ%Qo~|lc6~?nL+iZ_fwQ7pOILFkM~3?dtq3)o2E8A%T=Kj(#$t5tqZv< z)sRyv-JlIw5_PF@)t4-UPNlBnSA<7sG4JUZl-%93bM&ld$V*q!Z?cA1i~3@+#KVYH zczqC)J`N1+bsuLiuOU<>L}4xtyZ~7VkdtG0q#WosX$mA=okV*d#wS{WZdB5sbS%`3 zF-*}>gJeA{=BhvCf;;tEpXa{WS>N!q56PF2flo?tDzZOfQq65hQlr%<+9NwxEJ-N zbnWgZMSI{f?@c<${gk>Q%biGsbW>$7b1L0O;s#s3i_F??Un~yBwKTh%S|!#;JB>DM zc)s@skca$Kxgy!;7Db`5QUgi_1S&m6)iuG(sT+#Ib$1_oO0%*^NaU_9F!kd5 zgUOZ_oIY2w+I=Txxw6~S$JgkJXFSjNf_t zYvR?mN431(_{5=izNrWLE!7y14}~AS`EfA*W}?&fTg~j7IojsdwPt$zY9QDT-Ecy- zD^An7q7&-7KG>>ZtgnQ%i0YPWiufBh@b}+aR1w`%huGHh!e10@jwXZ$am=uZR-CLj zp@M~2_`qNi`;LkTc>mH z5)@|;7f)1`*X8Q^!r8aTzgo|I^c?L>`aGCxBwiD?-K(1OFvYR?@U*P9+*N9f^N{LL zqbB4(czj1$8<}NxsXHS!h27I3jSM{@FieDAv+kxHBEU1uSy*@atZ8e;ws_UG!xvSpbxlIpjx@Z&f^Hg5nyI0tXg(>Ay zc@4@3Mfr_-AZfPPb`vtfQmp>mhYsd?cY$*{VM`C?%J&{5g<#Ghh+G&>LtQ5;8oh8< zA$HV3(v|U#!4DN5vUzsU6V}ajE#CUE41Z5GNi~?q4mV zt#&P@vVaDChq|ZtQt56)Zwyyts4bA{f2zGP&PDZ`H5XM{HGL8``}haMMk_}hJPA{j zLm5#!k?yl9ZeMw3q?i%pAEYYC?$1GM_6JmG0-H64(LB!pi7=W|Bwm&abeq>tJ4ph& z(lANM<_+4qmO2*3hd6@O)1p!2y4eX8mU%}*Y2?y@8hD;Z=qY|AeYxJfCtoaXf5T~~ zhhrUCRp5GsS7~j$&s&0ygVsI4dW)N^cx{t+^{k~?@2bq1fmU@pg%<^fbxqvp#0DP} z00%XpyPMVHs!FonbnFYW)k1jhqnp+oP&7#u7I=_J@df#$yVDkE_Qp@X@07j$at379 z*a{{VblyFS=?aNMUMT;~6FeR9T~Xj!BQtYVYKpQiPV*0_Uo5_KH6yGc#rtM8I_!NC z?)p9Cz`?j@&fC-I-3_nK{Gw}Sy>}0Y2}px6FPXLPEzx#Q#V8qbg)J!P+!KVo0*9*L zNviQf1KRlSAr1!z)R31*eHU(qIWoL_J!(NO!Jh8AS z17Z)ihpcF87j;Q5+b8C}nP_V79Nu)*-qABal$5!;@>XeR=c(@(SK9YwkJXH_CMdnA zzu`gimEruRs4ky%5~Bel=G$qBTU1m<2>T4~+(hXLtW`j`;}qK4ssLCbF;=@%TvQr* z3M)z~JtnYXCCP`kW;*|aO9-)x@UU$bTt(PK{luYCPtk?x({%B$g89wCg0_*mQc#iT%3$Q!>1CnWL-xN!Gw76K%R5rzVK_#%4lA+*LsYNHy9>v8k zB`(Hcha446HeE^`N#oVM_rcAJ8_Nd(NG;aiOpy|{$$HakDcI-qf;K+c_75mHsx=_2 z&%u13Fmk-!^GR1r{p2)h&qgnqz4W-Q57&od^m`=V*syYpWE;Mii54!95=fngR*oRi z#m}HVt;tSAo?w{etqLI?^aBDaj*&9U6A??)hv`dXr7SYvEb#jrw%YuTdi@mEJ+N2= z9>SyDwzd5ckUyzeV{0vqS*t+Slq1r${6AdZfGSRljB zdLL;x&~1w^S=?A;#(qli6YEFT0dR`D(Ho74N&j$5FPsNg8`=eY#q5a}yKe3|byzjs zJzw#I>%#FBAAhxz_DFmphOf@o{Vp>q{qS^48{~

`;YS#`)Qf8Utn5B7W;t);JY~ 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

OKP#FzyZWun}NoF2L_w+n-&@f`%Q8mDnoD1(HB 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 literal 0 HcmV?d00001 diff --git a/simple_deform_helper/operators.py b/simple_deform_helper/operators.py new file mode 100644 index 000000000..db0537fc8 --- /dev/null +++ b/simple_deform_helper/operators.py @@ -0,0 +1,68 @@ +import bpy +from bpy.types import Operator +from bpy.props import FloatProperty, StringProperty, BoolProperty + +from .utils import Pref + + +class DeformAxisOperator(Operator,Pref): + bl_idname = 'simple_deform_gizmo.deform_axis' + bl_label = 'deform_axis' + bl_description = 'deform_axis operator' + bl_options = {'REGISTER'} + + Deform_Axis: StringProperty(default='X', options={'SKIP_SAVE'}) + + X_Value: FloatProperty(default=-0, options={'SKIP_SAVE'}) + Y_Value: FloatProperty(default=-0, options={'SKIP_SAVE'}) + Z_Value: FloatProperty(default=-0, options={'SKIP_SAVE'}) + + Is_Positive: BoolProperty(default=True, options={'SKIP_SAVE'}) + + def execute(self, context): + return {'RUNNING_MODAL'} + + def invoke(self, context, event): + context.window_manager.modal_handler_add(self) + return {'RUNNING_MODAL'} + + def modal(self, context, event): + from .gizmo import Utils + + mod = context.object.modifiers.active + mod.deform_axis = self.Deform_Axis + empty, con_limit_name = Utils.new_empty(context.object, mod) + is_positive = Utils.is_positive(mod.angle) + + for limit, value in (('max_x', self.X_Value), + ('min_x', self.X_Value), + ('max_y', self.Y_Value), + ('min_y', self.Y_Value), + ('max_z', self.Z_Value), + ('min_z', self.Z_Value), + ): + setattr(empty.constraints[con_limit_name], limit, value) + + if ((not is_positive) and self.Is_Positive) or (is_positive and (not self.Is_Positive)): + mod.angle = mod.angle * -1 + + if not event.ctrl: + self.pref.display_bend_axis_switch_gizmo = False + + Utils.update_bound_box(context.object) + return {'FINISHED'} + + +class_list = ( + DeformAxisOperator, +) + +register_class, unregister_class = bpy.utils.register_classes_factory(class_list) + + +def register(): + register_class() + + +def unregister(): + unregister_class() diff --git a/simple_deform_helper/preferences.py b/simple_deform_helper/preferences.py new file mode 100644 index 000000000..711602d56 --- /dev/null +++ b/simple_deform_helper/preferences.py @@ -0,0 +1,177 @@ +import os +import bpy +from bpy.props import (FloatProperty, + PointerProperty, + FloatVectorProperty, + EnumProperty, + BoolProperty) +from bpy.types import ( + AddonPreferences, + PropertyGroup, +) + +from .data import G_ADDON_NAME +from .utils import Pref, Utils + + +class SimpleDeformGizmoAddonPreferences(AddonPreferences, Pref): + bl_idname = G_ADDON_NAME + + deform_wireframe_color: FloatVectorProperty( + name='Deform Wireframe', + description='Draw Deform Wireframe Color', + default=(1, 1, 1, 0.3), + soft_max=1, + soft_min=0, + size=4, subtype='COLOR') + bound_box_color: FloatVectorProperty( + name='Bound Box', + description='Draw Bound Box Color', + default=(1, 0, 0, 0.1), + soft_max=1, + soft_min=0, + size=4, + subtype='COLOR') + limits_bound_box_color: FloatVectorProperty( + name='Upper and lower limit Bound Box Color', + description='Draw Upper and lower limit Bound Box Color', + default=(0.3, 1, 0.2, 0.5), + soft_max=1, + soft_min=0, + size=4, + subtype='COLOR') + modifiers_limits_tolerance: FloatProperty( + name='Upper and lower limit tolerance', + description='Minimum value between upper and lower limits', + default=0.05, + max=1, + min=0.0001 + ) + display_bend_axis_switch_gizmo: BoolProperty( + name='Show Toggle Axis Gizmo', + default=False, + options={'SKIP_SAVE'}) + + def draw(self, context): + layout = self.layout + if __name__ is None: + from bpy.types import Panel + layout = Panel.layout + layout.prop(self, 'deform_wireframe_color') + layout.prop(self, 'bound_box_color') + layout.prop(self, 'limits_bound_box_color') + layout.prop(self, 'modifiers_limits_tolerance') + layout.prop(self, 'display_bend_axis_switch_gizmo') + + def draw_header_tool_settings(self, context): + layout = self.layout + if Utils.simple_deform_poll(context): + layout.separator(factor=5) + active_mod = context.object.modifiers.active + prop = context.object.SimpleDeformGizmo_PropertyGroup + pref = Pref._pref() + + if active_mod.origin: + layout.prop(active_mod.origin.SimpleDeformGizmo_PropertyGroup, + 'origin_mode', + text='') + else: + layout.prop(prop, + 'origin_mode', + text='') + layout.prop(pref, + 'modifiers_limits_tolerance', + text='') + if active_mod.deform_method == 'BEND': + layout.prop(pref, + 'display_bend_axis_switch_gizmo', + toggle=1) + layout.separator(factor=0.5) + layout.prop(active_mod, + 'deform_method', + expand=True) + layout.prop(active_mod, + 'deform_axis', + expand=True) + layout.prop(active_mod, + 'angle') + layout.prop(active_mod, + 'factor') + + +class SimpleDeformGizmoObjectPropertyGroup(PropertyGroup): + + def _limits_up(self, context): + mod = context.object.modifiers + if mod and (mod.active.type == 'SIMPLE_DEFORM'): + mod = mod.active + mod.limits[1] = self.up_limits + + up_limits: FloatProperty(name='up', + description='UP Limits(Red)', + default=1, + update=_limits_up, + max=1, + min=0) + + def _limits_down(self, context): + mod = context.object.modifiers + if mod and (mod.active.type == 'SIMPLE_DEFORM'): + mod = mod.active + mod.limits[0] = self.down_limits + + down_limits: FloatProperty(name='down', + description='Lower limit(Green)', + default=0, + update=_limits_down, + max=1, + min=0) + + origin_mode_items = ( + ('UP_LIMITS', + 'Follow Upper Limit(Red)', + 'Add an empty object origin as the rotation axis (if there is an origin, do not add it), and set the origin ' + 'position as the upper limit during operation'), + ('DOWN_LIMITS', + 'Follow Lower Limit(Green)', + 'Add an empty object origin as the rotation axis (if there is an origin, do not add it), and set the origin ' + 'position as the lower limit during operation'), + ('LIMITS_MIDDLE', + 'Middle', + 'Add an empty object origin as the rotation axis (if there is an origin, do not add it), and set the ' + 'origin position between the upper and lower limits during operation'), + ('MIDDLE', + 'Bound Middle', + 'Add an empty object origin as the rotation axis (if there is an origin, do not add it), and set the origin ' + 'position as the position between the bounding boxes during operation'), + ('NOT', 'No origin operation', ''), + ) + + origin_mode: EnumProperty(name='Origin control mode', + default='NOT', + items=origin_mode_items) + + +class_list = ( + SimpleDeformGizmoAddonPreferences, + SimpleDeformGizmoObjectPropertyGroup, +) + +register_class, unregister_class = bpy.utils.register_classes_factory(class_list) + + +def register(): + register_class() + + Pref._pref().display_bend_axis_switch_gizmo = False + bpy.types.Object.SimpleDeformGizmo_PropertyGroup = PointerProperty( + type=SimpleDeformGizmoObjectPropertyGroup, + name='SimpleDeformGizmo_PropertyGroup') + bpy.types.VIEW3D_MT_editor_menus.append( + SimpleDeformGizmoAddonPreferences.draw_header_tool_settings) + + +def unregister(): + unregister_class() + bpy.types.VIEW3D_MT_editor_menus.remove( + SimpleDeformGizmoAddonPreferences.draw_header_tool_settings) diff --git a/simple_deform_helper/timers.py b/simple_deform_helper/timers.py new file mode 100644 index 000000000..84444804d --- /dev/null +++ b/simple_deform_helper/timers.py @@ -0,0 +1,28 @@ +import bpy +from bpy.app import timers + + +def remove_not_use_empty(remove_name: str = "ViewSimpleDeformGizmo__Empty_"): + """循环场景内的所有物体,找出没用的空物体并删掉 + """ + context = bpy.context + for obj in context.scene.objects: + is_empty = obj.type == "EMPTY" + not_parent = not obj.parent + name_ok = obj.name.count(remove_name) + if name_ok and not_parent and is_empty: + bpy.data.objects.remove(obj) # remove object + + +def update_timers() -> float: + remove_not_use_empty() + return 3 + + +def register(): + timers.register(update_timers, persistent=True) + + +def unregister(): + if timers.is_registered(update_timers): + timers.unregister(update_timers) diff --git a/simple_deform_helper/translate.py b/simple_deform_helper/translate.py new file mode 100644 index 000000000..8c949d410 --- /dev/null +++ b/simple_deform_helper/translate.py @@ -0,0 +1,55 @@ +import bpy + + +def origin_text(a, b): + return "Add an empty object origin as the rotation axis (if there is an origin, " + a + \ + "), and set the origin position " + b + " during operation" + + +translations_dict = { + "zh_CN": { + ("上下文", "原文"): "翻译文字", + ("*", "Show Toggle Axis Gizmo"): "显示切换轴向Gizmo", + + ("*", "Follow Upper Limit(Red)"): "跟随上限(红色)", + ("*", "Follow Lower Limit(Green)"): "跟随下限(绿色)", + ("*", "Lower limit(Green)"): "下限(绿色)", + ("*", "UP Limits(Red)"): "上限(红色)", + ("*", "Minimum value between upper and lower limits"): "上限与下限之间的最小值", + ("*", "Upper and lower limit tolerance"): "上下限容差", + ("*", "Draw Upper and lower limit Bound Box Color"): "绘制网格上限下限边界线框的颜色", + ("*", "Upper and lower limit Bound Box Color"): "上限下限边界框颜色", + ("*", "Draw Bound Box Color"): "绘制网格边界框的颜色", + ("*", "Bound Box"): "边界框颜色", + ("*", "Draw Deform Wireframe Color"): "绘制网格形变形状线框的颜色", + ("*", "Deform Wireframe"): "形变线框颜色", + ("*", "Simple Deform visualization adjustment tool"): "简易形变可视化工具", + ("*", "Select an object and the active modifier is Simple Deform"): "选择物体并且活动修改器为简易形变", + ("*", "Bound Middle"): "边界框中心", + ("*", origin_text("do not add it", "as the lower limit")): + "添加一个空物体原点作为旋转轴(如果已有原点则不添加),并在操作时设置原点位置为下限位置", + ("*", origin_text("do not add it", "as the upper limit")): + "添加一个空物体原点作为旋转轴(如果已有原点则不添加),并在操作时设置原点位置为上限位置", + ("*", origin_text("it will not be added", "between the upper and lower limits")): + "添加一个空物体原点作为旋转轴(如果已有原点则不添加),并在操作时设置原点位置为上下限之间的位置", + ("*", origin_text("do not add it", "as the position between the bounding boxes")): + "添加一个空物体原点作为旋转轴(如果已有原点则不添加),并在操作时设置原点位置为边界框之间的位置", + ("*", "No origin operation"): "不进行原点操作", + ("*", "Origin control mode"): "原点控制模式", + ("*", "Down limit"): "下限", + ("*", "Coefficient"): "系数", + ("*", "Upper limit"): "上限", + ("*", "3D View -> Select an object and the active modifier is simple deformation"): "3D视图 -> 选择一个物体," + "并且活动修改器为简易形修改器", + ("*", "3D View: SimpleDeformHelper"): "3D 视图: SimpleDeformHelper 简易形变助手", + ("*", ""): "", + } +} + + +def register(): + bpy.app.translations.register(__name__, translations_dict) + + +def unregister(): + bpy.app.translations.unregister(__name__) diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py new file mode 100644 index 000000000..3d0dce3c6 --- /dev/null +++ b/simple_deform_helper/utils.py @@ -0,0 +1,510 @@ +import math +import uuid + +import bpy +import numpy as np +from bpy.types import AddonPreferences +from mathutils import Vector, Matrix + +from .data import G_ADDON_NAME, G_NAME, G_INDICES, G_MODIFIERS_PROPERTY, G_CON_LIMIT_NAME, Data + + +class Pref: + @staticmethod + def _pref() -> "AddonPreferences": + return bpy.context.preferences.addons[G_ADDON_NAME].preferences + + @property + def pref(self=None) -> 'AddonPreferences': + """ + :return: AddonPreferences + """ + return Pref._pref() + + +class Utils(Data): + @classmethod + def set_reduce(cls, list_a, list_b, operation_type='-') -> list: + """ + :param list_a: 列表a + :type list_a: list or set + :param list_b: 列表b + :type list_b:list or set + :param operation_type :运算方法Enumerator in ['+','-','*','/']. + :type operation_type :str + :return list: 反回运算后的列表 + """ + if operation_type == '-': + return [list_a[i] - list_b[i] for i in range(0, len(list_a))] + elif operation_type == '+': + return [list_a[i] + list_b[i] for i in range(0, len(list_a))] + elif operation_type == '/': + return [list_a[i] / list_b[i] for i in range(0, len(list_a))] + elif operation_type == '*': + return [list_a[i] * list_b[i] for i in range(0, len(list_a))] + + @classmethod + def value_limit(cls, value, max_value=1, min_value=0) -> float: + """ + :param value: 输入值 + :type value: float + :param max_value: 允许的最大值 + :type max_value: float + :param min_value: 允许的最小值 + :type min_value: float + :return float: 反回小于最大值及大于最小值的浮点数 + """ + if value > max_value: + return max_value + elif value < min_value: + return min_value + else: + return value + + @classmethod + def is_positive(cls, number: 'int') -> bool: + """return bool value + if number is positive return True else return False + """ + return number == abs(number) + + @classmethod + def get_depsgraph(cls, obj: 'bpy.context.object'): + """ + :param obj: 要被评估的物体 + :type obj: bpy.types.Object + :return bpy.types.Object: 反回评估后的物体,计算应用修改器和实例化的数据 + 如果未输入物休将会评估活动物体 + """ + context = bpy.context + if obj is None: + obj = context.object + depsgraph = context.evaluated_depsgraph_get() + return obj.evaluated_get(depsgraph) + + @classmethod + def link_active_collection(cls, + obj: 'bpy.context.object') -> \ + 'bpy.context.view_layer.active_layer_collection.collection.objects': + context = bpy.context + if obj.name not in context.view_layer.active_layer_collection.collection.objects: + context.view_layer.active_layer_collection.collection.objects.link( + obj) + return context.view_layer.active_layer_collection.collection.objects + + @classmethod + def properties_is_modifier(cls) -> bool: + """ + 反回活动窗口内是否有修改器属性面板被打开,如果打开则反回True else False + """ + for area in bpy.context.screen.areas: + if area.type == 'PROPERTIES': + for space in area.spaces: + if space.type == 'PROPERTIES' and space.context == 'MODIFIER': + return True + return False + + @classmethod + def simple_deform_poll(cls, context: 'bpy.context') -> bool: + """ + :param context:输入一个上下文 + :type context:bpy.context + :return bool:反回布尔值,如果活动物体为网格或晶格并且活动修改器为简易形变反回 True else False + """ + obj = context.object + mesh = (obj.type in ('MESH', 'LATTICE')) if obj else False + modifiers_type = (obj.modifiers.active.type == + 'SIMPLE_DEFORM') if (obj and (obj.modifiers.active is not None)) else False + obj_ok = context and obj and modifiers_type and mesh + module_ok = (context.mode == 'OBJECT') + view = context.space_data + show_gizmo = view.show_gizmo + return obj_ok and module_ok and show_gizmo + + @classmethod + def bound_box_to_list(cls, obj: 'bpy.context.object') -> tuple: + """ + :param obj:输入一个物体,反回物体的边界框列表 + :type obj:bpy.types.Object + :return tuple: + """ + return tuple(i[:] for i in obj.bound_box) + + @classmethod + def get_origin_bounds(cls, obj: 'bpy.context.object') -> list: + modifiers_list = {} + for mod in obj.modifiers: + if (mod == obj.modifiers.active) or (modifiers_list != {}): + modifiers_list[mod] = (mod.show_render, mod.show_viewport) + mod.show_viewport = False + mod.show_render = False + matrix_obj = obj.matrix_world.copy() + obj.matrix_world.zero() + obj.scale = (1, 1, 1) + bound = cls.bound_box_to_list(obj) + obj.matrix_world = matrix_obj + for mod in modifiers_list: + show_render, show_viewport = modifiers_list[mod] + mod.show_render = show_render + mod.show_viewport = show_viewport + return list(bound) + + @classmethod + def get_mesh_max_min_co(cls, obj: 'bpy.context.object') -> tuple: + if obj.type == 'MESH': + ver_len = obj.data.vertices.__len__() + list_vertices = np.zeros(ver_len * 3, dtype=np.float32) + obj.data.vertices.foreach_get('co', list_vertices) + list_vertices = list_vertices.reshape(ver_len, 3) + elif obj.type == 'LATTICE': + ver_len = obj.data.points.__len__() + list_vertices = np.zeros(ver_len * 3, dtype=np.float32) + obj.data.points.foreach_get('co', list_vertices) + list_vertices = list_vertices.reshape(ver_len, 3) + return tuple(list_vertices.min(axis=0)), tuple(list_vertices.max(axis=0)) + + @classmethod + def matrix_calculation(cls, mat: 'Matrix', calculation_list: 'list') -> list: + return [mat @ Vector(i) for i in calculation_list] + + @classmethod + def get_origin_property_group(cls, mod, ob): + if mod.origin: + return mod.origin.SimpleDeformGizmo_PropertyGroup + else: + return ob.SimpleDeformGizmo_PropertyGroup + + @classmethod + def set_empty_obj_matrix(cls, origin_mode, empty_object, up_, down_, up, down): + tow = (2, 2, 2) + if origin_mode == 'UP_LIMITS': + empty_object.matrix_world.translation = Vector(up_) + elif origin_mode == 'DOWN_LIMITS': + empty_object.matrix_world.translation = Vector( + down_) + elif origin_mode == 'LIMITS_MIDDLE': + empty_object.matrix_world.translation = cls.set_reduce( + cls.set_reduce(up_, down_, '+'), tow, '/') + elif origin_mode == 'MIDDLE': + empty_object.matrix_world.translation = cls.set_reduce( + cls.set_reduce(up, down, '+'), tow, '/') + + @classmethod + def get_vector_axis(cls, mod): + axis = mod.deform_axis + if 'BEND' == mod.deform_method: + vector_axis = Vector((0, 0, 1)) if axis in ( + 'Y', 'X') else Vector((1, 0, 0)) + else: + vector = (Vector((1, 0, 0)) if ( + axis == 'X') else Vector((0, 1, 0))) + vector_axis = Vector((0, 0, 1)) if ( + axis == 'Z') else vector + return vector_axis + + @classmethod + def point_to_angle(cls, i, j, f, axis_): + if i == j: + if f == 0: + i[0] += 0.1 + j[0] -= 0.1 + elif f == 1: + i[1] -= 0.1 + j[1] += 0.1 + + else: + i[2] -= 0.1 + j[2] += 0.1 + vector_value = i - j + angle = (180 * vector_value.angle(axis_) / math.pi) + return angle + + @classmethod + def get_up_down(cls, mod, axis, top, bottom, left, right, front, back): + if 'BEND' == mod.deform_method: + if axis in ('X', 'Y'): + return top, bottom + elif axis == 'Z': + return right, left + else: + if axis == 'X': + return right, left + elif axis == 'Y': + return back, front + elif axis == 'Z': + return top, bottom + + @classmethod + def get_limits_pos(cls, mod, data): + top, bottom, left, right, front, back = data + up_limits = mod.limits[1] + down_limits = mod.limits[0] + axis = mod.deform_axis + + if mod.origin: + vector_axis = cls.get_vector_axis(mod) + origin_mat = mod.origin.matrix_world.to_3x3() + axis_ = origin_mat @ vector_axis + point_lit = [[top, bottom], [left, right], [front, back]] + + for f in range(point_lit.__len__()): + i = point_lit[f][0] + j = point_lit[f][1] + angle = cls.point_to_angle(i, j, f, axis_) + if abs(angle - 180) < 0.00001: + up, down = j, i + elif abs(angle) < 0.00001: + up, down = i, j + else: + up, down = cls.get_up_down(mod, axis, top, bottom, + left, right, front, back) + + ex = lambda a: cls.set_reduce(down, cls.set_reduce(cls.set_reduce( + up, down, '-'), (a, a, a), '*'), '+') + + up_ = ex(up_limits) + down_ = ex(down_limits) + return (up, down), (up_, down_) + + @classmethod + def update_bound_box(cls, object): + + context = bpy.context + data = bpy.data + obj = object + matrix = obj.matrix_world.copy() # 物体矩阵 + + # add simple_deform mesh + (min_x, min_y, min_z), (max_x, max_y, + max_z) = cls.get_mesh_max_min_co(object) + vertexes = ((max_x, min_y, min_z), + (min_x, min_y, min_z), + (max_x, max_y, min_z), + (min_x, max_y, min_z), + (max_x, min_y, max_z), + (min_x, min_y, max_z), + (max_x, max_y, max_z), + (min_x, max_y, max_z)) + if data.objects.get(G_NAME): + data.objects.remove(data.objects.get(G_NAME)) + + if data.meshes.get(G_NAME): + data.meshes.remove(data.meshes.get(G_NAME)) + mesh = data.meshes.new(G_NAME) + mesh.from_pydata(vertexes, G_INDICES, []) + mesh.update() + + new_object = data.objects.new(G_NAME, mesh) + + cls.link_active_collection(new_object) + + if new_object.parent != obj: + new_object.parent = obj + + new_object.modifiers.clear() + subdivision = new_object.modifiers.new('1', 'SUBSURF') + subdivision.levels = 7 + cls.G_SimpleDeformGizmoHandlerDit['modifiers_co'] = {} + cls.G_SimpleDeformGizmoHandlerDit['modifiers_co']['co'] = ( + min_x, min_y, min_z), (max_x, max_y, max_z) + for mo in context.object.modifiers: + if mo.type == 'SIMPLE_DEFORM': + simple_deform = new_object.modifiers.new( + mo.name, 'SIMPLE_DEFORM') + simple_deform.deform_method = mo.deform_method + simple_deform.deform_axis = mo.deform_axis + simple_deform.lock_x = mo.lock_x + simple_deform.lock_y = mo.lock_y + simple_deform.lock_z = mo.lock_z + simple_deform.origin = mo.origin + simple_deform.limits[1] = mo.limits[1] + simple_deform.limits[0] = mo.limits[0] + simple_deform.angle = mo.angle + simple_deform.show_viewport = mo.show_viewport + obj = Utils.get_depsgraph(new_object) + cls.G_SimpleDeformGizmoHandlerDit['modifiers_co'][mo.name] = cls.get_mesh_max_min_co( + obj) + new_object.hide_set(True) + new_object.hide_viewport = False + new_object.hide_select = True + new_object.hide_render = True + new_object.hide_viewport = True + new_object.hide_set(True) + ver_len = obj.data.vertices.__len__() + edge_len = obj.data.edges.__len__() + + if 'numpy_data' not in cls.G_SimpleDeformGizmoHandlerDit: + cls.G_SimpleDeformGizmoHandlerDit['numpy_data'] = {} + + numpy_data = cls.G_SimpleDeformGizmoHandlerDit['numpy_data'] + key = (ver_len, edge_len) + if key in numpy_data: + list_edges, list_vertices = numpy_data[key] + else: + list_edges = np.zeros(edge_len * 2, dtype=np.int32) + list_vertices = np.zeros(ver_len * 3, dtype=np.float32) + numpy_data[key] = (list_edges, list_vertices) + obj.data.vertices.foreach_get('co', list_vertices) + ver = list_vertices.reshape((ver_len, 3)) + ver = np.insert(ver, 3, 1, axis=1).T + ver[:] = np.dot(matrix, ver) + + ver /= ver[3, :] + ver = ver.T + ver = ver[:, :3] + obj.data.edges.foreach_get('vertices', list_edges) + indices = list_edges.reshape((edge_len, 2)) + + limits = context.object.modifiers.active.limits[:] + modifiers = [getattr(context.object.modifiers.active, i) + for i in G_MODIFIERS_PROPERTY] + + cls.G_SimpleDeformGizmoHandlerDit['draw'] = (ver, indices, matrix, modifiers, limits) + + @classmethod + def update_co_data(cls, ob, mod): + handler_dit = cls.G_SimpleDeformGizmoHandlerDit + + if 'modifiers_co' in cls.G_SimpleDeformGizmoHandlerDit and ob.type in ('MESH', 'LATTICE'): + modifiers_co = cls.G_SimpleDeformGizmoHandlerDit['modifiers_co'] + for index, mod_name in enumerate(modifiers_co): + co_items = list(modifiers_co.items()) + if mod.name == mod_name: + cls.G_SimpleDeformGizmoHandlerDit['co'] = co_items[index - 1][1] if (index or (index != 1)) else \ + modifiers_co['co'] + + @classmethod + def generate_co_data(cls): + handler_dit = cls.G_SimpleDeformGizmoHandlerDit + + if 'co' not in handler_dit: + handler_dit['co'] = cls.get_mesh_max_min_co( + bpy.context.object) + return handler_dit['co'] + + @classmethod + def new_empty(cls, obj, mod): + origin = mod.origin + if origin is None: + new_name = G_NAME + '_Empty_' + str(uuid.uuid4()) + origin_object = bpy.data.objects.new(new_name, None) + cls.link_active_collection(origin_object) + origin_object.hide_set(True) + origin_object.empty_display_size = min(obj.dimensions) + mod.origin = origin_object + else: + origin_object = mod.origin + origin_object.hide_viewport = False + + if origin_object.parent != obj: + origin_object.parent = obj + + # add constraints + if G_CON_LIMIT_NAME in origin_object.constraints.keys(): + limit_constraints = origin.constraints.get(G_CON_LIMIT_NAME) + else: + limit_constraints = origin_object.constraints.new( + 'LIMIT_ROTATION') + limit_constraints.name = G_CON_LIMIT_NAME + limit_constraints.owner_space = 'WORLD' + limit_constraints.space_object = obj + limit_constraints.use_transform_limit = True + limit_constraints.use_limit_x = True + limit_constraints.use_limit_y = True + limit_constraints.use_limit_z = True + con_copy_name = G_NAME + 'constraints_copy_rotation' + if con_copy_name in origin_object.constraints.keys(): + copy_constraints = origin.constraints.get(con_copy_name) + else: + copy_constraints = origin_object.constraints.new( + 'COPY_ROTATION') + copy_constraints.name = con_copy_name + copy_constraints.target = obj + copy_constraints.mix_mode = 'BEFORE' + copy_constraints.target_space = 'WORLD' + copy_constraints.owner_space = 'WORLD' + origin_object.rotation_euler.zero() + origin_object.scale = 1, 1, 1 + return origin_object, G_CON_LIMIT_NAME + + @classmethod + def co_to_direction(cls, mat, data): + (min_x, min_y, min_z), (max_x, max_y, + max_z) = data + a = mat @ Vector((max_x, max_y, max_z)) + b = mat @ Vector((max_x, min_y, min_z)) + c = mat @ Vector((min_x, max_y, min_z)) + d = mat @ Vector((min_x, min_y, max_z)) + + def pos_get(a, b): + return cls.set_reduce(cls.set_reduce(a, b, '+'), (2, 2, 2), '/') + + top = Vector(pos_get(a, d)) + bottom = Vector(pos_get(c, b)) + left = Vector(pos_get(c, d)) + right = Vector(pos_get(a, b)) + front = Vector(pos_get(d, b)) + back = Vector(pos_get(c, a)) + return top, bottom, left, right, front, back + + @classmethod + def each_face_pos(cls, mat: 'Matrix' = None): + if mat is None: + mat = Matrix() + return cls.co_to_direction(mat, cls.G_SimpleDeformGizmoHandlerDit['co']) + + @classmethod + def update_matrix(cls, mod, ob): + if mod.deform_method == 'BEND': + cls.new_empty(ob, mod) + if mod.origin: + empty_object = mod.origin + modifiers_co = cls.G_SimpleDeformGizmoHandlerDit['modifiers_co'] + for index, mod_name in enumerate(modifiers_co): + co_items = list(modifiers_co.items()) + if mod.name == mod_name: + data = co_items[index - 1][1] if ( + index or (index != 1)) else modifiers_co['co'] + (up, down), (up_, down_) = cls.get_limits_pos( + mod, cls.co_to_direction(ob.matrix_world.copy(), data)) + origin_mode = cls.get_origin_property_group( + mod, ob).origin_mode + cls.set_empty_obj_matrix( + origin_mode, empty_object, up_, down_, up, down) + + @classmethod + def update_empty_matrix(cls): + ob = bpy.context.object + for mod in ob.modifiers: + if mod.type == 'SIMPLE_DEFORM': + cls.update_matrix(mod, ob) + + @classmethod + def get_up_down_return_list(cls, mod, axis, up_, down_, data): + top, bottom, left, right, front, back = data + if 'BEND' == mod.deform_method: + if axis in ('X', 'Y'): + top = up_ + bottom = down_ + elif axis == 'Z': + right = up_ + left = down_ + else: + if axis == 'X': + right = up_ + left = down_ + elif axis == 'Y': + back = up_ + front = down_ + elif axis == 'Z': + top = up_ + bottom = down_ + return top, bottom, left, right, front, back + + +def register(): + Pref.load_gizmo_data() + + +def unregister(): + ... -- 2.30.2 From b163fcd062666a9519234dc12de7604f1b5dfb44 Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Sat, 11 Mar 2023 02:23:20 +0800 Subject: [PATCH 02/24] simple_deform_helper del wiki_url update doc_url del LICENSE file all files add SPDX-License-Identifier --- simple_deform_helper/__init__.py | 3 +-- simple_deform_helper/data.py | 1 + simple_deform_helper/draw.py | 1 + simple_deform_helper/gizmo.py | 1 + simple_deform_helper/operators.py | 4 +++- simple_deform_helper/preferences.py | 2 ++ simple_deform_helper/timers.py | 2 ++ simple_deform_helper/translate.py | 2 ++ simple_deform_helper/utils.py | 2 ++ 9 files changed, 15 insertions(+), 3 deletions(-) diff --git a/simple_deform_helper/__init__.py b/simple_deform_helper/__init__.py index 428f83e31..1e63fbb7a 100644 --- a/simple_deform_helper/__init__.py +++ b/simple_deform_helper/__init__.py @@ -8,8 +8,7 @@ bl_info = { "blender": (3, 0, 0), "location": "3D View -> Select an object and the active modifier is simple deformation", "description": "Simple Deform visualization adjustment tool", - "doc_url": "https://github.com/Yorha4D/simple_deform_helper/blob/main/README_CN.md", - "wiki_url": "", + "doc_url": "https://github.com/AIGODLIKE/simple_deform_helper/blob/main/README.md", "category": "3D View" } diff --git a/simple_deform_helper/data.py b/simple_deform_helper/data.py index 6f759db51..4da383ab7 100644 --- a/simple_deform_helper/data.py +++ b/simple_deform_helper/data.py @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0-or-later from os.path import dirname, basename, realpath G_MODIFIERS_PROPERTY = [ # copy modifier data diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index 1f1d1ef32..c4daa4f23 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0-or-later import bgl import blf import bpy diff --git a/simple_deform_helper/gizmo.py b/simple_deform_helper/gizmo.py index 735e6fe4c..b78d6add2 100644 --- a/simple_deform_helper/gizmo.py +++ b/simple_deform_helper/gizmo.py @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0-or-later import bpy import math from bpy_extras import view3d_utils diff --git a/simple_deform_helper/operators.py b/simple_deform_helper/operators.py index db0537fc8..ad7da90cf 100644 --- a/simple_deform_helper/operators.py +++ b/simple_deform_helper/operators.py @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + import bpy from bpy.types import Operator from bpy.props import FloatProperty, StringProperty, BoolProperty @@ -5,7 +7,7 @@ from bpy.props import FloatProperty, StringProperty, BoolProperty from .utils import Pref -class DeformAxisOperator(Operator,Pref): +class DeformAxisOperator(Operator, Pref): bl_idname = 'simple_deform_gizmo.deform_axis' bl_label = 'deform_axis' bl_description = 'deform_axis operator' diff --git a/simple_deform_helper/preferences.py b/simple_deform_helper/preferences.py index 711602d56..80f720322 100644 --- a/simple_deform_helper/preferences.py +++ b/simple_deform_helper/preferences.py @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + import os import bpy from bpy.props import (FloatProperty, diff --git a/simple_deform_helper/timers.py b/simple_deform_helper/timers.py index 84444804d..f8ba825a0 100644 --- a/simple_deform_helper/timers.py +++ b/simple_deform_helper/timers.py @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + import bpy from bpy.app import timers diff --git a/simple_deform_helper/translate.py b/simple_deform_helper/translate.py index 8c949d410..72e94e2a5 100644 --- a/simple_deform_helper/translate.py +++ b/simple_deform_helper/translate.py @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + import bpy diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index 3d0dce3c6..a1e1752c5 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + import math import uuid -- 2.30.2 From 7ca4ab98016d994df8fe6940a1b18558a962e74d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=90=8C=E6=96=B0?= <3209970865@qq.com> Date: Sat, 11 Mar 2023 02:45:54 +0800 Subject: [PATCH 03/24] del image and README.md --- simple_deform_helper/LICENSE | 339 ---------------------------- simple_deform_helper/README.md | 34 --- simple_deform_helper/README_CN.md | 31 --- simple_deform_helper/image/emm.jpeg | Bin 158854 -> 0 bytes 4 files changed, 404 deletions(-) delete mode 100644 simple_deform_helper/LICENSE delete mode 100644 simple_deform_helper/README.md delete mode 100644 simple_deform_helper/README_CN.md delete mode 100644 simple_deform_helper/image/emm.jpeg diff --git a/simple_deform_helper/LICENSE b/simple_deform_helper/LICENSE deleted file mode 100644 index d159169d1..000000000 --- a/simple_deform_helper/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/simple_deform_helper/README.md b/simple_deform_helper/README.md deleted file mode 100644 index e6e9e6258..000000000 --- a/simple_deform_helper/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# SimpleDeformHelper -# Move to [AIGODLIKE](https://github.com/AIGODLIKE/popoti_align_helper.git) - -Simple Deform Modifier Visual adjustment tool - -You can modify parameters more intuitively by dragging the gizmo directly - -![emm.jpeg](image/emm.jpeg) - -To display the gizmo, you need to select the active object and the active modifier is a simple deformation modifier - -1. Angle control gizmo - -You can drag to control the modifier's value - -2. Axial control gizmo - -Modify the deformation axis of the active modifier by clicking - - - -Shortcut keys (when dragging the gizmo): - -X Y Z: modify the modifier's deformation axis - -A: Show deformation axis gizmo - -Scroll wheel: switch the origin control mode - -Toggle the axial gizmo (displayed only when the mode is bending): - -6 directions, each direction has two directions that can be switched - -While dragging the upper and lower limits gizmo, you can hold down Ctrl to maintain the relative distance between the upper and lower limits diff --git a/simple_deform_helper/README_CN.md b/simple_deform_helper/README_CN.md deleted file mode 100644 index 05b1ed74b..000000000 --- a/simple_deform_helper/README_CN.md +++ /dev/null @@ -1,31 +0,0 @@ -# SimpleDeformHelper - -Simple Deform Modifier Visual adjustment tool - -You can modify parameters more intuitively by dragging the gizmo directly - -![emm.jpeg](image/emm.jpeg) - -显示Gizmo需要选择活动物体并且活动修改器为简易形变修改器 - -1.角度控制Gizmo - - 可通过拖动来控制修改器的值 - -2.轴向控制Gizmo - - 通过单击修改活动修改器的形变轴向 - -快捷键(在拖动Gizmo时): - - X Y Z:修改修改器的变形轴 - -A:显示变形轴Gizmo - - 滚轮滚动:切换原点控制模式 - -切换轴向Gizmo(只有在模式为弯曲时才可显示): - - 6个方向每个方向有两个方向可切换 - -在拖动上下限Gizmo时可以按住Ctrl 保持上下限之间的相对距离 \ No newline at end of file diff --git a/simple_deform_helper/image/emm.jpeg b/simple_deform_helper/image/emm.jpeg deleted file mode 100644 index 0ecf3dce2e354bfdfae9b2c0145c6a35f9932ed5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158854 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

`;YS#`)Qf8Utn5B7W;t);JY~ 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

OKP#FzyZWun}NoF2L_w+n-&@f`%Q8mDnoD1(HB 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 -- 2.30.2 From 6d8cd27cca22215fc9fd2397d0a444a117e0227d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=90=8C=E6=96=B0?= <3209970865@qq.com> Date: Sat, 11 Mar 2023 09:19:28 +0800 Subject: [PATCH 04/24] timer remove empty change to handlers depsgraph_update_post gpu replaced bgl --- simple_deform_helper/__init__.py | 4 ++-- simple_deform_helper/draw.py | 13 ++++--------- simple_deform_helper/timers.py | 30 ------------------------------ simple_deform_helper/update.py | 25 +++++++++++++++++++++++++ 4 files changed, 31 insertions(+), 41 deletions(-) delete mode 100644 simple_deform_helper/timers.py create mode 100644 simple_deform_helper/update.py diff --git a/simple_deform_helper/__init__.py b/simple_deform_helper/__init__.py index 1e63fbb7a..660e56a42 100644 --- a/simple_deform_helper/__init__.py +++ b/simple_deform_helper/__init__.py @@ -1,5 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-or-later -from . import gizmo, operators, preferences, data,timers,translate +from . import gizmo, operators, preferences, data, update, translate bl_info = { "name": "SimpleDeformHelper", @@ -14,7 +14,7 @@ bl_info = { module_tuple = ( gizmo, - timers, + update, translate, operators, preferences, diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index c4daa4f23..0886ffc75 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -1,5 +1,4 @@ # SPDX-License-Identifier: GPL-2.0-or-later -import bgl import blf import bpy import gpu @@ -131,7 +130,6 @@ class Draw3D(Pref, Data): if 'draw_limits_bound_box' in handler_dit: # draw limits_bound_box mat, data = handler_dit['draw_limits_bound_box'] - bgl.glEnable(bgl.GL_DEPTH_TEST) coords = Utils.matrix_calculation(mat, cls.data_to_calculation(data)) cls.draw_3d_shader(coords, G_INDICES, @@ -142,7 +140,6 @@ class Draw3D(Pref, Data): handler_dit = cls.G_SimpleDeformGizmoHandlerDit if 'draw_line' in handler_dit: line_pos, limits_pos, = handler_dit['draw_line'] - bgl.glDisable(bgl.GL_DEPTH_TEST) # draw limits line cls.draw_3d_shader(limits_pos, ((1, 0),), (1, 1, 0, 0.5)) # draw line @@ -161,7 +158,6 @@ class Draw3D(Pref, Data): pos, indices, mat, mod_data, limits = handler_dit['draw'] if ([getattr(active, i) for i in G_MODIFIERS_PROPERTY] == mod_data) and ( ob.matrix_world == mat) and limits == active.limits[:]: - bgl.glEnable(bgl.GL_DEPTH_TEST) cls.draw_3d_shader( pos, indices, pref.deform_wireframe_color) @@ -180,7 +176,7 @@ class Draw3D(Pref, Data): pref = cls._pref() simple_poll = Utils.simple_deform_poll(context) bend = modifier and (modifier.deform_method == 'BEND') - display_switch_axis = False == pref.display_bend_axis_switch_gizmo + display_switch_axis = not pref.display_bend_axis_switch_gizmo cls.draw_scale_text(obj) Utils.update_co_data(obj, modifier) @@ -194,7 +190,6 @@ class Draw3D(Pref, Data): cls.draw_limits_line() cls.draw_limits_bound_box() elif simple_poll and (bend and not display_switch_axis): - bgl.glDisable(bgl.GL_DEPTH_TEST) cls.draw_box(co_data, matrix) Utils.new_empty(obj, modifier) @@ -202,9 +197,9 @@ class Draw3D(Pref, Data): def draw_bound_box(cls): gpu.state.blend_set('ALPHA') gpu.state.line_width_set(1) - bgl.glEnable(bgl.GL_BLEND) - bgl.glEnable(bgl.GL_ALPHA) - bgl.glDisable(bgl.GL_DEPTH_TEST) + + gpu.state.blend_set('ALPHA') + gpu.state.depth_test_set('ALWAYS') context = bpy.context if Utils.simple_deform_poll(context): diff --git a/simple_deform_helper/timers.py b/simple_deform_helper/timers.py deleted file mode 100644 index f8ba825a0..000000000 --- a/simple_deform_helper/timers.py +++ /dev/null @@ -1,30 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later - -import bpy -from bpy.app import timers - - -def remove_not_use_empty(remove_name: str = "ViewSimpleDeformGizmo__Empty_"): - """循环场景内的所有物体,找出没用的空物体并删掉 - """ - context = bpy.context - for obj in context.scene.objects: - is_empty = obj.type == "EMPTY" - not_parent = not obj.parent - name_ok = obj.name.count(remove_name) - if name_ok and not_parent and is_empty: - bpy.data.objects.remove(obj) # remove object - - -def update_timers() -> float: - remove_not_use_empty() - return 3 - - -def register(): - timers.register(update_timers, persistent=True) - - -def unregister(): - if timers.is_registered(update_timers): - timers.unregister(update_timers) diff --git a/simple_deform_helper/update.py b/simple_deform_helper/update.py new file mode 100644 index 000000000..fb61082be --- /dev/null +++ b/simple_deform_helper/update.py @@ -0,0 +1,25 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +import bpy +from bpy.app.handlers import depsgraph_update_post, persistent + + +@persistent +def remove_not_use_empty(scene, dep): + """循环场景内的所有物体,找出没用的空物体并删掉 + """ + remove_name: str = "ViewSimpleDeformGizmo__Empty_" + context = bpy.context + for obj in context.scene.objects: + is_empty = obj.type == "EMPTY" + not_parent = not obj.parent + if remove_name in obj.name and not_parent and is_empty: + bpy.data.objects.remove(obj) # remove object + + +def register(): + depsgraph_update_post.append(remove_not_use_empty) + + +def unregister(): + depsgraph_update_post.remove(remove_not_use_empty) -- 2.30.2 From 2a43ceb3c2946db0d4288b1dc18e8a50f59b7cdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=90=8C=E6=96=B0?= <3209970865@qq.com> Date: Sat, 11 Mar 2023 10:08:53 +0800 Subject: [PATCH 05/24] header only show method, axis, and angle Other properties are displayed to VIEW3D_HT_tool_header and VIEW3D_PT_tools_object_options --- simple_deform_helper/__init__.py | 3 +- simple_deform_helper/draw.py | 12 +++--- simple_deform_helper/gizmo.py | 12 +++--- simple_deform_helper/operators.py | 7 +--- simple_deform_helper/panel.py | 60 ++++++++++++++++++++++++++ simple_deform_helper/preferences.py | 65 ++++++++++------------------- simple_deform_helper/utils.py | 38 +++++++++-------- 7 files changed, 119 insertions(+), 78 deletions(-) create mode 100644 simple_deform_helper/panel.py diff --git a/simple_deform_helper/__init__.py b/simple_deform_helper/__init__.py index 660e56a42..8b94dbebf 100644 --- a/simple_deform_helper/__init__.py +++ b/simple_deform_helper/__init__.py @@ -1,5 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-or-later -from . import gizmo, operators, preferences, data, update, translate +from . import gizmo, operators, preferences, data, update, translate, panel bl_info = { "name": "SimpleDeformHelper", @@ -13,6 +13,7 @@ bl_info = { } module_tuple = ( + panel, gizmo, update, translate, diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index 0886ffc75..9fb5a674b 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -6,7 +6,7 @@ from gpu_extras.batch import batch_for_shader from mathutils import Vector from .data import G_INDICES, G_MODIFIERS_PROPERTY, G_NAME, Data -from .utils import Pref, Utils +from .utils import PublicClass, Utils class Handler(Data): @@ -44,7 +44,7 @@ class Handler(Data): cls.G_SimpleDeformGizmoHandlerDit.clear() -class Draw3D(Pref, Data): +class Draw3D(PublicClass, Data): @classmethod def draw_3d_shader(cls, pos, indices, color=None, *, shader_name='3D_UNIFORM_COLOR', draw_type='LINES'): @@ -104,7 +104,7 @@ class Draw3D(Pref, Data): @classmethod def draw_box(cls, data, mat): - pref = cls._pref() + pref = cls.pref_() coords = Utils.matrix_calculation(mat, cls.data_to_calculation(data)) cls.draw_3d_shader(coords, G_INDICES, pref.bound_box_color) @@ -125,7 +125,7 @@ class Draw3D(Pref, Data): @classmethod def draw_limits_bound_box(cls): - pref = cls._pref() + pref = cls.pref_() handler_dit = cls.G_SimpleDeformGizmoHandlerDit if 'draw_limits_bound_box' in handler_dit: # draw limits_bound_box @@ -150,7 +150,7 @@ class Draw3D(Pref, Data): @classmethod def draw_deform_mesh(cls, ob, context): - pref = cls._pref() + pref = cls.pref_() handler_dit = cls.G_SimpleDeformGizmoHandlerDit active = context.object.modifiers.active # draw deform mesh @@ -173,7 +173,7 @@ class Draw3D(Pref, Data): matrix = obj.matrix_world # 活动物体矩阵 modifier = context.object.modifiers.active # 活动修改器 - pref = cls._pref() + pref = cls.pref_() simple_poll = Utils.simple_deform_poll(context) bend = modifier and (modifier.deform_method == 'BEND') display_switch_axis = not pref.display_bend_axis_switch_gizmo diff --git a/simple_deform_helper/gizmo.py b/simple_deform_helper/gizmo.py index b78d6add2..15d03cd99 100644 --- a/simple_deform_helper/gizmo.py +++ b/simple_deform_helper/gizmo.py @@ -9,7 +9,7 @@ from bpy.types import ( ) from .draw import Handler -from .utils import Utils, Pref +from .utils import Utils, PublicClass from .data import Data @@ -44,7 +44,7 @@ class CustomGizmo(Gizmo, Utils, Handler, Data): return {'RUNNING_MODAL'} -class ViewSimpleDeformGizmo(Gizmo, Utils, Handler, Data, Pref): +class ViewSimpleDeformGizmo(Gizmo, Utils, Handler, Data, PublicClass): """显示轴向切换拖动点Gizmo(两个点) """ bl_idname = 'ViewSimpleDeformGizmo' @@ -360,7 +360,7 @@ class ViewSimpleDeformGizmo(Gizmo, Utils, Handler, Data, Pref): return self.event_ops(event, ob, origin) -class SimpleDeformGizmoGroup(GizmoGroup, Utils, Handler, Pref, Data): +class SimpleDeformGizmoGroup(GizmoGroup, Utils, Handler, PublicClass, Data): """显示Gizmo """ bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup' @@ -372,7 +372,7 @@ class SimpleDeformGizmoGroup(GizmoGroup, Utils, Handler, Pref, Data): @classmethod def poll(cls, context): pol = cls.simple_deform_poll(context) - pref = cls._pref() + pref = cls.pref_() deform_method = ( pol and (context.object.modifiers.active.deform_method != 'BEND')) display_gizmo = pref.display_bend_axis_switch_gizmo @@ -501,7 +501,7 @@ class SimpleDeformGizmoGroup(GizmoGroup, Utils, Handler, Pref, Data): self.add_handler() -class SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo(GizmoGroup, Utils, Handler, Pref): +class SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo(GizmoGroup, Utils, Handler, PublicClass): """绘制切换变型轴的 变换方向 """ @@ -517,7 +517,7 @@ class SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo(GizmoGroup, Utils, Handler @classmethod def poll(cls, context): - pref = cls._pref() + pref = cls.pref_() simple = cls.simple_deform_poll(context) bend = simple and ( context.object.modifiers.active.deform_method == 'BEND') diff --git a/simple_deform_helper/operators.py b/simple_deform_helper/operators.py index ad7da90cf..f933085ac 100644 --- a/simple_deform_helper/operators.py +++ b/simple_deform_helper/operators.py @@ -4,10 +4,10 @@ import bpy from bpy.types import Operator from bpy.props import FloatProperty, StringProperty, BoolProperty -from .utils import Pref +from .utils import PublicClass -class DeformAxisOperator(Operator, Pref): +class DeformAxisOperator(Operator, PublicClass): bl_idname = 'simple_deform_gizmo.deform_axis' bl_label = 'deform_axis' bl_description = 'deform_axis operator' @@ -21,9 +21,6 @@ class DeformAxisOperator(Operator, Pref): Is_Positive: BoolProperty(default=True, options={'SKIP_SAVE'}) - def execute(self, context): - return {'RUNNING_MODAL'} - def invoke(self, context, event): context.window_manager.modal_handler_add(self) return {'RUNNING_MODAL'} diff --git a/simple_deform_helper/panel.py b/simple_deform_helper/panel.py new file mode 100644 index 000000000..512017b0e --- /dev/null +++ b/simple_deform_helper/panel.py @@ -0,0 +1,60 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +import bpy +from bpy.types import Panel, VIEW3D_HT_tool_header + +from .utils import PublicClass, Utils + + +class SimpleDeformHelperToolPanel(Panel, PublicClass): + bl_space_type = 'VIEW_3D' + bl_region_type = 'UI' + bl_category = 'Tool' + bl_context = '.objectmode' + bl_label = 'SimpleDeformHelper' + bl_idname = 'VIEW3D_PT_simple_deform_helper' + bl_parent_id = 'VIEW3D_PT_tools_object_options' + + @classmethod + def poll(cls, context): + return Utils.simple_deform_poll(context) + + def draw(self, context): + cls = SimpleDeformHelperToolPanel + if cls.poll(context): + pref = cls.pref_() + layout = self.layout + + obj = context.object + mod = obj.modifiers.active + prop = obj.SimpleDeformGizmo_PropertyGroup + + ctrl_obj = mod.origin.SimpleDeformGizmo_PropertyGroup if mod.origin else prop + + layout.prop(ctrl_obj, + 'origin_mode', + text='') + layout.prop(pref, + 'modifiers_limits_tolerance', + text='') + + if mod.deform_method == 'BEND': + layout.prop(pref, + 'display_bend_axis_switch_gizmo', + toggle=1) + + +class_list = ( + SimpleDeformHelperToolPanel, +) + +register_class, unregister_class = bpy.utils.register_classes_factory(class_list) + + +def register(): + register_class() + VIEW3D_HT_tool_header.append(SimpleDeformHelperToolPanel.draw) + + +def unregister(): + unregister_class() + VIEW3D_HT_tool_header.remove(SimpleDeformHelperToolPanel.draw) diff --git a/simple_deform_helper/preferences.py b/simple_deform_helper/preferences.py index 80f720322..90835854e 100644 --- a/simple_deform_helper/preferences.py +++ b/simple_deform_helper/preferences.py @@ -13,10 +13,10 @@ from bpy.types import ( ) from .data import G_ADDON_NAME -from .utils import Pref, Utils +from .utils import PublicClass, Utils -class SimpleDeformGizmoAddonPreferences(AddonPreferences, Pref): +class SimpleDeformGizmoAddonPreferences(AddonPreferences, PublicClass): bl_idname = G_ADDON_NAME deform_wireframe_color: FloatVectorProperty( @@ -55,50 +55,29 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, Pref): options={'SKIP_SAVE'}) def draw(self, context): - layout = self.layout - if __name__ is None: - from bpy.types import Panel - layout = Panel.layout - layout.prop(self, 'deform_wireframe_color') - layout.prop(self, 'bound_box_color') - layout.prop(self, 'limits_bound_box_color') - layout.prop(self, 'modifiers_limits_tolerance') - layout.prop(self, 'display_bend_axis_switch_gizmo') + col = self.layout.column() + col.prop(self, 'deform_wireframe_color') + col.prop(self, 'bound_box_color') + col.prop(self, 'limits_bound_box_color') + col.prop(self, 'modifiers_limits_tolerance') + col.prop(self, 'display_bend_axis_switch_gizmo') def draw_header_tool_settings(self, context): - layout = self.layout if Utils.simple_deform_poll(context): - layout.separator(factor=5) - active_mod = context.object.modifiers.active - prop = context.object.SimpleDeformGizmo_PropertyGroup - pref = Pref._pref() + row = self.layout.row() + obj = context.object + mod = obj.modifiers.active - if active_mod.origin: - layout.prop(active_mod.origin.SimpleDeformGizmo_PropertyGroup, - 'origin_mode', - text='') - else: - layout.prop(prop, - 'origin_mode', - text='') - layout.prop(pref, - 'modifiers_limits_tolerance', - text='') - if active_mod.deform_method == 'BEND': - layout.prop(pref, - 'display_bend_axis_switch_gizmo', - toggle=1) - layout.separator(factor=0.5) - layout.prop(active_mod, - 'deform_method', - expand=True) - layout.prop(active_mod, - 'deform_axis', - expand=True) - layout.prop(active_mod, - 'angle') - layout.prop(active_mod, - 'factor') + row.separator(factor=0.2) + row.prop(mod, + 'deform_method', + expand=True) + row.prop(mod, + 'deform_axis', + expand=True) + + show_type = 'angle' if mod.deform_method in ('BEND', 'TWIST') else 'factor' + row.prop(mod, show_type) class SimpleDeformGizmoObjectPropertyGroup(PropertyGroup): @@ -165,7 +144,7 @@ register_class, unregister_class = bpy.utils.register_classes_factory(class_list def register(): register_class() - Pref._pref().display_bend_axis_switch_gizmo = False + PublicClass.pref_().display_bend_axis_switch_gizmo = False bpy.types.Object.SimpleDeformGizmo_PropertyGroup = PointerProperty( type=SimpleDeformGizmoObjectPropertyGroup, name='SimpleDeformGizmo_PropertyGroup') diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index a1e1752c5..ae9df8ca8 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -11,9 +11,9 @@ from mathutils import Vector, Matrix from .data import G_ADDON_NAME, G_NAME, G_INDICES, G_MODIFIERS_PROPERTY, G_CON_LIMIT_NAME, Data -class Pref: +class PublicClass: @staticmethod - def _pref() -> "AddonPreferences": + def pref_() -> "AddonPreferences": return bpy.context.preferences.addons[G_ADDON_NAME].preferences @property @@ -21,7 +21,7 @@ class Pref: """ :return: AddonPreferences """ - return Pref._pref() + return PublicClass.pref_() class Utils(Data): @@ -108,20 +108,24 @@ class Utils(Data): @classmethod def simple_deform_poll(cls, context: 'bpy.context') -> bool: - """ - :param context:输入一个上下文 - :type context:bpy.context - :return bool:反回布尔值,如果活动物体为网格或晶格并且活动修改器为简易形变反回 True else False - """ + """Public poll""" obj = context.object - mesh = (obj.type in ('MESH', 'LATTICE')) if obj else False - modifiers_type = (obj.modifiers.active.type == - 'SIMPLE_DEFORM') if (obj and (obj.modifiers.active is not None)) else False - obj_ok = context and obj and modifiers_type and mesh - module_ok = (context.mode == 'OBJECT') - view = context.space_data - show_gizmo = view.show_gizmo - return obj_ok and module_ok and show_gizmo + if not obj: + return False + + mod = obj.modifiers.active + if not mod: + return False + + space = context.space_data + show_gizmo = space.show_gizmo if space.type == 'VIEW_3D' else True + + available_obj_type = obj and (obj.type in ('MESH', 'LATTICE')) + available_modifiers_type = mod and (mod.type == 'SIMPLE_DEFORM') + is_available_obj = available_modifiers_type and available_obj_type + is_obj_mode = context.mode == 'OBJECT' + show_mod = mod.show_viewport + return is_available_obj and is_obj_mode and show_gizmo and show_mod @classmethod def bound_box_to_list(cls, obj: 'bpy.context.object') -> tuple: @@ -505,7 +509,7 @@ class Utils(Data): def register(): - Pref.load_gizmo_data() + PublicClass.load_gizmo_data() def unregister(): -- 2.30.2 From 4f3b5ba0ce1e6868a0dbee5e6594c0c974355af3 Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Wed, 22 Mar 2023 18:44:39 +0800 Subject: [PATCH 06/24] Reduce gizmo.json file size --- simple_deform_helper/gizmo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simple_deform_helper/gizmo.json b/simple_deform_helper/gizmo.json index c7f3bc66f..5c5387d83 100644 --- a/simple_deform_helper/gizmo.json +++ b/simple_deform_helper/gizmo.json @@ -1 +1 @@ -{"XYZ_GizmoGroup_": [[0.515, -0.035, 0.195], [0.9272, -0.035, 0.2567], [0.515, -0.035, 0.2567], [0.515, -0.035, 0.195], [0.8003, -0.035, 0.195], [0.9272, -0.035, 0.2567], [0.8003, -0.035, 0.195], [0.6229, -0.035, -0.1596], [0.9272, -0.035, 0.2567], [0.4961, -0.035, -0.2213], [0.6229, -0.035, -0.1596], [0.8003, -0.035, 0.195], [0.4961, -0.035, -0.2213], [0.9272, -0.035, -0.1596], [0.6229, -0.035, -0.1596], [0.4961, -0.035, -0.2213], [0.9272, -0.035, -0.2213], [0.9272, -0.035, -0.1596], [-0.0311, -0.035, 0.0317], [-0.1257, -0.035, 0.2567], [-0.2084, -0.035, 0.2567], [-0.0311, -0.035, 0.0317], [0.0026, -0.035, 0.092], [-0.1257, -0.035, 0.2567], [0.0026, -0.035, 0.092], [0.215, -0.035, 0.2567], [0.1323, -0.035, 0.2567], [0.0026, -0.035, 0.092], [0.0376, -0.035, 0.031], [0.215, -0.035, 0.2567], [-0.0311, -0.035, 0.0317], [0.0376, -0.035, 0.031], [0.0026, -0.035, 0.092], [-0.0311, -0.035, -0.2213], [0.0376, -0.035, 0.031], [-0.0311, -0.035, 0.0317], [-0.0311, -0.035, -0.2213], [0.0376, -0.035, -0.2213], [0.0376, -0.035, 0.031], [-0.7671, -0.035, 0.0261], [-0.8751, -0.035, 0.2567], [-0.9585, -0.035, 0.2567], [-0.7671, -0.035, 0.0261], [-0.725, -0.035, 0.0745], [-0.8751, -0.035, 0.2567], [-0.725, -0.035, 0.0745], [-0.493, -0.035, 0.2567], [-0.5757, -0.035, 0.2567], [-0.725, -0.035, 0.0745], [-0.6837, -0.035, 0.0261], [-0.493, -0.035, 0.2567], [-0.7671, -0.035, 0.0261], [-0.6837, -0.035, 0.0261], [-0.725, -0.035, 0.0745], [-0.9732, -0.035, -0.2213], [-0.6837, -0.035, 0.0261], [-0.7671, -0.035, 0.0261], [-0.9732, -0.035, -0.2213], [-0.725, -0.035, -0.0237], [-0.6837, -0.035, 0.0261], [-0.725, -0.035, -0.0237], [-0.4797, -0.035, -0.2213], [-0.6837, -0.035, 0.0261], [-0.9732, -0.035, -0.2213], [-0.8898, -0.035, -0.2213], [-0.725, -0.035, -0.0237], [-0.5624, -0.035, -0.2213], [-0.4797, -0.035, -0.2213], [-0.725, -0.035, -0.0237], [0.515, 0.035, 0.195], [0.515, 0.035, 0.2567], [0.9272, 0.035, 0.2567], [0.515, 0.035, 0.195], [0.9272, 0.035, 0.2567], [0.8003, 0.035, 0.195], [0.8003, 0.035, 0.195], [0.9272, 0.035, 0.2567], [0.6229, 0.035, -0.1596], [0.4961, 0.035, -0.2213], [0.8003, 0.035, 0.195], [0.6229, 0.035, -0.1596], [0.4961, 0.035, -0.2213], [0.6229, 0.035, -0.1596], [0.9272, 0.035, -0.1596], [0.4961, 0.035, -0.2213], [0.9272, 0.035, -0.1596], [0.9272, 0.035, -0.2213], [-0.0311, 0.035, 0.0317], [-0.2084, 0.035, 0.2567], [-0.1257, 0.035, 0.2567], [-0.0311, 0.035, 0.0317], [-0.1257, 0.035, 0.2567], [0.0026, 0.035, 0.092], [0.0026, 0.035, 0.092], [0.1323, 0.035, 0.2567], [0.215, 0.035, 0.2567], [0.0026, 0.035, 0.092], [0.215, 0.035, 0.2567], [0.0376, 0.035, 0.031], [-0.0311, 0.035, 0.0317], [0.0026, 0.035, 0.092], [0.0376, 0.035, 0.031], [-0.0311, 0.035, -0.2213], [-0.0311, 0.035, 0.0317], [0.0376, 0.035, 0.031], [-0.0311, 0.035, -0.2213], [0.0376, 0.035, 0.031], [0.0376, 0.035, -0.2213], [-0.7671, 0.035, 0.0261], [-0.9585, 0.035, 0.2567], [-0.8751, 0.035, 0.2567], [-0.7671, 0.035, 0.0261], [-0.8751, 0.035, 0.2567], [-0.725, 0.035, 0.0745], [-0.725, 0.035, 0.0745], [-0.5757, 0.035, 0.2567], [-0.493, 0.035, 0.2567], [-0.725, 0.035, 0.0745], [-0.493, 0.035, 0.2567], [-0.6837, 0.035, 0.0261], [-0.7671, 0.035, 0.0261], [-0.725, 0.035, 0.0745], [-0.6837, 0.035, 0.0261], [-0.9732, 0.035, -0.2213], [-0.7671, 0.035, 0.0261], [-0.6837, 0.035, 0.0261], [-0.9732, 0.035, -0.2213], [-0.6837, 0.035, 0.0261], [-0.725, 0.035, -0.0237], [-0.725, 0.035, -0.0237], [-0.6837, 0.035, 0.0261], [-0.4797, 0.035, -0.2213], [-0.9732, 0.035, -0.2213], [-0.725, 0.035, -0.0237], [-0.8898, 0.035, -0.2213], [-0.5624, 0.035, -0.2213], [-0.725, 0.035, -0.0237], [-0.4797, 0.035, -0.2213], [-0.5624, -0.035, -0.2213], [-0.4797, 0.035, -0.2213], [-0.4797, -0.035, -0.2213], [-0.725, -0.035, -0.0237], [-0.5624, 0.035, -0.2213], [-0.5624, -0.035, -0.2213], [-0.8898, -0.035, -0.2213], [-0.725, 0.035, -0.0237], [-0.725, -0.035, -0.0237], [-0.9732, -0.035, -0.2213], [-0.8898, 0.035, -0.2213], [-0.8898, -0.035, -0.2213], [-0.7671, -0.035, 0.0261], [-0.9732, 0.035, -0.2213], [-0.9732, -0.035, -0.2213], [-0.9585, -0.035, 0.2567], [-0.7671, 0.035, 0.0261], [-0.7671, -0.035, 0.0261], [-0.8751, -0.035, 0.2567], [-0.9585, 0.035, 0.2567], [-0.9585, -0.035, 0.2567], [-0.725, -0.035, 0.0745], [-0.8751, 0.035, 0.2567], [-0.8751, -0.035, 0.2567], [-0.5757, -0.035, 0.2567], [-0.725, 0.035, 0.0745], [-0.725, -0.035, 0.0745], [-0.493, -0.035, 0.2567], [-0.5757, 0.035, 0.2567], [-0.5757, -0.035, 0.2567], [-0.6837, -0.035, 0.0261], [-0.493, 0.035, 0.2567], [-0.493, -0.035, 0.2567], [-0.4797, -0.035, -0.2213], [-0.6837, 0.035, 0.0261], [-0.6837, -0.035, 0.0261], [0.0376, -0.035, 0.031], [0.215, 0.035, 0.2567], [0.215, -0.035, 0.2567], [0.0376, -0.035, -0.2213], [0.0376, 0.035, 0.031], [0.0376, -0.035, 0.031], [-0.0311, -0.035, -0.2213], [0.0376, 0.035, -0.2213], [0.0376, -0.035, -0.2213], [-0.0311, -0.035, -0.2213], [-0.0311, 0.035, 0.0317], [-0.0311, 0.035, -0.2213], [-0.2084, -0.035, 0.2567], [-0.0311, 0.035, 0.0317], [-0.0311, -0.035, 0.0317], [-0.1257, -0.035, 0.2567], [-0.2084, 0.035, 0.2567], [-0.2084, -0.035, 0.2567], [0.0026, -0.035, 0.092], [-0.1257, 0.035, 0.2567], [-0.1257, -0.035, 0.2567], [0.0026, -0.035, 0.092], [0.1323, 0.035, 0.2567], [0.0026, 0.035, 0.092], [0.215, -0.035, 0.2567], [0.1323, 0.035, 0.2567], [0.1323, -0.035, 0.2567], [0.9272, -0.035, 0.2567], [0.515, 0.035, 0.2567], [0.515, -0.035, 0.2567], [0.6229, -0.035, -0.1596], [0.9272, 0.035, 0.2567], [0.9272, -0.035, 0.2567], [0.9272, -0.035, -0.1596], [0.6229, 0.035, -0.1596], [0.6229, -0.035, -0.1596], [0.9272, -0.035, -0.2213], [0.9272, 0.035, -0.1596], [0.9272, -0.035, -0.1596], [0.4961, -0.035, -0.2213], [0.9272, 0.035, -0.2213], [0.9272, -0.035, -0.2213], [0.8003, -0.035, 0.195], [0.4961, 0.035, -0.2213], [0.4961, -0.035, -0.2213], [0.515, -0.035, 0.195], [0.8003, 0.035, 0.195], [0.8003, -0.035, 0.195], [0.515, -0.035, 0.195], [0.515, 0.035, 0.2567], [0.515, 0.035, 0.195], [-0.5624, -0.035, -0.2213], [-0.5624, 0.035, -0.2213], [-0.4797, 0.035, -0.2213], [-0.725, -0.035, -0.0237], [-0.725, 0.035, -0.0237], [-0.5624, 0.035, -0.2213], [-0.8898, -0.035, -0.2213], [-0.8898, 0.035, -0.2213], [-0.725, 0.035, -0.0237], [-0.9732, -0.035, -0.2213], [-0.9732, 0.035, -0.2213], [-0.8898, 0.035, -0.2213], [-0.7671, -0.035, 0.0261], [-0.7671, 0.035, 0.0261], [-0.9732, 0.035, -0.2213], [-0.9585, -0.035, 0.2567], [-0.9585, 0.035, 0.2567], [-0.7671, 0.035, 0.0261], [-0.8751, -0.035, 0.2567], [-0.8751, 0.035, 0.2567], [-0.9585, 0.035, 0.2567], [-0.725, -0.035, 0.0745], [-0.725, 0.035, 0.0745], [-0.8751, 0.035, 0.2567], [-0.5757, -0.035, 0.2567], [-0.5757, 0.035, 0.2567], [-0.725, 0.035, 0.0745], [-0.493, -0.035, 0.2567], [-0.493, 0.035, 0.2567], [-0.5757, 0.035, 0.2567], [-0.6837, -0.035, 0.0261], [-0.6837, 0.035, 0.0261], [-0.493, 0.035, 0.2567], [-0.4797, -0.035, -0.2213], [-0.4797, 0.035, -0.2213], [-0.6837, 0.035, 0.0261], [0.0376, -0.035, 0.031], [0.0376, 0.035, 0.031], [0.215, 0.035, 0.2567], [0.0376, -0.035, -0.2213], [0.0376, 0.035, -0.2213], [0.0376, 0.035, 0.031], [-0.0311, -0.035, -0.2213], [-0.0311, 0.035, -0.2213], [0.0376, 0.035, -0.2213], [-0.0311, -0.035, -0.2213], [-0.0311, -0.035, 0.0317], [-0.0311, 0.035, 0.0317], [-0.2084, -0.035, 0.2567], [-0.2084, 0.035, 0.2567], [-0.0311, 0.035, 0.0317], [-0.1257, -0.035, 0.2567], [-0.1257, 0.035, 0.2567], [-0.2084, 0.035, 0.2567], [0.0026, -0.035, 0.092], [0.0026, 0.035, 0.092], [-0.1257, 0.035, 0.2567], [0.0026, -0.035, 0.092], [0.1323, -0.035, 0.2567], [0.1323, 0.035, 0.2567], [0.215, -0.035, 0.2567], [0.215, 0.035, 0.2567], [0.1323, 0.035, 0.2567], [0.9272, -0.035, 0.2567], [0.9272, 0.035, 0.2567], [0.515, 0.035, 0.2567], [0.6229, -0.035, -0.1596], [0.6229, 0.035, -0.1596], [0.9272, 0.035, 0.2567], [0.9272, -0.035, -0.1596], [0.9272, 0.035, -0.1596], [0.6229, 0.035, -0.1596], [0.9272, -0.035, -0.2213], [0.9272, 0.035, -0.2213], [0.9272, 0.035, -0.1596], [0.4961, -0.035, -0.2213], [0.4961, 0.035, -0.2213], [0.9272, 0.035, -0.2213], [0.8003, -0.035, 0.195], [0.8003, 0.035, 0.195], [0.4961, 0.035, -0.2213], [0.515, -0.035, 0.195], [0.515, 0.035, 0.195], [0.8003, 0.035, 0.195], [0.515, -0.035, 0.195], [0.515, -0.035, 0.2567], [0.515, 0.035, 0.2567]], "Suzanne_GizmoGroup_": [[0.265, -0.2437, 0.0984], [0.2826, -0.204, 0.0145], [0.318, -0.1952, 0.0984], [-0.2826, -0.204, 0.0145], [-0.265, -0.2437, 0.0984], [-0.318, -0.1952, 0.0984], [0.318, -0.1952, 0.0984], [0.3091, -0.1422, -0.0076], [0.3533, -0.1333, 0.0984], [-0.3091, -0.1422, -0.0076], [-0.318, -0.1952, 0.0984], [-0.3533, -0.1333, 0.0984], [0.2826, -0.204, 0.0145], [0.1987, -0.1643, -0.0517], [0.3091, -0.1422, -0.0076], [-0.1987, -0.1643, -0.0517], [-0.2826, -0.204, 0.0145], [-0.3091, -0.1422, -0.0076], [0.2473, -0.2482, 0.0543], [0.1987, -0.2217, -0.0208], [0.2826, -0.204, 0.0145], [-0.1987, -0.2217, -0.0208], [-0.2473, -0.2482, 0.0543], [-0.2826, -0.204, 0.0145], [0.1987, -0.257, 0.0366], [0.1148, -0.2349, 0.0145], [0.1987, -0.2217, -0.0208], [-0.1148, -0.2349, 0.0145], [-0.1987, -0.257, 0.0366], [-0.1987, -0.2217, -0.0208], [0.1987, -0.2217, -0.0208], [0.0883, -0.1819, -0.0076], [0.1987, -0.1643, -0.0517], [-0.0883, -0.1819, -0.0076], [-0.1987, -0.2217, -0.0208], [-0.1987, -0.1643, -0.0517], [0.0795, -0.2349, 0.0984], [0.0883, -0.1819, -0.0076], [0.1148, -0.2349, 0.0145], [-0.0795, -0.2349, 0.0984], [-0.0883, -0.1819, -0.0076], [-0.0442, -0.1863, 0.0984], [0.1546, -0.2658, 0.0543], [0.0795, -0.2349, 0.0984], [0.1148, -0.2349, 0.0145], [-0.0795, -0.2349, 0.0984], [-0.1546, -0.2658, 0.0543], [-0.1148, -0.2349, 0.0145], [0.1369, -0.2658, 0.0984], [0.1148, -0.2349, 0.1823], [0.0795, -0.2349, 0.0984], [-0.1148, -0.2349, 0.1823], [-0.1369, -0.2658, 0.0984], [-0.0795, -0.2349, 0.0984], [0.1148, -0.2349, 0.1823], [0.0442, -0.1863, 0.0984], [0.0795, -0.2349, 0.0984], [-0.1148, -0.2349, 0.1823], [-0.0442, -0.1863, 0.0984], [-0.0883, -0.1819, 0.2088], [0.1987, -0.2217, 0.2177], [0.0883, -0.1819, 0.2088], [0.1148, -0.2349, 0.1823], [-0.1987, -0.2217, 0.2177], [-0.0883, -0.1819, 0.2088], [-0.1987, -0.1643, 0.253], [0.1987, -0.257, 0.1647], [0.1148, -0.2349, 0.1823], [0.1546, -0.2658, 0.147], [-0.1987, -0.257, 0.1647], [-0.1148, -0.2349, 0.1823], [-0.1987, -0.2217, 0.2177], [0.2473, -0.2482, 0.147], [0.1987, -0.2217, 0.2177], [0.1987, -0.257, 0.1647], [-0.2473, -0.2482, 0.147], [-0.1987, -0.2217, 0.2177], [-0.2826, -0.204, 0.1823], [0.2826, -0.204, 0.1823], [0.1987, -0.1643, 0.253], [0.1987, -0.2217, 0.2177], [-0.2826, -0.204, 0.1823], [-0.1987, -0.1643, 0.253], [-0.3091, -0.1422, 0.2088], [0.318, -0.1952, 0.0984], [0.3091, -0.1422, 0.2088], [0.2826, -0.204, 0.1823], [-0.318, -0.1952, 0.0984], [-0.3091, -0.1422, 0.2088], [-0.3533, -0.1333, 0.0984], [0.265, -0.2437, 0.0984], [0.2826, -0.204, 0.1823], [0.2473, -0.2482, 0.147], [-0.265, -0.2437, 0.0984], [-0.2826, -0.204, 0.1823], [-0.318, -0.1952, 0.0984], [0.2473, -0.2482, 0.147], [0.2694, -0.2526, 0.0984], [0.265, -0.2437, 0.0984], [-0.2473, -0.2482, 0.147], [-0.2694, -0.2526, 0.0984], [-0.2517, -0.257, 0.1514], [0.1987, -0.257, 0.1647], [0.2517, -0.257, 0.1514], [0.2473, -0.2482, 0.147], [-0.1987, -0.257, 0.1647], [-0.2517, -0.257, 0.1514], [-0.1987, -0.2702, 0.1735], [0.1546, -0.2658, 0.147], [0.1987, -0.2702, 0.1735], [0.1987, -0.257, 0.1647], [-0.1546, -0.2658, 0.147], [-0.1987, -0.2702, 0.1735], [-0.1502, -0.2791, 0.1514], [0.1369, -0.2658, 0.0984], [0.1502, -0.2791, 0.1514], [0.1546, -0.2658, 0.147], [-0.1369, -0.2658, 0.0984], [-0.1502, -0.2791, 0.1514], [-0.1281, -0.2791, 0.0984], [0.1369, -0.2658, 0.0984], [0.1502, -0.2791, 0.0498], [0.1281, -0.2791, 0.0984], [-0.1502, -0.2791, 0.0498], [-0.1369, -0.2658, 0.0984], [-0.1281, -0.2791, 0.0984], [0.1546, -0.2658, 0.0543], [0.1987, -0.2702, 0.0278], [0.1502, -0.2791, 0.0498], [-0.1987, -0.2702, 0.0278], [-0.1546, -0.2658, 0.0543], [-0.1502, -0.2791, 0.0498], [0.1987, -0.257, 0.0366], [0.2517, -0.257, 0.0498], [0.1987, -0.2702, 0.0278], [-0.2517, -0.257, 0.0498], [-0.1987, -0.257, 0.0366], [-0.1987, -0.2702, 0.0278], [0.2473, -0.2482, 0.0543], [0.2694, -0.2526, 0.0984], [0.2517, -0.257, 0.0498], [-0.2694, -0.2526, 0.0984], [-0.2473, -0.2482, 0.0543], [-0.2517, -0.257, 0.0498], [0.1987, -0.2835, 0.0984], [0.2517, -0.257, 0.0498], [0.2694, -0.2526, 0.0984], [-0.2694, -0.2526, 0.0984], [-0.2517, -0.257, 0.0498], [-0.1987, -0.2835, 0.0984], [0.1987, -0.2702, 0.0278], [0.2517, -0.257, 0.0498], [0.1987, -0.2835, 0.0984], [-0.1987, -0.2835, 0.0984], [-0.2517, -0.257, 0.0498], [-0.1987, -0.2702, 0.0278], [0.1987, -0.2835, 0.0984], [0.1502, -0.2791, 0.0498], [0.1987, -0.2702, 0.0278], [-0.1987, -0.2702, 0.0278], [-0.1502, -0.2791, 0.0498], [-0.1987, -0.2835, 0.0984], [0.1987, -0.2835, 0.0984], [0.1281, -0.2791, 0.0984], [0.1502, -0.2791, 0.0498], [-0.1502, -0.2791, 0.0498], [-0.1281, -0.2791, 0.0984], [-0.1987, -0.2835, 0.0984], [0.1987, -0.2835, 0.0984], [0.1502, -0.2791, 0.1514], [0.1281, -0.2791, 0.0984], [-0.1281, -0.2791, 0.0984], [-0.1502, -0.2791, 0.1514], [-0.1987, -0.2835, 0.0984], [0.1987, -0.2835, 0.0984], [0.1987, -0.2702, 0.1735], [0.1502, -0.2791, 0.1514], [-0.1502, -0.2791, 0.1514], [-0.1987, -0.2702, 0.1735], [-0.1987, -0.2835, 0.0984], [0.1987, -0.2835, 0.0984], [0.2517, -0.257, 0.1514], [0.1987, -0.2702, 0.1735], [-0.1987, -0.2702, 0.1735], [-0.2517, -0.257, 0.1514], [-0.1987, -0.2835, 0.0984], [0.1987, -0.2835, 0.0984], [0.2694, -0.2526, 0.0984], [0.2517, -0.257, 0.1514], [-0.2517, -0.257, 0.1514], [-0.2694, -0.2526, 0.0984], [-0.1987, -0.2835, 0.0984], [0.0927, -0.1731, -0.564], [-0.0, -0.1422, -0.5949], [0.1016, -0.1289, -0.5861], [-0.0927, -0.1731, -0.564], [-0.0, -0.1422, -0.5949], [-0.0, -0.1775, -0.5728], [0.1325, -0.1731, -0.5552], [0.1016, -0.1289, -0.5861], [0.1855, -0.1113, -0.5728], [-0.1325, -0.1731, -0.5552], [-0.1016, -0.1289, -0.5861], [-0.0927, -0.1731, -0.564], [0.2076, -0.1157, -0.5419], [0.1325, -0.1731, -0.5552], [0.1855, -0.1113, -0.5728], [-0.1325, -0.1731, -0.5552], [-0.2076, -0.1157, -0.5419], [-0.1855, -0.1113, -0.5728], [0.1987, -0.1378, -0.4315], [0.1502, -0.1908, -0.5022], [0.2076, -0.1157, -0.5419], [-0.1502, -0.1908, -0.5022], [-0.1987, -0.1378, -0.4315], [-0.2076, -0.1157, -0.5419], [0.1766, -0.1378, -0.2858], [0.1413, -0.204, -0.4359], [0.1987, -0.1378, -0.4315], [-0.1413, -0.204, -0.4359], [-0.1766, -0.1378, -0.2858], [-0.1987, -0.1378, -0.4315], [0.1148, -0.1333, -0.1445], [0.2252, -0.1952, -0.065], [0.0707, -0.2747, -0.0959], [-0.2252, -0.1952, -0.065], [-0.1148, -0.1333, -0.1445], [-0.0707, -0.2747, -0.0959], [0.3577, -0.1201, -0.0606], [0.2252, -0.1952, -0.065], [0.2473, -0.1157, -0.118], [-0.3577, -0.1201, -0.0606], [-0.2252, -0.1952, -0.065], [-0.3489, -0.1687, -0.0076], [0.3577, -0.1201, -0.0606], [0.4107, -0.1554, 0.0763], [0.3489, -0.1687, -0.0076], [-0.4107, -0.1554, 0.0763], [-0.3577, -0.1201, -0.0606], [-0.3489, -0.1687, -0.0076], [0.4858, -0.151, 0.2044], [0.4107, -0.1554, 0.0763], [0.4681, -0.0671, 0.0454], [-0.4858, -0.151, 0.2044], [-0.4107, -0.1554, 0.0763], [-0.4195, -0.1863, 0.1735], [0.4019, -0.1687, 0.2353], [0.4195, -0.1863, 0.1735], [0.4858, -0.151, 0.2044], [-0.4019, -0.1687, 0.2353], [-0.4195, -0.1863, 0.1735], [-0.3886, -0.2261, 0.1956], [0.2782, -0.204, 0.3016], [0.3886, -0.2261, 0.1956], [0.4019, -0.1687, 0.2353], [-0.2782, -0.204, 0.3016], [-0.3886, -0.2261, 0.1956], [-0.2473, -0.2658, 0.2707], [0.2782, -0.204, 0.3016], [0.1766, -0.2879, 0.3236], [0.2473, -0.2658, 0.2707], [-0.1766, -0.2879, 0.3236], [-0.2782, -0.204, 0.3016], [-0.2473, -0.2658, 0.2707], [0.0883, -0.2437, 0.3678], [0.1766, -0.2879, 0.3236], [0.1811, -0.2305, 0.3899], [-0.0883, -0.2437, 0.3678], [-0.1766, -0.2879, 0.3236], [-0.1148, -0.2967, 0.3104], [0.0353, -0.2393, 0.2397], [0.1148, -0.2967, 0.3104], [0.0883, -0.2437, 0.3678], [-0.0353, -0.2393, 0.2397], [-0.1148, -0.2967, 0.3104], [-0.0574, -0.2923, 0.2044], [-0.0, -0.2349, 0.2044], [0.0574, -0.2923, 0.2044], [0.0353, -0.2393, 0.2397], [-0.0, -0.2349, 0.2044], [-0.0574, -0.2923, 0.2044], [-0.0, -0.2791, 0.1602], [0.1413, -0.2437, 0.2265], [0.0574, -0.2923, 0.2044], [0.0927, -0.2526, 0.1956], [-0.1413, -0.2437, 0.2265], [-0.0574, -0.2923, 0.2044], [-0.1148, -0.2967, 0.3104], [0.1413, -0.2437, 0.2265], [0.1766, -0.2879, 0.3236], [0.1148, -0.2967, 0.3104], [-0.1766, -0.2879, 0.3236], [-0.1413, -0.2437, 0.2265], [-0.1148, -0.2967, 0.3104], [0.2473, -0.2658, 0.2707], [0.1855, -0.2349, 0.2309], [0.2429, -0.2217, 0.2088], [-0.2473, -0.2658, 0.2707], [-0.1855, -0.2349, 0.2309], [-0.1766, -0.2879, 0.3236], [0.3886, -0.2261, 0.1956], [0.2429, -0.2217, 0.2088], [0.34, -0.1908, 0.1735], [-0.3886, -0.2261, 0.1956], [-0.2429, -0.2217, 0.2088], [-0.2473, -0.2658, 0.2707], [0.4195, -0.1863, 0.1735], [0.34, -0.1908, 0.1735], [0.3621, -0.1819, 0.1293], [-0.4195, -0.1863, 0.1735], [-0.34, -0.1908, 0.1735], [-0.3886, -0.2261, 0.1956], [0.4107, -0.1554, 0.0763], [0.3621, -0.1819, 0.1293], [0.3533, -0.1819, 0.0675], [-0.4107, -0.1554, 0.0763], [-0.3621, -0.1819, 0.1293], [-0.4195, -0.1863, 0.1735], [0.3489, -0.1687, -0.0076], [0.3533, -0.1819, 0.0675], [0.2782, -0.1952, -0.0032], [-0.3489, -0.1687, -0.0076], [-0.3533, -0.1819, 0.0675], [-0.4107, -0.1554, 0.0763], [0.2252, -0.1952, -0.065], [0.2782, -0.1952, -0.0032], [0.212, -0.2128, -0.0297], [-0.2252, -0.1952, -0.065], [-0.2782, -0.1952, -0.0032], [-0.3489, -0.1687, -0.0076], [0.0707, -0.2747, -0.0959], [0.212, -0.2128, -0.0297], [0.1148, -0.2349, 0.0145], [-0.0707, -0.2747, -0.0959], [-0.212, -0.2128, -0.0297], [-0.2252, -0.1952, -0.065], [0.1148, -0.2349, 0.0145], [-0.0, -0.2261, -0.012], [0.0707, -0.2747, -0.0959], [-0.0, -0.2261, -0.012], [-0.1148, -0.2349, 0.0145], [-0.0707, -0.2747, -0.0959], [0.0574, -0.2923, 0.2044], [0.0707, -0.2482, 0.1337], [0.0927, -0.2526, 0.1956], [-0.0574, -0.2923, 0.2044], [-0.0707, -0.2482, 0.1337], [-0.0, -0.2791, 0.1602], [0.0707, -0.2482, 0.1337], [-0.0, -0.2482, 0.0808], [0.0751, -0.2437, 0.0808], [-0.0, -0.2482, 0.0808], [-0.0707, -0.2482, 0.1337], [-0.0751, -0.2437, 0.0808], [0.0927, -0.2393, 0.041], [-0.0, -0.2482, 0.0808], [-0.0, -0.2261, -0.012], [-0.0927, -0.2393, 0.041], [-0.0, -0.2482, 0.0808], [-0.0751, -0.2437, 0.0808], [0.0353, -0.2084, -0.5375], [-0.0, -0.1775, -0.5728], [0.0927, -0.1731, -0.564], [-0.0, -0.1775, -0.5728], [-0.0353, -0.2084, -0.5375], [-0.0927, -0.1731, -0.564], [0.0662, -0.2172, -0.511], [0.0927, -0.1731, -0.564], [0.1325, -0.1731, -0.5552], [-0.0927, -0.1731, -0.564], [-0.0662, -0.2172, -0.511], [-0.1325, -0.1731, -0.5552], [0.0662, -0.2172, -0.511], [0.1502, -0.1908, -0.5022], [0.0618, -0.2305, -0.4448], [-0.0662, -0.2172, -0.511], [-0.1502, -0.1908, -0.5022], [-0.1325, -0.1731, -0.5552], [0.1192, -0.2172, -0.2902], [0.0662, -0.2305, -0.4271], [0.1413, -0.204, -0.4359], [-0.0662, -0.2305, -0.4271], [-0.1192, -0.2172, -0.2902], [-0.1413, -0.204, -0.4359], [0.0618, -0.2305, -0.4448], [0.1413, -0.204, -0.4359], [0.0662, -0.2305, -0.4271], [-0.1413, -0.204, -0.4359], [-0.0618, -0.2305, -0.4448], [-0.0662, -0.2305, -0.4271], [-0.0, -0.2349, -0.224], [0.0442, -0.2393, -0.2902], [0.0486, -0.2349, -0.2019], [-0.0, -0.2349, -0.224], [-0.0442, -0.2393, -0.2902], [-0.0, -0.2393, -0.2902], [0.0442, -0.2393, -0.2902], [-0.0, -0.2305, -0.4227], [0.0662, -0.2305, -0.4271], [-0.0442, -0.2393, -0.2902], [-0.0, -0.2305, -0.4227], [-0.0, -0.2393, -0.2902], [0.0618, -0.2305, -0.4448], [-0.0, -0.2305, -0.4227], [-0.0, -0.2305, -0.4713], [-0.0618, -0.2305, -0.4448], [-0.0, -0.2305, -0.4227], [-0.0662, -0.2305, -0.4271], [0.0707, -0.2393, -0.1666], [0.053, -0.257, -0.1931], [0.0486, -0.2349, -0.2019], [-0.053, -0.257, -0.1931], [-0.0707, -0.2393, -0.1666], [-0.0486, -0.2349, -0.2019], [0.0574, -0.2349, -0.1224], [0.0751, -0.2658, -0.1666], [0.0707, -0.2393, -0.1666], [-0.0751, -0.2658, -0.1666], [-0.0574, -0.2349, -0.1224], [-0.0707, -0.2393, -0.1666], [0.0221, -0.257, -0.1091], [0.0574, -0.2349, -0.1224], [-0.0, -0.2349, -0.118], [-0.0221, -0.257, -0.1091], [-0.0574, -0.2349, -0.1224], [-0.0618, -0.257, -0.1136], [-0.0, -0.2658, -0.1445], [-0.0, -0.2349, -0.118], [-0.0, -0.2393, -0.1489], [-0.0, -0.2658, -0.1445], [-0.0, -0.2349, -0.118], [-0.0221, -0.257, -0.1091], [0.0486, -0.2349, -0.2019], [-0.0, -0.257, -0.2195], [-0.0, -0.2349, -0.224], [-0.0486, -0.2349, -0.2019], [-0.0, -0.257, -0.2195], [-0.053, -0.257, -0.1931], [0.053, -0.257, -0.1931], [-0.0, -0.2702, -0.2019], [-0.0, -0.257, -0.2195], [-0.053, -0.257, -0.1931], [-0.0, -0.2702, -0.2019], [-0.0442, -0.2702, -0.1798], [-0.0, -0.2658, -0.1445], [0.0265, -0.2747, -0.1224], [0.0221, -0.257, -0.1091], [-0.0265, -0.2747, -0.1224], [-0.0, -0.2658, -0.1445], [-0.0221, -0.257, -0.1091], [0.0221, -0.257, -0.1091], [0.053, -0.2747, -0.1268], [0.0618, -0.257, -0.1136], [-0.053, -0.2747, -0.1268], [-0.0221, -0.257, -0.1091], [-0.0618, -0.257, -0.1136], [0.053, -0.2747, -0.1268], [0.0751, -0.2658, -0.1666], [0.0618, -0.257, -0.1136], [-0.053, -0.2747, -0.1268], [-0.0751, -0.2658, -0.1666], [-0.0618, -0.2835, -0.1666], [0.0751, -0.2658, -0.1666], [0.0442, -0.2702, -0.1798], [0.053, -0.257, -0.1931], [-0.0442, -0.2702, -0.1798], [-0.0751, -0.2658, -0.1666], [-0.053, -0.257, -0.1931], [0.0618, -0.2835, -0.1666], [0.0265, -0.2747, -0.1224], [-0.0, -0.2835, -0.1533], [-0.0618, -0.2835, -0.1666], [-0.0265, -0.2747, -0.1224], [-0.053, -0.2747, -0.1268], [-0.0, -0.2835, -0.1533], [0.0442, -0.2702, -0.1798], [0.0618, -0.2835, -0.1666], [-0.0442, -0.2702, -0.1798], [-0.0, -0.2835, -0.1533], [-0.0618, -0.2835, -0.1666], [-0.0, -0.2349, -0.118], [0.0707, -0.2747, -0.0959], [-0.0, -0.2261, -0.012], [-0.0707, -0.2747, -0.0959], [-0.0, -0.2349, -0.118], [-0.0, -0.2261, -0.012], [0.0574, -0.2349, -0.1224], [0.0927, -0.2172, -0.1754], [0.0707, -0.2747, -0.0959], [-0.0927, -0.2172, -0.1754], [-0.0574, -0.2349, -0.1224], [-0.0707, -0.2747, -0.0959], [0.0486, -0.2349, -0.2019], [0.0927, -0.2172, -0.1754], [0.0707, -0.2393, -0.1666], [-0.0486, -0.2349, -0.2019], [-0.0927, -0.2172, -0.1754], [-0.1016, -0.2172, -0.2151], [0.0442, -0.2393, -0.2902], [0.1016, -0.2172, -0.2151], [0.0486, -0.2349, -0.2019], [-0.0442, -0.2393, -0.2902], [-0.1016, -0.2172, -0.2151], [-0.1192, -0.2172, -0.2902], [0.1457, -0.1289, -0.2151], [0.1192, -0.2172, -0.2902], [0.1766, -0.1378, -0.2858], [-0.1457, -0.1289, -0.2151], [-0.1192, -0.2172, -0.2902], [-0.1016, -0.2172, -0.2151], [0.1325, -0.1289, -0.1798], [0.1016, -0.2172, -0.2151], [0.1457, -0.1289, -0.2151], [-0.1325, -0.1289, -0.1798], [-0.1016, -0.2172, -0.2151], [-0.0927, -0.2172, -0.1754], [0.1148, -0.1333, -0.1445], [0.0927, -0.2172, -0.1754], [0.1325, -0.1289, -0.1798], [-0.0927, -0.2172, -0.1754], [-0.1148, -0.1333, -0.1445], [-0.1325, -0.1289, -0.1798], [-0.0, -0.2305, -0.4713], [0.053, -0.2261, -0.458], [0.0618, -0.2305, -0.4448], [-0.0, -0.2305, -0.4713], [-0.053, -0.2261, -0.458], [-0.0, -0.2217, -0.4757], [0.0662, -0.2172, -0.511], [0.053, -0.2261, -0.458], [0.053, -0.2172, -0.5022], [-0.053, -0.2261, -0.458], [-0.0662, -0.2172, -0.511], [-0.053, -0.2172, -0.5022], [0.0353, -0.2084, -0.5375], [0.053, -0.2172, -0.5022], [0.0265, -0.204, -0.5287], [-0.053, -0.2172, -0.5022], [-0.0353, -0.2084, -0.5375], [-0.0265, -0.204, -0.5287], [-0.0, -0.204, -0.5419], [0.0265, -0.204, -0.5287], [-0.0, -0.204, -0.5331], [-0.0265, -0.204, -0.5287], [-0.0, -0.204, -0.5419], [-0.0, -0.204, -0.5331], [0.0265, -0.204, -0.5287], [-0.0, -0.1731, -0.5243], [-0.0, -0.204, -0.5331], [-0.0265, -0.204, -0.5287], [-0.0, -0.1731, -0.5243], [-0.0265, -0.1731, -0.5198], [0.0265, -0.204, -0.5287], [0.053, -0.1775, -0.4978], [0.0265, -0.1731, -0.5198], [-0.053, -0.1775, -0.4978], [-0.0265, -0.204, -0.5287], [-0.0265, -0.1731, -0.5198], [0.053, -0.2172, -0.5022], [0.053, -0.1908, -0.4624], [0.053, -0.1775, -0.4978], [-0.053, -0.1908, -0.4624], [-0.053, -0.2172, -0.5022], [-0.053, -0.1775, -0.4978], [-0.0, -0.2217, -0.4757], [0.053, -0.1908, -0.4624], [0.053, -0.2261, -0.458], [-0.0, -0.2217, -0.4757], [-0.053, -0.1908, -0.4624], [-0.0, -0.1863, -0.4801], [-0.0, -0.1863, -0.4801], [0.0265, -0.1731, -0.5198], [0.053, -0.1908, -0.4624], [-0.0265, -0.1731, -0.5198], [-0.0, -0.1863, -0.4801], [-0.053, -0.1908, -0.4624], [0.053, -0.1908, -0.4624], [0.0265, -0.1731, -0.5198], [0.053, -0.1775, -0.4978], [-0.053, -0.1775, -0.4978], [-0.0265, -0.1731, -0.5198], [-0.053, -0.1908, -0.4624], [0.0751, -0.2437, 0.0808], [0.106, -0.2526, 0.0498], [0.0972, -0.257, 0.0852], [-0.106, -0.2526, 0.0498], [-0.0751, -0.2437, 0.0808], [-0.0972, -0.257, 0.0852], [0.0707, -0.2482, 0.1337], [0.0972, -0.257, 0.0852], [0.1016, -0.257, 0.1293], [-0.0972, -0.257, 0.0852], [-0.0707, -0.2482, 0.1337], [-0.1016, -0.257, 0.1293], [0.0707, -0.2482, 0.1337], [0.1192, -0.257, 0.1735], [0.0927, -0.2526, 0.1956], [-0.0707, -0.2482, 0.1337], [-0.1192, -0.257, 0.1735], [-0.1016, -0.257, 0.1293], [0.1148, -0.2349, 0.0145], [0.106, -0.2526, 0.0498], [0.0927, -0.2393, 0.041], [-0.1148, -0.2349, 0.0145], [-0.106, -0.2526, 0.0498], [-0.1281, -0.257, 0.0233], [0.1148, -0.2349, 0.0145], [0.212, -0.2349, -0.0032], [0.1281, -0.257, 0.0233], [-0.212, -0.2349, -0.0032], [-0.1148, -0.2349, 0.0145], [-0.1281, -0.257, 0.0233], [0.212, -0.2128, -0.0297], [0.2694, -0.2217, 0.0189], [0.212, -0.2349, -0.0032], [-0.2694, -0.2217, 0.0189], [-0.212, -0.2128, -0.0297], [-0.212, -0.2349, -0.0032], [0.2782, -0.1952, -0.0032], [0.3268, -0.1996, 0.0719], [0.2694, -0.2217, 0.0189], [-0.3268, -0.1996, 0.0719], [-0.2782, -0.1952, -0.0032], [-0.2694, -0.2217, 0.0189], [0.3533, -0.1819, 0.0675], [0.3312, -0.204, 0.1249], [0.3268, -0.1996, 0.0719], [-0.3312, -0.204, 0.1249], [-0.3533, -0.1819, 0.0675], [-0.3268, -0.1996, 0.0719], [0.34, -0.1908, 0.1735], [0.3312, -0.204, 0.1249], [0.3621, -0.1819, 0.1293], [-0.34, -0.1908, 0.1735], [-0.3312, -0.204, 0.1249], [-0.318, -0.2084, 0.1602], [0.2429, -0.2217, 0.2088], [0.318, -0.2084, 0.1602], [0.34, -0.1908, 0.1735], [-0.2429, -0.2217, 0.2088], [-0.318, -0.2084, 0.1602], [-0.2385, -0.2526, 0.1867], [0.2429, -0.2217, 0.2088], [0.1899, -0.2437, 0.2044], [0.2385, -0.2526, 0.1867], [-0.1899, -0.2437, 0.2044], [-0.2429, -0.2217, 0.2088], [-0.2385, -0.2526, 0.1867], [0.1855, -0.2349, 0.2309], [0.1546, -0.2526, 0.2], [0.1899, -0.2437, 0.2044], [-0.1546, -0.2526, 0.2], [-0.1855, -0.2349, 0.2309], [-0.1899, -0.2437, 0.2044], [0.1413, -0.2437, 0.2265], [0.1192, -0.257, 0.1735], [0.1546, -0.2526, 0.2], [-0.1192, -0.257, 0.1735], [-0.1413, -0.2437, 0.2265], [-0.1546, -0.2526, 0.2], [0.1192, -0.257, 0.1735], [0.159, -0.2482, 0.1867], [0.1546, -0.2526, 0.2], [-0.1192, -0.257, 0.1735], [-0.159, -0.2482, 0.1867], [-0.1325, -0.2437, 0.1647], [0.1899, -0.2437, 0.2044], [0.159, -0.2482, 0.1867], [0.1899, -0.2393, 0.1912], [-0.159, -0.2482, 0.1867], [-0.1899, -0.2437, 0.2044], [-0.1899, -0.2393, 0.1912], [0.1899, -0.2437, 0.2044], [0.2341, -0.2393, 0.1823], [0.2385, -0.2526, 0.1867], [-0.1899, -0.2437, 0.2044], [-0.2341, -0.2393, 0.1823], [-0.1899, -0.2393, 0.1912], [0.2385, -0.2526, 0.1867], [0.3003, -0.1996, 0.1514], [0.318, -0.2084, 0.1602], [-0.2385, -0.2526, 0.1867], [-0.3003, -0.1996, 0.1514], [-0.2341, -0.2393, 0.1823], [0.3312, -0.204, 0.1249], [0.3003, -0.1996, 0.1514], [0.3135, -0.1952, 0.1205], [-0.3003, -0.1996, 0.1514], [-0.3312, -0.204, 0.1249], [-0.3136, -0.1952, 0.1205], [0.3312, -0.204, 0.1249], [0.3091, -0.1952, 0.0808], [0.3268, -0.1996, 0.0719], [-0.3312, -0.204, 0.1249], [-0.3091, -0.1952, 0.0808], [-0.3136, -0.1952, 0.1205], [0.2694, -0.2217, 0.0189], [0.3091, -0.1952, 0.0808], [0.2606, -0.2128, 0.0278], [-0.3091, -0.1952, 0.0808], [-0.2694, -0.2217, 0.0189], [-0.2606, -0.2128, 0.0278], [0.2694, -0.2217, 0.0189], [0.212, -0.2261, 0.0101], [0.212, -0.2349, -0.0032], [-0.2694, -0.2217, 0.0189], [-0.212, -0.2261, 0.0101], [-0.2606, -0.2128, 0.0278], [0.212, -0.2349, -0.0032], [0.1369, -0.2437, 0.0322], [0.1281, -0.257, 0.0233], [-0.212, -0.2349, -0.0032], [-0.1369, -0.2437, 0.0322], [-0.212, -0.2261, 0.0101], [0.106, -0.2526, 0.0498], [0.1369, -0.2437, 0.0322], [0.1148, -0.2393, 0.0587], [-0.1369, -0.2437, 0.0322], [-0.106, -0.2526, 0.0498], [-0.1148, -0.2393, 0.0587], [0.1192, -0.257, 0.1735], [0.1104, -0.2437, 0.1293], [0.1325, -0.2437, 0.1647], [-0.1104, -0.2437, 0.1293], [-0.1192, -0.257, 0.1735], [-0.1325, -0.2437, 0.1647], [0.1016, -0.257, 0.1293], [0.1104, -0.2393, 0.0896], [0.1104, -0.2437, 0.1293], [-0.1104, -0.2393, 0.0896], [-0.1016, -0.257, 0.1293], [-0.1104, -0.2437, 0.1293], [0.0972, -0.257, 0.0852], [0.1148, -0.2393, 0.0587], [0.1104, -0.2393, 0.0896], [-0.1148, -0.2393, 0.0587], [-0.0972, -0.257, 0.0852], [-0.1104, -0.2393, 0.0896], [-0.0, -0.2349, 0.2044], [0.0618, -0.1598, 0.2221], [-0.0, -0.1554, 0.1912], [-0.0618, -0.1598, 0.2221], [-0.0, -0.2349, 0.2044], [-0.0, -0.1554, 0.1912], [0.0353, -0.2393, 0.2397], [0.1104, -0.1643, 0.3369], [0.0618, -0.1598, 0.2221], [-0.1104, -0.1643, 0.3369], [-0.0353, -0.2393, 0.2397], [-0.0618, -0.1598, 0.2221], [0.1811, -0.2305, 0.3899], [0.1104, -0.1643, 0.3369], [0.0883, -0.2437, 0.3678], [-0.1811, -0.2305, 0.3899], [-0.1104, -0.1643, 0.3369], [-0.1899, -0.151, 0.3501], [0.2782, -0.204, 0.3016], [0.1899, -0.151, 0.3501], [0.1811, -0.2305, 0.3899], [-0.2782, -0.204, 0.3016], [-0.1899, -0.151, 0.3501], [-0.2738, -0.1289, 0.2751], [0.4019, -0.1687, 0.2353], [0.2738, -0.1289, 0.2751], [0.2782, -0.204, 0.3016], [-0.4019, -0.1687, 0.2353], [-0.2738, -0.1289, 0.2751], [-0.3842, -0.0936, 0.2177], [0.4019, -0.1687, 0.2353], [0.4505, -0.0759, 0.1912], [0.3842, -0.0936, 0.2177], [-0.4505, -0.0759, 0.1912], [-0.4019, -0.1687, 0.2353], [-0.3842, -0.0936, 0.2177], [0.4681, -0.0671, 0.0454], [0.4505, -0.0759, 0.1912], [0.4858, -0.151, 0.2044], [-0.4681, -0.0671, 0.0454], [-0.4505, -0.0759, 0.1912], [-0.4372, -0.0274, 0.0543], [0.4681, -0.0671, 0.0454], [0.34, -0.0494, -0.0385], [0.4372, -0.0274, 0.0543], [-0.34, -0.0494, -0.0385], [-0.4681, -0.0671, 0.0454], [-0.4372, -0.0274, 0.0543], [0.3577, -0.1201, -0.0606], [0.2473, -0.0803, -0.0915], [0.34, -0.0494, -0.0385], [-0.2473, -0.0803, -0.0915], [-0.3577, -0.1201, -0.0606], [-0.34, -0.0494, -0.0385], [-0.0, 0.0256, -0.3123], [0.0707, -0.0185, -0.3432], [-0.0, 0.0036, -0.3609], [-0.0, 0.0256, -0.3123], [-0.0707, -0.0185, -0.3432], [-0.1016, 0.0389, -0.2725], [-0.0, 0.0036, -0.3609], [0.0795, -0.0229, -0.4669], [-0.0, -0.0097, -0.4934], [-0.0, 0.0036, -0.3609], [-0.0795, -0.0229, -0.4669], [-0.0707, -0.0185, -0.3432], [-0.0, -0.0097, -0.4934], [0.0927, -0.0627, -0.5728], [-0.0, -0.0759, -0.5905], [-0.0, -0.0097, -0.4934], [-0.0927, -0.0627, -0.5728], [-0.0795, -0.0229, -0.4669], [0.1016, -0.1289, -0.5861], [-0.0, -0.0759, -0.5905], [0.0927, -0.0627, -0.5728], [-0.0, -0.0759, -0.5905], [-0.1016, -0.1289, -0.5861], [-0.0927, -0.0627, -0.5728], [0.1855, -0.1113, -0.5728], [0.0927, -0.0627, -0.5728], [0.1855, -0.0406, -0.5552], [-0.0927, -0.0627, -0.5728], [-0.1855, -0.1113, -0.5728], [-0.1855, -0.0406, -0.5552], [0.2076, -0.1157, -0.5419], [0.1855, -0.0406, -0.5552], [0.1634, -0.0318, -0.4404], [-0.1855, -0.0406, -0.5552], [-0.2076, -0.1157, -0.5419], [-0.1634, -0.0318, -0.4404], [0.1987, -0.1378, -0.4315], [0.1634, -0.0318, -0.4404], [0.1413, -0.0362, -0.3211], [-0.1634, -0.0318, -0.4404], [-0.1987, -0.1378, -0.4315], [-0.1413, -0.0362, -0.3211], [0.1634, -0.0318, -0.4404], [0.0707, -0.0185, -0.3432], [0.1413, -0.0362, -0.3211], [-0.0707, -0.0185, -0.3432], [-0.1634, -0.0318, -0.4404], [-0.1413, -0.0362, -0.3211], [0.1855, -0.0406, -0.5552], [0.0795, -0.0229, -0.4669], [0.1634, -0.0318, -0.4404], [-0.1855, -0.0406, -0.5552], [-0.0795, -0.0229, -0.4669], [-0.0927, -0.0627, -0.5728], [0.1413, -0.0362, -0.3211], [0.1016, 0.0389, -0.2725], [0.1325, -0.045, -0.2372], [-0.1413, -0.0362, -0.3211], [-0.1016, 0.0389, -0.2725], [-0.0707, -0.0185, -0.3432], [0.1766, -0.1378, -0.2858], [0.1413, -0.0362, -0.3211], [0.1325, -0.045, -0.2372], [-0.1413, -0.0362, -0.3211], [-0.1766, -0.1378, -0.2858], [-0.1325, -0.045, -0.2372], [0.1237, -0.0583, -0.1975], [0.1325, -0.1289, -0.1798], [0.1457, -0.1289, -0.2151], [-0.1237, -0.0583, -0.1975], [-0.1325, -0.1289, -0.1798], [-0.1192, -0.0803, -0.1666], [0.1325, -0.045, -0.2372], [0.1457, -0.1289, -0.2151], [0.1766, -0.1378, -0.2858], [-0.1325, -0.045, -0.2372], [-0.1457, -0.1289, -0.2151], [-0.1237, -0.0583, -0.1975], [0.1325, -0.1289, -0.1798], [0.1148, -0.098, -0.1356], [0.1148, -0.1333, -0.1445], [-0.1325, -0.1289, -0.1798], [-0.1148, -0.098, -0.1356], [-0.1192, -0.0803, -0.1666], [0.1148, -0.098, -0.1356], [0.2473, -0.1157, -0.118], [0.1148, -0.1333, -0.1445], [-0.1148, -0.098, -0.1356], [-0.2473, -0.1157, -0.118], [-0.2473, -0.0803, -0.0915], [0.1899, 0.56, -0.0076], [-0.0, 0.5644, -0.1489], [-0.0, 0.6527, 0.0013], [-0.1899, 0.56, -0.0076], [-0.0, 0.5644, -0.1489], [-0.1943, 0.4893, -0.1224], [0.1943, 0.4893, -0.1224], [-0.0, 0.3834, -0.2549], [-0.0, 0.5644, -0.1489], [-0.1943, 0.4893, -0.1224], [-0.0, 0.3834, -0.2549], [-0.1678, 0.3348, -0.2151], [-0.0, 0.3834, -0.2549], [0.1192, 0.0919, -0.2593], [-0.0, 0.0786, -0.299], [-0.1192, 0.0919, -0.2593], [-0.0, 0.3834, -0.2549], [-0.0, 0.0786, -0.299], [-0.0, 0.0786, -0.299], [0.1016, 0.0389, -0.2725], [-0.0, 0.0256, -0.3123], [-0.1016, 0.0389, -0.2725], [-0.0, 0.0786, -0.299], [-0.0, 0.0256, -0.3123], [0.1016, 0.0389, -0.2725], [0.1237, -0.0583, -0.1975], [0.1325, -0.045, -0.2372], [-0.1016, 0.0389, -0.2725], [-0.1237, -0.0583, -0.1975], [-0.1192, 0.0919, -0.2593], [0.4372, -0.0274, 0.0543], [0.4151, 0.1449, -0.065], [0.4814, 0.1537, 0.094], [-0.4151, 0.1449, -0.065], [-0.4372, -0.0274, 0.0543], [-0.4814, 0.1537, 0.094], [0.2606, 0.5821, 0.2088], [-0.0, 0.6527, 0.0013], [-0.0, 0.666, 0.2795], [-0.2606, 0.5821, 0.2088], [-0.0, 0.6527, 0.0013], [-0.1899, 0.56, -0.0076], [0.2561, 0.0521, 0.4429], [-0.0, 0.2288, 0.518], [-0.0, 0.0212, 0.4694], [-0.2561, 0.0521, 0.4429], [-0.0, 0.2288, 0.518], [-0.2561, 0.2244, 0.487], [-0.0, 0.2288, 0.518], [0.2561, 0.401, 0.4517], [-0.0, 0.4938, 0.4694], [-0.2561, 0.401, 0.4517], [-0.0, 0.2288, 0.518], [-0.0, 0.4938, 0.4694], [-0.0, 0.4938, 0.4694], [0.2606, 0.5821, 0.2088], [-0.0, 0.666, 0.2795], [-0.2606, 0.5821, 0.2088], [-0.0, 0.4938, 0.4694], [-0.0, 0.666, 0.2795], [0.3842, -0.0936, 0.2177], [0.4107, -0.0053, 0.1912], [0.3577, 0.0256, 0.2177], [-0.4107, -0.0053, 0.1912], [-0.3842, -0.0936, 0.2177], [-0.3577, 0.0256, 0.2177], [0.3577, 0.0256, 0.2177], [0.4505, 0.114, 0.2795], [0.3621, 0.1537, 0.359], [-0.4505, 0.114, 0.2795], [-0.3577, 0.0256, 0.2177], [-0.3621, 0.1537, 0.359], [0.3621, 0.1537, 0.359], [0.4505, 0.2509, 0.3104], [0.3621, 0.295, 0.3855], [-0.4505, 0.2509, 0.3104], [-0.3621, 0.1537, 0.359], [-0.3621, 0.295, 0.3855], [0.3621, 0.295, 0.3855], [0.4505, 0.3878, 0.2662], [0.3621, 0.4364, 0.3457], [-0.4505, 0.3878, 0.2662], [-0.3621, 0.295, 0.3855], [-0.3621, 0.4364, 0.3457], [0.3489, 0.5158, 0.147], [0.4505, 0.3878, 0.2662], [0.4372, 0.4319, 0.1117], [-0.3489, 0.5158, 0.147], [-0.4505, 0.3878, 0.2662], [-0.3621, 0.4364, 0.3457], [0.2606, 0.5821, 0.2088], [0.3621, 0.4364, 0.3457], [0.3489, 0.5158, 0.147], [-0.3621, 0.4364, 0.3457], [-0.2606, 0.5821, 0.2088], [-0.3489, 0.5158, 0.147], [0.2561, 0.401, 0.4517], [0.3621, 0.295, 0.3855], [0.3621, 0.4364, 0.3457], [-0.3621, 0.295, 0.3855], [-0.2561, 0.401, 0.4517], [-0.3621, 0.4364, 0.3457], [0.2561, 0.2244, 0.487], [0.3621, 0.1537, 0.359], [0.3621, 0.295, 0.3855], [-0.3621, 0.1537, 0.359], [-0.2561, 0.2244, 0.487], [-0.3621, 0.295, 0.3855], [0.2561, 0.0521, 0.4429], [0.3577, 0.0256, 0.2177], [0.3621, 0.1537, 0.359], [-0.3577, 0.0256, 0.2177], [-0.2561, 0.0521, 0.4429], [-0.3621, 0.1537, 0.359], [0.3842, -0.0936, 0.2177], [0.2606, -0.0583, 0.2574], [0.2738, -0.1289, 0.2751], [-0.3842, -0.0936, 0.2177], [-0.2606, -0.0583, 0.2574], [-0.3577, 0.0256, 0.2177], [0.2606, -0.0583, 0.2574], [-0.0, 0.0212, 0.4694], [-0.0, -0.1378, 0.2839], [-0.2606, -0.0583, 0.2574], [-0.0, 0.0212, 0.4694], [-0.2561, 0.0521, 0.4429], [0.0618, -0.1598, 0.2221], [0.1899, -0.151, 0.3501], [0.2738, -0.1289, 0.2751], [-0.1899, -0.151, 0.3501], [-0.0618, -0.1598, 0.2221], [-0.2738, -0.1289, 0.2751], [0.0618, -0.1598, 0.2221], [0.2606, -0.0583, 0.2574], [-0.0, -0.1378, 0.2839], [-0.2606, -0.0583, 0.2574], [-0.0618, -0.1598, 0.2221], [-0.0, -0.1378, 0.2839], [-0.0, -0.1554, 0.1912], [0.0618, -0.1598, 0.2221], [-0.0, -0.1378, 0.2839], [-0.0, -0.1378, 0.2839], [-0.0618, -0.1598, 0.2221], [-0.0, -0.1554, 0.1912], [0.4372, -0.0274, 0.0543], [0.4107, -0.0053, 0.1912], [0.4505, -0.0759, 0.1912], [-0.4372, -0.0274, 0.0543], [-0.4107, -0.0053, 0.1912], [-0.4814, 0.1537, 0.094], [0.4814, 0.1537, 0.094], [0.4505, 0.114, 0.2795], [0.4107, -0.0053, 0.1912], [-0.4505, 0.114, 0.2795], [-0.4814, 0.1537, 0.094], [-0.4107, -0.0053, 0.1912], [0.4858, 0.2111, 0.1426], [0.4505, 0.2509, 0.3104], [0.4505, 0.114, 0.2795], [-0.4505, 0.2509, 0.3104], [-0.4858, 0.2111, 0.1426], [-0.4505, 0.114, 0.2795], [0.4505, 0.3878, 0.2662], [0.4637, 0.2994, 0.147], [0.4372, 0.4319, 0.1117], [-0.4505, 0.3878, 0.2662], [-0.4637, 0.2994, 0.147], [-0.4505, 0.2509, 0.3104], [0.1678, 0.3348, -0.2151], [0.2296, 0.1007, -0.1356], [0.1192, 0.0919, -0.2593], [-0.1678, 0.3348, -0.2151], [-0.2296, 0.1007, -0.1356], [-0.2429, 0.3039, -0.1489], [0.2296, 0.1007, -0.1356], [0.3356, 0.2774, -0.1091], [0.4151, 0.1449, -0.065], [-0.2296, 0.1007, -0.1356], [-0.3356, 0.2774, -0.1091], [-0.2429, 0.3039, -0.1489], [0.34, -0.0494, -0.0385], [0.2296, 0.1007, -0.1356], [0.4151, 0.1449, -0.065], [-0.2296, 0.1007, -0.1356], [-0.34, -0.0494, -0.0385], [-0.4151, 0.1449, -0.065], [0.2473, -0.0803, -0.0915], [0.1237, -0.0583, -0.1975], [0.2296, 0.1007, -0.1356], [-0.1237, -0.0583, -0.1975], [-0.2473, -0.0803, -0.0915], [-0.2296, 0.1007, -0.1356], [0.1237, -0.0583, -0.1975], [0.1192, 0.0919, -0.2593], [0.2296, 0.1007, -0.1356], [-0.2296, 0.1007, -0.1356], [-0.1192, 0.0919, -0.2593], [-0.1237, -0.0583, -0.1975], [0.2473, -0.0803, -0.0915], [0.1148, -0.098, -0.1356], [0.1192, -0.0803, -0.1666], [-0.1192, -0.0803, -0.1666], [-0.1148, -0.098, -0.1356], [-0.2473, -0.0803, -0.0915], [0.3621, 0.4275, -0.0429], [0.3489, 0.5158, 0.147], [0.4372, 0.4319, 0.1117], [-0.3621, 0.4275, -0.0429], [-0.3489, 0.5158, 0.147], [-0.2738, 0.4938, -0.0252], [0.3489, 0.5158, 0.147], [0.1899, 0.56, -0.0076], [0.2606, 0.5821, 0.2088], [-0.3489, 0.5158, 0.147], [-0.1899, 0.56, -0.0076], [-0.2738, 0.4938, -0.0252], [0.2429, 0.3039, -0.1489], [0.3621, 0.4275, -0.0429], [0.3356, 0.2774, -0.1091], [-0.2429, 0.3039, -0.1489], [-0.3621, 0.4275, -0.0429], [-0.2738, 0.4938, -0.0252], [0.1943, 0.4893, -0.1224], [0.2429, 0.3039, -0.1489], [0.1678, 0.3348, -0.2151], [-0.1943, 0.4893, -0.1224], [-0.2429, 0.3039, -0.1489], [-0.2738, 0.4938, -0.0252], [0.1899, 0.56, -0.0076], [0.2738, 0.4938, -0.0252], [0.1943, 0.4893, -0.1224], [-0.1943, 0.4893, -0.1224], [-0.2738, 0.4938, -0.0252], [-0.1899, 0.56, -0.0076], [0.5034, 0.3171, 0.1912], [0.5741, 0.348, 0.1956], [0.5785, 0.3613, 0.2309], [-0.5034, 0.3171, 0.1912], [-0.5741, 0.348, 0.1956], [-0.5211, 0.3083, 0.1647], [0.5785, 0.3613, 0.2309], [0.6713, 0.4054, 0.2088], [0.6978, 0.4231, 0.2486], [-0.6713, 0.4054, 0.2088], [-0.5785, 0.3613, 0.2309], [-0.6978, 0.4231, 0.2486], [0.6713, 0.4054, 0.2088], [0.764, 0.4231, 0.1426], [0.6978, 0.4231, 0.2486], [-0.6713, 0.4054, 0.2088], [-0.764, 0.4231, 0.1426], [-0.7154, 0.4143, 0.1249], [0.7154, 0.4143, 0.1249], [0.7243, 0.4275, -0.0076], [0.764, 0.4231, 0.1426], [-0.7154, 0.4143, 0.1249], [-0.7243, 0.4275, -0.0076], [-0.6845, 0.4143, 0.0057], [0.6845, 0.4143, 0.0057], [0.5874, 0.3701, -0.0959], [0.7243, 0.4275, -0.0076], [-0.6845, 0.4143, 0.0057], [-0.5874, 0.3701, -0.0959], [-0.5829, 0.3569, -0.0606], [0.5874, 0.3701, -0.0959], [0.4681, 0.2597, -0.0782], [0.4372, 0.2553, -0.118], [-0.4681, 0.2597, -0.0782], [-0.5874, 0.3701, -0.0959], [-0.4372, 0.2553, -0.118], [0.5829, 0.3569, -0.0606], [0.499, 0.3039, -0.0517], [0.4681, 0.2597, -0.0782], [-0.499, 0.3039, -0.0517], [-0.5829, 0.3569, -0.0606], [-0.4681, 0.2597, -0.0782], [0.6845, 0.4143, 0.0057], [0.5874, 0.3922, -0.0385], [0.5829, 0.3569, -0.0606], [-0.5874, 0.3922, -0.0385], [-0.6845, 0.4143, 0.0057], [-0.5829, 0.3569, -0.0606], [0.6978, 0.4364, 0.1028], [0.6845, 0.4143, 0.0057], [0.7154, 0.4143, 0.1249], [-0.6978, 0.4364, 0.1028], [-0.6845, 0.4143, 0.0057], [-0.6713, 0.4364, 0.0145], [0.6624, 0.4319, 0.1647], [0.7154, 0.4143, 0.1249], [0.6713, 0.4054, 0.2088], [-0.6624, 0.4319, 0.1647], [-0.7154, 0.4143, 0.1249], [-0.6978, 0.4364, 0.1028], [0.5785, 0.3878, 0.1558], [0.6713, 0.4054, 0.2088], [0.5741, 0.348, 0.1956], [-0.5785, 0.3878, 0.1558], [-0.6713, 0.4054, 0.2088], [-0.6624, 0.4319, 0.1647], [0.5741, 0.348, 0.1956], [0.5344, 0.348, 0.1337], [0.5785, 0.3878, 0.1558], [-0.5344, 0.348, 0.1337], [-0.5741, 0.348, 0.1956], [-0.5785, 0.3878, 0.1558], [0.3356, 0.2774, -0.1091], [0.4107, 0.2244, -0.0385], [0.4151, 0.1449, -0.065], [-0.3356, 0.2774, -0.1091], [-0.4107, 0.2244, -0.0385], [-0.4063, 0.2818, -0.0517], [0.4372, 0.2553, -0.118], [0.4063, 0.2818, -0.0517], [0.3356, 0.2774, -0.1091], [-0.4372, 0.2553, -0.118], [-0.4063, 0.2818, -0.0517], [-0.4681, 0.2597, -0.0782], [0.4814, 0.1537, 0.094], [0.4107, 0.2244, -0.0385], [0.4858, 0.2111, 0.1426], [-0.4107, 0.2244, -0.0385], [-0.4814, 0.1537, 0.094], [-0.4858, 0.2111, 0.1426], [0.4637, 0.2994, 0.147], [0.5211, 0.3083, 0.1647], [0.5034, 0.3171, 0.1912], [-0.5211, 0.3083, 0.1647], [-0.4637, 0.2994, 0.147], [-0.5034, 0.3171, 0.1912], [0.4681, 0.2597, -0.0782], [0.4593, 0.3392, -0.0473], [0.4063, 0.2818, -0.0517], [-0.4593, 0.3392, -0.0473], [-0.4681, 0.2597, -0.0782], [-0.4063, 0.2818, -0.0517], [0.4063, 0.2906, -0.0164], [0.4593, 0.3392, -0.0473], [0.4769, 0.3392, -0.0297], [-0.4063, 0.2906, -0.0164], [-0.4593, 0.3392, -0.0473], [-0.4063, 0.2818, -0.0517], [0.4284, 0.3392, 0.0145], [0.4769, 0.3392, -0.0297], [0.4637, 0.3392, 0.0101], [-0.477, 0.3392, -0.0297], [-0.4284, 0.3392, 0.0145], [-0.4637, 0.3392, 0.0101], [0.4505, 0.3039, 0.0763], [0.4284, 0.3392, 0.0145], [0.4725, 0.3392, 0.0587], [-0.4505, 0.3039, 0.0763], [-0.4284, 0.3392, 0.0145], [-0.4063, 0.2906, -0.0164], [0.4505, 0.3039, 0.0763], [0.5034, 0.3348, 0.0984], [0.4769, 0.3039, 0.1249], [-0.4505, 0.3039, 0.0763], [-0.5034, 0.3348, 0.0984], [-0.4725, 0.3392, 0.0587], [0.4769, 0.3039, 0.1249], [0.5344, 0.348, 0.1337], [0.5211, 0.3083, 0.1647], [-0.477, 0.3039, 0.1249], [-0.5344, 0.348, 0.1337], [-0.5034, 0.3348, 0.0984], [0.4858, 0.2111, 0.1426], [0.4769, 0.3039, 0.1249], [0.4637, 0.2994, 0.147], [-0.477, 0.3039, 0.1249], [-0.4858, 0.2111, 0.1426], [-0.4637, 0.2994, 0.147], [0.4107, 0.2244, -0.0385], [0.4505, 0.3039, 0.0763], [0.4858, 0.2111, 0.1426], [-0.4107, 0.2244, -0.0385], [-0.4505, 0.3039, 0.0763], [-0.4063, 0.2906, -0.0164], [0.4107, 0.2244, -0.0385], [0.4063, 0.2818, -0.0517], [0.4063, 0.2906, -0.0164], [-0.4063, 0.2906, -0.0164], [-0.4063, 0.2818, -0.0517], [-0.4107, 0.2244, -0.0385], [0.5344, 0.348, 0.1337], [0.5034, 0.3657, 0.094], [0.5388, 0.3789, 0.1249], [-0.5034, 0.3657, 0.094], [-0.5344, 0.348, 0.1337], [-0.5388, 0.3789, 0.1249], [0.4725, 0.3392, 0.0587], [0.5034, 0.3657, 0.094], [0.5034, 0.3348, 0.0984], [-0.4725, 0.3392, 0.0587], [-0.5034, 0.3657, 0.094], [-0.477, 0.3657, 0.0587], [0.4725, 0.3392, 0.0587], [0.4328, 0.3657, 0.0145], [0.4769, 0.3657, 0.0587], [-0.4328, 0.3657, 0.0145], [-0.4725, 0.3392, 0.0587], [-0.477, 0.3657, 0.0587], [0.4637, 0.3392, 0.0101], [0.4328, 0.3657, 0.0145], [0.4284, 0.3392, 0.0145], [-0.4637, 0.3392, 0.0101], [-0.4328, 0.3657, 0.0145], [-0.4681, 0.3657, 0.0057], [0.4769, 0.3392, -0.0297], [0.4681, 0.3657, 0.0057], [0.4637, 0.3392, 0.0101], [-0.477, 0.3392, -0.0297], [-0.4681, 0.3657, 0.0057], [-0.4814, 0.3657, -0.0297], [0.4769, 0.3392, -0.0297], [0.4593, 0.3657, -0.0473], [0.4814, 0.3657, -0.0297], [-0.4593, 0.3657, -0.0473], [-0.477, 0.3392, -0.0297], [-0.4814, 0.3657, -0.0297], [0.4593, 0.3392, -0.0473], [0.499, 0.3348, -0.0473], [0.4593, 0.3657, -0.0473], [-0.499, 0.3348, -0.0473], [-0.4593, 0.3392, -0.0473], [-0.4593, 0.3657, -0.0473], [0.5785, 0.3878, 0.1558], [0.5388, 0.3789, 0.1249], [0.5874, 0.4187, 0.147], [-0.5388, 0.3789, 0.1249], [-0.5785, 0.3878, 0.1558], [-0.5874, 0.4187, 0.147], [0.6624, 0.4319, 0.1647], [0.5874, 0.4187, 0.147], [0.6713, 0.4584, 0.1558], [-0.5874, 0.4187, 0.147], [-0.6624, 0.4319, 0.1647], [-0.6713, 0.4584, 0.1558], [0.6978, 0.4364, 0.1028], [0.6713, 0.4584, 0.1558], [0.711, 0.4628, 0.0984], [-0.6713, 0.4584, 0.1558], [-0.6978, 0.4364, 0.1028], [-0.711, 0.4628, 0.0984], [0.6978, 0.4364, 0.1028], [0.6845, 0.4584, 0.0101], [0.6713, 0.4364, 0.0145], [-0.6978, 0.4364, 0.1028], [-0.6845, 0.4584, 0.0101], [-0.711, 0.4628, 0.0984], [0.6713, 0.4364, 0.0145], [0.5918, 0.4231, -0.0385], [0.5874, 0.3922, -0.0385], [-0.6713, 0.4364, 0.0145], [-0.5918, 0.4231, -0.0385], [-0.6845, 0.4584, 0.0101], [0.5874, 0.3922, -0.0385], [0.499, 0.3348, -0.0473], [0.499, 0.3039, -0.0517], [-0.5874, 0.3922, -0.0385], [-0.499, 0.3348, -0.0473], [-0.5918, 0.4231, -0.0385], [0.4814, 0.3657, -0.0297], [0.5034, 0.3701, 0.0233], [0.4681, 0.3657, 0.0057], [-0.4814, 0.3657, -0.0297], [-0.5034, 0.3701, 0.0233], [-0.5299, 0.3745, -0.0032], [0.5299, 0.3745, -0.0032], [0.5432, 0.3834, 0.0587], [0.5034, 0.3701, 0.0233], [-0.5299, 0.3745, -0.0032], [-0.5432, 0.3834, 0.0587], [-0.5653, 0.3922, 0.0322], [0.5432, 0.3834, 0.0587], [0.5962, 0.401, 0.0675], [0.5741, 0.3966, 0.094], [-0.5962, 0.401, 0.0675], [-0.5432, 0.3834, 0.0587], [-0.5741, 0.3966, 0.094], [0.5962, 0.401, 0.0675], [0.6139, 0.4054, 0.1161], [0.5741, 0.3966, 0.094], [-0.5962, 0.401, 0.0675], [-0.6139, 0.4054, 0.1161], [-0.6271, 0.4054, 0.0808], [0.5874, 0.4187, 0.147], [0.5741, 0.3966, 0.094], [0.6139, 0.4054, 0.1161], [-0.5741, 0.3966, 0.094], [-0.5874, 0.4187, 0.147], [-0.6139, 0.4054, 0.1161], [0.5432, 0.3834, 0.0587], [0.5388, 0.3789, 0.1249], [0.5034, 0.3657, 0.094], [-0.5432, 0.3834, 0.0587], [-0.5388, 0.3789, 0.1249], [-0.5741, 0.3966, 0.094], [0.4769, 0.3657, 0.0587], [0.5432, 0.3834, 0.0587], [0.5034, 0.3657, 0.094], [-0.477, 0.3657, 0.0587], [-0.5432, 0.3834, 0.0587], [-0.5034, 0.3701, 0.0233], [0.4681, 0.3657, 0.0057], [0.4769, 0.3657, 0.0587], [0.4328, 0.3657, 0.0145], [-0.477, 0.3657, 0.0587], [-0.4681, 0.3657, 0.0057], [-0.4328, 0.3657, 0.0145], [0.499, 0.3348, -0.0473], [0.4814, 0.3657, -0.0297], [0.4593, 0.3657, -0.0473], [-0.499, 0.3348, -0.0473], [-0.4814, 0.3657, -0.0297], [-0.5299, 0.3745, -0.0032], [0.5918, 0.4231, -0.0385], [0.5299, 0.3745, -0.0032], [0.499, 0.3348, -0.0473], [-0.5299, 0.3745, -0.0032], [-0.5918, 0.4231, -0.0385], [-0.499, 0.3348, -0.0473], [0.5962, 0.401, 0.0675], [0.5918, 0.4231, -0.0385], [0.6845, 0.4584, 0.0101], [-0.5962, 0.401, 0.0675], [-0.5918, 0.4231, -0.0385], [-0.5653, 0.3922, 0.0322], [0.6271, 0.4054, 0.0808], [0.6845, 0.4584, 0.0101], [0.711, 0.4628, 0.0984], [-0.6271, 0.4054, 0.0808], [-0.6845, 0.4584, 0.0101], [-0.5962, 0.401, 0.0675], [0.6713, 0.4584, 0.1558], [0.6271, 0.4054, 0.0808], [0.711, 0.4628, 0.0984], [-0.6271, 0.4054, 0.0808], [-0.6713, 0.4584, 0.1558], [-0.711, 0.4628, 0.0984], [0.5874, 0.4187, 0.147], [0.6139, 0.4054, 0.1161], [0.6713, 0.4584, 0.1558], [-0.6713, 0.4584, 0.1558], [-0.6139, 0.4054, 0.1161], [-0.5874, 0.4187, 0.147], [0.5874, 0.3701, -0.0959], [0.446, 0.3701, -0.1091], [0.5874, 0.4628, -0.0871], [-0.446, 0.3701, -0.1091], [-0.5874, 0.3701, -0.0959], [-0.5874, 0.4628, -0.0871], [0.7243, 0.4275, -0.0076], [0.5874, 0.4628, -0.0871], [0.7419, 0.4849, -0.0076], [-0.5874, 0.4628, -0.0871], [-0.7243, 0.4275, -0.0076], [-0.7419, 0.4849, -0.0076], [0.7243, 0.4275, -0.0076], [0.7728, 0.4673, 0.1293], [0.764, 0.4231, 0.1426], [-0.7243, 0.4275, -0.0076], [-0.7728, 0.4673, 0.1293], [-0.7419, 0.4849, -0.0076], [0.764, 0.4231, 0.1426], [0.7066, 0.4938, 0.2265], [0.6978, 0.4231, 0.2486], [-0.764, 0.4231, 0.1426], [-0.7066, 0.4938, 0.2265], [-0.7728, 0.4673, 0.1293], [0.6978, 0.4231, 0.2486], [0.5785, 0.4584, 0.2088], [0.5785, 0.3613, 0.2309], [-0.6978, 0.4231, 0.2486], [-0.5785, 0.4584, 0.2088], [-0.7066, 0.4938, 0.2265], [0.5785, 0.3613, 0.2309], [0.4858, 0.401, 0.1779], [0.5034, 0.3171, 0.1912], [-0.5785, 0.3613, 0.2309], [-0.4858, 0.401, 0.1779], [-0.5785, 0.4584, 0.2088], [0.5874, 0.4628, -0.0871], [0.4858, 0.401, 0.1779], [0.5785, 0.4584, 0.2088], [-0.5874, 0.4628, -0.0871], [-0.4858, 0.401, 0.1779], [-0.446, 0.3701, -0.1091], [0.5785, 0.4584, 0.2088], [0.7419, 0.4849, -0.0076], [0.5874, 0.4628, -0.0871], [-0.7419, 0.4849, -0.0076], [-0.5785, 0.4584, 0.2088], [-0.5874, 0.4628, -0.0871], [0.7066, 0.4938, 0.2265], [0.7728, 0.4673, 0.1293], [0.7419, 0.4849, -0.0076], [-0.7419, 0.4849, -0.0076], [-0.7728, 0.4673, 0.1293], [-0.7066, 0.4938, 0.2265], [0.4637, 0.2994, 0.147], [0.4858, 0.401, 0.1779], [0.4372, 0.4319, 0.1117], [-0.4637, 0.2994, 0.147], [-0.4858, 0.401, 0.1779], [-0.5034, 0.3171, 0.1912], [0.4372, 0.4319, 0.1117], [0.446, 0.3701, -0.1091], [0.3621, 0.4275, -0.0429], [-0.446, 0.3701, -0.1091], [-0.4372, 0.4319, 0.1117], [-0.3621, 0.4275, -0.0429], [0.3356, 0.2774, -0.1091], [0.446, 0.3701, -0.1091], [0.4372, 0.2553, -0.118], [-0.446, 0.3701, -0.1091], [-0.3356, 0.2774, -0.1091], [-0.4372, 0.2553, -0.118], [0.265, -0.2437, 0.0984], [0.2473, -0.2482, 0.0543], [0.2826, -0.204, 0.0145], [-0.2826, -0.204, 0.0145], [-0.2473, -0.2482, 0.0543], [-0.265, -0.2437, 0.0984], [0.318, -0.1952, 0.0984], [0.2826, -0.204, 0.0145], [0.3091, -0.1422, -0.0076], [-0.3091, -0.1422, -0.0076], [-0.2826, -0.204, 0.0145], [-0.318, -0.1952, 0.0984], [0.2826, -0.204, 0.0145], [0.1987, -0.2217, -0.0208], [0.1987, -0.1643, -0.0517], [-0.1987, -0.1643, -0.0517], [-0.1987, -0.2217, -0.0208], [-0.2826, -0.204, 0.0145], [0.2473, -0.2482, 0.0543], [0.1987, -0.257, 0.0366], [0.1987, -0.2217, -0.0208], [-0.1987, -0.2217, -0.0208], [-0.1987, -0.257, 0.0366], [-0.2473, -0.2482, 0.0543], [0.1987, -0.257, 0.0366], [0.1546, -0.2658, 0.0543], [0.1148, -0.2349, 0.0145], [-0.1148, -0.2349, 0.0145], [-0.1546, -0.2658, 0.0543], [-0.1987, -0.257, 0.0366], [0.1987, -0.2217, -0.0208], [0.1148, -0.2349, 0.0145], [0.0883, -0.1819, -0.0076], [-0.0883, -0.1819, -0.0076], [-0.1148, -0.2349, 0.0145], [-0.1987, -0.2217, -0.0208], [0.0795, -0.2349, 0.0984], [0.0442, -0.1863, 0.0984], [0.0883, -0.1819, -0.0076], [-0.0795, -0.2349, 0.0984], [-0.1148, -0.2349, 0.0145], [-0.0883, -0.1819, -0.0076], [0.1546, -0.2658, 0.0543], [0.1369, -0.2658, 0.0984], [0.0795, -0.2349, 0.0984], [-0.0795, -0.2349, 0.0984], [-0.1369, -0.2658, 0.0984], [-0.1546, -0.2658, 0.0543], [0.1369, -0.2658, 0.0984], [0.1546, -0.2658, 0.147], [0.1148, -0.2349, 0.1823], [-0.1148, -0.2349, 0.1823], [-0.1546, -0.2658, 0.147], [-0.1369, -0.2658, 0.0984], [0.1148, -0.2349, 0.1823], [0.0883, -0.1819, 0.2088], [0.0442, -0.1863, 0.0984], [-0.1148, -0.2349, 0.1823], [-0.0795, -0.2349, 0.0984], [-0.0442, -0.1863, 0.0984], [0.1987, -0.2217, 0.2177], [0.1987, -0.1643, 0.253], [0.0883, -0.1819, 0.2088], [-0.1987, -0.2217, 0.2177], [-0.1148, -0.2349, 0.1823], [-0.0883, -0.1819, 0.2088], [0.1987, -0.257, 0.1647], [0.1987, -0.2217, 0.2177], [0.1148, -0.2349, 0.1823], [-0.1987, -0.257, 0.1647], [-0.1546, -0.2658, 0.147], [-0.1148, -0.2349, 0.1823], [0.2473, -0.2482, 0.147], [0.2826, -0.204, 0.1823], [0.1987, -0.2217, 0.2177], [-0.2473, -0.2482, 0.147], [-0.1987, -0.257, 0.1647], [-0.1987, -0.2217, 0.2177], [0.2826, -0.204, 0.1823], [0.3091, -0.1422, 0.2088], [0.1987, -0.1643, 0.253], [-0.2826, -0.204, 0.1823], [-0.1987, -0.2217, 0.2177], [-0.1987, -0.1643, 0.253], [0.318, -0.1952, 0.0984], [0.3533, -0.1333, 0.0984], [0.3091, -0.1422, 0.2088], [-0.318, -0.1952, 0.0984], [-0.2826, -0.204, 0.1823], [-0.3091, -0.1422, 0.2088], [0.265, -0.2437, 0.0984], [0.318, -0.1952, 0.0984], [0.2826, -0.204, 0.1823], [-0.265, -0.2437, 0.0984], [-0.2473, -0.2482, 0.147], [-0.2826, -0.204, 0.1823], [0.2473, -0.2482, 0.147], [0.2517, -0.257, 0.1514], [0.2694, -0.2526, 0.0984], [-0.2473, -0.2482, 0.147], [-0.265, -0.2437, 0.0984], [-0.2694, -0.2526, 0.0984], [0.1987, -0.257, 0.1647], [0.1987, -0.2702, 0.1735], [0.2517, -0.257, 0.1514], [-0.1987, -0.257, 0.1647], [-0.2473, -0.2482, 0.147], [-0.2517, -0.257, 0.1514], [0.1546, -0.2658, 0.147], [0.1502, -0.2791, 0.1514], [0.1987, -0.2702, 0.1735], [-0.1546, -0.2658, 0.147], [-0.1987, -0.257, 0.1647], [-0.1987, -0.2702, 0.1735], [0.1369, -0.2658, 0.0984], [0.1281, -0.2791, 0.0984], [0.1502, -0.2791, 0.1514], [-0.1369, -0.2658, 0.0984], [-0.1546, -0.2658, 0.147], [-0.1502, -0.2791, 0.1514], [0.1369, -0.2658, 0.0984], [0.1546, -0.2658, 0.0543], [0.1502, -0.2791, 0.0498], [-0.1502, -0.2791, 0.0498], [-0.1546, -0.2658, 0.0543], [-0.1369, -0.2658, 0.0984], [0.1546, -0.2658, 0.0543], [0.1987, -0.257, 0.0366], [0.1987, -0.2702, 0.0278], [-0.1987, -0.2702, 0.0278], [-0.1987, -0.257, 0.0366], [-0.1546, -0.2658, 0.0543], [0.1987, -0.257, 0.0366], [0.2473, -0.2482, 0.0543], [0.2517, -0.257, 0.0498], [-0.2517, -0.257, 0.0498], [-0.2473, -0.2482, 0.0543], [-0.1987, -0.257, 0.0366], [0.2473, -0.2482, 0.0543], [0.265, -0.2437, 0.0984], [0.2694, -0.2526, 0.0984], [-0.2694, -0.2526, 0.0984], [-0.265, -0.2437, 0.0984], [-0.2473, -0.2482, 0.0543], [0.0927, -0.1731, -0.564], [-0.0, -0.1775, -0.5728], [-0.0, -0.1422, -0.5949], [-0.0927, -0.1731, -0.564], [-0.1016, -0.1289, -0.5861], [-0.0, -0.1422, -0.5949], [0.1325, -0.1731, -0.5552], [0.0927, -0.1731, -0.564], [0.1016, -0.1289, -0.5861], [-0.1325, -0.1731, -0.5552], [-0.1855, -0.1113, -0.5728], [-0.1016, -0.1289, -0.5861], [0.2076, -0.1157, -0.5419], [0.1502, -0.1908, -0.5022], [0.1325, -0.1731, -0.5552], [-0.1325, -0.1731, -0.5552], [-0.1502, -0.1908, -0.5022], [-0.2076, -0.1157, -0.5419], [0.1987, -0.1378, -0.4315], [0.1413, -0.204, -0.4359], [0.1502, -0.1908, -0.5022], [-0.1502, -0.1908, -0.5022], [-0.1413, -0.204, -0.4359], [-0.1987, -0.1378, -0.4315], [0.1766, -0.1378, -0.2858], [0.1192, -0.2172, -0.2902], [0.1413, -0.204, -0.4359], [-0.1413, -0.204, -0.4359], [-0.1192, -0.2172, -0.2902], [-0.1766, -0.1378, -0.2858], [0.1148, -0.1333, -0.1445], [0.2473, -0.1157, -0.118], [0.2252, -0.1952, -0.065], [-0.2252, -0.1952, -0.065], [-0.2473, -0.1157, -0.118], [-0.1148, -0.1333, -0.1445], [0.3577, -0.1201, -0.0606], [0.3489, -0.1687, -0.0076], [0.2252, -0.1952, -0.065], [-0.3577, -0.1201, -0.0606], [-0.2473, -0.1157, -0.118], [-0.2252, -0.1952, -0.065], [0.3577, -0.1201, -0.0606], [0.4681, -0.0671, 0.0454], [0.4107, -0.1554, 0.0763], [-0.4107, -0.1554, 0.0763], [-0.4681, -0.0671, 0.0454], [-0.3577, -0.1201, -0.0606], [0.4858, -0.151, 0.2044], [0.4195, -0.1863, 0.1735], [0.4107, -0.1554, 0.0763], [-0.4858, -0.151, 0.2044], [-0.4681, -0.0671, 0.0454], [-0.4107, -0.1554, 0.0763], [0.4019, -0.1687, 0.2353], [0.3886, -0.2261, 0.1956], [0.4195, -0.1863, 0.1735], [-0.4019, -0.1687, 0.2353], [-0.4858, -0.151, 0.2044], [-0.4195, -0.1863, 0.1735], [0.2782, -0.204, 0.3016], [0.2473, -0.2658, 0.2707], [0.3886, -0.2261, 0.1956], [-0.2782, -0.204, 0.3016], [-0.4019, -0.1687, 0.2353], [-0.3886, -0.2261, 0.1956], [0.2782, -0.204, 0.3016], [0.1811, -0.2305, 0.3899], [0.1766, -0.2879, 0.3236], [-0.1766, -0.2879, 0.3236], [-0.1811, -0.2305, 0.3899], [-0.2782, -0.204, 0.3016], [0.0883, -0.2437, 0.3678], [0.1148, -0.2967, 0.3104], [0.1766, -0.2879, 0.3236], [-0.0883, -0.2437, 0.3678], [-0.1811, -0.2305, 0.3899], [-0.1766, -0.2879, 0.3236], [0.0353, -0.2393, 0.2397], [0.0574, -0.2923, 0.2044], [0.1148, -0.2967, 0.3104], [-0.0353, -0.2393, 0.2397], [-0.0883, -0.2437, 0.3678], [-0.1148, -0.2967, 0.3104], [-0.0, -0.2349, 0.2044], [-0.0, -0.2791, 0.1602], [0.0574, -0.2923, 0.2044], [-0.0, -0.2349, 0.2044], [-0.0353, -0.2393, 0.2397], [-0.0574, -0.2923, 0.2044], [0.1413, -0.2437, 0.2265], [0.1148, -0.2967, 0.3104], [0.0574, -0.2923, 0.2044], [-0.1413, -0.2437, 0.2265], [-0.0927, -0.2526, 0.1956], [-0.0574, -0.2923, 0.2044], [0.1413, -0.2437, 0.2265], [0.1855, -0.2349, 0.2309], [0.1766, -0.2879, 0.3236], [-0.1766, -0.2879, 0.3236], [-0.1855, -0.2349, 0.2309], [-0.1413, -0.2437, 0.2265], [0.2473, -0.2658, 0.2707], [0.1766, -0.2879, 0.3236], [0.1855, -0.2349, 0.2309], [-0.2473, -0.2658, 0.2707], [-0.2429, -0.2217, 0.2088], [-0.1855, -0.2349, 0.2309], [0.3886, -0.2261, 0.1956], [0.2473, -0.2658, 0.2707], [0.2429, -0.2217, 0.2088], [-0.3886, -0.2261, 0.1956], [-0.34, -0.1908, 0.1735], [-0.2429, -0.2217, 0.2088], [0.4195, -0.1863, 0.1735], [0.3886, -0.2261, 0.1956], [0.34, -0.1908, 0.1735], [-0.4195, -0.1863, 0.1735], [-0.3621, -0.1819, 0.1293], [-0.34, -0.1908, 0.1735], [0.4107, -0.1554, 0.0763], [0.4195, -0.1863, 0.1735], [0.3621, -0.1819, 0.1293], [-0.4107, -0.1554, 0.0763], [-0.3533, -0.1819, 0.0675], [-0.3621, -0.1819, 0.1293], [0.3489, -0.1687, -0.0076], [0.4107, -0.1554, 0.0763], [0.3533, -0.1819, 0.0675], [-0.3489, -0.1687, -0.0076], [-0.2782, -0.1952, -0.0032], [-0.3533, -0.1819, 0.0675], [0.2252, -0.1952, -0.065], [0.3489, -0.1687, -0.0076], [0.2782, -0.1952, -0.0032], [-0.2252, -0.1952, -0.065], [-0.212, -0.2128, -0.0297], [-0.2782, -0.1952, -0.0032], [0.0707, -0.2747, -0.0959], [0.2252, -0.1952, -0.065], [0.212, -0.2128, -0.0297], [-0.0707, -0.2747, -0.0959], [-0.1148, -0.2349, 0.0145], [-0.212, -0.2128, -0.0297], [0.1148, -0.2349, 0.0145], [0.0927, -0.2393, 0.041], [-0.0, -0.2261, -0.012], [-0.0, -0.2261, -0.012], [-0.0927, -0.2393, 0.041], [-0.1148, -0.2349, 0.0145], [0.0574, -0.2923, 0.2044], [-0.0, -0.2791, 0.1602], [0.0707, -0.2482, 0.1337], [-0.0574, -0.2923, 0.2044], [-0.0927, -0.2526, 0.1956], [-0.0707, -0.2482, 0.1337], [0.0707, -0.2482, 0.1337], [-0.0, -0.2791, 0.1602], [-0.0, -0.2482, 0.0808], [-0.0, -0.2482, 0.0808], [-0.0, -0.2791, 0.1602], [-0.0707, -0.2482, 0.1337], [0.0927, -0.2393, 0.041], [0.0751, -0.2437, 0.0808], [-0.0, -0.2482, 0.0808], [-0.0927, -0.2393, 0.041], [-0.0, -0.2261, -0.012], [-0.0, -0.2482, 0.0808], [0.0353, -0.2084, -0.5375], [-0.0, -0.204, -0.5419], [-0.0, -0.1775, -0.5728], [-0.0, -0.1775, -0.5728], [-0.0, -0.204, -0.5419], [-0.0353, -0.2084, -0.5375], [0.0662, -0.2172, -0.511], [0.0353, -0.2084, -0.5375], [0.0927, -0.1731, -0.564], [-0.0927, -0.1731, -0.564], [-0.0353, -0.2084, -0.5375], [-0.0662, -0.2172, -0.511], [0.0662, -0.2172, -0.511], [0.1325, -0.1731, -0.5552], [0.1502, -0.1908, -0.5022], [-0.0662, -0.2172, -0.511], [-0.0618, -0.2305, -0.4448], [-0.1502, -0.1908, -0.5022], [0.1192, -0.2172, -0.2902], [0.0442, -0.2393, -0.2902], [0.0662, -0.2305, -0.4271], [-0.0662, -0.2305, -0.4271], [-0.0442, -0.2393, -0.2902], [-0.1192, -0.2172, -0.2902], [0.0618, -0.2305, -0.4448], [0.1502, -0.1908, -0.5022], [0.1413, -0.204, -0.4359], [-0.1413, -0.204, -0.4359], [-0.1502, -0.1908, -0.5022], [-0.0618, -0.2305, -0.4448], [-0.0, -0.2349, -0.224], [-0.0, -0.2393, -0.2902], [0.0442, -0.2393, -0.2902], [-0.0, -0.2349, -0.224], [-0.0486, -0.2349, -0.2019], [-0.0442, -0.2393, -0.2902], [0.0442, -0.2393, -0.2902], [-0.0, -0.2393, -0.2902], [-0.0, -0.2305, -0.4227], [-0.0442, -0.2393, -0.2902], [-0.0662, -0.2305, -0.4271], [-0.0, -0.2305, -0.4227], [0.0618, -0.2305, -0.4448], [0.0662, -0.2305, -0.4271], [-0.0, -0.2305, -0.4227], [-0.0618, -0.2305, -0.4448], [-0.0, -0.2305, -0.4713], [-0.0, -0.2305, -0.4227], [0.0707, -0.2393, -0.1666], [0.0751, -0.2658, -0.1666], [0.053, -0.257, -0.1931], [-0.053, -0.257, -0.1931], [-0.0751, -0.2658, -0.1666], [-0.0707, -0.2393, -0.1666], [0.0574, -0.2349, -0.1224], [0.0618, -0.257, -0.1136], [0.0751, -0.2658, -0.1666], [-0.0751, -0.2658, -0.1666], [-0.0618, -0.257, -0.1136], [-0.0574, -0.2349, -0.1224], [0.0221, -0.257, -0.1091], [0.0618, -0.257, -0.1136], [0.0574, -0.2349, -0.1224], [-0.0221, -0.257, -0.1091], [-0.0, -0.2349, -0.118], [-0.0574, -0.2349, -0.1224], [-0.0, -0.2658, -0.1445], [0.0221, -0.257, -0.1091], [-0.0, -0.2349, -0.118], [-0.0, -0.2658, -0.1445], [-0.0, -0.2393, -0.1489], [-0.0, -0.2349, -0.118], [0.0486, -0.2349, -0.2019], [0.053, -0.257, -0.1931], [-0.0, -0.257, -0.2195], [-0.0486, -0.2349, -0.2019], [-0.0, -0.2349, -0.224], [-0.0, -0.257, -0.2195], [0.053, -0.257, -0.1931], [0.0442, -0.2702, -0.1798], [-0.0, -0.2702, -0.2019], [-0.053, -0.257, -0.1931], [-0.0, -0.257, -0.2195], [-0.0, -0.2702, -0.2019], [-0.0, -0.2658, -0.1445], [-0.0, -0.2835, -0.1533], [0.0265, -0.2747, -0.1224], [-0.0265, -0.2747, -0.1224], [-0.0, -0.2835, -0.1533], [-0.0, -0.2658, -0.1445], [0.0221, -0.257, -0.1091], [0.0265, -0.2747, -0.1224], [0.053, -0.2747, -0.1268], [-0.053, -0.2747, -0.1268], [-0.0265, -0.2747, -0.1224], [-0.0221, -0.257, -0.1091], [0.053, -0.2747, -0.1268], [0.0618, -0.2835, -0.1666], [0.0751, -0.2658, -0.1666], [-0.053, -0.2747, -0.1268], [-0.0618, -0.257, -0.1136], [-0.0751, -0.2658, -0.1666], [0.0751, -0.2658, -0.1666], [0.0618, -0.2835, -0.1666], [0.0442, -0.2702, -0.1798], [-0.0442, -0.2702, -0.1798], [-0.0618, -0.2835, -0.1666], [-0.0751, -0.2658, -0.1666], [0.0618, -0.2835, -0.1666], [0.053, -0.2747, -0.1268], [0.0265, -0.2747, -0.1224], [-0.0618, -0.2835, -0.1666], [-0.0, -0.2835, -0.1533], [-0.0265, -0.2747, -0.1224], [-0.0, -0.2835, -0.1533], [-0.0, -0.2702, -0.2019], [0.0442, -0.2702, -0.1798], [-0.0442, -0.2702, -0.1798], [-0.0, -0.2702, -0.2019], [-0.0, -0.2835, -0.1533], [-0.0, -0.2349, -0.118], [0.0574, -0.2349, -0.1224], [0.0707, -0.2747, -0.0959], [-0.0707, -0.2747, -0.0959], [-0.0574, -0.2349, -0.1224], [-0.0, -0.2349, -0.118], [0.0574, -0.2349, -0.1224], [0.0707, -0.2393, -0.1666], [0.0927, -0.2172, -0.1754], [-0.0927, -0.2172, -0.1754], [-0.0707, -0.2393, -0.1666], [-0.0574, -0.2349, -0.1224], [0.0486, -0.2349, -0.2019], [0.1016, -0.2172, -0.2151], [0.0927, -0.2172, -0.1754], [-0.0486, -0.2349, -0.2019], [-0.0707, -0.2393, -0.1666], [-0.0927, -0.2172, -0.1754], [0.0442, -0.2393, -0.2902], [0.1192, -0.2172, -0.2902], [0.1016, -0.2172, -0.2151], [-0.0442, -0.2393, -0.2902], [-0.0486, -0.2349, -0.2019], [-0.1016, -0.2172, -0.2151], [0.1457, -0.1289, -0.2151], [0.1016, -0.2172, -0.2151], [0.1192, -0.2172, -0.2902], [-0.1457, -0.1289, -0.2151], [-0.1766, -0.1378, -0.2858], [-0.1192, -0.2172, -0.2902], [0.1325, -0.1289, -0.1798], [0.0927, -0.2172, -0.1754], [0.1016, -0.2172, -0.2151], [-0.1325, -0.1289, -0.1798], [-0.1457, -0.1289, -0.2151], [-0.1016, -0.2172, -0.2151], [0.1148, -0.1333, -0.1445], [0.0707, -0.2747, -0.0959], [0.0927, -0.2172, -0.1754], [-0.0927, -0.2172, -0.1754], [-0.0707, -0.2747, -0.0959], [-0.1148, -0.1333, -0.1445], [-0.0, -0.2305, -0.4713], [-0.0, -0.2217, -0.4757], [0.053, -0.2261, -0.458], [-0.0, -0.2305, -0.4713], [-0.0618, -0.2305, -0.4448], [-0.053, -0.2261, -0.458], [0.0662, -0.2172, -0.511], [0.0618, -0.2305, -0.4448], [0.053, -0.2261, -0.458], [-0.053, -0.2261, -0.458], [-0.0618, -0.2305, -0.4448], [-0.0662, -0.2172, -0.511], [0.0353, -0.2084, -0.5375], [0.0662, -0.2172, -0.511], [0.053, -0.2172, -0.5022], [-0.053, -0.2172, -0.5022], [-0.0662, -0.2172, -0.511], [-0.0353, -0.2084, -0.5375], [-0.0, -0.204, -0.5419], [0.0353, -0.2084, -0.5375], [0.0265, -0.204, -0.5287], [-0.0265, -0.204, -0.5287], [-0.0353, -0.2084, -0.5375], [-0.0, -0.204, -0.5419], [0.0265, -0.204, -0.5287], [0.0265, -0.1731, -0.5198], [-0.0, -0.1731, -0.5243], [-0.0265, -0.204, -0.5287], [-0.0, -0.204, -0.5331], [-0.0, -0.1731, -0.5243], [0.0265, -0.204, -0.5287], [0.053, -0.2172, -0.5022], [0.053, -0.1775, -0.4978], [-0.053, -0.1775, -0.4978], [-0.053, -0.2172, -0.5022], [-0.0265, -0.204, -0.5287], [0.053, -0.2172, -0.5022], [0.053, -0.2261, -0.458], [0.053, -0.1908, -0.4624], [-0.053, -0.1908, -0.4624], [-0.053, -0.2261, -0.458], [-0.053, -0.2172, -0.5022], [-0.0, -0.2217, -0.4757], [-0.0, -0.1863, -0.4801], [0.053, -0.1908, -0.4624], [-0.0, -0.2217, -0.4757], [-0.053, -0.2261, -0.458], [-0.053, -0.1908, -0.4624], [-0.0, -0.1863, -0.4801], [-0.0, -0.1731, -0.5243], [0.0265, -0.1731, -0.5198], [-0.0265, -0.1731, -0.5198], [-0.0, -0.1731, -0.5243], [-0.0, -0.1863, -0.4801], [0.0751, -0.2437, 0.0808], [0.0927, -0.2393, 0.041], [0.106, -0.2526, 0.0498], [-0.106, -0.2526, 0.0498], [-0.0927, -0.2393, 0.041], [-0.0751, -0.2437, 0.0808], [0.0707, -0.2482, 0.1337], [0.0751, -0.2437, 0.0808], [0.0972, -0.257, 0.0852], [-0.0972, -0.257, 0.0852], [-0.0751, -0.2437, 0.0808], [-0.0707, -0.2482, 0.1337], [0.0707, -0.2482, 0.1337], [0.1016, -0.257, 0.1293], [0.1192, -0.257, 0.1735], [-0.0707, -0.2482, 0.1337], [-0.0927, -0.2526, 0.1956], [-0.1192, -0.257, 0.1735], [0.1148, -0.2349, 0.0145], [0.1281, -0.257, 0.0233], [0.106, -0.2526, 0.0498], [-0.1148, -0.2349, 0.0145], [-0.0927, -0.2393, 0.041], [-0.106, -0.2526, 0.0498], [0.1148, -0.2349, 0.0145], [0.212, -0.2128, -0.0297], [0.212, -0.2349, -0.0032], [-0.212, -0.2349, -0.0032], [-0.212, -0.2128, -0.0297], [-0.1148, -0.2349, 0.0145], [0.212, -0.2128, -0.0297], [0.2782, -0.1952, -0.0032], [0.2694, -0.2217, 0.0189], [-0.2694, -0.2217, 0.0189], [-0.2782, -0.1952, -0.0032], [-0.212, -0.2128, -0.0297], [0.2782, -0.1952, -0.0032], [0.3533, -0.1819, 0.0675], [0.3268, -0.1996, 0.0719], [-0.3268, -0.1996, 0.0719], [-0.3533, -0.1819, 0.0675], [-0.2782, -0.1952, -0.0032], [0.3533, -0.1819, 0.0675], [0.3621, -0.1819, 0.1293], [0.3312, -0.204, 0.1249], [-0.3312, -0.204, 0.1249], [-0.3621, -0.1819, 0.1293], [-0.3533, -0.1819, 0.0675], [0.34, -0.1908, 0.1735], [0.318, -0.2084, 0.1602], [0.3312, -0.204, 0.1249], [-0.34, -0.1908, 0.1735], [-0.3621, -0.1819, 0.1293], [-0.3312, -0.204, 0.1249], [0.2429, -0.2217, 0.2088], [0.2385, -0.2526, 0.1867], [0.318, -0.2084, 0.1602], [-0.2429, -0.2217, 0.2088], [-0.34, -0.1908, 0.1735], [-0.318, -0.2084, 0.1602], [0.2429, -0.2217, 0.2088], [0.1855, -0.2349, 0.2309], [0.1899, -0.2437, 0.2044], [-0.1899, -0.2437, 0.2044], [-0.1855, -0.2349, 0.2309], [-0.2429, -0.2217, 0.2088], [0.1855, -0.2349, 0.2309], [0.1413, -0.2437, 0.2265], [0.1546, -0.2526, 0.2], [-0.1546, -0.2526, 0.2], [-0.1413, -0.2437, 0.2265], [-0.1855, -0.2349, 0.2309], [0.1413, -0.2437, 0.2265], [0.0927, -0.2526, 0.1956], [0.1192, -0.257, 0.1735], [-0.1192, -0.257, 0.1735], [-0.0927, -0.2526, 0.1956], [-0.1413, -0.2437, 0.2265], [0.1192, -0.257, 0.1735], [0.1325, -0.2437, 0.1647], [0.159, -0.2482, 0.1867], [-0.1192, -0.257, 0.1735], [-0.1546, -0.2526, 0.2], [-0.159, -0.2482, 0.1867], [0.1899, -0.2437, 0.2044], [0.1546, -0.2526, 0.2], [0.159, -0.2482, 0.1867], [-0.159, -0.2482, 0.1867], [-0.1546, -0.2526, 0.2], [-0.1899, -0.2437, 0.2044], [0.1899, -0.2437, 0.2044], [0.1899, -0.2393, 0.1912], [0.2341, -0.2393, 0.1823], [-0.1899, -0.2437, 0.2044], [-0.2385, -0.2526, 0.1867], [-0.2341, -0.2393, 0.1823], [0.2385, -0.2526, 0.1867], [0.2341, -0.2393, 0.1823], [0.3003, -0.1996, 0.1514], [-0.2385, -0.2526, 0.1867], [-0.318, -0.2084, 0.1602], [-0.3003, -0.1996, 0.1514], [0.3312, -0.204, 0.1249], [0.318, -0.2084, 0.1602], [0.3003, -0.1996, 0.1514], [-0.3003, -0.1996, 0.1514], [-0.318, -0.2084, 0.1602], [-0.3312, -0.204, 0.1249], [0.3312, -0.204, 0.1249], [0.3135, -0.1952, 0.1205], [0.3091, -0.1952, 0.0808], [-0.3312, -0.204, 0.1249], [-0.3268, -0.1996, 0.0719], [-0.3091, -0.1952, 0.0808], [0.2694, -0.2217, 0.0189], [0.3268, -0.1996, 0.0719], [0.3091, -0.1952, 0.0808], [-0.3091, -0.1952, 0.0808], [-0.3268, -0.1996, 0.0719], [-0.2694, -0.2217, 0.0189], [0.2694, -0.2217, 0.0189], [0.2606, -0.2128, 0.0278], [0.212, -0.2261, 0.0101], [-0.2694, -0.2217, 0.0189], [-0.212, -0.2349, -0.0032], [-0.212, -0.2261, 0.0101], [0.212, -0.2349, -0.0032], [0.212, -0.2261, 0.0101], [0.1369, -0.2437, 0.0322], [-0.212, -0.2349, -0.0032], [-0.1281, -0.257, 0.0233], [-0.1369, -0.2437, 0.0322], [0.106, -0.2526, 0.0498], [0.1281, -0.257, 0.0233], [0.1369, -0.2437, 0.0322], [-0.1369, -0.2437, 0.0322], [-0.1281, -0.257, 0.0233], [-0.106, -0.2526, 0.0498], [0.1192, -0.257, 0.1735], [0.1016, -0.257, 0.1293], [0.1104, -0.2437, 0.1293], [-0.1104, -0.2437, 0.1293], [-0.1016, -0.257, 0.1293], [-0.1192, -0.257, 0.1735], [0.1016, -0.257, 0.1293], [0.0972, -0.257, 0.0852], [0.1104, -0.2393, 0.0896], [-0.1104, -0.2393, 0.0896], [-0.0972, -0.257, 0.0852], [-0.1016, -0.257, 0.1293], [0.0972, -0.257, 0.0852], [0.106, -0.2526, 0.0498], [0.1148, -0.2393, 0.0587], [-0.1148, -0.2393, 0.0587], [-0.106, -0.2526, 0.0498], [-0.0972, -0.257, 0.0852], [-0.0, -0.2349, 0.2044], [0.0353, -0.2393, 0.2397], [0.0618, -0.1598, 0.2221], [-0.0618, -0.1598, 0.2221], [-0.0353, -0.2393, 0.2397], [-0.0, -0.2349, 0.2044], [0.0353, -0.2393, 0.2397], [0.0883, -0.2437, 0.3678], [0.1104, -0.1643, 0.3369], [-0.1104, -0.1643, 0.3369], [-0.0883, -0.2437, 0.3678], [-0.0353, -0.2393, 0.2397], [0.1811, -0.2305, 0.3899], [0.1899, -0.151, 0.3501], [0.1104, -0.1643, 0.3369], [-0.1811, -0.2305, 0.3899], [-0.0883, -0.2437, 0.3678], [-0.1104, -0.1643, 0.3369], [0.2782, -0.204, 0.3016], [0.2738, -0.1289, 0.2751], [0.1899, -0.151, 0.3501], [-0.2782, -0.204, 0.3016], [-0.1811, -0.2305, 0.3899], [-0.1899, -0.151, 0.3501], [0.4019, -0.1687, 0.2353], [0.3842, -0.0936, 0.2177], [0.2738, -0.1289, 0.2751], [-0.4019, -0.1687, 0.2353], [-0.2782, -0.204, 0.3016], [-0.2738, -0.1289, 0.2751], [0.4019, -0.1687, 0.2353], [0.4858, -0.151, 0.2044], [0.4505, -0.0759, 0.1912], [-0.4505, -0.0759, 0.1912], [-0.4858, -0.151, 0.2044], [-0.4019, -0.1687, 0.2353], [0.4681, -0.0671, 0.0454], [0.4372, -0.0274, 0.0543], [0.4505, -0.0759, 0.1912], [-0.4681, -0.0671, 0.0454], [-0.4858, -0.151, 0.2044], [-0.4505, -0.0759, 0.1912], [0.4681, -0.0671, 0.0454], [0.3577, -0.1201, -0.0606], [0.34, -0.0494, -0.0385], [-0.34, -0.0494, -0.0385], [-0.3577, -0.1201, -0.0606], [-0.4681, -0.0671, 0.0454], [0.3577, -0.1201, -0.0606], [0.2473, -0.1157, -0.118], [0.2473, -0.0803, -0.0915], [-0.2473, -0.0803, -0.0915], [-0.2473, -0.1157, -0.118], [-0.3577, -0.1201, -0.0606], [-0.0, 0.0256, -0.3123], [0.1016, 0.0389, -0.2725], [0.0707, -0.0185, -0.3432], [-0.0, 0.0256, -0.3123], [-0.0, 0.0036, -0.3609], [-0.0707, -0.0185, -0.3432], [-0.0, 0.0036, -0.3609], [0.0707, -0.0185, -0.3432], [0.0795, -0.0229, -0.4669], [-0.0, 0.0036, -0.3609], [-0.0, -0.0097, -0.4934], [-0.0795, -0.0229, -0.4669], [-0.0, -0.0097, -0.4934], [0.0795, -0.0229, -0.4669], [0.0927, -0.0627, -0.5728], [-0.0, -0.0097, -0.4934], [-0.0, -0.0759, -0.5905], [-0.0927, -0.0627, -0.5728], [0.1016, -0.1289, -0.5861], [-0.0, -0.1422, -0.5949], [-0.0, -0.0759, -0.5905], [-0.0, -0.0759, -0.5905], [-0.0, -0.1422, -0.5949], [-0.1016, -0.1289, -0.5861], [0.1855, -0.1113, -0.5728], [0.1016, -0.1289, -0.5861], [0.0927, -0.0627, -0.5728], [-0.0927, -0.0627, -0.5728], [-0.1016, -0.1289, -0.5861], [-0.1855, -0.1113, -0.5728], [0.2076, -0.1157, -0.5419], [0.1855, -0.1113, -0.5728], [0.1855, -0.0406, -0.5552], [-0.1855, -0.0406, -0.5552], [-0.1855, -0.1113, -0.5728], [-0.2076, -0.1157, -0.5419], [0.1987, -0.1378, -0.4315], [0.2076, -0.1157, -0.5419], [0.1634, -0.0318, -0.4404], [-0.1634, -0.0318, -0.4404], [-0.2076, -0.1157, -0.5419], [-0.1987, -0.1378, -0.4315], [0.1634, -0.0318, -0.4404], [0.0795, -0.0229, -0.4669], [0.0707, -0.0185, -0.3432], [-0.0707, -0.0185, -0.3432], [-0.0795, -0.0229, -0.4669], [-0.1634, -0.0318, -0.4404], [0.1855, -0.0406, -0.5552], [0.0927, -0.0627, -0.5728], [0.0795, -0.0229, -0.4669], [-0.1855, -0.0406, -0.5552], [-0.1634, -0.0318, -0.4404], [-0.0795, -0.0229, -0.4669], [0.1413, -0.0362, -0.3211], [0.0707, -0.0185, -0.3432], [0.1016, 0.0389, -0.2725], [-0.1413, -0.0362, -0.3211], [-0.1325, -0.045, -0.2372], [-0.1016, 0.0389, -0.2725], [0.1766, -0.1378, -0.2858], [0.1987, -0.1378, -0.4315], [0.1413, -0.0362, -0.3211], [-0.1413, -0.0362, -0.3211], [-0.1987, -0.1378, -0.4315], [-0.1766, -0.1378, -0.2858], [0.1237, -0.0583, -0.1975], [0.1192, -0.0803, -0.1666], [0.1325, -0.1289, -0.1798], [-0.1237, -0.0583, -0.1975], [-0.1457, -0.1289, -0.2151], [-0.1325, -0.1289, -0.1798], [0.1325, -0.045, -0.2372], [0.1237, -0.0583, -0.1975], [0.1457, -0.1289, -0.2151], [-0.1325, -0.045, -0.2372], [-0.1766, -0.1378, -0.2858], [-0.1457, -0.1289, -0.2151], [0.1325, -0.1289, -0.1798], [0.1192, -0.0803, -0.1666], [0.1148, -0.098, -0.1356], [-0.1325, -0.1289, -0.1798], [-0.1148, -0.1333, -0.1445], [-0.1148, -0.098, -0.1356], [0.1148, -0.098, -0.1356], [0.2473, -0.0803, -0.0915], [0.2473, -0.1157, -0.118], [-0.1148, -0.098, -0.1356], [-0.1148, -0.1333, -0.1445], [-0.2473, -0.1157, -0.118], [0.1899, 0.56, -0.0076], [0.1943, 0.4893, -0.1224], [-0.0, 0.5644, -0.1489], [-0.1899, 0.56, -0.0076], [-0.0, 0.6527, 0.0013], [-0.0, 0.5644, -0.1489], [0.1943, 0.4893, -0.1224], [0.1678, 0.3348, -0.2151], [-0.0, 0.3834, -0.2549], [-0.1943, 0.4893, -0.1224], [-0.0, 0.5644, -0.1489], [-0.0, 0.3834, -0.2549], [-0.0, 0.3834, -0.2549], [0.1678, 0.3348, -0.2151], [0.1192, 0.0919, -0.2593], [-0.1192, 0.0919, -0.2593], [-0.1678, 0.3348, -0.2151], [-0.0, 0.3834, -0.2549], [-0.0, 0.0786, -0.299], [0.1192, 0.0919, -0.2593], [0.1016, 0.0389, -0.2725], [-0.1016, 0.0389, -0.2725], [-0.1192, 0.0919, -0.2593], [-0.0, 0.0786, -0.299], [0.1016, 0.0389, -0.2725], [0.1192, 0.0919, -0.2593], [0.1237, -0.0583, -0.1975], [-0.1016, 0.0389, -0.2725], [-0.1325, -0.045, -0.2372], [-0.1237, -0.0583, -0.1975], [0.4372, -0.0274, 0.0543], [0.34, -0.0494, -0.0385], [0.4151, 0.1449, -0.065], [-0.4151, 0.1449, -0.065], [-0.34, -0.0494, -0.0385], [-0.4372, -0.0274, 0.0543], [0.2606, 0.5821, 0.2088], [0.1899, 0.56, -0.0076], [-0.0, 0.6527, 0.0013], [-0.2606, 0.5821, 0.2088], [-0.0, 0.666, 0.2795], [-0.0, 0.6527, 0.0013], [0.2561, 0.0521, 0.4429], [0.2561, 0.2244, 0.487], [-0.0, 0.2288, 0.518], [-0.2561, 0.0521, 0.4429], [-0.0, 0.0212, 0.4694], [-0.0, 0.2288, 0.518], [-0.0, 0.2288, 0.518], [0.2561, 0.2244, 0.487], [0.2561, 0.401, 0.4517], [-0.2561, 0.401, 0.4517], [-0.2561, 0.2244, 0.487], [-0.0, 0.2288, 0.518], [-0.0, 0.4938, 0.4694], [0.2561, 0.401, 0.4517], [0.2606, 0.5821, 0.2088], [-0.2606, 0.5821, 0.2088], [-0.2561, 0.401, 0.4517], [-0.0, 0.4938, 0.4694], [0.3842, -0.0936, 0.2177], [0.4505, -0.0759, 0.1912], [0.4107, -0.0053, 0.1912], [-0.4107, -0.0053, 0.1912], [-0.4505, -0.0759, 0.1912], [-0.3842, -0.0936, 0.2177], [0.3577, 0.0256, 0.2177], [0.4107, -0.0053, 0.1912], [0.4505, 0.114, 0.2795], [-0.4505, 0.114, 0.2795], [-0.4107, -0.0053, 0.1912], [-0.3577, 0.0256, 0.2177], [0.3621, 0.1537, 0.359], [0.4505, 0.114, 0.2795], [0.4505, 0.2509, 0.3104], [-0.4505, 0.2509, 0.3104], [-0.4505, 0.114, 0.2795], [-0.3621, 0.1537, 0.359], [0.3621, 0.295, 0.3855], [0.4505, 0.2509, 0.3104], [0.4505, 0.3878, 0.2662], [-0.4505, 0.3878, 0.2662], [-0.4505, 0.2509, 0.3104], [-0.3621, 0.295, 0.3855], [0.3489, 0.5158, 0.147], [0.3621, 0.4364, 0.3457], [0.4505, 0.3878, 0.2662], [-0.3489, 0.5158, 0.147], [-0.4372, 0.4319, 0.1117], [-0.4505, 0.3878, 0.2662], [0.2606, 0.5821, 0.2088], [0.2561, 0.401, 0.4517], [0.3621, 0.4364, 0.3457], [-0.3621, 0.4364, 0.3457], [-0.2561, 0.401, 0.4517], [-0.2606, 0.5821, 0.2088], [0.2561, 0.401, 0.4517], [0.2561, 0.2244, 0.487], [0.3621, 0.295, 0.3855], [-0.3621, 0.295, 0.3855], [-0.2561, 0.2244, 0.487], [-0.2561, 0.401, 0.4517], [0.2561, 0.2244, 0.487], [0.2561, 0.0521, 0.4429], [0.3621, 0.1537, 0.359], [-0.3621, 0.1537, 0.359], [-0.2561, 0.0521, 0.4429], [-0.2561, 0.2244, 0.487], [0.2561, 0.0521, 0.4429], [0.2606, -0.0583, 0.2574], [0.3577, 0.0256, 0.2177], [-0.3577, 0.0256, 0.2177], [-0.2606, -0.0583, 0.2574], [-0.2561, 0.0521, 0.4429], [0.3842, -0.0936, 0.2177], [0.3577, 0.0256, 0.2177], [0.2606, -0.0583, 0.2574], [-0.3842, -0.0936, 0.2177], [-0.2738, -0.1289, 0.2751], [-0.2606, -0.0583, 0.2574], [0.2606, -0.0583, 0.2574], [0.2561, 0.0521, 0.4429], [-0.0, 0.0212, 0.4694], [-0.2606, -0.0583, 0.2574], [-0.0, -0.1378, 0.2839], [-0.0, 0.0212, 0.4694], [0.0618, -0.1598, 0.2221], [0.1104, -0.1643, 0.3369], [0.1899, -0.151, 0.3501], [-0.1899, -0.151, 0.3501], [-0.1104, -0.1643, 0.3369], [-0.0618, -0.1598, 0.2221], [0.0618, -0.1598, 0.2221], [0.2738, -0.1289, 0.2751], [0.2606, -0.0583, 0.2574], [-0.2606, -0.0583, 0.2574], [-0.2738, -0.1289, 0.2751], [-0.0618, -0.1598, 0.2221], [0.4372, -0.0274, 0.0543], [0.4814, 0.1537, 0.094], [0.4107, -0.0053, 0.1912], [-0.4372, -0.0274, 0.0543], [-0.4505, -0.0759, 0.1912], [-0.4107, -0.0053, 0.1912], [0.4814, 0.1537, 0.094], [0.4858, 0.2111, 0.1426], [0.4505, 0.114, 0.2795], [-0.4505, 0.114, 0.2795], [-0.4858, 0.2111, 0.1426], [-0.4814, 0.1537, 0.094], [0.4858, 0.2111, 0.1426], [0.4637, 0.2994, 0.147], [0.4505, 0.2509, 0.3104], [-0.4505, 0.2509, 0.3104], [-0.4637, 0.2994, 0.147], [-0.4858, 0.2111, 0.1426], [0.4505, 0.3878, 0.2662], [0.4505, 0.2509, 0.3104], [0.4637, 0.2994, 0.147], [-0.4505, 0.3878, 0.2662], [-0.4372, 0.4319, 0.1117], [-0.4637, 0.2994, 0.147], [0.1678, 0.3348, -0.2151], [0.2429, 0.3039, -0.1489], [0.2296, 0.1007, -0.1356], [-0.1678, 0.3348, -0.2151], [-0.1192, 0.0919, -0.2593], [-0.2296, 0.1007, -0.1356], [0.2296, 0.1007, -0.1356], [0.2429, 0.3039, -0.1489], [0.3356, 0.2774, -0.1091], [-0.2296, 0.1007, -0.1356], [-0.4151, 0.1449, -0.065], [-0.3356, 0.2774, -0.1091], [0.34, -0.0494, -0.0385], [0.2473, -0.0803, -0.0915], [0.2296, 0.1007, -0.1356], [-0.2296, 0.1007, -0.1356], [-0.2473, -0.0803, -0.0915], [-0.34, -0.0494, -0.0385], [0.2473, -0.0803, -0.0915], [0.1192, -0.0803, -0.1666], [0.1237, -0.0583, -0.1975], [-0.1237, -0.0583, -0.1975], [-0.1192, -0.0803, -0.1666], [-0.2473, -0.0803, -0.0915], [0.3621, 0.4275, -0.0429], [0.2738, 0.4938, -0.0252], [0.3489, 0.5158, 0.147], [-0.3621, 0.4275, -0.0429], [-0.4372, 0.4319, 0.1117], [-0.3489, 0.5158, 0.147], [0.3489, 0.5158, 0.147], [0.2738, 0.4938, -0.0252], [0.1899, 0.56, -0.0076], [-0.3489, 0.5158, 0.147], [-0.2606, 0.5821, 0.2088], [-0.1899, 0.56, -0.0076], [0.2429, 0.3039, -0.1489], [0.2738, 0.4938, -0.0252], [0.3621, 0.4275, -0.0429], [-0.2429, 0.3039, -0.1489], [-0.3356, 0.2774, -0.1091], [-0.3621, 0.4275, -0.0429], [0.1943, 0.4893, -0.1224], [0.2738, 0.4938, -0.0252], [0.2429, 0.3039, -0.1489], [-0.1943, 0.4893, -0.1224], [-0.1678, 0.3348, -0.2151], [-0.2429, 0.3039, -0.1489], [0.5034, 0.3171, 0.1912], [0.5211, 0.3083, 0.1647], [0.5741, 0.348, 0.1956], [-0.5034, 0.3171, 0.1912], [-0.5785, 0.3613, 0.2309], [-0.5741, 0.348, 0.1956], [0.5785, 0.3613, 0.2309], [0.5741, 0.348, 0.1956], [0.6713, 0.4054, 0.2088], [-0.6713, 0.4054, 0.2088], [-0.5741, 0.348, 0.1956], [-0.5785, 0.3613, 0.2309], [0.6713, 0.4054, 0.2088], [0.7154, 0.4143, 0.1249], [0.764, 0.4231, 0.1426], [-0.6713, 0.4054, 0.2088], [-0.6978, 0.4231, 0.2486], [-0.764, 0.4231, 0.1426], [0.7154, 0.4143, 0.1249], [0.6845, 0.4143, 0.0057], [0.7243, 0.4275, -0.0076], [-0.7154, 0.4143, 0.1249], [-0.764, 0.4231, 0.1426], [-0.7243, 0.4275, -0.0076], [0.6845, 0.4143, 0.0057], [0.5829, 0.3569, -0.0606], [0.5874, 0.3701, -0.0959], [-0.6845, 0.4143, 0.0057], [-0.7243, 0.4275, -0.0076], [-0.5874, 0.3701, -0.0959], [0.5874, 0.3701, -0.0959], [0.5829, 0.3569, -0.0606], [0.4681, 0.2597, -0.0782], [-0.4681, 0.2597, -0.0782], [-0.5829, 0.3569, -0.0606], [-0.5874, 0.3701, -0.0959], [0.5829, 0.3569, -0.0606], [0.5874, 0.3922, -0.0385], [0.499, 0.3039, -0.0517], [-0.499, 0.3039, -0.0517], [-0.5874, 0.3922, -0.0385], [-0.5829, 0.3569, -0.0606], [0.6845, 0.4143, 0.0057], [0.6713, 0.4364, 0.0145], [0.5874, 0.3922, -0.0385], [-0.5874, 0.3922, -0.0385], [-0.6713, 0.4364, 0.0145], [-0.6845, 0.4143, 0.0057], [0.6978, 0.4364, 0.1028], [0.6713, 0.4364, 0.0145], [0.6845, 0.4143, 0.0057], [-0.6978, 0.4364, 0.1028], [-0.7154, 0.4143, 0.1249], [-0.6845, 0.4143, 0.0057], [0.6624, 0.4319, 0.1647], [0.6978, 0.4364, 0.1028], [0.7154, 0.4143, 0.1249], [-0.6624, 0.4319, 0.1647], [-0.6713, 0.4054, 0.2088], [-0.7154, 0.4143, 0.1249], [0.5785, 0.3878, 0.1558], [0.6624, 0.4319, 0.1647], [0.6713, 0.4054, 0.2088], [-0.5785, 0.3878, 0.1558], [-0.5741, 0.348, 0.1956], [-0.6713, 0.4054, 0.2088], [0.5741, 0.348, 0.1956], [0.5211, 0.3083, 0.1647], [0.5344, 0.348, 0.1337], [-0.5344, 0.348, 0.1337], [-0.5211, 0.3083, 0.1647], [-0.5741, 0.348, 0.1956], [0.3356, 0.2774, -0.1091], [0.4063, 0.2818, -0.0517], [0.4107, 0.2244, -0.0385], [-0.3356, 0.2774, -0.1091], [-0.4151, 0.1449, -0.065], [-0.4107, 0.2244, -0.0385], [0.4372, 0.2553, -0.118], [0.4681, 0.2597, -0.0782], [0.4063, 0.2818, -0.0517], [-0.4372, 0.2553, -0.118], [-0.3356, 0.2774, -0.1091], [-0.4063, 0.2818, -0.0517], [0.4814, 0.1537, 0.094], [0.4151, 0.1449, -0.065], [0.4107, 0.2244, -0.0385], [-0.4107, 0.2244, -0.0385], [-0.4151, 0.1449, -0.065], [-0.4814, 0.1537, 0.094], [0.4637, 0.2994, 0.147], [0.4769, 0.3039, 0.1249], [0.5211, 0.3083, 0.1647], [-0.5211, 0.3083, 0.1647], [-0.477, 0.3039, 0.1249], [-0.4637, 0.2994, 0.147], [0.4681, 0.2597, -0.0782], [0.499, 0.3039, -0.0517], [0.4593, 0.3392, -0.0473], [-0.4593, 0.3392, -0.0473], [-0.499, 0.3039, -0.0517], [-0.4681, 0.2597, -0.0782], [0.4063, 0.2906, -0.0164], [0.4063, 0.2818, -0.0517], [0.4593, 0.3392, -0.0473], [-0.4063, 0.2906, -0.0164], [-0.477, 0.3392, -0.0297], [-0.4593, 0.3392, -0.0473], [0.4284, 0.3392, 0.0145], [0.4063, 0.2906, -0.0164], [0.4769, 0.3392, -0.0297], [-0.477, 0.3392, -0.0297], [-0.4063, 0.2906, -0.0164], [-0.4284, 0.3392, 0.0145], [0.4505, 0.3039, 0.0763], [0.4063, 0.2906, -0.0164], [0.4284, 0.3392, 0.0145], [-0.4505, 0.3039, 0.0763], [-0.4725, 0.3392, 0.0587], [-0.4284, 0.3392, 0.0145], [0.4505, 0.3039, 0.0763], [0.4725, 0.3392, 0.0587], [0.5034, 0.3348, 0.0984], [-0.4505, 0.3039, 0.0763], [-0.477, 0.3039, 0.1249], [-0.5034, 0.3348, 0.0984], [0.4769, 0.3039, 0.1249], [0.5034, 0.3348, 0.0984], [0.5344, 0.348, 0.1337], [-0.477, 0.3039, 0.1249], [-0.5211, 0.3083, 0.1647], [-0.5344, 0.348, 0.1337], [0.4858, 0.2111, 0.1426], [0.4505, 0.3039, 0.0763], [0.4769, 0.3039, 0.1249], [-0.477, 0.3039, 0.1249], [-0.4505, 0.3039, 0.0763], [-0.4858, 0.2111, 0.1426], [0.4107, 0.2244, -0.0385], [0.4063, 0.2906, -0.0164], [0.4505, 0.3039, 0.0763], [-0.4107, 0.2244, -0.0385], [-0.4858, 0.2111, 0.1426], [-0.4505, 0.3039, 0.0763], [0.5344, 0.348, 0.1337], [0.5034, 0.3348, 0.0984], [0.5034, 0.3657, 0.094], [-0.5034, 0.3657, 0.094], [-0.5034, 0.3348, 0.0984], [-0.5344, 0.348, 0.1337], [0.4725, 0.3392, 0.0587], [0.4769, 0.3657, 0.0587], [0.5034, 0.3657, 0.094], [-0.4725, 0.3392, 0.0587], [-0.5034, 0.3348, 0.0984], [-0.5034, 0.3657, 0.094], [0.4725, 0.3392, 0.0587], [0.4284, 0.3392, 0.0145], [0.4328, 0.3657, 0.0145], [-0.4328, 0.3657, 0.0145], [-0.4284, 0.3392, 0.0145], [-0.4725, 0.3392, 0.0587], [0.4637, 0.3392, 0.0101], [0.4681, 0.3657, 0.0057], [0.4328, 0.3657, 0.0145], [-0.4637, 0.3392, 0.0101], [-0.4284, 0.3392, 0.0145], [-0.4328, 0.3657, 0.0145], [0.4769, 0.3392, -0.0297], [0.4814, 0.3657, -0.0297], [0.4681, 0.3657, 0.0057], [-0.477, 0.3392, -0.0297], [-0.4637, 0.3392, 0.0101], [-0.4681, 0.3657, 0.0057], [0.4769, 0.3392, -0.0297], [0.4593, 0.3392, -0.0473], [0.4593, 0.3657, -0.0473], [-0.4593, 0.3657, -0.0473], [-0.4593, 0.3392, -0.0473], [-0.477, 0.3392, -0.0297], [0.4593, 0.3392, -0.0473], [0.499, 0.3039, -0.0517], [0.499, 0.3348, -0.0473], [-0.499, 0.3348, -0.0473], [-0.499, 0.3039, -0.0517], [-0.4593, 0.3392, -0.0473], [0.5785, 0.3878, 0.1558], [0.5344, 0.348, 0.1337], [0.5388, 0.3789, 0.1249], [-0.5388, 0.3789, 0.1249], [-0.5344, 0.348, 0.1337], [-0.5785, 0.3878, 0.1558], [0.6624, 0.4319, 0.1647], [0.5785, 0.3878, 0.1558], [0.5874, 0.4187, 0.147], [-0.5874, 0.4187, 0.147], [-0.5785, 0.3878, 0.1558], [-0.6624, 0.4319, 0.1647], [0.6978, 0.4364, 0.1028], [0.6624, 0.4319, 0.1647], [0.6713, 0.4584, 0.1558], [-0.6713, 0.4584, 0.1558], [-0.6624, 0.4319, 0.1647], [-0.6978, 0.4364, 0.1028], [0.6978, 0.4364, 0.1028], [0.711, 0.4628, 0.0984], [0.6845, 0.4584, 0.0101], [-0.6978, 0.4364, 0.1028], [-0.6713, 0.4364, 0.0145], [-0.6845, 0.4584, 0.0101], [0.6713, 0.4364, 0.0145], [0.6845, 0.4584, 0.0101], [0.5918, 0.4231, -0.0385], [-0.6713, 0.4364, 0.0145], [-0.5874, 0.3922, -0.0385], [-0.5918, 0.4231, -0.0385], [0.5874, 0.3922, -0.0385], [0.5918, 0.4231, -0.0385], [0.499, 0.3348, -0.0473], [-0.5874, 0.3922, -0.0385], [-0.499, 0.3039, -0.0517], [-0.499, 0.3348, -0.0473], [0.4814, 0.3657, -0.0297], [0.5299, 0.3745, -0.0032], [0.5034, 0.3701, 0.0233], [-0.4814, 0.3657, -0.0297], [-0.4681, 0.3657, 0.0057], [-0.5034, 0.3701, 0.0233], [0.5299, 0.3745, -0.0032], [0.5653, 0.3922, 0.0322], [0.5432, 0.3834, 0.0587], [-0.5299, 0.3745, -0.0032], [-0.5034, 0.3701, 0.0233], [-0.5432, 0.3834, 0.0587], [0.5432, 0.3834, 0.0587], [0.5653, 0.3922, 0.0322], [0.5962, 0.401, 0.0675], [-0.5962, 0.401, 0.0675], [-0.5653, 0.3922, 0.0322], [-0.5432, 0.3834, 0.0587], [0.5962, 0.401, 0.0675], [0.6271, 0.4054, 0.0808], [0.6139, 0.4054, 0.1161], [-0.5962, 0.401, 0.0675], [-0.5741, 0.3966, 0.094], [-0.6139, 0.4054, 0.1161], [0.5874, 0.4187, 0.147], [0.5388, 0.3789, 0.1249], [0.5741, 0.3966, 0.094], [-0.5741, 0.3966, 0.094], [-0.5388, 0.3789, 0.1249], [-0.5874, 0.4187, 0.147], [0.5432, 0.3834, 0.0587], [0.5741, 0.3966, 0.094], [0.5388, 0.3789, 0.1249], [-0.5432, 0.3834, 0.0587], [-0.5034, 0.3657, 0.094], [-0.5388, 0.3789, 0.1249], [0.4769, 0.3657, 0.0587], [0.5034, 0.3701, 0.0233], [0.5432, 0.3834, 0.0587], [-0.477, 0.3657, 0.0587], [-0.5034, 0.3657, 0.094], [-0.5432, 0.3834, 0.0587], [0.4681, 0.3657, 0.0057], [0.5034, 0.3701, 0.0233], [0.4769, 0.3657, 0.0587], [-0.477, 0.3657, 0.0587], [-0.5034, 0.3701, 0.0233], [-0.4681, 0.3657, 0.0057], [0.499, 0.3348, -0.0473], [0.5299, 0.3745, -0.0032], [0.4814, 0.3657, -0.0297], [-0.499, 0.3348, -0.0473], [-0.4593, 0.3657, -0.0473], [-0.4814, 0.3657, -0.0297], [0.5918, 0.4231, -0.0385], [0.5653, 0.3922, 0.0322], [0.5299, 0.3745, -0.0032], [-0.5299, 0.3745, -0.0032], [-0.5653, 0.3922, 0.0322], [-0.5918, 0.4231, -0.0385], [0.5962, 0.401, 0.0675], [0.5653, 0.3922, 0.0322], [0.5918, 0.4231, -0.0385], [-0.5962, 0.401, 0.0675], [-0.6845, 0.4584, 0.0101], [-0.5918, 0.4231, -0.0385], [0.6271, 0.4054, 0.0808], [0.5962, 0.401, 0.0675], [0.6845, 0.4584, 0.0101], [-0.6271, 0.4054, 0.0808], [-0.711, 0.4628, 0.0984], [-0.6845, 0.4584, 0.0101], [0.6713, 0.4584, 0.1558], [0.6139, 0.4054, 0.1161], [0.6271, 0.4054, 0.0808], [-0.6271, 0.4054, 0.0808], [-0.6139, 0.4054, 0.1161], [-0.6713, 0.4584, 0.1558], [0.5874, 0.3701, -0.0959], [0.4372, 0.2553, -0.118], [0.446, 0.3701, -0.1091], [-0.446, 0.3701, -0.1091], [-0.4372, 0.2553, -0.118], [-0.5874, 0.3701, -0.0959], [0.7243, 0.4275, -0.0076], [0.5874, 0.3701, -0.0959], [0.5874, 0.4628, -0.0871], [-0.5874, 0.4628, -0.0871], [-0.5874, 0.3701, -0.0959], [-0.7243, 0.4275, -0.0076], [0.7243, 0.4275, -0.0076], [0.7419, 0.4849, -0.0076], [0.7728, 0.4673, 0.1293], [-0.7243, 0.4275, -0.0076], [-0.764, 0.4231, 0.1426], [-0.7728, 0.4673, 0.1293], [0.764, 0.4231, 0.1426], [0.7728, 0.4673, 0.1293], [0.7066, 0.4938, 0.2265], [-0.764, 0.4231, 0.1426], [-0.6978, 0.4231, 0.2486], [-0.7066, 0.4938, 0.2265], [0.6978, 0.4231, 0.2486], [0.7066, 0.4938, 0.2265], [0.5785, 0.4584, 0.2088], [-0.6978, 0.4231, 0.2486], [-0.5785, 0.3613, 0.2309], [-0.5785, 0.4584, 0.2088], [0.5785, 0.3613, 0.2309], [0.5785, 0.4584, 0.2088], [0.4858, 0.401, 0.1779], [-0.5785, 0.3613, 0.2309], [-0.5034, 0.3171, 0.1912], [-0.4858, 0.401, 0.1779], [0.5874, 0.4628, -0.0871], [0.446, 0.3701, -0.1091], [0.4858, 0.401, 0.1779], [-0.5874, 0.4628, -0.0871], [-0.5785, 0.4584, 0.2088], [-0.4858, 0.401, 0.1779], [0.5785, 0.4584, 0.2088], [0.7066, 0.4938, 0.2265], [0.7419, 0.4849, -0.0076], [-0.7419, 0.4849, -0.0076], [-0.7066, 0.4938, 0.2265], [-0.5785, 0.4584, 0.2088], [0.4637, 0.2994, 0.147], [0.5034, 0.3171, 0.1912], [0.4858, 0.401, 0.1779], [-0.4637, 0.2994, 0.147], [-0.4372, 0.4319, 0.1117], [-0.4858, 0.401, 0.1779], [0.4372, 0.4319, 0.1117], [0.4858, 0.401, 0.1779], [0.446, 0.3701, -0.1091], [-0.446, 0.3701, -0.1091], [-0.4858, 0.401, 0.1779], [-0.4372, 0.4319, 0.1117], [0.3356, 0.2774, -0.1091], [0.3621, 0.4275, -0.0429], [0.446, 0.3701, -0.1091], [-0.446, 0.3701, -0.1091], [-0.3621, 0.4275, -0.0429], [-0.3356, 0.2774, -0.1091]], "Sphere_GizmoGroup_": [[0.0, 0.3536, -0.3536], [0.0732, 0.1768, -0.4619], [0.0, 0.1913, -0.4619], [0.0, 0.5, -0.0], [0.1768, 0.4268, -0.1913], [0.0, 0.4619, -0.1913], [0.0, 0.3536, 0.3536], [0.1768, 0.4268, 0.1913], [0.0, 0.4619, 0.1913], [0.0, 0.1913, 0.4619], [-0.0, -0.0, 0.5], [0.0732, 0.1768, 0.4619], [0.0, -0.0, -0.5], [0.0, 0.1913, -0.4619], [0.0732, 0.1768, -0.4619], [0.0, 0.3536, -0.3536], [0.1768, 0.4268, -0.1913], [0.1353, 0.3266, -0.3536], [0.0, 0.5, -0.0], [0.1768, 0.4268, 0.1913], [0.1913, 0.4619, -0.0], [0.0, 0.1913, 0.4619], [0.1353, 0.3266, 0.3536], [0.0, 0.3536, 0.3536], [0.1353, 0.3266, 0.3536], [0.3266, 0.3266, 0.1913], [0.1768, 0.4268, 0.1913], [0.0732, 0.1768, 0.4619], [-0.0, -0.0, 0.5], [0.1353, 0.1353, 0.4619], [0.0, -0.0, -0.5], [0.0732, 0.1768, -0.4619], [0.1353, 0.1353, -0.4619], [0.1768, 0.4268, -0.1913], [0.25, 0.25, -0.3536], [0.1353, 0.3266, -0.3536], [0.1768, 0.4268, 0.1913], [0.3536, 0.3536, -0.0], [0.1913, 0.4619, -0.0], [0.0732, 0.1768, 0.4619], [0.25, 0.25, 0.3536], [0.1353, 0.3266, 0.3536], [0.1353, 0.3266, -0.3536], [0.1353, 0.1353, -0.4619], [0.0732, 0.1768, -0.4619], [0.1913, 0.4619, -0.0], [0.3266, 0.3266, -0.1913], [0.1768, 0.4268, -0.1913], [0.0, -0.0, -0.5], [0.1353, 0.1353, -0.4619], [0.1768, 0.0732, -0.4619], [0.3266, 0.3266, -0.1913], [0.3266, 0.1353, -0.3536], [0.25, 0.25, -0.3536], [0.3266, 0.3266, 0.1913], [0.4619, 0.1913, -0.0], [0.3536, 0.3536, -0.0], [0.1353, 0.1353, 0.4619], [0.3266, 0.1353, 0.3536], [0.25, 0.25, 0.3536], [0.25, 0.25, -0.3536], [0.1768, 0.0732, -0.4619], [0.1353, 0.1353, -0.4619], [0.3536, 0.3536, -0.0], [0.4268, 0.1768, -0.1913], [0.3266, 0.3266, -0.1913], [0.25, 0.25, 0.3536], [0.4268, 0.1768, 0.1913], [0.3266, 0.3266, 0.1913], [0.1353, 0.1353, 0.4619], [-0.0, -0.0, 0.5], [0.1768, 0.0732, 0.4619], [0.3266, 0.1353, 0.3536], [0.1913, -0.0, 0.4619], [0.3536, -0.0, 0.3536], [0.3266, 0.1353, -0.3536], [0.1913, -0.0, -0.4619], [0.1768, 0.0732, -0.4619], [0.4619, 0.1913, -0.0], [0.4619, -0.0, -0.1913], [0.4268, 0.1768, -0.1913], [0.3266, 0.1353, 0.3536], [0.4619, -0.0, 0.1913], [0.4268, 0.1768, 0.1913], [0.1768, 0.0732, 0.4619], [-0.0, -0.0, 0.5], [0.1913, -0.0, 0.4619], [0.0, -0.0, -0.5], [0.1768, 0.0732, -0.4619], [0.1913, -0.0, -0.4619], [0.4268, 0.1768, -0.1913], [0.3536, -0.0, -0.3536], [0.3266, 0.1353, -0.3536], [0.4619, 0.1913, -0.0], [0.4619, -0.0, 0.1913], [0.5, -0.0, -0.0], [0.1913, -0.0, -0.4619], [0.3266, -0.1353, -0.3536], [0.1768, -0.0732, -0.4619], [0.5, -0.0, -0.0], [0.4268, -0.1768, -0.1913], [0.4619, -0.0, -0.1913], [0.4619, -0.0, 0.1913], [0.3266, -0.1353, 0.3536], [0.4268, -0.1768, 0.1913], [0.1913, -0.0, 0.4619], [-0.0, -0.0, 0.5], [0.1768, -0.0732, 0.4619], [0.0, -0.0, -0.5], [0.1913, -0.0, -0.4619], [0.1768, -0.0732, -0.4619], [0.4619, -0.0, -0.1913], [0.3266, -0.1353, -0.3536], [0.3536, -0.0, -0.3536], [0.4619, -0.0, 0.1913], [0.4619, -0.1913, -0.0], [0.5, -0.0, -0.0], [0.1913, -0.0, 0.4619], [0.3266, -0.1353, 0.3536], [0.3536, -0.0, 0.3536], [0.1768, -0.0732, 0.4619], [-0.0, -0.0, 0.5], [0.1353, -0.1353, 0.4619], [0.0, -0.0, -0.5], [0.1768, -0.0732, -0.4619], [0.1353, -0.1353, -0.4619], [0.4268, -0.1768, -0.1913], [0.25, -0.25, -0.3536], [0.3266, -0.1353, -0.3536], [0.4268, -0.1768, 0.1913], [0.3536, -0.3536, -0.0], [0.4619, -0.1913, -0.0], [0.1768, -0.0732, 0.4619], [0.25, -0.25, 0.3536], [0.3266, -0.1353, 0.3536], [0.3266, -0.1353, -0.3536], [0.1353, -0.1353, -0.4619], [0.1768, -0.0732, -0.4619], [0.4619, -0.1913, -0.0], [0.3266, -0.3266, -0.1913], [0.4268, -0.1768, -0.1913], [0.4268, -0.1768, 0.1913], [0.25, -0.25, 0.3536], [0.3266, -0.3266, 0.1913], [0.3266, -0.3266, -0.1913], [0.1353, -0.3266, -0.3536], [0.25, -0.25, -0.3536], [0.3266, -0.3266, 0.1913], [0.1913, -0.4619, -0.0], [0.3536, -0.3536, -0.0], [0.1353, -0.1353, 0.4619], [0.1353, -0.3266, 0.3536], [0.25, -0.25, 0.3536], [0.1353, -0.1353, -0.4619], [0.1353, -0.3266, -0.3536], [0.0732, -0.1768, -0.4619], [0.3266, -0.3266, -0.1913], [0.1913, -0.4619, -0.0], [0.1768, -0.4268, -0.1913], [0.3266, -0.3266, 0.1913], [0.1353, -0.3266, 0.3536], [0.1768, -0.4268, 0.1913], [0.1353, -0.1353, 0.4619], [-0.0, -0.0, 0.5], [0.0732, -0.1768, 0.4619], [0.0, -0.0, -0.5], [0.1353, -0.1353, -0.4619], [0.0732, -0.1768, -0.4619], [0.0732, -0.1768, -0.4619], [-0.0, -0.3536, -0.3536], [-0.0, -0.1913, -0.4619], [0.1913, -0.4619, -0.0], [-0.0, -0.4619, -0.1913], [0.1768, -0.4268, -0.1913], [0.1353, -0.3266, 0.3536], [-0.0, -0.4619, 0.1913], [0.1768, -0.4268, 0.1913], [0.0732, -0.1768, 0.4619], [-0.0, -0.0, 0.5], [-0.0, -0.1913, 0.4619], [0.0, -0.0, -0.5], [0.0732, -0.1768, -0.4619], [-0.0, -0.1913, -0.4619], [0.1768, -0.4268, -0.1913], [-0.0, -0.3536, -0.3536], [0.1353, -0.3266, -0.3536], [0.1768, -0.4268, 0.1913], [-0.0, -0.5, -0.0], [0.1913, -0.4619, -0.0], [0.0732, -0.1768, 0.4619], [-0.0, -0.3536, 0.3536], [0.1353, -0.3266, 0.3536], [-0.0, -0.4619, -0.1913], [-0.1913, -0.4619, -0.0], [-0.1768, -0.4268, -0.1913], [-0.0, -0.3536, 0.3536], [-0.1768, -0.4268, 0.1913], [-0.0, -0.4619, 0.1913], [-0.0, -0.1913, 0.4619], [-0.0, -0.0, 0.5], [-0.0732, -0.1768, 0.4619], [0.0, -0.0, -0.5], [-0.0, -0.1913, -0.4619], [-0.0732, -0.1768, -0.4619], [-0.0, -0.4619, -0.1913], [-0.1353, -0.3266, -0.3536], [-0.0, -0.3536, -0.3536], [-0.0, -0.5, -0.0], [-0.1768, -0.4268, 0.1913], [-0.1913, -0.4619, -0.0], [-0.0, -0.1913, 0.4619], [-0.1353, -0.3266, 0.3536], [-0.0, -0.3536, 0.3536], [-0.0, -0.3536, -0.3536], [-0.0732, -0.1768, -0.4619], [-0.0, -0.1913, -0.4619], [0.0, -0.0, -0.5], [-0.0732, -0.1768, -0.4619], [-0.1353, -0.1353, -0.4619], [-0.1768, -0.4268, -0.1913], [-0.25, -0.25, -0.3536], [-0.1353, -0.3266, -0.3536], [-0.1768, -0.4268, 0.1913], [-0.3536, -0.3536, -0.0], [-0.1913, -0.4619, -0.0], [-0.0732, -0.1768, 0.4619], [-0.25, -0.25, 0.3536], [-0.1353, -0.3266, 0.3536], [-0.0732, -0.1768, -0.4619], [-0.25, -0.25, -0.3536], [-0.1353, -0.1353, -0.4619], [-0.1913, -0.4619, -0.0], [-0.3266, -0.3266, -0.1913], [-0.1768, -0.4268, -0.1913], [-0.1353, -0.3266, 0.3536], [-0.3266, -0.3266, 0.1913], [-0.1768, -0.4268, 0.1913], [-0.0732, -0.1768, 0.4619], [-0.0, -0.0, 0.5], [-0.1353, -0.1353, 0.4619], [-0.3266, -0.3266, 0.1913], [-0.4619, -0.1913, -0.0], [-0.3536, -0.3536, -0.0], [-0.1353, -0.1353, 0.4619], [-0.3266, -0.1353, 0.3536], [-0.25, -0.25, 0.3536], [-0.1353, -0.1353, -0.4619], [-0.3266, -0.1353, -0.3536], [-0.1768, -0.0732, -0.4619], [-0.3536, -0.3536, -0.0], [-0.4268, -0.1768, -0.1913], [-0.3266, -0.3266, -0.1913], [-0.25, -0.25, 0.3536], [-0.4268, -0.1768, 0.1913], [-0.3266, -0.3266, 0.1913], [-0.1353, -0.1353, 0.4619], [-0.0, -0.0, 0.5], [-0.1768, -0.0732, 0.4619], [0.0, -0.0, -0.5], [-0.1353, -0.1353, -0.4619], [-0.1768, -0.0732, -0.4619], [-0.3266, -0.3266, -0.1913], [-0.3266, -0.1353, -0.3536], [-0.25, -0.25, -0.3536], [-0.3266, -0.1353, -0.3536], [-0.1913, 0.0, -0.4619], [-0.1768, -0.0732, -0.4619], [-0.4619, -0.1913, -0.0], [-0.4619, 0.0, -0.1913], [-0.4268, -0.1768, -0.1913], [-0.4268, -0.1768, 0.1913], [-0.3536, 0.0, 0.3536], [-0.4619, 0.0, 0.1913], [-0.1768, -0.0732, 0.4619], [-0.0, -0.0, 0.5], [-0.1913, 0.0, 0.4619], [0.0, -0.0, -0.5], [-0.1768, -0.0732, -0.4619], [-0.1913, 0.0, -0.4619], [-0.4268, -0.1768, -0.1913], [-0.3536, 0.0, -0.3536], [-0.3266, -0.1353, -0.3536], [-0.4619, -0.1913, -0.0], [-0.4619, 0.0, 0.1913], [-0.5, 0.0, -0.0], [-0.1768, -0.0732, 0.4619], [-0.3536, 0.0, 0.3536], [-0.3266, -0.1353, 0.3536], [-0.4619, 0.0, 0.1913], [-0.3266, 0.1353, 0.3536], [-0.4268, 0.1768, 0.1913], [-0.1913, 0.0, 0.4619], [-0.0, -0.0, 0.5], [-0.1768, 0.0732, 0.4619], [0.0, -0.0, -0.5], [-0.1913, 0.0, -0.4619], [-0.1768, 0.0732, -0.4619], [-0.4619, 0.0, -0.1913], [-0.3266, 0.1353, -0.3536], [-0.3536, 0.0, -0.3536], [-0.5, 0.0, -0.0], [-0.4268, 0.1768, 0.1913], [-0.4619, 0.1913, -0.0], [-0.1913, 0.0, 0.4619], [-0.3266, 0.1353, 0.3536], [-0.3536, 0.0, 0.3536], [-0.3536, 0.0, -0.3536], [-0.1768, 0.0732, -0.4619], [-0.1913, 0.0, -0.4619], [-0.5, 0.0, -0.0], [-0.4268, 0.1768, -0.1913], [-0.4619, 0.0, -0.1913], [0.0, -0.0, -0.5], [-0.1768, 0.0732, -0.4619], [-0.1353, 0.1353, -0.4619], [-0.4268, 0.1768, -0.1913], [-0.25, 0.25, -0.3536], [-0.3266, 0.1353, -0.3536], [-0.4619, 0.1913, -0.0], [-0.3266, 0.3266, 0.1913], [-0.3536, 0.3536, -0.0], [-0.1768, 0.0732, 0.4619], [-0.25, 0.25, 0.3536], [-0.3266, 0.1353, 0.3536], [-0.3266, 0.1353, -0.3536], [-0.1353, 0.1353, -0.4619], [-0.1768, 0.0732, -0.4619], [-0.4619, 0.1913, -0.0], [-0.3266, 0.3266, -0.1913], [-0.4268, 0.1768, -0.1913], [-0.4268, 0.1768, 0.1913], [-0.25, 0.25, 0.3536], [-0.3266, 0.3266, 0.1913], [-0.1768, 0.0732, 0.4619], [-0.0, -0.0, 0.5], [-0.1353, 0.1353, 0.4619], [-0.1353, 0.1353, 0.4619], [-0.1353, 0.3266, 0.3536], [-0.25, 0.25, 0.3536], [-0.25, 0.25, -0.3536], [-0.0732, 0.1768, -0.4619], [-0.1353, 0.1353, -0.4619], [-0.3536, 0.3536, -0.0], [-0.1768, 0.4268, -0.1913], [-0.3266, 0.3266, -0.1913], [-0.3266, 0.3266, 0.1913], [-0.1353, 0.3266, 0.3536], [-0.1768, 0.4268, 0.1913], [-0.1353, 0.1353, 0.4619], [-0.0, -0.0, 0.5], [-0.0732, 0.1768, 0.4619], [0.0, -0.0, -0.5], [-0.1353, 0.1353, -0.4619], [-0.0732, 0.1768, -0.4619], [-0.3266, 0.3266, -0.1913], [-0.1353, 0.3266, -0.3536], [-0.25, 0.25, -0.3536], [-0.3536, 0.3536, -0.0], [-0.1768, 0.4268, 0.1913], [-0.1913, 0.4619, -0.0], [-0.1353, 0.3266, -0.3536], [0.0, 0.1913, -0.4619], [-0.0732, 0.1768, -0.4619], [-0.1913, 0.4619, -0.0], [0.0, 0.4619, -0.1913], [-0.1768, 0.4268, -0.1913], [-0.1768, 0.4268, 0.1913], [0.0, 0.3536, 0.3536], [0.0, 0.4619, 0.1913], [-0.0732, 0.1768, 0.4619], [-0.0, -0.0, 0.5], [0.0, 0.1913, 0.4619], [0.0, -0.0, -0.5], [-0.0732, 0.1768, -0.4619], [0.0, 0.1913, -0.4619], [-0.1768, 0.4268, -0.1913], [0.0, 0.3536, -0.3536], [-0.1353, 0.3266, -0.3536], [-0.1913, 0.4619, -0.0], [0.0, 0.4619, 0.1913], [0.0, 0.5, -0.0], [-0.0732, 0.1768, 0.4619], [0.0, 0.3536, 0.3536], [-0.1353, 0.3266, 0.3536], [0.0, 0.3536, -0.3536], [0.1353, 0.3266, -0.3536], [0.0732, 0.1768, -0.4619], [0.0, 0.5, -0.0], [0.1913, 0.4619, -0.0], [0.1768, 0.4268, -0.1913], [0.0, 0.3536, 0.3536], [0.1353, 0.3266, 0.3536], [0.1768, 0.4268, 0.1913], [0.0, 0.3536, -0.3536], [0.0, 0.4619, -0.1913], [0.1768, 0.4268, -0.1913], [0.0, 0.5, -0.0], [0.0, 0.4619, 0.1913], [0.1768, 0.4268, 0.1913], [0.0, 0.1913, 0.4619], [0.0732, 0.1768, 0.4619], [0.1353, 0.3266, 0.3536], [0.1353, 0.3266, 0.3536], [0.25, 0.25, 0.3536], [0.3266, 0.3266, 0.1913], [0.1768, 0.4268, -0.1913], [0.3266, 0.3266, -0.1913], [0.25, 0.25, -0.3536], [0.1768, 0.4268, 0.1913], [0.3266, 0.3266, 0.1913], [0.3536, 0.3536, -0.0], [0.0732, 0.1768, 0.4619], [0.1353, 0.1353, 0.4619], [0.25, 0.25, 0.3536], [0.1353, 0.3266, -0.3536], [0.25, 0.25, -0.3536], [0.1353, 0.1353, -0.4619], [0.1913, 0.4619, -0.0], [0.3536, 0.3536, -0.0], [0.3266, 0.3266, -0.1913], [0.3266, 0.3266, -0.1913], [0.4268, 0.1768, -0.1913], [0.3266, 0.1353, -0.3536], [0.3266, 0.3266, 0.1913], [0.4268, 0.1768, 0.1913], [0.4619, 0.1913, -0.0], [0.1353, 0.1353, 0.4619], [0.1768, 0.0732, 0.4619], [0.3266, 0.1353, 0.3536], [0.25, 0.25, -0.3536], [0.3266, 0.1353, -0.3536], [0.1768, 0.0732, -0.4619], [0.3536, 0.3536, -0.0], [0.4619, 0.1913, -0.0], [0.4268, 0.1768, -0.1913], [0.25, 0.25, 0.3536], [0.3266, 0.1353, 0.3536], [0.4268, 0.1768, 0.1913], [0.3266, 0.1353, 0.3536], [0.1768, 0.0732, 0.4619], [0.1913, -0.0, 0.4619], [0.3266, 0.1353, -0.3536], [0.3536, -0.0, -0.3536], [0.1913, -0.0, -0.4619], [0.4619, 0.1913, -0.0], [0.5, -0.0, -0.0], [0.4619, -0.0, -0.1913], [0.3266, 0.1353, 0.3536], [0.3536, -0.0, 0.3536], [0.4619, -0.0, 0.1913], [0.4268, 0.1768, -0.1913], [0.4619, -0.0, -0.1913], [0.3536, -0.0, -0.3536], [0.4619, 0.1913, -0.0], [0.4268, 0.1768, 0.1913], [0.4619, -0.0, 0.1913], [0.1913, -0.0, -0.4619], [0.3536, -0.0, -0.3536], [0.3266, -0.1353, -0.3536], [0.5, -0.0, -0.0], [0.4619, -0.1913, -0.0], [0.4268, -0.1768, -0.1913], [0.4619, -0.0, 0.1913], [0.3536, -0.0, 0.3536], [0.3266, -0.1353, 0.3536], [0.4619, -0.0, -0.1913], [0.4268, -0.1768, -0.1913], [0.3266, -0.1353, -0.3536], [0.4619, -0.0, 0.1913], [0.4268, -0.1768, 0.1913], [0.4619, -0.1913, -0.0], [0.1913, -0.0, 0.4619], [0.1768, -0.0732, 0.4619], [0.3266, -0.1353, 0.3536], [0.4268, -0.1768, -0.1913], [0.3266, -0.3266, -0.1913], [0.25, -0.25, -0.3536], [0.4268, -0.1768, 0.1913], [0.3266, -0.3266, 0.1913], [0.3536, -0.3536, -0.0], [0.1768, -0.0732, 0.4619], [0.1353, -0.1353, 0.4619], [0.25, -0.25, 0.3536], [0.3266, -0.1353, -0.3536], [0.25, -0.25, -0.3536], [0.1353, -0.1353, -0.4619], [0.4619, -0.1913, -0.0], [0.3536, -0.3536, -0.0], [0.3266, -0.3266, -0.1913], [0.4268, -0.1768, 0.1913], [0.3266, -0.1353, 0.3536], [0.25, -0.25, 0.3536], [0.3266, -0.3266, -0.1913], [0.1768, -0.4268, -0.1913], [0.1353, -0.3266, -0.3536], [0.3266, -0.3266, 0.1913], [0.1768, -0.4268, 0.1913], [0.1913, -0.4619, -0.0], [0.1353, -0.1353, 0.4619], [0.0732, -0.1768, 0.4619], [0.1353, -0.3266, 0.3536], [0.1353, -0.1353, -0.4619], [0.25, -0.25, -0.3536], [0.1353, -0.3266, -0.3536], [0.3266, -0.3266, -0.1913], [0.3536, -0.3536, -0.0], [0.1913, -0.4619, -0.0], [0.3266, -0.3266, 0.1913], [0.25, -0.25, 0.3536], [0.1353, -0.3266, 0.3536], [0.0732, -0.1768, -0.4619], [0.1353, -0.3266, -0.3536], [-0.0, -0.3536, -0.3536], [0.1913, -0.4619, -0.0], [-0.0, -0.5, -0.0], [-0.0, -0.4619, -0.1913], [0.1353, -0.3266, 0.3536], [-0.0, -0.3536, 0.3536], [-0.0, -0.4619, 0.1913], [0.1768, -0.4268, -0.1913], [-0.0, -0.4619, -0.1913], [-0.0, -0.3536, -0.3536], [0.1768, -0.4268, 0.1913], [-0.0, -0.4619, 0.1913], [-0.0, -0.5, -0.0], [0.0732, -0.1768, 0.4619], [-0.0, -0.1913, 0.4619], [-0.0, -0.3536, 0.3536], [-0.0, -0.4619, -0.1913], [-0.0, -0.5, -0.0], [-0.1913, -0.4619, -0.0], [-0.0, -0.3536, 0.3536], [-0.1353, -0.3266, 0.3536], [-0.1768, -0.4268, 0.1913], [-0.0, -0.4619, -0.1913], [-0.1768, -0.4268, -0.1913], [-0.1353, -0.3266, -0.3536], [-0.0, -0.5, -0.0], [-0.0, -0.4619, 0.1913], [-0.1768, -0.4268, 0.1913], [-0.0, -0.1913, 0.4619], [-0.0732, -0.1768, 0.4619], [-0.1353, -0.3266, 0.3536], [-0.0, -0.3536, -0.3536], [-0.1353, -0.3266, -0.3536], [-0.0732, -0.1768, -0.4619], [-0.1768, -0.4268, -0.1913], [-0.3266, -0.3266, -0.1913], [-0.25, -0.25, -0.3536], [-0.1768, -0.4268, 0.1913], [-0.3266, -0.3266, 0.1913], [-0.3536, -0.3536, -0.0], [-0.0732, -0.1768, 0.4619], [-0.1353, -0.1353, 0.4619], [-0.25, -0.25, 0.3536], [-0.0732, -0.1768, -0.4619], [-0.1353, -0.3266, -0.3536], [-0.25, -0.25, -0.3536], [-0.1913, -0.4619, -0.0], [-0.3536, -0.3536, -0.0], [-0.3266, -0.3266, -0.1913], [-0.1353, -0.3266, 0.3536], [-0.25, -0.25, 0.3536], [-0.3266, -0.3266, 0.1913], [-0.3266, -0.3266, 0.1913], [-0.4268, -0.1768, 0.1913], [-0.4619, -0.1913, -0.0], [-0.1353, -0.1353, 0.4619], [-0.1768, -0.0732, 0.4619], [-0.3266, -0.1353, 0.3536], [-0.1353, -0.1353, -0.4619], [-0.25, -0.25, -0.3536], [-0.3266, -0.1353, -0.3536], [-0.3536, -0.3536, -0.0], [-0.4619, -0.1913, -0.0], [-0.4268, -0.1768, -0.1913], [-0.25, -0.25, 0.3536], [-0.3266, -0.1353, 0.3536], [-0.4268, -0.1768, 0.1913], [-0.3266, -0.3266, -0.1913], [-0.4268, -0.1768, -0.1913], [-0.3266, -0.1353, -0.3536], [-0.3266, -0.1353, -0.3536], [-0.3536, 0.0, -0.3536], [-0.1913, 0.0, -0.4619], [-0.4619, -0.1913, -0.0], [-0.5, 0.0, -0.0], [-0.4619, 0.0, -0.1913], [-0.4268, -0.1768, 0.1913], [-0.3266, -0.1353, 0.3536], [-0.3536, 0.0, 0.3536], [-0.4268, -0.1768, -0.1913], [-0.4619, 0.0, -0.1913], [-0.3536, 0.0, -0.3536], [-0.4619, -0.1913, -0.0], [-0.4268, -0.1768, 0.1913], [-0.4619, 0.0, 0.1913], [-0.1768, -0.0732, 0.4619], [-0.1913, 0.0, 0.4619], [-0.3536, 0.0, 0.3536], [-0.4619, 0.0, 0.1913], [-0.3536, 0.0, 0.3536], [-0.3266, 0.1353, 0.3536], [-0.4619, 0.0, -0.1913], [-0.4268, 0.1768, -0.1913], [-0.3266, 0.1353, -0.3536], [-0.5, 0.0, -0.0], [-0.4619, 0.0, 0.1913], [-0.4268, 0.1768, 0.1913], [-0.1913, 0.0, 0.4619], [-0.1768, 0.0732, 0.4619], [-0.3266, 0.1353, 0.3536], [-0.3536, 0.0, -0.3536], [-0.3266, 0.1353, -0.3536], [-0.1768, 0.0732, -0.4619], [-0.5, 0.0, -0.0], [-0.4619, 0.1913, -0.0], [-0.4268, 0.1768, -0.1913], [-0.4268, 0.1768, -0.1913], [-0.3266, 0.3266, -0.1913], [-0.25, 0.25, -0.3536], [-0.4619, 0.1913, -0.0], [-0.4268, 0.1768, 0.1913], [-0.3266, 0.3266, 0.1913], [-0.1768, 0.0732, 0.4619], [-0.1353, 0.1353, 0.4619], [-0.25, 0.25, 0.3536], [-0.3266, 0.1353, -0.3536], [-0.25, 0.25, -0.3536], [-0.1353, 0.1353, -0.4619], [-0.4619, 0.1913, -0.0], [-0.3536, 0.3536, -0.0], [-0.3266, 0.3266, -0.1913], [-0.4268, 0.1768, 0.1913], [-0.3266, 0.1353, 0.3536], [-0.25, 0.25, 0.3536], [-0.1353, 0.1353, 0.4619], [-0.0732, 0.1768, 0.4619], [-0.1353, 0.3266, 0.3536], [-0.25, 0.25, -0.3536], [-0.1353, 0.3266, -0.3536], [-0.0732, 0.1768, -0.4619], [-0.3536, 0.3536, -0.0], [-0.1913, 0.4619, -0.0], [-0.1768, 0.4268, -0.1913], [-0.3266, 0.3266, 0.1913], [-0.25, 0.25, 0.3536], [-0.1353, 0.3266, 0.3536], [-0.3266, 0.3266, -0.1913], [-0.1768, 0.4268, -0.1913], [-0.1353, 0.3266, -0.3536], [-0.3536, 0.3536, -0.0], [-0.3266, 0.3266, 0.1913], [-0.1768, 0.4268, 0.1913], [-0.1353, 0.3266, -0.3536], [0.0, 0.3536, -0.3536], [0.0, 0.1913, -0.4619], [-0.1913, 0.4619, -0.0], [0.0, 0.5, -0.0], [0.0, 0.4619, -0.1913], [-0.1768, 0.4268, 0.1913], [-0.1353, 0.3266, 0.3536], [0.0, 0.3536, 0.3536], [-0.1768, 0.4268, -0.1913], [0.0, 0.4619, -0.1913], [0.0, 0.3536, -0.3536], [-0.1913, 0.4619, -0.0], [-0.1768, 0.4268, 0.1913], [0.0, 0.4619, 0.1913], [-0.0732, 0.1768, 0.4619], [0.0, 0.1913, 0.4619], [0.0, 0.3536, 0.3536]], "SimpleDeform_GizmoGroup_": [[-0.5418, -0.9516, -0.7729], [0.5408, -0.9609, -0.961], [0.5411, -0.9515, -0.7726], [-0.5418, 0.0521, 0.7324], [0.544, -0.1063, 0.6365], [0.5443, 0.0554, 0.7334], [-0.5418, -0.815, -0.2267], [-0.3252, -0.8783, -0.4038], [-0.3252, -0.8149, -0.2265], [-0.5418, 0.2221, 0.8132], [0.5443, 0.0554, 0.7334], [0.5446, 0.2259, 0.8139], [-0.5418, -0.3997, 0.3962], [-0.3252, -0.5256, 0.2568], [-0.3252, -0.3993, 0.3965], [-0.5418, 0.4276, -0.313], [-0.5418, -0.1093, 0.6353], [-0.5418, 0.4936, -0.2639], [-0.5418, 0.4936, -0.2639], [-0.5418, 0.0521, 0.7324], [-0.5418, 0.5641, -0.2215], [-0.5418, 0.6384, -0.1862], [-0.5418, 0.0521, 0.7324], [-0.5418, 0.2221, 0.8132], [-0.5418, 0.1217, -0.961], [-0.5418, -0.9516, -0.7729], [-0.5418, 0.1257, -0.8789], [-0.5418, 0.7157, -0.1583], [-0.5418, 0.5819, 0.9231], [-0.5418, 0.7955, -0.1382], [0.3243, -0.8145, -0.2258], [0.5418, -0.8779, -0.4032], [0.5421, -0.8143, -0.2256], [-0.5418, -0.7347, -0.0564], [-0.3252, -0.8149, -0.2265], [-0.3252, -0.7344, -0.0561], [-0.5418, 0.7681, 0.9512], [0.5452, 0.5863, 0.9231], [0.5455, 0.7728, 0.9507], [0.5408, -0.9609, -0.961], [-0.5418, 0.1217, -0.961], [0.5408, 0.1217, -0.961], [0.3243, -0.9392, -0.6896], [-0.3252, -0.9392, -0.6892], [-0.5418, -0.9516, -0.7729], [-0.5418, 0.5819, 0.9231], [0.5449, 0.4034, 0.8774], [0.5452, 0.5863, 0.9231], [-0.5418, -0.8784, -0.404], [-0.3252, -0.924, -0.5866], [-0.3252, -0.8783, -0.4038], [0.5408, 0.7955, -0.1382], [-0.5418, 0.7157, -0.1583], [-0.5418, 0.7955, -0.1382], [0.5408, 0.9589, -0.1217], [-0.5418, 0.9561, 0.9609], [0.5459, 0.9611, 0.9599], [0.5408, 0.4936, -0.2639], [-0.5418, 0.5641, -0.2215], [0.5408, 0.5641, -0.2215], [0.5408, 0.4276, -0.313], [-0.5418, 0.4936, -0.2639], [0.5408, 0.4936, -0.2639], [0.5408, 0.6384, -0.1862], [-0.5418, 0.7157, -0.1583], [0.5408, 0.7157, -0.1583], [-0.5418, 0.1378, -0.7975], [-0.5418, -0.8784, -0.404], [-0.5418, 0.1577, -0.7178], [0.5408, 0.2205, -0.5659], [-0.5418, 0.2627, -0.4954], [0.5408, 0.2627, -0.4954], [-0.5418, 0.1854, -0.6403], [-0.5418, -0.7347, -0.0564], [-0.5418, 0.2205, -0.5659], [-0.5418, 0.7955, -0.1382], [-0.5418, 0.7681, 0.9512], [-0.5418, 0.8768, -0.1259], [-0.5418, 0.1257, -0.8789], [-0.5418, -0.9241, -0.5867], [-0.5418, 0.1378, -0.7975], [-0.5418, 0.2627, -0.4954], [-0.5418, -0.526, 0.2566], [-0.5418, 0.3116, -0.4293], [0.5408, 0.5641, -0.2215], [-0.5418, 0.6384, -0.1862], [0.5408, 0.6384, -0.1862], [-0.5418, 0.6384, -0.1862], [-0.5418, 0.3993, 0.877], [-0.5418, 0.7157, -0.1583], [-0.5418, 0.1854, -0.6403], [-0.5418, -0.8784, -0.404], [-0.5418, -0.815, -0.2267], [0.5408, 0.2627, -0.4954], [-0.5418, 0.3116, -0.4293], [0.5408, 0.3116, -0.4293], [0.5408, 0.8768, -0.1259], [-0.5418, 0.7955, -0.1382], [-0.5418, 0.8768, -0.1259], [0.5408, 0.3116, -0.4293], [-0.5418, 0.3668, -0.3683], [0.5408, 0.3668, -0.3683], [0.5408, 0.1217, -0.961], [-0.5418, 0.1257, -0.8789], [0.5408, 0.1257, -0.8789], [0.5408, 0.8768, -0.1259], [-0.5418, 0.9589, -0.1217], [0.5408, 0.9589, -0.1217], [0.5408, 0.1378, -0.7975], [-0.5418, 0.1577, -0.7178], [0.5408, 0.1577, -0.7178], [0.5408, 0.1854, -0.6403], [-0.5418, 0.2205, -0.5659], [0.5408, 0.2205, -0.5659], [0.3243, -0.398, 0.3974], [0.543, -0.5242, 0.258], [0.5433, -0.3976, 0.3976], [0.5408, 0.1378, -0.7975], [-0.5418, 0.1257, -0.8789], [-0.5418, 0.1378, -0.7975], [0.5408, 0.4276, -0.313], [-0.5418, 0.3668, -0.3683], [-0.5418, 0.4276, -0.313], [-0.5418, 0.2627, -0.4954], [-0.5418, -0.7347, -0.0564], [-0.5418, -0.638, 0.1052], [-0.5418, 0.9561, 0.9609], [0.5455, 0.7728, 0.9507], [0.5459, 0.9611, 0.9599], [-0.5418, -0.638, 0.1052], [-0.3252, -0.7344, -0.0561], [-0.3252, -0.6377, 0.1055], [-0.5418, -0.526, 0.2566], [-0.3252, -0.6377, 0.1055], [-0.3252, -0.5256, 0.2568], [0.3243, -0.5246, 0.2577], [0.5427, -0.6366, 0.1065], [0.543, -0.5242, 0.258], [-0.5418, -0.1093, 0.6353], [0.5437, -0.2578, 0.5242], [0.544, -0.1063, 0.6365], [0.5408, 0.1577, -0.7178], [-0.5418, 0.1854, -0.6403], [0.5408, 0.1854, -0.6403], [-0.3252, -0.2897, 0.4961], [0.3243, -0.2897, 0.4955], [0.5437, -0.2578, 0.5242], [0.3243, -0.7338, -0.0554], [0.5421, -0.8143, -0.2256], [0.5424, -0.7336, -0.0552], [0.3243, -0.6369, 0.1063], [0.5424, -0.7336, -0.0552], [0.5427, -0.6366, 0.1065], [-0.5418, 0.3993, 0.877], [0.5446, 0.2259, 0.8139], [0.5449, 0.4034, 0.8774], [-0.5418, 0.3116, -0.4293], [-0.5418, -0.3997, 0.3962], [-0.5418, 0.3668, -0.3683], [-0.5418, 0.8768, -0.1259], [-0.5418, 0.9561, 0.9609], [-0.5418, 0.9589, -0.1217], [-0.5418, 0.4276, -0.313], [-0.5418, -0.3997, 0.3962], [-0.5418, -0.2603, 0.5229], [0.3243, -0.878, -0.4033], [0.5414, -0.9238, -0.5861], [0.5418, -0.8779, -0.4032], [0.3243, -0.9392, 0.9524], [0.3243, -0.7338, -0.0554], [0.3243, -0.6369, 0.1063], [0.3243, -0.2897, 0.9524], [-0.3252, -0.9392, 0.9524], [0.3243, -0.9392, 0.9524], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.6377, 0.1055], [-0.3252, -0.7344, -0.0561], [0.3243, -0.9392, 0.9524], [-0.3252, -0.9392, -0.6892], [0.3243, -0.9392, -0.6896], [-0.3252, -0.2897, 0.4961], [0.3243, -0.2897, 0.9524], [0.3243, -0.2897, 0.4955], [0.5408, 0.3116, -0.4293], [0.5427, -0.6366, 0.1065], [0.5408, 0.2627, -0.4954], [-0.5418, -0.9516, -0.7729], [-0.5418, -0.9609, -0.961], [0.5408, -0.9609, -0.961], [-0.5418, 0.0521, 0.7324], [-0.5418, -0.1093, 0.6353], [0.544, -0.1063, 0.6365], [-0.5418, -0.815, -0.2267], [-0.5418, -0.8784, -0.404], [-0.3252, -0.8783, -0.4038], [-0.5418, 0.2221, 0.8132], [-0.5418, 0.0521, 0.7324], [0.5443, 0.0554, 0.7334], [-0.5418, -0.3997, 0.3962], [-0.5418, -0.526, 0.2566], [-0.3252, -0.5256, 0.2568], [-0.5418, 0.4276, -0.313], [-0.5418, -0.2603, 0.5229], [-0.5418, -0.1093, 0.6353], [-0.5418, 0.4936, -0.2639], [-0.5418, -0.1093, 0.6353], [-0.5418, 0.0521, 0.7324], [-0.5418, 0.6384, -0.1862], [-0.5418, 0.5641, -0.2215], [-0.5418, 0.0521, 0.7324], [-0.5418, 0.1217, -0.961], [-0.5418, -0.9609, -0.961], [-0.5418, -0.9516, -0.7729], [-0.5418, 0.7157, -0.1583], [-0.5418, 0.3993, 0.877], [-0.5418, 0.5819, 0.9231], [0.3243, -0.8145, -0.2258], [0.3243, -0.878, -0.4033], [0.5418, -0.8779, -0.4032], [-0.5418, -0.7347, -0.0564], [-0.5418, -0.815, -0.2267], [-0.3252, -0.8149, -0.2265], [-0.5418, 0.7681, 0.9512], [-0.5418, 0.5819, 0.9231], [0.5452, 0.5863, 0.9231], [0.5408, -0.9609, -0.961], [-0.5418, -0.9609, -0.961], [-0.5418, 0.1217, -0.961], [0.5411, -0.9515, -0.7726], [0.5414, -0.9238, -0.5861], [0.3243, -0.9392, -0.6896], [0.5414, -0.9238, -0.5861], [0.3243, -0.9239, -0.5862], [0.3243, -0.9392, -0.6896], [-0.3252, -0.924, -0.5866], [-0.5418, -0.9241, -0.5867], [-0.3252, -0.9392, -0.6892], [-0.5418, -0.9241, -0.5867], [-0.5418, -0.9516, -0.7729], [-0.3252, -0.9392, -0.6892], [0.5411, -0.9515, -0.7726], [0.3243, -0.9392, -0.6896], [-0.5418, -0.9516, -0.7729], [-0.5418, 0.5819, 0.9231], [-0.5418, 0.3993, 0.877], [0.5449, 0.4034, 0.8774], [-0.5418, -0.8784, -0.404], [-0.5418, -0.9241, -0.5867], [-0.3252, -0.924, -0.5866], [0.5408, 0.7955, -0.1382], [0.5408, 0.7157, -0.1583], [-0.5418, 0.7157, -0.1583], [0.5408, 0.9589, -0.1217], [-0.5418, 0.9589, -0.1217], [-0.5418, 0.9561, 0.9609], [0.5408, 0.4936, -0.2639], [-0.5418, 0.4936, -0.2639], [-0.5418, 0.5641, -0.2215], [0.5408, 0.4276, -0.313], [-0.5418, 0.4276, -0.313], [-0.5418, 0.4936, -0.2639], [0.5408, 0.6384, -0.1862], [-0.5418, 0.6384, -0.1862], [-0.5418, 0.7157, -0.1583], [-0.5418, 0.1378, -0.7975], [-0.5418, -0.9241, -0.5867], [-0.5418, -0.8784, -0.404], [0.5408, 0.2205, -0.5659], [-0.5418, 0.2205, -0.5659], [-0.5418, 0.2627, -0.4954], [-0.5418, 0.1854, -0.6403], [-0.5418, -0.815, -0.2267], [-0.5418, -0.7347, -0.0564], [-0.5418, 0.7955, -0.1382], [-0.5418, 0.5819, 0.9231], [-0.5418, 0.7681, 0.9512], [-0.5418, 0.1257, -0.8789], [-0.5418, -0.9516, -0.7729], [-0.5418, -0.9241, -0.5867], [-0.5418, 0.2627, -0.4954], [-0.5418, -0.638, 0.1052], [-0.5418, -0.526, 0.2566], [0.5408, 0.5641, -0.2215], [-0.5418, 0.5641, -0.2215], [-0.5418, 0.6384, -0.1862], [-0.5418, 0.6384, -0.1862], [-0.5418, 0.2221, 0.8132], [-0.5418, 0.3993, 0.877], [-0.5418, 0.1854, -0.6403], [-0.5418, 0.1577, -0.7178], [-0.5418, -0.8784, -0.404], [0.5408, 0.2627, -0.4954], [-0.5418, 0.2627, -0.4954], [-0.5418, 0.3116, -0.4293], [0.5408, 0.8768, -0.1259], [0.5408, 0.7955, -0.1382], [-0.5418, 0.7955, -0.1382], [0.5408, 0.3116, -0.4293], [-0.5418, 0.3116, -0.4293], [-0.5418, 0.3668, -0.3683], [0.5408, 0.1217, -0.961], [-0.5418, 0.1217, -0.961], [-0.5418, 0.1257, -0.8789], [0.5408, 0.8768, -0.1259], [-0.5418, 0.8768, -0.1259], [-0.5418, 0.9589, -0.1217], [0.5408, 0.1378, -0.7975], [-0.5418, 0.1378, -0.7975], [-0.5418, 0.1577, -0.7178], [0.5408, 0.1854, -0.6403], [-0.5418, 0.1854, -0.6403], [-0.5418, 0.2205, -0.5659], [0.3243, -0.398, 0.3974], [0.3243, -0.5246, 0.2577], [0.543, -0.5242, 0.258], [0.5408, 0.1378, -0.7975], [0.5408, 0.1257, -0.8789], [-0.5418, 0.1257, -0.8789], [0.5408, 0.4276, -0.313], [0.5408, 0.3668, -0.3683], [-0.5418, 0.3668, -0.3683], [-0.5418, 0.2627, -0.4954], [-0.5418, 0.2205, -0.5659], [-0.5418, -0.7347, -0.0564], [-0.5418, 0.9561, 0.9609], [-0.5418, 0.7681, 0.9512], [0.5455, 0.7728, 0.9507], [-0.5418, -0.638, 0.1052], [-0.5418, -0.7347, -0.0564], [-0.3252, -0.7344, -0.0561], [-0.5418, -0.526, 0.2566], [-0.5418, -0.638, 0.1052], [-0.3252, -0.6377, 0.1055], [0.3243, -0.5246, 0.2577], [0.3243, -0.6369, 0.1063], [0.5427, -0.6366, 0.1065], [-0.5418, -0.1093, 0.6353], [-0.5418, -0.2603, 0.5229], [0.5437, -0.2578, 0.5242], [0.5408, 0.1577, -0.7178], [-0.5418, 0.1577, -0.7178], [-0.5418, 0.1854, -0.6403], [0.3243, -0.2897, 0.4955], [0.3243, -0.398, 0.3974], [0.5433, -0.3976, 0.3976], [-0.5418, -0.2603, 0.5229], [-0.5418, -0.3997, 0.3962], [-0.3252, -0.2897, 0.4961], [-0.5418, -0.3997, 0.3962], [-0.3252, -0.3993, 0.3965], [-0.3252, -0.2897, 0.4961], [0.3243, -0.2897, 0.4955], [0.5433, -0.3976, 0.3976], [0.5437, -0.2578, 0.5242], [-0.5418, -0.2603, 0.5229], [-0.3252, -0.2897, 0.4961], [0.5437, -0.2578, 0.5242], [0.3243, -0.7338, -0.0554], [0.3243, -0.8145, -0.2258], [0.5421, -0.8143, -0.2256], [0.3243, -0.6369, 0.1063], [0.3243, -0.7338, -0.0554], [0.5424, -0.7336, -0.0552], [-0.5418, 0.3993, 0.877], [-0.5418, 0.2221, 0.8132], [0.5446, 0.2259, 0.8139], [-0.5418, 0.3116, -0.4293], [-0.5418, -0.526, 0.2566], [-0.5418, -0.3997, 0.3962], [-0.5418, 0.8768, -0.1259], [-0.5418, 0.7681, 0.9512], [-0.5418, 0.9561, 0.9609], [-0.5418, 0.4276, -0.313], [-0.5418, 0.3668, -0.3683], [-0.5418, -0.3997, 0.3962], [0.3243, -0.878, -0.4033], [0.3243, -0.9239, -0.5862], [0.5414, -0.9238, -0.5861], [0.3243, -0.398, 0.3974], [0.3243, -0.2897, 0.4955], [0.3243, -0.2897, 0.9524], [0.3243, -0.9392, 0.9524], [0.3243, -0.9392, -0.6896], [0.3243, -0.9239, -0.5862], [0.3243, -0.9392, 0.9524], [0.3243, -0.9239, -0.5862], [0.3243, -0.878, -0.4033], [0.3243, -0.398, 0.3974], [0.3243, -0.2897, 0.9524], [0.3243, -0.9392, 0.9524], [0.3243, -0.5246, 0.2577], [0.3243, -0.398, 0.3974], [0.3243, -0.9392, 0.9524], [0.3243, -0.9392, 0.9524], [0.3243, -0.878, -0.4033], [0.3243, -0.8145, -0.2258], [0.3243, -0.9392, 0.9524], [0.3243, -0.8145, -0.2258], [0.3243, -0.7338, -0.0554], [0.3243, -0.6369, 0.1063], [0.3243, -0.5246, 0.2577], [0.3243, -0.9392, 0.9524], [0.3243, -0.2897, 0.9524], [-0.3252, -0.2897, 0.9524], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.924, -0.5866], [-0.3252, -0.9392, -0.6892], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.2897, 0.9524], [-0.3252, -0.3993, 0.3965], [-0.3252, -0.2897, 0.9524], [-0.3252, -0.2897, 0.4961], [-0.3252, -0.3993, 0.3965], [-0.3252, -0.8783, -0.4038], [-0.3252, -0.924, -0.5866], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.8149, -0.2265], [-0.3252, -0.8783, -0.4038], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.3993, 0.3965], [-0.3252, -0.5256, 0.2568], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.5256, 0.2568], [-0.3252, -0.6377, 0.1055], [-0.3252, -0.7344, -0.0561], [-0.3252, -0.8149, -0.2265], [-0.3252, -0.9392, 0.9524], [0.3243, -0.9392, 0.9524], [-0.3252, -0.9392, 0.9524], [-0.3252, -0.9392, -0.6892], [-0.3252, -0.2897, 0.4961], [-0.3252, -0.2897, 0.9524], [0.3243, -0.2897, 0.9524], [0.5408, 0.8768, -0.1259], [0.5408, 0.9589, -0.1217], [0.5455, 0.7728, 0.9507], [0.5408, 0.9589, -0.1217], [0.5459, 0.9611, 0.9599], [0.5455, 0.7728, 0.9507], [0.5455, 0.7728, 0.9507], [0.5452, 0.5863, 0.9231], [0.5408, 0.8768, -0.1259], [0.5408, 0.7157, -0.1583], [0.5449, 0.4034, 0.8774], [0.5446, 0.2259, 0.8139], [0.5452, 0.5863, 0.9231], [0.5449, 0.4034, 0.8774], [0.5408, 0.7955, -0.1382], [0.5408, 0.6384, -0.1862], [0.5446, 0.2259, 0.8139], [0.5443, 0.0554, 0.7334], [0.5443, 0.0554, 0.7334], [0.544, -0.1063, 0.6365], [0.5408, 0.5641, -0.2215], [0.544, -0.1063, 0.6365], [0.5437, -0.2578, 0.5242], [0.5408, 0.4936, -0.2639], [0.5437, -0.2578, 0.5242], [0.5433, -0.3976, 0.3976], [0.5408, 0.4276, -0.313], [0.544, -0.1063, 0.6365], [0.5408, 0.4936, -0.2639], [0.5408, 0.5641, -0.2215], [0.5433, -0.3976, 0.3976], [0.543, -0.5242, 0.258], [0.5408, 0.3668, -0.3683], [0.543, -0.5242, 0.258], [0.5427, -0.6366, 0.1065], [0.5408, 0.3116, -0.4293], [0.5427, -0.6366, 0.1065], [0.5424, -0.7336, -0.0552], [0.5408, 0.2627, -0.4954], [0.5424, -0.7336, -0.0552], [0.5421, -0.8143, -0.2256], [0.5408, 0.2205, -0.5659], [0.5421, -0.8143, -0.2256], [0.5418, -0.8779, -0.4032], [0.5408, 0.1854, -0.6403], [0.5418, -0.8779, -0.4032], [0.5414, -0.9238, -0.5861], [0.5408, 0.1577, -0.7178], [0.5414, -0.9238, -0.5861], [0.5411, -0.9515, -0.7726], [0.5408, 0.1378, -0.7975], [0.5411, -0.9515, -0.7726], [0.5408, -0.9609, -0.961], [0.5408, 0.1257, -0.8789], [0.5408, -0.9609, -0.961], [0.5408, 0.1217, -0.961], [0.5408, 0.1257, -0.8789], [0.5408, 0.1257, -0.8789], [0.5408, 0.1378, -0.7975], [0.5411, -0.9515, -0.7726], [0.5424, -0.7336, -0.0552], [0.5408, 0.2205, -0.5659], [0.5408, 0.2627, -0.4954], [0.5418, -0.8779, -0.4032], [0.5408, 0.1577, -0.7178], [0.5408, 0.1854, -0.6403], [0.5437, -0.2578, 0.5242], [0.5408, 0.4276, -0.313], [0.5408, 0.4936, -0.2639], [0.543, -0.5242, 0.258], [0.5408, 0.3116, -0.4293], [0.5408, 0.3668, -0.3683], [0.5408, 0.4276, -0.313], [0.5433, -0.3976, 0.3976], [0.5408, 0.3668, -0.3683], [0.5443, 0.0554, 0.7334], [0.5408, 0.5641, -0.2215], [0.5408, 0.6384, -0.1862], [0.5449, 0.4034, 0.8774], [0.5408, 0.7157, -0.1583], [0.5408, 0.7955, -0.1382], [0.5446, 0.2259, 0.8139], [0.5408, 0.6384, -0.1862], [0.5408, 0.7157, -0.1583], [0.5408, 0.7955, -0.1382], [0.5408, 0.8768, -0.1259], [0.5452, 0.5863, 0.9231], [0.5408, 0.1378, -0.7975], [0.5408, 0.1577, -0.7178], [0.5414, -0.9238, -0.5861], [0.5408, 0.1854, -0.6403], [0.5408, 0.2205, -0.5659], [0.5421, -0.8143, -0.2256]], "SimpleDeform_Bend_Direction_": [[-1.8493, -0.0163, 0.6596], [-2.1691, -0.1102, 0.8577], [-1.8493, -0.0326, 0.6596], [-1.8493, -0.0, 0.6596], [-2.3369, -0.0551, 0.9858], [-1.8493, -0.0163, 0.6596], [-2.4913, -0.0, 1.1231], [-2.7242, -0.0939, 1.3802], [-2.3369, -0.0551, 0.9858], [-2.3369, -0.0551, 0.9858], [-2.4513, -0.1878, 1.0855], [-2.1691, -0.1102, 0.8577], [2.7242, 0.0939, 1.3802], [2.4913, -0.0, 1.1231], [2.9343, -0.0, 1.7025], [2.4513, 0.1878, 1.0855], [2.3369, 0.0551, 0.9858], [2.7242, 0.0939, 1.3802], [2.1691, 0.1102, 0.8577], [1.8493, 0.0163, 0.6596], [2.3369, 0.0551, 0.9858], [2.3369, 0.0551, 0.9858], [1.8493, -0.0, 0.6596], [2.4913, -0.0, 1.1231], [-1.8493, -0.0, 0.6596], [-2.3369, 0.0551, 0.9858], [-2.4913, -0.0, 1.1231], [-1.8493, 0.0163, 0.6596], [-2.1691, 0.1102, 0.8577], [-2.3369, 0.0551, 0.9858], [-2.3369, 0.0551, 0.9858], [-2.4513, 0.1878, 1.0855], [-2.7242, 0.0939, 1.3802], [-2.4913, -0.0, 1.1231], [-2.7242, 0.0939, 1.3802], [-2.9343, -0.0, 1.7025], [2.4513, -0.1878, 1.0855], [2.3369, -0.0551, 0.9858], [2.1691, -0.1102, 0.8577], [2.7242, -0.0939, 1.3802], [2.4913, -0.0, 1.1231], [2.3369, -0.0551, 0.9858], [2.3369, -0.0551, 0.9858], [1.8493, -0.0, 0.6596], [1.8493, -0.0163, 0.6596], [2.1691, -0.1102, 0.8577], [1.8493, -0.0163, 0.6596], [1.8493, -0.0326, 0.6596], [-1.8493, -0.0, 0.6596], [-1.6437, -0.0163, 0.5574], [-1.6437, -0.0, 0.5574], [-1.8493, 0.0163, 0.6596], [-1.6437, -0.0, 0.5574], [-1.6437, 0.0163, 0.5574], [-1.8493, -0.0163, 0.6596], [-1.6437, -0.0326, 0.5574], [-1.6437, -0.0163, 0.5574], [-1.8493, 0.0326, 0.6596], [-1.6437, 0.0163, 0.5574], [-1.6437, 0.0326, 0.5574], [1.6437, 0.0326, 0.5574], [1.8493, 0.0163, 0.6596], [1.8493, 0.0326, 0.6596], [1.428, 0.0326, 0.4674], [1.6437, 0.0163, 0.5574], [1.6437, 0.0326, 0.5574], [1.2036, 0.0326, 0.3904], [1.428, 0.0163, 0.4674], [1.428, 0.0326, 0.4674], [0.9718, 0.0326, 0.3267], [1.2036, 0.0163, 0.3904], [1.2036, 0.0326, 0.3904], [0.7341, 0.0326, 0.2768], [0.9718, 0.0163, 0.3267], [0.9718, 0.0326, 0.3267], [0.4919, 0.0326, 0.2409], [0.7341, 0.0163, 0.2768], [0.7341, 0.0326, 0.2768], [0.2467, 0.0326, 0.2192], [0.4919, 0.0163, 0.2409], [0.4919, 0.0326, 0.2409], [0.0, 0.0326, 0.212], [0.2467, 0.0163, 0.2192], [0.2467, 0.0326, 0.2192], [-0.2467, 0.0326, 0.2192], [0.0, 0.0163, 0.212], [0.0, 0.0326, 0.212], [-0.4919, 0.0326, 0.2409], [-0.2467, 0.0163, 0.2192], [-0.2467, 0.0326, 0.2192], [-0.7341, 0.0326, 0.2768], [-0.4919, 0.0163, 0.2409], [-0.4919, 0.0326, 0.2409], [-0.9718, 0.0326, 0.3267], [-0.7341, 0.0163, 0.2768], [-0.7341, 0.0326, 0.2768], [-1.2036, 0.0326, 0.3904], [-0.9718, 0.0163, 0.3267], [-0.9718, 0.0326, 0.3267], [-1.428, 0.0326, 0.4674], [-1.2036, 0.0163, 0.3904], [-1.2036, 0.0326, 0.3904], [-1.6437, 0.0326, 0.5574], [-1.428, 0.0163, 0.4674], [-1.428, 0.0326, 0.4674], [1.6437, -0.0163, 0.5574], [1.8493, -0.0326, 0.6596], [1.8493, -0.0163, 0.6596], [1.428, -0.0163, 0.4674], [1.6437, -0.0326, 0.5574], [1.6437, -0.0163, 0.5574], [1.2036, -0.0163, 0.3904], [1.428, -0.0326, 0.4674], [1.428, -0.0163, 0.4674], [0.9718, -0.0163, 0.3267], [1.2036, -0.0326, 0.3904], [1.2036, -0.0163, 0.3904], [0.7341, -0.0163, 0.2768], [0.9718, -0.0326, 0.3267], [0.9718, -0.0163, 0.3267], [0.4919, -0.0163, 0.2409], [0.7341, -0.0326, 0.2768], [0.7341, -0.0163, 0.2768], [0.2467, -0.0163, 0.2192], [0.4919, -0.0326, 0.2409], [0.4919, -0.0163, 0.2409], [0.0, -0.0163, 0.212], [0.2467, -0.0326, 0.2192], [0.2467, -0.0163, 0.2192], [-0.2467, -0.0163, 0.2192], [0.0, -0.0326, 0.212], [0.0, -0.0163, 0.212], [-0.4919, -0.0163, 0.2409], [-0.2467, -0.0326, 0.2192], [-0.2467, -0.0163, 0.2192], [-0.7341, -0.0163, 0.2768], [-0.4919, -0.0326, 0.2409], [-0.4919, -0.0163, 0.2409], [-0.9718, -0.0163, 0.3267], [-0.7341, -0.0326, 0.2768], [-0.7341, -0.0163, 0.2768], [-1.2036, -0.0163, 0.3904], [-0.9718, -0.0326, 0.3267], [-0.9718, -0.0163, 0.3267], [-1.428, -0.0163, 0.4674], [-1.2036, -0.0326, 0.3904], [-1.2036, -0.0163, 0.3904], [-1.6437, -0.0163, 0.5574], [-1.428, -0.0326, 0.4674], [-1.428, -0.0163, 0.4674], [1.6437, 0.0163, 0.5574], [1.8493, -0.0, 0.6596], [1.8493, 0.0163, 0.6596], [1.428, 0.0163, 0.4674], [1.6437, -0.0, 0.5574], [1.6437, 0.0163, 0.5574], [1.2036, 0.0163, 0.3904], [1.428, -0.0, 0.4674], [1.428, 0.0163, 0.4674], [0.9718, 0.0163, 0.3267], [1.2036, -0.0, 0.3904], [1.2036, 0.0163, 0.3904], [0.7341, 0.0163, 0.2768], [0.9718, -0.0, 0.3267], [0.9718, 0.0163, 0.3267], [0.4919, 0.0163, 0.2409], [0.7341, -0.0, 0.2768], [0.7341, 0.0163, 0.2768], [0.2467, 0.0163, 0.2192], [0.4919, -0.0, 0.2409], [0.4919, 0.0163, 0.2409], [0.0, 0.0163, 0.212], [0.2467, -0.0, 0.2192], [0.2467, 0.0163, 0.2192], [-0.2467, 0.0163, 0.2192], [0.0, -0.0, 0.212], [0.0, 0.0163, 0.212], [-0.4919, 0.0163, 0.2409], [-0.2467, -0.0, 0.2192], [-0.2467, 0.0163, 0.2192], [-0.7341, 0.0163, 0.2768], [-0.4919, -0.0, 0.2409], [-0.4919, 0.0163, 0.2409], [-0.9718, 0.0163, 0.3267], [-0.7341, -0.0, 0.2768], [-0.7341, 0.0163, 0.2768], [-1.2036, 0.0163, 0.3904], [-0.9718, -0.0, 0.3267], [-0.9718, 0.0163, 0.3267], [-1.428, 0.0163, 0.4674], [-1.2036, -0.0, 0.3904], [-1.2036, 0.0163, 0.3904], [-1.6437, 0.0163, 0.5574], [-1.428, -0.0, 0.4674], [-1.428, 0.0163, 0.4674], [1.6437, -0.0, 0.5574], [1.8493, -0.0163, 0.6596], [1.8493, -0.0, 0.6596], [1.428, -0.0, 0.4674], [1.6437, -0.0163, 0.5574], [1.6437, -0.0, 0.5574], [1.2036, -0.0, 0.3904], [1.428, -0.0163, 0.4674], [1.428, -0.0, 0.4674], [0.9718, -0.0, 0.3267], [1.2036, -0.0163, 0.3904], [1.2036, -0.0, 0.3904], [0.7341, -0.0, 0.2768], [0.9718, -0.0163, 0.3267], [0.9718, -0.0, 0.3267], [0.4919, -0.0, 0.2409], [0.7341, -0.0163, 0.2768], [0.7341, -0.0, 0.2768], [0.2467, -0.0, 0.2192], [0.4919, -0.0163, 0.2409], [0.4919, -0.0, 0.2409], [0.0, -0.0, 0.212], [0.2467, -0.0163, 0.2192], [0.2467, -0.0, 0.2192], [-0.2467, -0.0, 0.2192], [0.0, -0.0163, 0.212], [0.0, -0.0, 0.212], [-0.4919, -0.0, 0.2409], [-0.2467, -0.0163, 0.2192], [-0.2467, -0.0, 0.2192], [-0.7341, -0.0, 0.2768], [-0.4919, -0.0163, 0.2409], [-0.4919, -0.0, 0.2409], [-0.9718, -0.0, 0.3267], [-0.7341, -0.0163, 0.2768], [-0.7341, -0.0, 0.2768], [-1.2036, -0.0, 0.3904], [-0.9718, -0.0163, 0.3267], [-0.9718, -0.0, 0.3267], [-1.428, -0.0, 0.4674], [-1.2036, -0.0163, 0.3904], [-1.2036, -0.0, 0.3904], [-1.6437, -0.0, 0.5574], [-1.428, -0.0163, 0.4674], [-1.428, -0.0, 0.4674], [-1.8493, -0.0163, 0.6596], [-2.3369, -0.0551, 0.9858], [-2.1691, -0.1102, 0.8577], [-1.8493, -0.0, 0.6596], [-2.4913, -0.0, 1.1231], [-2.3369, -0.0551, 0.9858], [-2.4913, -0.0, 1.1231], [-2.9343, -0.0, 1.7025], [-2.7242, -0.0939, 1.3802], [-2.3369, -0.0551, 0.9858], [-2.7242, -0.0939, 1.3802], [-2.4513, -0.1878, 1.0855], [2.7242, 0.0939, 1.3802], [2.3369, 0.0551, 0.9858], [2.4913, -0.0, 1.1231], [2.4513, 0.1878, 1.0855], [2.1691, 0.1102, 0.8577], [2.3369, 0.0551, 0.9858], [2.1691, 0.1102, 0.8577], [1.8493, 0.0326, 0.6596], [1.8493, 0.0163, 0.6596], [2.3369, 0.0551, 0.9858], [1.8493, 0.0163, 0.6596], [1.8493, -0.0, 0.6596], [-1.8493, -0.0, 0.6596], [-1.8493, 0.0163, 0.6596], [-2.3369, 0.0551, 0.9858], [-1.8493, 0.0163, 0.6596], [-1.8493, 0.0326, 0.6596], [-2.1691, 0.1102, 0.8577], [-2.3369, 0.0551, 0.9858], [-2.1691, 0.1102, 0.8577], [-2.4513, 0.1878, 1.0855], [-2.4913, -0.0, 1.1231], [-2.3369, 0.0551, 0.9858], [-2.7242, 0.0939, 1.3802], [2.4513, -0.1878, 1.0855], [2.7242, -0.0939, 1.3802], [2.3369, -0.0551, 0.9858], [2.7242, -0.0939, 1.3802], [2.9343, -0.0, 1.7025], [2.4913, -0.0, 1.1231], [2.3369, -0.0551, 0.9858], [2.4913, -0.0, 1.1231], [1.8493, -0.0, 0.6596], [2.1691, -0.1102, 0.8577], [2.3369, -0.0551, 0.9858], [1.8493, -0.0163, 0.6596], [-1.8493, -0.0, 0.6596], [-1.8493, -0.0163, 0.6596], [-1.6437, -0.0163, 0.5574], [-1.8493, 0.0163, 0.6596], [-1.8493, -0.0, 0.6596], [-1.6437, -0.0, 0.5574], [-1.8493, -0.0163, 0.6596], [-1.8493, -0.0326, 0.6596], [-1.6437, -0.0326, 0.5574], [-1.8493, 0.0326, 0.6596], [-1.8493, 0.0163, 0.6596], [-1.6437, 0.0163, 0.5574], [1.6437, 0.0326, 0.5574], [1.6437, 0.0163, 0.5574], [1.8493, 0.0163, 0.6596], [1.428, 0.0326, 0.4674], [1.428, 0.0163, 0.4674], [1.6437, 0.0163, 0.5574], [1.2036, 0.0326, 0.3904], [1.2036, 0.0163, 0.3904], [1.428, 0.0163, 0.4674], [0.9718, 0.0326, 0.3267], [0.9718, 0.0163, 0.3267], [1.2036, 0.0163, 0.3904], [0.7341, 0.0326, 0.2768], [0.7341, 0.0163, 0.2768], [0.9718, 0.0163, 0.3267], [0.4919, 0.0326, 0.2409], [0.4919, 0.0163, 0.2409], [0.7341, 0.0163, 0.2768], [0.2467, 0.0326, 0.2192], [0.2467, 0.0163, 0.2192], [0.4919, 0.0163, 0.2409], [0.0, 0.0326, 0.212], [0.0, 0.0163, 0.212], [0.2467, 0.0163, 0.2192], [-0.2467, 0.0326, 0.2192], [-0.2467, 0.0163, 0.2192], [0.0, 0.0163, 0.212], [-0.4919, 0.0326, 0.2409], [-0.4919, 0.0163, 0.2409], [-0.2467, 0.0163, 0.2192], [-0.7341, 0.0326, 0.2768], [-0.7341, 0.0163, 0.2768], [-0.4919, 0.0163, 0.2409], [-0.9718, 0.0326, 0.3267], [-0.9718, 0.0163, 0.3267], [-0.7341, 0.0163, 0.2768], [-1.2036, 0.0326, 0.3904], [-1.2036, 0.0163, 0.3904], [-0.9718, 0.0163, 0.3267], [-1.428, 0.0326, 0.4674], [-1.428, 0.0163, 0.4674], [-1.2036, 0.0163, 0.3904], [-1.6437, 0.0326, 0.5574], [-1.6437, 0.0163, 0.5574], [-1.428, 0.0163, 0.4674], [1.6437, -0.0163, 0.5574], [1.6437, -0.0326, 0.5574], [1.8493, -0.0326, 0.6596], [1.428, -0.0163, 0.4674], [1.428, -0.0326, 0.4674], [1.6437, -0.0326, 0.5574], [1.2036, -0.0163, 0.3904], [1.2036, -0.0326, 0.3904], [1.428, -0.0326, 0.4674], [0.9718, -0.0163, 0.3267], [0.9718, -0.0326, 0.3267], [1.2036, -0.0326, 0.3904], [0.7341, -0.0163, 0.2768], [0.7341, -0.0326, 0.2768], [0.9718, -0.0326, 0.3267], [0.4919, -0.0163, 0.2409], [0.4919, -0.0326, 0.2409], [0.7341, -0.0326, 0.2768], [0.2467, -0.0163, 0.2192], [0.2467, -0.0326, 0.2192], [0.4919, -0.0326, 0.2409], [0.0, -0.0163, 0.212], [0.0, -0.0326, 0.212], [0.2467, -0.0326, 0.2192], [-0.2467, -0.0163, 0.2192], [-0.2467, -0.0326, 0.2192], [0.0, -0.0326, 0.212], [-0.4919, -0.0163, 0.2409], [-0.4919, -0.0326, 0.2409], [-0.2467, -0.0326, 0.2192], [-0.7341, -0.0163, 0.2768], [-0.7341, -0.0326, 0.2768], [-0.4919, -0.0326, 0.2409], [-0.9718, -0.0163, 0.3267], [-0.9718, -0.0326, 0.3267], [-0.7341, -0.0326, 0.2768], [-1.2036, -0.0163, 0.3904], [-1.2036, -0.0326, 0.3904], [-0.9718, -0.0326, 0.3267], [-1.428, -0.0163, 0.4674], [-1.428, -0.0326, 0.4674], [-1.2036, -0.0326, 0.3904], [-1.6437, -0.0163, 0.5574], [-1.6437, -0.0326, 0.5574], [-1.428, -0.0326, 0.4674], [1.6437, 0.0163, 0.5574], [1.6437, -0.0, 0.5574], [1.8493, -0.0, 0.6596], [1.428, 0.0163, 0.4674], [1.428, -0.0, 0.4674], [1.6437, -0.0, 0.5574], [1.2036, 0.0163, 0.3904], [1.2036, -0.0, 0.3904], [1.428, -0.0, 0.4674], [0.9718, 0.0163, 0.3267], [0.9718, -0.0, 0.3267], [1.2036, -0.0, 0.3904], [0.7341, 0.0163, 0.2768], [0.7341, -0.0, 0.2768], [0.9718, -0.0, 0.3267], [0.4919, 0.0163, 0.2409], [0.4919, -0.0, 0.2409], [0.7341, -0.0, 0.2768], [0.2467, 0.0163, 0.2192], [0.2467, -0.0, 0.2192], [0.4919, -0.0, 0.2409], [0.0, 0.0163, 0.212], [0.0, -0.0, 0.212], [0.2467, -0.0, 0.2192], [-0.2467, 0.0163, 0.2192], [-0.2467, -0.0, 0.2192], [0.0, -0.0, 0.212], [-0.4919, 0.0163, 0.2409], [-0.4919, -0.0, 0.2409], [-0.2467, -0.0, 0.2192], [-0.7341, 0.0163, 0.2768], [-0.7341, -0.0, 0.2768], [-0.4919, -0.0, 0.2409], [-0.9718, 0.0163, 0.3267], [-0.9718, -0.0, 0.3267], [-0.7341, -0.0, 0.2768], [-1.2036, 0.0163, 0.3904], [-1.2036, -0.0, 0.3904], [-0.9718, -0.0, 0.3267], [-1.428, 0.0163, 0.4674], [-1.428, -0.0, 0.4674], [-1.2036, -0.0, 0.3904], [-1.6437, 0.0163, 0.5574], [-1.6437, -0.0, 0.5574], [-1.428, -0.0, 0.4674], [1.6437, -0.0, 0.5574], [1.6437, -0.0163, 0.5574], [1.8493, -0.0163, 0.6596], [1.428, -0.0, 0.4674], [1.428, -0.0163, 0.4674], [1.6437, -0.0163, 0.5574], [1.2036, -0.0, 0.3904], [1.2036, -0.0163, 0.3904], [1.428, -0.0163, 0.4674], [0.9718, -0.0, 0.3267], [0.9718, -0.0163, 0.3267], [1.2036, -0.0163, 0.3904], [0.7341, -0.0, 0.2768], [0.7341, -0.0163, 0.2768], [0.9718, -0.0163, 0.3267], [0.4919, -0.0, 0.2409], [0.4919, -0.0163, 0.2409], [0.7341, -0.0163, 0.2768], [0.2467, -0.0, 0.2192], [0.2467, -0.0163, 0.2192], [0.4919, -0.0163, 0.2409], [0.0, -0.0, 0.212], [0.0, -0.0163, 0.212], [0.2467, -0.0163, 0.2192], [-0.2467, -0.0, 0.2192], [-0.2467, -0.0163, 0.2192], [0.0, -0.0163, 0.212], [-0.4919, -0.0, 0.2409], [-0.4919, -0.0163, 0.2409], [-0.2467, -0.0163, 0.2192], [-0.7341, -0.0, 0.2768], [-0.7341, -0.0163, 0.2768], [-0.4919, -0.0163, 0.2409], [-0.9718, -0.0, 0.3267], [-0.9718, -0.0163, 0.3267], [-0.7341, -0.0163, 0.2768], [-1.2036, -0.0, 0.3904], [-1.2036, -0.0163, 0.3904], [-0.9718, -0.0163, 0.3267], [-1.428, -0.0, 0.4674], [-1.428, -0.0163, 0.4674], [-1.2036, -0.0163, 0.3904], [-1.6437, -0.0, 0.5574], [-1.6437, -0.0163, 0.5574], [-1.428, -0.0163, 0.4674]], "SimpleDeform_A_": [[-0.0, -0.0339, 0.9015], [0.0063, -0.057, 0.9464], [-0.0, -0.0569, 0.9448], [0.0285, -0.0337, 0.9093], [0.0111, -0.0572, 0.9509], [0.0063, -0.057, 0.9464], [0.0491, -0.0331, 0.9303], [0.0131, -0.0576, 0.9573], [0.0111, -0.0572, 0.9509], [0.0563, -0.0324, 0.9587], [0.0116, -0.0579, 0.964], [0.0131, -0.0576, 0.9573], [0.0484, -0.0316, 0.9867], [0.0068, -0.0582, 0.9691], [0.0116, -0.0579, 0.964], [0.0278, -0.031, 1.0069], [-0.0, -0.0583, 0.971], [0.0068, -0.0582, 0.9691], [-0.0, -0.0583, 0.971], [-0.0278, -0.031, 1.0069], [-0.0068, -0.0582, 0.9691], [-0.0068, -0.0582, 0.9691], [-0.0484, -0.0316, 0.9867], [-0.0116, -0.0579, 0.964], [-0.0116, -0.0579, 0.964], [-0.0563, -0.0324, 0.9587], [-0.0131, -0.0576, 0.9573], [-0.0131, -0.0576, 0.9573], [-0.0491, -0.0331, 0.9303], [-0.0111, -0.0572, 0.9509], [0.0285, -0.0337, 0.9093], [-0.0, 0.0317, 0.9542], [0.0021, 0.0317, 0.9547], [-0.0111, -0.0572, 0.9509], [-0.0285, -0.0337, 0.9093], [-0.0063, -0.057, 0.9464], [-0.0063, -0.057, 0.9464], [-0.0, -0.0339, 0.9015], [-0.0, -0.0569, 0.9448], [-0.0278, -0.031, 1.0069], [-0.0035, 0.0318, 0.9604], [-0.0484, -0.0316, 0.9867], [-0.0063, -0.057, -0.9179], [-0.0, -0.0339, -0.873], [-0.0285, -0.0337, -0.8807], [-0.0063, -0.057, -0.9179], [-0.0, -0.1151, -0.9203], [-0.0, -0.0569, -0.9162], [-0.0024, -0.1151, -0.9209], [-0.0, -0.1632, -0.914], [-0.0, -0.1151, -0.9203], [-0.0024, -0.2109, -0.906], [-0.0, -0.1632, -0.914], [-0.0024, -0.1633, -0.9147], [-0.0024, -0.258, -0.8949], [-0.0, -0.2108, -0.9054], [-0.0024, -0.2109, -0.906], [-0.0024, -0.3045, -0.8813], [-0.0, -0.2579, -0.8943], [-0.0024, -0.258, -0.8949], [-0.0024, -0.3502, -0.8654], [-0.0, -0.3043, -0.8807], [-0.0024, -0.3045, -0.8813], [-0.0024, -0.3951, -0.8472], [-0.0, -0.35, -0.8648], [-0.0024, -0.3502, -0.8654], [-0.0024, -0.4389, -0.8267], [-0.0, -0.3948, -0.8466], [-0.0024, -0.3951, -0.8472], [-0.0024, -0.4817, -0.8039], [-0.0, -0.4386, -0.8261], [-0.0024, -0.4389, -0.8267], [-0.0024, -0.5232, -0.779], [-0.0, -0.4814, -0.8034], [-0.0024, -0.4817, -0.8039], [-0.0024, -0.5633, -0.752], [-0.0, -0.5228, -0.7785], [-0.0024, -0.5232, -0.779], [-0.0024, -0.6021, -0.7229], [-0.0, -0.563, -0.7515], [-0.0024, -0.5633, -0.752], [-0.0024, -0.6392, -0.6919], [-0.0, -0.6017, -0.7224], [-0.0024, -0.6021, -0.7229], [-0.0024, -0.6748, -0.659], [-0.0, -0.6388, -0.6914], [-0.0024, -0.6392, -0.6919], [-0.0024, -0.7086, -0.6243], [-0.0, -0.6743, -0.6586], [-0.0024, -0.6748, -0.659], [-0.0024, -0.7405, -0.588], [-0.0, -0.7081, -0.6239], [-0.0024, -0.7086, -0.6243], [-0.0024, -0.7706, -0.55], [-0.0, -0.74, -0.5876], [-0.0024, -0.7405, -0.588], [-0.0024, -0.7986, -0.5105], [-0.0, -0.7701, -0.5496], [-0.0024, -0.7706, -0.55], [-0.0024, -0.8246, -0.4697], [-0.0, -0.7981, -0.5102], [-0.0024, -0.7986, -0.5105], [-0.0024, -0.8484, -0.4276], [-0.0, -0.8241, -0.4694], [-0.0024, -0.8246, -0.4697], [-0.0024, -0.8701, -0.3843], [-0.0, -0.8479, -0.4273], [-0.0024, -0.8484, -0.4276], [-0.0024, -0.8895, -0.3399], [-0.0, -0.8695, -0.384], [-0.0024, -0.8701, -0.3843], [-0.0024, -0.9066, -0.2946], [-0.0, -0.8889, -0.3397], [-0.0024, -0.8895, -0.3399], [-0.0024, -0.9213, -0.2485], [-0.0, -0.906, -0.2944], [-0.0024, -0.9066, -0.2946], [-0.0024, -0.9336, -0.2017], [-0.0, -0.9207, -0.2483], [-0.0024, -0.9213, -0.2485], [-0.0024, -0.9435, -0.1543], [-0.0, -0.933, -0.2015], [-0.0024, -0.9336, -0.2017], [-0.0024, -0.951, -0.1064], [-0.0, -0.9429, -0.1542], [-0.0024, -0.9435, -0.1543], [-0.0024, -0.9559, -0.0583], [-0.0, -0.9503, -0.1063], [-0.0024, -0.951, -0.1064], [-0.0024, -0.9584, -0.0099], [-0.0, -0.9553, -0.0582], [-0.0024, -0.9559, -0.0583], [-0.0024, -0.9584, 0.0385], [-0.0, -0.9578, -0.0099], [-0.0024, -0.9584, -0.0099], [-0.0024, -0.9559, 0.0868], [-0.0, -0.9578, 0.0385], [-0.0024, -0.9584, 0.0385], [-0.0024, -0.951, 0.135], [-0.0, -0.9553, 0.0868], [-0.0024, -0.9559, 0.0868], [-0.0024, -0.9435, 0.1828], [-0.0, -0.9503, 0.1349], [-0.0024, -0.951, 0.135], [-0.0024, -0.9336, 0.2302], [-0.0, -0.9429, 0.1827], [-0.0024, -0.9435, 0.1828], [-0.0024, -0.9213, 0.277], [-0.0, -0.933, 0.2301], [-0.0024, -0.9336, 0.2302], [-0.0024, -0.9066, 0.3232], [-0.0, -0.9207, 0.2769], [-0.0024, -0.9213, 0.277], [-0.0024, -0.8895, 0.3685], [-0.0, -0.906, 0.323], [-0.0024, -0.9066, 0.3232], [-0.0024, -0.8701, 0.4128], [-0.0, -0.8889, 0.3682], [-0.0024, -0.8895, 0.3685], [-0.0024, -0.8484, 0.4561], [-0.0, -0.8695, 0.4126], [-0.0024, -0.8701, 0.4128], [-0.0024, -0.8246, 0.4983], [-0.0, -0.8479, 0.4558], [-0.0024, -0.8484, 0.4561], [-0.0024, -0.7986, 0.5391], [-0.0, -0.8241, 0.498], [-0.0024, -0.8246, 0.4983], [-0.0024, -0.7706, 0.5786], [-0.0, -0.7981, 0.5388], [-0.0024, -0.7986, 0.5391], [-0.0024, -0.7405, 0.6165], [-0.0, -0.7701, 0.5782], [-0.0024, -0.7706, 0.5786], [-0.0024, -0.7086, 0.6529], [-0.0, -0.74, 0.6161], [-0.0024, -0.7405, 0.6165], [-0.0024, -0.6748, 0.6876], [-0.0, -0.7081, 0.6525], [-0.0024, -0.7086, 0.6529], [-0.0024, -0.6392, 0.7205], [-0.0, -0.6743, 0.6871], [-0.0024, -0.6748, 0.6876], [-0.0024, -0.6021, 0.7515], [-0.0, -0.6388, 0.72], [-0.0024, -0.6392, 0.7205], [-0.0024, -0.5633, 0.7805], [-0.0, -0.6017, 0.751], [-0.0024, -0.6021, 0.7515], [-0.0024, -0.5232, 0.8076], [-0.0, -0.563, 0.78], [-0.0024, -0.5633, 0.7805], [-0.0024, -0.4817, 0.8325], [-0.0, -0.5228, 0.807], [-0.0024, -0.5232, 0.8076], [-0.0024, -0.4389, 0.8552], [-0.0, -0.4814, 0.8319], [-0.0024, -0.4817, 0.8325], [-0.0024, -0.3951, 0.8758], [-0.0, -0.4386, 0.8547], [-0.0024, -0.4389, 0.8552], [-0.0024, -0.3502, 0.894], [-0.0, -0.3948, 0.8752], [-0.0024, -0.3951, 0.8758], [-0.0024, -0.3045, 0.9099], [-0.0, -0.35, 0.8934], [-0.0024, -0.3502, 0.894], [-0.0024, -0.258, 0.9234], [-0.0, -0.3043, 0.9093], [-0.0024, -0.3045, 0.9099], [-0.0024, -0.2109, 0.9346], [-0.0, -0.2579, 0.9228], [-0.0024, -0.258, 0.9234], [-0.0024, -0.1633, 0.9432], [-0.0, -0.2108, 0.934], [-0.0024, -0.2109, 0.9346], [-0.0024, -0.1151, 0.9495], [-0.0, -0.1632, 0.9426], [-0.0024, -0.1633, 0.9432], [-0.0063, -0.057, 0.9464], [-0.0, -0.115, 0.9489], [-0.0024, -0.1151, 0.9495], [-0.0111, -0.0572, -0.9223], [-0.0285, -0.0337, -0.8807], [-0.0491, -0.0331, -0.9017], [-0.0111, -0.0572, -0.9223], [-0.0024, -0.1151, -0.9209], [-0.0063, -0.057, -0.9179], [-0.0043, -0.1153, -0.9226], [-0.0024, -0.1633, -0.9147], [-0.0024, -0.1151, -0.9209], [-0.0043, -0.1635, -0.9164], [-0.0024, -0.2109, -0.906], [-0.0024, -0.1633, -0.9147], [-0.0043, -0.2113, -0.9077], [-0.0024, -0.258, -0.8949], [-0.0024, -0.2109, -0.906], [-0.0043, -0.2585, -0.8965], [-0.0024, -0.3045, -0.8813], [-0.0024, -0.258, -0.8949], [-0.0043, -0.305, -0.883], [-0.0024, -0.3502, -0.8654], [-0.0024, -0.3045, -0.8813], [-0.0043, -0.3508, -0.867], [-0.0024, -0.3951, -0.8472], [-0.0024, -0.3502, -0.8654], [-0.0043, -0.3958, -0.8488], [-0.0024, -0.4389, -0.8267], [-0.0024, -0.3951, -0.8472], [-0.0043, -0.4825, -0.8054], [-0.0024, -0.4389, -0.8267], [-0.0043, -0.4397, -0.8282], [-0.0043, -0.4825, -0.8054], [-0.0024, -0.5232, -0.779], [-0.0024, -0.4817, -0.8039], [-0.0043, -0.5241, -0.7805], [-0.0024, -0.5633, -0.752], [-0.0024, -0.5232, -0.779], [-0.0043, -0.6031, -0.7243], [-0.0024, -0.5633, -0.752], [-0.0043, -0.5643, -0.7534], [-0.0043, -0.6404, -0.6932], [-0.0024, -0.6021, -0.7229], [-0.0043, -0.6031, -0.7243], [-0.0043, -0.676, -0.6602], [-0.0024, -0.6392, -0.6919], [-0.0043, -0.6404, -0.6932], [-0.0043, -0.676, -0.6602], [-0.0024, -0.7086, -0.6243], [-0.0024, -0.6748, -0.659], [-0.0043, -0.7098, -0.6255], [-0.0024, -0.7405, -0.588], [-0.0024, -0.7086, -0.6243], [-0.0043, -0.7418, -0.5891], [-0.0024, -0.7706, -0.55], [-0.0024, -0.7405, -0.588], [-0.0043, -0.7719, -0.551], [-0.0024, -0.7986, -0.5105], [-0.0024, -0.7706, -0.55], [-0.0043, -0.8001, -0.5115], [-0.0024, -0.8246, -0.4697], [-0.0024, -0.7986, -0.5105], [-0.0043, -0.8261, -0.4706], [-0.0024, -0.8484, -0.4276], [-0.0024, -0.8246, -0.4697], [-0.0043, -0.8717, -0.385], [-0.0024, -0.8484, -0.4276], [-0.0043, -0.85, -0.4284], [-0.0043, -0.8911, -0.3405], [-0.0024, -0.8701, -0.3843], [-0.0043, -0.8717, -0.385], [-0.0043, -0.9082, -0.2952], [-0.0024, -0.8895, -0.3399], [-0.0043, -0.8911, -0.3405], [-0.0043, -0.9229, -0.249], [-0.0024, -0.9066, -0.2946], [-0.0043, -0.9082, -0.2952], [-0.0043, -0.9229, -0.249], [-0.0024, -0.9336, -0.2017], [-0.0024, -0.9213, -0.2485], [-0.0043, -0.9452, -0.1546], [-0.0024, -0.9336, -0.2017], [-0.0043, -0.9353, -0.2021], [-0.0043, -0.9527, -0.1066], [-0.0024, -0.9435, -0.1543], [-0.0043, -0.9452, -0.1546], [-0.0043, -0.9577, -0.0584], [-0.0024, -0.951, -0.1064], [-0.0043, -0.9527, -0.1066], [-0.0043, -0.9602, -0.01], [-0.0024, -0.9559, -0.0583], [-0.0043, -0.9577, -0.0584], [-0.0043, -0.9602, 0.0385], [-0.0024, -0.9584, -0.0099], [-0.0043, -0.9602, -0.01], [-0.0043, -0.9577, 0.087], [-0.0024, -0.9584, 0.0385], [-0.0043, -0.9602, 0.0385], [-0.0043, -0.9577, 0.087], [-0.0024, -0.951, 0.135], [-0.0024, -0.9559, 0.0868], [-0.0043, -0.9452, 0.1832], [-0.0024, -0.951, 0.135], [-0.0043, -0.9527, 0.1352], [-0.0043, -0.9353, 0.2306], [-0.0024, -0.9435, 0.1828], [-0.0043, -0.9452, 0.1832], [-0.0043, -0.9229, 0.2775], [-0.0024, -0.9336, 0.2302], [-0.0043, -0.9353, 0.2306], [-0.0043, -0.9082, 0.3237], [-0.0024, -0.9213, 0.277], [-0.0043, -0.9229, 0.2775], [-0.0043, -0.8911, 0.3691], [-0.0024, -0.9066, 0.3232], [-0.0043, -0.9082, 0.3237], [-0.0043, -0.8717, 0.4136], [-0.0024, -0.8895, 0.3685], [-0.0043, -0.8911, 0.3691], [-0.0043, -0.85, 0.457], [-0.0024, -0.8701, 0.4128], [-0.0043, -0.8717, 0.4136], [-0.0043, -0.8261, 0.4992], [-0.0024, -0.8484, 0.4561], [-0.0043, -0.85, 0.457], [-0.0043, -0.8001, 0.5401], [-0.0024, -0.8246, 0.4983], [-0.0043, -0.8261, 0.4992], [-0.0043, -0.7719, 0.5796], [-0.0024, -0.7986, 0.5391], [-0.0043, -0.8001, 0.5401], [-0.0043, -0.7418, 0.6177], [-0.0024, -0.7706, 0.5786], [-0.0043, -0.7719, 0.5796], [-0.0043, -0.7418, 0.6177], [-0.0024, -0.7086, 0.6529], [-0.0024, -0.7405, 0.6165], [-0.0043, -0.676, 0.6888], [-0.0024, -0.7086, 0.6529], [-0.0043, -0.7098, 0.6541], [-0.0043, -0.6404, 0.7218], [-0.0024, -0.6748, 0.6876], [-0.0043, -0.676, 0.6888], [-0.0043, -0.6031, 0.7528], [-0.0024, -0.6392, 0.7205], [-0.0043, -0.6404, 0.7218], [-0.0043, -0.5643, 0.782], [-0.0024, -0.6021, 0.7515], [-0.0043, -0.6031, 0.7528], [-0.0043, -0.5241, 0.809], [-0.0024, -0.5633, 0.7805], [-0.0043, -0.5643, 0.782], [-0.0043, -0.4825, 0.834], [-0.0024, -0.5232, 0.8076], [-0.0043, -0.5241, 0.809], [-0.0043, -0.4825, 0.834], [-0.0024, -0.4389, 0.8552], [-0.0024, -0.4817, 0.8325], [-0.0043, -0.4397, 0.8568], [-0.0024, -0.3951, 0.8758], [-0.0024, -0.4389, 0.8552], [-0.0043, -0.3958, 0.8774], [-0.0024, -0.3502, 0.894], [-0.0024, -0.3951, 0.8758], [-0.0043, -0.305, 0.9116], [-0.0024, -0.3502, 0.894], [-0.0043, -0.3508, 0.8956], [-0.0043, -0.2585, 0.9251], [-0.0024, -0.3045, 0.9099], [-0.0043, -0.305, 0.9116], [-0.0043, -0.2113, 0.9363], [-0.0024, -0.258, 0.9234], [-0.0043, -0.2585, 0.9251], [-0.0043, -0.1635, 0.945], [-0.0024, -0.2109, 0.9346], [-0.0043, -0.2113, 0.9363], [-0.0043, -0.1153, 0.9512], [-0.0024, -0.1633, 0.9432], [-0.0043, -0.1635, 0.945], [-0.0111, -0.0572, 0.9509], [-0.0024, -0.1151, 0.9495], [-0.0043, -0.1153, 0.9512], [-0.0131, -0.0576, -0.9287], [-0.0491, -0.0331, -0.9017], [-0.0563, -0.0324, -0.9301], [-0.0131, -0.0576, -0.9287], [-0.0043, -0.1153, -0.9226], [-0.0111, -0.0572, -0.9223], [-0.0051, -0.1156, -0.9251], [-0.0043, -0.1635, -0.9164], [-0.0043, -0.1153, -0.9226], [-0.0051, -0.1639, -0.9188], [-0.0043, -0.2113, -0.9077], [-0.0043, -0.1635, -0.9164], [-0.0051, -0.2118, -0.9101], [-0.0043, -0.2585, -0.8965], [-0.0043, -0.2113, -0.9077], [-0.0051, -0.3058, -0.8853], [-0.0043, -0.2585, -0.8965], [-0.0051, -0.2591, -0.8989], [-0.0051, -0.3517, -0.8694], [-0.0043, -0.305, -0.883], [-0.0051, -0.3058, -0.8853], [-0.0051, -0.3517, -0.8694], [-0.0043, -0.3958, -0.8488], [-0.0043, -0.3508, -0.867], [-0.0051, -0.4408, -0.8304], [-0.0043, -0.3958, -0.8488], [-0.0051, -0.3968, -0.851], [-0.0051, -0.4837, -0.8076], [-0.0043, -0.4397, -0.8282], [-0.0051, -0.4408, -0.8304], [-0.0051, -0.5254, -0.7825], [-0.0043, -0.4825, -0.8054], [-0.0051, -0.4837, -0.8076], [-0.0051, -0.5658, -0.7554], [-0.0043, -0.5241, -0.7805], [-0.0051, -0.5254, -0.7825], [-0.0051, -0.5658, -0.7554], [-0.0043, -0.6031, -0.7243], [-0.0043, -0.5643, -0.7534], [-0.0051, -0.642, -0.695], [-0.0043, -0.6031, -0.7243], [-0.0051, -0.6047, -0.7262], [-0.0051, -0.642, -0.695], [-0.0043, -0.676, -0.6602], [-0.0043, -0.6404, -0.6932], [-0.0051, -0.7116, -0.6272], [-0.0043, -0.676, -0.6602], [-0.0051, -0.6777, -0.662], [-0.0051, -0.7116, -0.6272], [-0.0043, -0.7418, -0.5891], [-0.0043, -0.7098, -0.6255], [-0.0051, -0.7437, -0.5907], [-0.0043, -0.7719, -0.551], [-0.0043, -0.7418, -0.5891], [-0.0051, -0.7739, -0.5525], [-0.0043, -0.8001, -0.5115], [-0.0043, -0.7719, -0.551], [-0.0051, -0.8282, -0.4719], [-0.0043, -0.8001, -0.5115], [-0.0051, -0.8021, -0.5129], [-0.0051, -0.8522, -0.4295], [-0.0043, -0.8261, -0.4706], [-0.0051, -0.8282, -0.4719], [-0.0051, -0.8522, -0.4295], [-0.0043, -0.8717, -0.385], [-0.0043, -0.85, -0.4284], [-0.0051, -0.8739, -0.386], [-0.0043, -0.8911, -0.3405], [-0.0043, -0.8717, -0.385], [-0.0051, -0.8934, -0.3415], [-0.0043, -0.9082, -0.2952], [-0.0043, -0.8911, -0.3405], [-0.0051, -0.9253, -0.2496], [-0.0043, -0.9082, -0.2952], [-0.0051, -0.9105, -0.296], [-0.0051, -0.9377, -0.2026], [-0.0043, -0.9229, -0.249], [-0.0051, -0.9253, -0.2496], [-0.0051, -0.9476, -0.155], [-0.0043, -0.9353, -0.2021], [-0.0051, -0.9377, -0.2026], [-0.0051, -0.9551, -0.107], [-0.0043, -0.9452, -0.1546], [-0.0051, -0.9476, -0.155], [-0.0051, -0.9601, -0.0586], [-0.0043, -0.9527, -0.1066], [-0.0051, -0.9551, -0.107], [-0.0051, -0.9601, -0.0586], [-0.0043, -0.9602, -0.01], [-0.0043, -0.9577, -0.0584], [-0.0051, -0.9626, 0.0386], [-0.0043, -0.9602, -0.01], [-0.0051, -0.9626, -0.01], [-0.0051, -0.9601, 0.0872], [-0.0043, -0.9602, 0.0385], [-0.0051, -0.9626, 0.0386], [-0.0051, -0.9601, 0.0872], [-0.0043, -0.9527, 0.1352], [-0.0043, -0.9577, 0.087], [-0.0051, -0.9551, 0.1355], [-0.0043, -0.9452, 0.1832], [-0.0043, -0.9527, 0.1352], [-0.0051, -0.9377, 0.2312], [-0.0043, -0.9452, 0.1832], [-0.0051, -0.9476, 0.1836], [-0.0051, -0.9377, 0.2312], [-0.0043, -0.9229, 0.2775], [-0.0043, -0.9353, 0.2306], [-0.0051, -0.9253, 0.2782], [-0.0043, -0.9082, 0.3237], [-0.0043, -0.9229, 0.2775], [-0.0051, -0.9105, 0.3245], [-0.0043, -0.8911, 0.3691], [-0.0043, -0.9082, 0.3237], [-0.0051, -0.8934, 0.3701], [-0.0043, -0.8717, 0.4136], [-0.0043, -0.8911, 0.3691], [-0.0051, -0.8522, 0.4581], [-0.0043, -0.8717, 0.4136], [-0.0051, -0.8739, 0.4146], [-0.0051, -0.8282, 0.5004], [-0.0043, -0.85, 0.457], [-0.0051, -0.8522, 0.4581], [-0.0051, -0.8021, 0.5415], [-0.0043, -0.8261, 0.4992], [-0.0051, -0.8282, 0.5004], [-0.0051, -0.8021, 0.5415], [-0.0043, -0.7719, 0.5796], [-0.0043, -0.8001, 0.5401], [-0.0051, -0.7437, 0.6192], [-0.0043, -0.7719, 0.5796], [-0.0051, -0.7739, 0.5811], [-0.0051, -0.7437, 0.6192], [-0.0043, -0.7098, 0.6541], [-0.0043, -0.7418, 0.6177], [-0.0051, -0.7116, 0.6558], [-0.0043, -0.676, 0.6888], [-0.0043, -0.7098, 0.6541], [-0.0051, -0.6777, 0.6906], [-0.0043, -0.6404, 0.7218], [-0.0043, -0.676, 0.6888], [-0.0051, -0.642, 0.7236], [-0.0043, -0.6031, 0.7528], [-0.0043, -0.6404, 0.7218], [-0.0051, -0.6047, 0.7548], [-0.0043, -0.5643, 0.782], [-0.0043, -0.6031, 0.7528], [-0.0051, -0.5658, 0.784], [-0.0043, -0.5241, 0.809], [-0.0043, -0.5643, 0.782], [-0.0051, -0.5254, 0.8111], [-0.0043, -0.4825, 0.834], [-0.0043, -0.5241, 0.809], [-0.0051, -0.4837, 0.8361], [-0.0043, -0.4397, 0.8568], [-0.0043, -0.4825, 0.834], [-0.0051, -0.4408, 0.859], [-0.0043, -0.3958, 0.8774], [-0.0043, -0.4397, 0.8568], [-0.0051, -0.3968, 0.8796], [-0.0043, -0.3508, 0.8956], [-0.0043, -0.3958, 0.8774], [-0.0051, -0.3058, 0.9139], [-0.0043, -0.3508, 0.8956], [-0.0051, -0.3517, 0.8979], [-0.0051, -0.3058, 0.9139], [-0.0043, -0.2585, 0.9251], [-0.0043, -0.305, 0.9116], [-0.0051, -0.2591, 0.9275], [-0.0043, -0.2113, 0.9363], [-0.0043, -0.2585, 0.9251], [-0.0051, -0.1639, 0.9474], [-0.0043, -0.2113, 0.9363], [-0.0051, -0.2118, 0.9387], [-0.0051, -0.1156, 0.9536], [-0.0043, -0.1635, 0.945], [-0.0051, -0.1639, 0.9474], [-0.0131, -0.0576, 0.9573], [-0.0043, -0.1153, 0.9512], [-0.0051, -0.1156, 0.9536], [-0.0116, -0.0579, -0.9354], [-0.0563, -0.0324, -0.9301], [-0.0484, -0.0316, -0.9581], [-0.0116, -0.0579, -0.9354], [-0.0051, -0.1156, -0.9251], [-0.0131, -0.0576, -0.9287], [-0.0045, -0.1158, -0.9277], [-0.0051, -0.1639, -0.9188], [-0.0051, -0.1156, -0.9251], [-0.0045, -0.2123, -0.9126], [-0.0051, -0.1639, -0.9188], [-0.0045, -0.1643, -0.9214], [-0.0045, -0.2598, -0.9014], [-0.0051, -0.2118, -0.9101], [-0.0045, -0.2123, -0.9126], [-0.0045, -0.3066, -0.8878], [-0.0051, -0.2591, -0.8989], [-0.0045, -0.2598, -0.9014], [-0.0045, -0.3526, -0.8718], [-0.0051, -0.3058, -0.8853], [-0.0045, -0.3066, -0.8878], [-0.0045, -0.3978, -0.8534], [-0.0051, -0.3517, -0.8694], [-0.0045, -0.3526, -0.8718], [-0.0045, -0.442, -0.8327], [-0.0051, -0.3968, -0.851], [-0.0045, -0.3978, -0.8534], [-0.0045, -0.485, -0.8098], [-0.0051, -0.4408, -0.8304], [-0.0045, -0.442, -0.8327], [-0.0045, -0.485, -0.8098], [-0.0051, -0.5254, -0.7825], [-0.0051, -0.4837, -0.8076], [-0.0045, -0.5268, -0.7847], [-0.0051, -0.5658, -0.7554], [-0.0051, -0.5254, -0.7825], [-0.0045, -0.6063, -0.7282], [-0.0051, -0.5658, -0.7554], [-0.0045, -0.5673, -0.7575], [-0.0045, -0.6063, -0.7282], [-0.0051, -0.642, -0.695], [-0.0051, -0.6047, -0.7262], [-0.0045, -0.6795, -0.6639], [-0.0051, -0.642, -0.695], [-0.0045, -0.6437, -0.697], [-0.0045, -0.7135, -0.6289], [-0.0051, -0.6777, -0.662], [-0.0045, -0.6795, -0.6639], [-0.0045, -0.7457, -0.5923], [-0.0051, -0.7116, -0.6272], [-0.0045, -0.7135, -0.6289], [-0.0045, -0.776, -0.5541], [-0.0051, -0.7437, -0.5907], [-0.0045, -0.7457, -0.5923], [-0.0045, -0.8043, -0.5143], [-0.0051, -0.7739, -0.5525], [-0.0045, -0.776, -0.5541], [-0.0045, -0.8043, -0.5143], [-0.0051, -0.8282, -0.4719], [-0.0051, -0.8021, -0.5129], [-0.0045, -0.8544, -0.4308], [-0.0051, -0.8282, -0.4719], [-0.0045, -0.8304, -0.4732], [-0.0045, -0.8762, -0.3871], [-0.0051, -0.8522, -0.4295], [-0.0045, -0.8544, -0.4308], [-0.0045, -0.8762, -0.3871], [-0.0051, -0.8934, -0.3415], [-0.0051, -0.8739, -0.386], [-0.0045, -0.913, -0.2968], [-0.0051, -0.8934, -0.3415], [-0.0045, -0.8958, -0.3425], [-0.0045, -0.9278, -0.2504], [-0.0051, -0.9105, -0.296], [-0.0045, -0.913, -0.2968], [-0.0045, -0.9402, -0.2032], [-0.0051, -0.9253, -0.2496], [-0.0045, -0.9278, -0.2504], [-0.0045, -0.9502, -0.1555], [-0.0051, -0.9377, -0.2026], [-0.0045, -0.9402, -0.2032], [-0.0045, -0.9502, -0.1555], [-0.0051, -0.9551, -0.107], [-0.0051, -0.9476, -0.155], [-0.0045, -0.9627, -0.0588], [-0.0051, -0.9551, -0.107], [-0.0045, -0.9577, -0.1073], [-0.0045, -0.9627, -0.0588], [-0.0051, -0.9626, -0.01], [-0.0051, -0.9601, -0.0586], [-0.0045, -0.9652, 0.0387], [-0.0051, -0.9626, -0.01], [-0.0045, -0.9652, -0.0101], [-0.0045, -0.9652, 0.0387], [-0.0051, -0.9601, 0.0872], [-0.0051, -0.9626, 0.0386], [-0.0045, -0.9577, 0.1359], [-0.0051, -0.9601, 0.0872], [-0.0045, -0.9627, 0.0874], [-0.0045, -0.9502, 0.1841], [-0.0051, -0.9551, 0.1355], [-0.0045, -0.9577, 0.1359], [-0.0045, -0.9402, 0.2318], [-0.0051, -0.9476, 0.1836], [-0.0045, -0.9502, 0.1841], [-0.0045, -0.9402, 0.2318], [-0.0051, -0.9253, 0.2782], [-0.0051, -0.9377, 0.2312], [-0.0045, -0.9278, 0.2789], [-0.0051, -0.9105, 0.3245], [-0.0051, -0.9253, 0.2782], [-0.0045, -0.8958, 0.371], [-0.0051, -0.9105, 0.3245], [-0.0045, -0.913, 0.3254], [-0.0045, -0.8762, 0.4157], [-0.0051, -0.8934, 0.3701], [-0.0045, -0.8958, 0.371], [-0.0045, -0.8762, 0.4157], [-0.0051, -0.8522, 0.4581], [-0.0051, -0.8739, 0.4146], [-0.0045, -0.8544, 0.4593], [-0.0051, -0.8282, 0.5004], [-0.0051, -0.8522, 0.4581], [-0.0045, -0.8304, 0.5018], [-0.0051, -0.8021, 0.5415], [-0.0051, -0.8282, 0.5004], [-0.0045, -0.8043, 0.5429], [-0.0051, -0.7739, 0.5811], [-0.0051, -0.8021, 0.5415], [-0.0045, -0.776, 0.5827], [-0.0051, -0.7437, 0.6192], [-0.0051, -0.7739, 0.5811], [-0.0045, -0.7135, 0.6575], [-0.0051, -0.7437, 0.6192], [-0.0045, -0.7457, 0.6209], [-0.0045, -0.6795, 0.6924], [-0.0051, -0.7116, 0.6558], [-0.0045, -0.7135, 0.6575], [-0.0045, -0.6437, 0.7256], [-0.0051, -0.6777, 0.6906], [-0.0045, -0.6795, 0.6924], [-0.0045, -0.6437, 0.7256], [-0.0051, -0.6047, 0.7548], [-0.0051, -0.642, 0.7236], [-0.0045, -0.6063, 0.7568], [-0.0051, -0.5658, 0.784], [-0.0051, -0.6047, 0.7548], [-0.0045, -0.5673, 0.7861], [-0.0051, -0.5254, 0.8111], [-0.0051, -0.5658, 0.784], [-0.0045, -0.485, 0.8384], [-0.0051, -0.5254, 0.8111], [-0.0045, -0.5268, 0.8133], [-0.0045, -0.442, 0.8613], [-0.0051, -0.4837, 0.8361], [-0.0045, -0.485, 0.8384], [-0.0045, -0.442, 0.8613], [-0.0051, -0.3968, 0.8796], [-0.0051, -0.4408, 0.859], [-0.0045, -0.3526, 0.9004], [-0.0051, -0.3968, 0.8796], [-0.0045, -0.3978, 0.882], [-0.0045, -0.3066, 0.9164], [-0.0051, -0.3517, 0.8979], [-0.0045, -0.3526, 0.9004], [-0.0045, -0.2598, 0.93], [-0.0051, -0.3058, 0.9139], [-0.0045, -0.3066, 0.9164], [-0.0045, -0.2598, 0.93], [-0.0051, -0.2118, 0.9387], [-0.0051, -0.2591, 0.9275], [-0.0045, -0.2123, 0.9412], [-0.0051, -0.1639, 0.9474], [-0.0051, -0.2118, 0.9387], [-0.0045, -0.1158, 0.9562], [-0.0051, -0.1639, 0.9474], [-0.0045, -0.1643, 0.95], [-0.0116, -0.0579, 0.964], [-0.0051, -0.1156, 0.9536], [-0.0045, -0.1158, 0.9562], [-0.0068, -0.0582, -0.9405], [-0.0484, -0.0316, -0.9581], [-0.0278, -0.031, -0.9783], [-0.0068, -0.0582, -0.9405], [-0.0045, -0.1158, -0.9277], [-0.0116, -0.0579, -0.9354], [-0.0027, -0.116, -0.9296], [-0.0045, -0.1643, -0.9214], [-0.0045, -0.1158, -0.9277], [-0.0026, -0.1646, -0.9233], [-0.0045, -0.2123, -0.9126], [-0.0045, -0.1643, -0.9214], [-0.0026, -0.2127, -0.9146], [-0.0045, -0.2598, -0.9014], [-0.0045, -0.2123, -0.9126], [-0.0026, -0.2603, -0.9034], [-0.0045, -0.3066, -0.8878], [-0.0045, -0.2598, -0.9014], [-0.0026, -0.3072, -0.8897], [-0.0045, -0.3526, -0.8718], [-0.0045, -0.3066, -0.8878], [-0.0026, -0.3533, -0.8736], [-0.0045, -0.3978, -0.8534], [-0.0045, -0.3526, -0.8718], [-0.0026, -0.4428, -0.8345], [-0.0045, -0.3978, -0.8534], [-0.0026, -0.3986, -0.8552], [-0.0026, -0.486, -0.8115], [-0.0045, -0.442, -0.8327], [-0.0026, -0.4428, -0.8345], [-0.0026, -0.486, -0.8115], [-0.0045, -0.5268, -0.7847], [-0.0045, -0.485, -0.8098], [-0.0026, -0.5279, -0.7864], [-0.0045, -0.5673, -0.7575], [-0.0045, -0.5268, -0.7847], [-0.0026, -0.5684, -0.7591], [-0.0045, -0.6063, -0.7282], [-0.0045, -0.5673, -0.7575], [-0.0026, -0.6075, -0.7298], [-0.0045, -0.6437, -0.697], [-0.0045, -0.6063, -0.7282], [-0.0026, -0.645, -0.6985], [-0.0045, -0.6795, -0.6639], [-0.0045, -0.6437, -0.697], [-0.0026, -0.6809, -0.6653], [-0.0045, -0.7135, -0.6289], [-0.0045, -0.6795, -0.6639], [-0.0026, -0.7473, -0.5936], [-0.0045, -0.7135, -0.6289], [-0.0026, -0.715, -0.6303], [-0.0026, -0.7776, -0.5553], [-0.0045, -0.7457, -0.5923], [-0.0026, -0.7473, -0.5936], [-0.0026, -0.8059, -0.5154], [-0.0045, -0.776, -0.5541], [-0.0026, -0.7776, -0.5553], [-0.0026, -0.8321, -0.4742], [-0.0045, -0.8043, -0.5143], [-0.0026, -0.8059, -0.5154], [-0.0026, -0.8321, -0.4742], [-0.0045, -0.8544, -0.4308], [-0.0045, -0.8304, -0.4732], [-0.0026, -0.8562, -0.4317], [-0.0045, -0.8762, -0.3871], [-0.0045, -0.8544, -0.4308], [-0.0026, -0.878, -0.388], [-0.0045, -0.8958, -0.3425], [-0.0045, -0.8762, -0.3871], [-0.0026, -0.8976, -0.3432], [-0.0045, -0.913, -0.2968], [-0.0045, -0.8958, -0.3425], [-0.0026, -0.9148, -0.2975], [-0.0045, -0.9278, -0.2504], [-0.0045, -0.913, -0.2968], [-0.0026, -0.9297, -0.2509], [-0.0045, -0.9402, -0.2032], [-0.0045, -0.9278, -0.2504], [-0.0026, -0.9521, -0.1558], [-0.0045, -0.9402, -0.2032], [-0.0026, -0.9421, -0.2037], [-0.0026, -0.9521, -0.1558], [-0.0045, -0.9577, -0.1073], [-0.0045, -0.9502, -0.1555], [-0.0026, -0.9647, -0.0589], [-0.0045, -0.9577, -0.1073], [-0.0026, -0.9597, -0.1076], [-0.0026, -0.9647, -0.0589], [-0.0045, -0.9652, -0.0101], [-0.0045, -0.9627, -0.0588], [-0.0026, -0.9672, 0.0387], [-0.0045, -0.9652, -0.0101], [-0.0026, -0.9672, -0.0101], [-0.0026, -0.9672, 0.0387], [-0.0045, -0.9627, 0.0874], [-0.0045, -0.9652, 0.0387], [-0.0026, -0.9597, 0.1361], [-0.0045, -0.9627, 0.0874], [-0.0026, -0.9647, 0.0875], [-0.0026, -0.9521, 0.1844], [-0.0045, -0.9577, 0.1359], [-0.0026, -0.9597, 0.1361], [-0.0026, -0.9521, 0.1844], [-0.0045, -0.9402, 0.2318], [-0.0045, -0.9502, 0.1841], [-0.0026, -0.9297, 0.2795], [-0.0045, -0.9402, 0.2318], [-0.0026, -0.9421, 0.2322], [-0.0026, -0.9297, 0.2795], [-0.0045, -0.913, 0.3254], [-0.0045, -0.9278, 0.2789], [-0.0026, -0.8976, 0.3718], [-0.0045, -0.913, 0.3254], [-0.0026, -0.9148, 0.3261], [-0.0026, -0.8976, 0.3718], [-0.0045, -0.8762, 0.4157], [-0.0045, -0.8958, 0.371], [-0.0026, -0.8562, 0.4603], [-0.0045, -0.8762, 0.4157], [-0.0026, -0.878, 0.4166], [-0.0026, -0.8321, 0.5028], [-0.0045, -0.8544, 0.4593], [-0.0026, -0.8562, 0.4603], [-0.0026, -0.8059, 0.544], [-0.0045, -0.8304, 0.5018], [-0.0026, -0.8321, 0.5028], [-0.0026, -0.7776, 0.5838], [-0.0045, -0.8043, 0.5429], [-0.0026, -0.8059, 0.544], [-0.0026, -0.7473, 0.6222], [-0.0045, -0.776, 0.5827], [-0.0026, -0.7776, 0.5838], [-0.0026, -0.715, 0.6589], [-0.0045, -0.7457, 0.6209], [-0.0026, -0.7473, 0.6222], [-0.0026, -0.6809, 0.6939], [-0.0045, -0.7135, 0.6575], [-0.0026, -0.715, 0.6589], [-0.0026, -0.645, 0.7271], [-0.0045, -0.6795, 0.6924], [-0.0026, -0.6809, 0.6939], [-0.0026, -0.6075, 0.7584], [-0.0045, -0.6437, 0.7256], [-0.0026, -0.645, 0.7271], [-0.0026, -0.5684, 0.7877], [-0.0045, -0.6063, 0.7568], [-0.0026, -0.6075, 0.7584], [-0.0026, -0.5279, 0.815], [-0.0045, -0.5673, 0.7861], [-0.0026, -0.5684, 0.7877], [-0.0026, -0.5279, 0.815], [-0.0045, -0.485, 0.8384], [-0.0045, -0.5268, 0.8133], [-0.0026, -0.486, 0.8401], [-0.0045, -0.442, 0.8613], [-0.0045, -0.485, 0.8384], [-0.0026, -0.4429, 0.8631], [-0.0045, -0.3978, 0.882], [-0.0045, -0.442, 0.8613], [-0.0026, -0.3986, 0.8838], [-0.0045, -0.3526, 0.9004], [-0.0045, -0.3978, 0.882], [-0.0026, -0.3533, 0.9022], [-0.0045, -0.3066, 0.9164], [-0.0045, -0.3526, 0.9004], [-0.0026, -0.2603, 0.9319], [-0.0045, -0.3066, 0.9164], [-0.0026, -0.3072, 0.9183], [-0.0026, -0.2127, 0.9432], [-0.0045, -0.2598, 0.93], [-0.0026, -0.2603, 0.9319], [-0.0026, -0.2127, 0.9432], [-0.0045, -0.1643, 0.95], [-0.0045, -0.2123, 0.9412], [-0.0027, -0.116, 0.9582], [-0.0045, -0.1643, 0.95], [-0.0026, -0.1646, 0.9519], [-0.0068, -0.0582, 0.9691], [-0.0045, -0.1158, 0.9562], [-0.0027, -0.116, 0.9582], [-0.0, -0.0583, -0.9424], [-0.0278, -0.031, -0.9783], [-0.0, -0.0308, -0.9856], [-0.0, -0.0583, -0.9424], [-0.0027, -0.116, -0.9296], [-0.0068, -0.0582, -0.9405], [-0.0, -0.1161, -0.9304], [-0.0026, -0.1646, -0.9233], [-0.0027, -0.116, -0.9296], [-0.0, -0.1647, -0.9241], [-0.0026, -0.2127, -0.9146], [-0.0026, -0.1646, -0.9233], [-0.0, -0.2604, -0.9041], [-0.0026, -0.2127, -0.9146], [-0.0, -0.2128, -0.9153], [-0.0, -0.3074, -0.8904], [-0.0026, -0.2603, -0.9034], [-0.0, -0.2604, -0.9041], [-0.0, -0.3536, -0.8743], [-0.0026, -0.3072, -0.8897], [-0.0, -0.3074, -0.8904], [-0.0, -0.3989, -0.8559], [-0.0026, -0.3533, -0.8736], [-0.0, -0.3536, -0.8743], [-0.0, -0.3989, -0.8559], [-0.0026, -0.4428, -0.8345], [-0.0026, -0.3986, -0.8552], [-0.0, -0.4432, -0.8352], [-0.0026, -0.486, -0.8115], [-0.0026, -0.4428, -0.8345], [-0.0, -0.5283, -0.787], [-0.0026, -0.486, -0.8115], [-0.0, -0.4863, -0.8122], [-0.0, -0.5283, -0.787], [-0.0026, -0.5684, -0.7591], [-0.0026, -0.5279, -0.7864], [-0.0, -0.5688, -0.7597], [-0.0026, -0.6075, -0.7298], [-0.0026, -0.5684, -0.7591], [-0.0, -0.608, -0.7304], [-0.0026, -0.645, -0.6985], [-0.0026, -0.6075, -0.7298], [-0.0, -0.6814, -0.6658], [-0.0026, -0.645, -0.6985], [-0.0, -0.6455, -0.699], [-0.0, -0.7155, -0.6308], [-0.0026, -0.6809, -0.6653], [-0.0, -0.6814, -0.6658], [-0.0, -0.7155, -0.6308], [-0.0026, -0.7473, -0.5936], [-0.0026, -0.715, -0.6303], [-0.0, -0.7478, -0.5941], [-0.0026, -0.7776, -0.5553], [-0.0026, -0.7473, -0.5936], [-0.0, -0.7782, -0.5557], [-0.0026, -0.8059, -0.5154], [-0.0026, -0.7776, -0.5553], [-0.0, -0.8328, -0.4746], [-0.0026, -0.8059, -0.5154], [-0.0, -0.8065, -0.5159], [-0.0, -0.8568, -0.432], [-0.0026, -0.8321, -0.4742], [-0.0, -0.8328, -0.4746], [-0.0, -0.8787, -0.3883], [-0.0026, -0.8562, -0.4317], [-0.0, -0.8568, -0.432], [-0.0, -0.8983, -0.3435], [-0.0026, -0.878, -0.388], [-0.0, -0.8787, -0.3883], [-0.0, -0.9155, -0.2977], [-0.0026, -0.8976, -0.3432], [-0.0, -0.8983, -0.3435], [-0.0, -0.9304, -0.2511], [-0.0026, -0.9148, -0.2975], [-0.0, -0.9155, -0.2977], [-0.0, -0.9429, -0.2038], [-0.0026, -0.9297, -0.2509], [-0.0, -0.9304, -0.2511], [-0.0, -0.9529, -0.156], [-0.0026, -0.9421, -0.2037], [-0.0, -0.9429, -0.2038], [-0.0, -0.9529, -0.156], [-0.0026, -0.9597, -0.1076], [-0.0026, -0.9521, -0.1558], [-0.0, -0.9654, -0.059], [-0.0026, -0.9597, -0.1076], [-0.0, -0.9604, -0.1076], [-0.0, -0.9679, -0.0102], [-0.0026, -0.9647, -0.0589], [-0.0, -0.9654, -0.059], [-0.0, -0.9679, 0.0387], [-0.0026, -0.9672, -0.0101], [-0.0, -0.9679, -0.0102], [-0.0, -0.9679, 0.0387], [-0.0026, -0.9647, 0.0875], [-0.0026, -0.9672, 0.0387], [-0.0, -0.9604, 0.1362], [-0.0026, -0.9647, 0.0875], [-0.0, -0.9654, 0.0876], [-0.0, -0.9529, 0.1845], [-0.0026, -0.9597, 0.1361], [-0.0, -0.9604, 0.1362], [-0.0, -0.9529, 0.1845], [-0.0026, -0.9421, 0.2322], [-0.0026, -0.9521, 0.1844], [-0.0, -0.9429, 0.2324], [-0.0026, -0.9297, 0.2795], [-0.0026, -0.9421, 0.2322], [-0.0, -0.9155, 0.3263], [-0.0026, -0.9297, 0.2795], [-0.0, -0.9304, 0.2797], [-0.0, -0.9155, 0.3263], [-0.0026, -0.8976, 0.3718], [-0.0026, -0.9148, 0.3261], [-0.0, -0.8787, 0.4169], [-0.0026, -0.8976, 0.3718], [-0.0, -0.8983, 0.3721], [-0.0, -0.8568, 0.4606], [-0.0026, -0.878, 0.4166], [-0.0, -0.8787, 0.4169], [-0.0, -0.8568, 0.4606], [-0.0026, -0.8321, 0.5028], [-0.0026, -0.8562, 0.4603], [-0.0, -0.8328, 0.5032], [-0.0026, -0.8059, 0.544], [-0.0026, -0.8321, 0.5028], [-0.0, -0.8065, 0.5444], [-0.0026, -0.7776, 0.5838], [-0.0026, -0.8059, 0.544], [-0.0, -0.7478, 0.6226], [-0.0026, -0.7776, 0.5838], [-0.0, -0.7782, 0.5843], [-0.0, -0.7155, 0.6594], [-0.0026, -0.7473, 0.6222], [-0.0, -0.7478, 0.6226], [-0.0, -0.7155, 0.6594], [-0.0026, -0.6809, 0.6939], [-0.0026, -0.715, 0.6589], [-0.0, -0.6814, 0.6944], [-0.0026, -0.645, 0.7271], [-0.0026, -0.6809, 0.6939], [-0.0, -0.6455, 0.7276], [-0.0026, -0.6075, 0.7584], [-0.0026, -0.645, 0.7271], [-0.0, -0.5688, 0.7883], [-0.0026, -0.6075, 0.7584], [-0.0, -0.608, 0.7589], [-0.0, -0.5283, 0.8156], [-0.0026, -0.5684, 0.7877], [-0.0, -0.5688, 0.7883], [-0.0, -0.4863, 0.8408], [-0.0026, -0.5279, 0.815], [-0.0, -0.5283, 0.8156], [-0.0, -0.4432, 0.8638], [-0.0026, -0.486, 0.8401], [-0.0, -0.4863, 0.8408], [-0.0, -0.3989, 0.8845], [-0.0026, -0.4429, 0.8631], [-0.0, -0.4432, 0.8638], [-0.0, -0.3536, 0.9029], [-0.0026, -0.3986, 0.8838], [-0.0, -0.3989, 0.8845], [-0.0, -0.3536, 0.9029], [-0.0026, -0.3072, 0.9183], [-0.0026, -0.3533, 0.9022], [-0.0, -0.3074, 0.919], [-0.0026, -0.2603, 0.9319], [-0.0026, -0.3072, 0.9183], [-0.0, -0.2128, 0.9439], [-0.0026, -0.2603, 0.9319], [-0.0, -0.2604, 0.9326], [-0.0, -0.1647, 0.9526], [-0.0026, -0.2127, 0.9432], [-0.0, -0.2128, 0.9439], [-0.0, -0.1161, 0.9589], [-0.0026, -0.1646, 0.9519], [-0.0, -0.1647, 0.9526], [-0.0, -0.0583, 0.971], [-0.0027, -0.116, 0.9582], [-0.0, -0.1161, 0.9589], [0.0278, -0.031, -0.9783], [-0.0, -0.0583, -0.9424], [-0.0, -0.0308, -0.9856], [0.0027, -0.116, -0.9296], [-0.0, -0.0583, -0.9424], [0.0068, -0.0582, -0.9405], [0.0026, -0.1646, -0.9233], [-0.0, -0.1161, -0.9304], [0.0027, -0.116, -0.9296], [0.0026, -0.2127, -0.9146], [-0.0, -0.1647, -0.9241], [0.0026, -0.1646, -0.9233], [0.0026, -0.2603, -0.9034], [-0.0, -0.2128, -0.9153], [0.0026, -0.2127, -0.9146], [0.0026, -0.2603, -0.9034], [-0.0, -0.3074, -0.8904], [-0.0, -0.2604, -0.9041], [0.0026, -0.3072, -0.8897], [-0.0, -0.3536, -0.8743], [-0.0, -0.3074, -0.8904], [0.0026, -0.3533, -0.8736], [-0.0, -0.3989, -0.8559], [-0.0, -0.3536, -0.8743], [0.0026, -0.4428, -0.8345], [-0.0, -0.3989, -0.8559], [0.0026, -0.3986, -0.8552], [0.0026, -0.486, -0.8115], [-0.0, -0.4432, -0.8352], [0.0026, -0.4428, -0.8345], [0.0026, -0.486, -0.8115], [-0.0, -0.5283, -0.787], [-0.0, -0.4863, -0.8122], [0.0026, -0.5279, -0.7864], [-0.0, -0.5688, -0.7597], [-0.0, -0.5283, -0.787], [0.0026, -0.5684, -0.7591], [-0.0, -0.608, -0.7304], [-0.0, -0.5688, -0.7597], [0.0026, -0.645, -0.6985], [-0.0, -0.608, -0.7304], [0.0026, -0.6075, -0.7298], [0.0026, -0.6809, -0.6653], [-0.0, -0.6455, -0.699], [0.0026, -0.645, -0.6985], [0.0026, -0.715, -0.6303], [-0.0, -0.6814, -0.6658], [0.0026, -0.6809, -0.6653], [0.0026, -0.7473, -0.5936], [-0.0, -0.7155, -0.6308], [0.0026, -0.715, -0.6303], [0.0026, -0.7776, -0.5553], [-0.0, -0.7478, -0.5941], [0.0026, -0.7473, -0.5936], [0.0026, -0.8059, -0.5154], [-0.0, -0.7782, -0.5557], [0.0026, -0.7776, -0.5553], [0.0026, -0.8321, -0.4742], [-0.0, -0.8065, -0.5159], [0.0026, -0.8059, -0.5154], [0.0026, -0.8321, -0.4742], [-0.0, -0.8568, -0.432], [-0.0, -0.8328, -0.4746], [0.0026, -0.878, -0.388], [-0.0, -0.8568, -0.432], [0.0026, -0.8562, -0.4317], [0.0026, -0.8976, -0.3432], [-0.0, -0.8787, -0.3883], [0.0026, -0.878, -0.388], [0.0026, -0.8976, -0.3432], [-0.0, -0.9155, -0.2977], [-0.0, -0.8983, -0.3435], [0.0026, -0.9148, -0.2975], [-0.0, -0.9304, -0.2511], [-0.0, -0.9155, -0.2977], [0.0026, -0.9421, -0.2037], [-0.0, -0.9304, -0.2511], [0.0026, -0.9297, -0.2509], [0.0026, -0.9521, -0.1558], [-0.0, -0.9429, -0.2038], [0.0026, -0.9421, -0.2037], [0.0026, -0.9597, -0.1076], [-0.0, -0.9529, -0.156], [0.0026, -0.9521, -0.1558], [0.0026, -0.9647, -0.0589], [-0.0, -0.9604, -0.1076], [0.0026, -0.9597, -0.1076], [0.0026, -0.9672, -0.0101], [-0.0, -0.9654, -0.059], [0.0026, -0.9647, -0.0589], [0.0026, -0.9672, 0.0387], [-0.0, -0.9679, -0.0102], [0.0026, -0.9672, -0.0101], [0.0026, -0.9647, 0.0875], [-0.0, -0.9679, 0.0387], [0.0026, -0.9672, 0.0387], [0.0026, -0.9597, 0.1361], [-0.0, -0.9654, 0.0876], [0.0026, -0.9647, 0.0875], [0.0026, -0.9597, 0.1361], [-0.0, -0.9529, 0.1845], [-0.0, -0.9604, 0.1362], [0.0026, -0.9421, 0.2322], [-0.0, -0.9529, 0.1845], [0.0026, -0.9521, 0.1844], [0.0026, -0.9421, 0.2322], [-0.0, -0.9304, 0.2797], [-0.0, -0.9429, 0.2324], [0.0026, -0.9148, 0.3261], [-0.0, -0.9304, 0.2797], [0.0026, -0.9297, 0.2795], [0.0026, -0.9148, 0.3261], [-0.0, -0.8983, 0.3721], [-0.0, -0.9155, 0.3263], [0.0026, -0.8976, 0.3718], [-0.0, -0.8787, 0.4169], [-0.0, -0.8983, 0.3721], [0.0026, -0.878, 0.4166], [-0.0, -0.8568, 0.4606], [-0.0, -0.8787, 0.4169], [0.0026, -0.8321, 0.5028], [-0.0, -0.8568, 0.4606], [0.0026, -0.8562, 0.4603], [0.0026, -0.8059, 0.544], [-0.0, -0.8328, 0.5032], [0.0026, -0.8321, 0.5028], [0.0026, -0.8059, 0.544], [-0.0, -0.7782, 0.5843], [-0.0, -0.8065, 0.5444], [0.0026, -0.7776, 0.5838], [-0.0, -0.7478, 0.6226], [-0.0, -0.7782, 0.5843], [0.0026, -0.7473, 0.6222], [-0.0, -0.7155, 0.6594], [-0.0, -0.7478, 0.6226], [0.0026, -0.6809, 0.6939], [-0.0, -0.7155, 0.6594], [0.0026, -0.715, 0.6589], [0.0026, -0.6809, 0.6939], [-0.0, -0.6455, 0.7276], [-0.0, -0.6814, 0.6944], [0.0026, -0.645, 0.7271], [-0.0, -0.608, 0.7589], [-0.0, -0.6455, 0.7276], [0.0026, -0.6075, 0.7584], [-0.0, -0.5688, 0.7883], [-0.0, -0.608, 0.7589], [0.0026, -0.5684, 0.7877], [-0.0, -0.5283, 0.8156], [-0.0, -0.5688, 0.7883], [0.0026, -0.5279, 0.815], [-0.0, -0.4863, 0.8408], [-0.0, -0.5283, 0.8156], [0.0026, -0.486, 0.8401], [-0.0, -0.4432, 0.8638], [-0.0, -0.4863, 0.8408], [0.0026, -0.4429, 0.8631], [-0.0, -0.3989, 0.8845], [-0.0, -0.4432, 0.8638], [0.0026, -0.3533, 0.9022], [-0.0, -0.3989, 0.8845], [0.0026, -0.3986, 0.8838], [0.0026, -0.3072, 0.9183], [-0.0, -0.3536, 0.9029], [0.0026, -0.3533, 0.9022], [0.0026, -0.2603, 0.9319], [-0.0, -0.3074, 0.919], [0.0026, -0.3072, 0.9183], [0.0026, -0.2603, 0.9319], [-0.0, -0.2128, 0.9439], [-0.0, -0.2604, 0.9326], [0.0026, -0.2127, 0.9432], [-0.0, -0.1647, 0.9526], [-0.0, -0.2128, 0.9439], [0.0026, -0.1646, 0.9519], [-0.0, -0.1161, 0.9589], [-0.0, -0.1647, 0.9526], [0.0027, -0.116, 0.9582], [-0.0, -0.0583, 0.971], [-0.0, -0.1161, 0.9589], [0.0484, -0.0316, -0.9581], [0.0068, -0.0582, -0.9405], [0.0278, -0.031, -0.9783], [0.0045, -0.1158, -0.9277], [0.0068, -0.0582, -0.9405], [0.0116, -0.0579, -0.9354], [0.0045, -0.1643, -0.9214], [0.0027, -0.116, -0.9296], [0.0045, -0.1158, -0.9277], [0.0045, -0.1643, -0.9214], [0.0026, -0.2127, -0.9146], [0.0026, -0.1646, -0.9233], [0.0045, -0.2598, -0.9014], [0.0026, -0.2127, -0.9146], [0.0045, -0.2123, -0.9126], [0.0045, -0.2598, -0.9014], [0.0026, -0.3072, -0.8897], [0.0026, -0.2603, -0.9034], [0.0045, -0.3066, -0.8878], [0.0026, -0.3533, -0.8736], [0.0026, -0.3072, -0.8897], [0.0045, -0.3526, -0.8718], [0.0026, -0.3986, -0.8552], [0.0026, -0.3533, -0.8736], [0.0045, -0.3978, -0.8534], [0.0026, -0.4428, -0.8345], [0.0026, -0.3986, -0.8552], [0.0045, -0.442, -0.8327], [0.0026, -0.486, -0.8115], [0.0026, -0.4428, -0.8345], [0.0045, -0.5268, -0.7847], [0.0026, -0.486, -0.8115], [0.0045, -0.485, -0.8098], [0.0045, -0.5673, -0.7575], [0.0026, -0.5279, -0.7864], [0.0045, -0.5268, -0.7847], [0.0045, -0.6063, -0.7282], [0.0026, -0.5684, -0.7591], [0.0045, -0.5673, -0.7575], [0.0045, -0.6437, -0.697], [0.0026, -0.6075, -0.7298], [0.0045, -0.6063, -0.7282], [0.0045, -0.6795, -0.6639], [0.0026, -0.645, -0.6985], [0.0045, -0.6437, -0.697], [0.0045, -0.7135, -0.6289], [0.0026, -0.6809, -0.6653], [0.0045, -0.6795, -0.6639], [0.0045, -0.7457, -0.5923], [0.0026, -0.715, -0.6303], [0.0045, -0.7135, -0.6289], [0.0045, -0.776, -0.5541], [0.0026, -0.7473, -0.5936], [0.0045, -0.7457, -0.5923], [0.0045, -0.776, -0.5541], [0.0026, -0.8059, -0.5154], [0.0026, -0.7776, -0.5553], [0.0045, -0.8043, -0.5143], [0.0026, -0.8321, -0.4742], [0.0026, -0.8059, -0.5154], [0.0045, -0.8544, -0.4308], [0.0026, -0.8321, -0.4742], [0.0045, -0.8304, -0.4732], [0.0045, -0.8544, -0.4308], [0.0026, -0.878, -0.388], [0.0026, -0.8562, -0.4317], [0.0045, -0.8958, -0.3425], [0.0026, -0.878, -0.388], [0.0045, -0.8762, -0.3871], [0.0045, -0.913, -0.2968], [0.0026, -0.8976, -0.3432], [0.0045, -0.8958, -0.3425], [0.0045, -0.9278, -0.2504], [0.0026, -0.9148, -0.2975], [0.0045, -0.913, -0.2968], [0.0045, -0.9402, -0.2032], [0.0026, -0.9297, -0.2509], [0.0045, -0.9278, -0.2504], [0.0045, -0.9402, -0.2032], [0.0026, -0.9521, -0.1558], [0.0026, -0.9421, -0.2037], [0.0045, -0.9502, -0.1555], [0.0026, -0.9597, -0.1076], [0.0026, -0.9521, -0.1558], [0.0045, -0.9577, -0.1073], [0.0026, -0.9647, -0.0589], [0.0026, -0.9597, -0.1076], [0.0045, -0.9652, -0.0101], [0.0026, -0.9647, -0.0589], [0.0045, -0.9627, -0.0588], [0.0045, -0.9652, 0.0387], [0.0026, -0.9672, -0.0101], [0.0045, -0.9652, -0.0101], [0.0045, -0.9627, 0.0874], [0.0026, -0.9672, 0.0387], [0.0045, -0.9652, 0.0387], [0.0045, -0.9627, 0.0874], [0.0026, -0.9597, 0.1361], [0.0026, -0.9647, 0.0875], [0.0045, -0.9577, 0.1359], [0.0026, -0.9521, 0.1844], [0.0026, -0.9597, 0.1361], [0.0045, -0.9502, 0.1841], [0.0026, -0.9421, 0.2322], [0.0026, -0.9521, 0.1844], [0.0045, -0.9278, 0.2789], [0.0026, -0.9421, 0.2322], [0.0045, -0.9402, 0.2318], [0.0045, -0.913, 0.3254], [0.0026, -0.9297, 0.2795], [0.0045, -0.9278, 0.2789], [0.0045, -0.913, 0.3254], [0.0026, -0.8976, 0.3718], [0.0026, -0.9148, 0.3261], [0.0045, -0.8762, 0.4157], [0.0026, -0.8976, 0.3718], [0.0045, -0.8958, 0.371], [0.0045, -0.8544, 0.4593], [0.0026, -0.878, 0.4166], [0.0045, -0.8762, 0.4157], [0.0045, -0.8544, 0.4593], [0.0026, -0.8321, 0.5028], [0.0026, -0.8562, 0.4603], [0.0045, -0.8304, 0.5018], [0.0026, -0.8059, 0.544], [0.0026, -0.8321, 0.5028], [0.0045, -0.8043, 0.5429], [0.0026, -0.7776, 0.5838], [0.0026, -0.8059, 0.544], [0.0045, -0.776, 0.5827], [0.0026, -0.7473, 0.6222], [0.0026, -0.7776, 0.5838], [0.0045, -0.7457, 0.6209], [0.0026, -0.715, 0.6589], [0.0026, -0.7473, 0.6222], [0.0045, -0.7135, 0.6575], [0.0026, -0.6809, 0.6939], [0.0026, -0.715, 0.6589], [0.0045, -0.6437, 0.7256], [0.0026, -0.6809, 0.6939], [0.0045, -0.6795, 0.6924], [0.0045, -0.6063, 0.7568], [0.0026, -0.645, 0.7271], [0.0045, -0.6437, 0.7256], [0.0045, -0.5673, 0.7861], [0.0026, -0.6075, 0.7584], [0.0045, -0.6063, 0.7568], [0.0045, -0.5268, 0.8133], [0.0026, -0.5684, 0.7877], [0.0045, -0.5673, 0.7861], [0.0045, -0.485, 0.8384], [0.0026, -0.5279, 0.815], [0.0045, -0.5268, 0.8133], [0.0045, -0.442, 0.8613], [0.0026, -0.486, 0.8401], [0.0045, -0.485, 0.8384], [0.0045, -0.3978, 0.882], [0.0026, -0.4429, 0.8631], [0.0045, -0.442, 0.8613], [0.0045, -0.3526, 0.9004], [0.0026, -0.3986, 0.8838], [0.0045, -0.3978, 0.882], [0.0045, -0.3066, 0.9164], [0.0026, -0.3533, 0.9022], [0.0045, -0.3526, 0.9004], [0.0045, -0.2598, 0.93], [0.0026, -0.3072, 0.9183], [0.0045, -0.3066, 0.9164], [0.0045, -0.2598, 0.93], [0.0026, -0.2127, 0.9432], [0.0026, -0.2603, 0.9319], [0.0045, -0.1643, 0.95], [0.0026, -0.2127, 0.9432], [0.0045, -0.2123, 0.9412], [0.0045, -0.1643, 0.95], [0.0027, -0.116, 0.9582], [0.0026, -0.1646, 0.9519], [0.0045, -0.1158, 0.9562], [0.0068, -0.0582, 0.9691], [0.0027, -0.116, 0.9582], [0.0563, -0.0324, -0.9301], [0.0116, -0.0579, -0.9354], [0.0484, -0.0316, -0.9581], [0.0051, -0.1156, -0.9251], [0.0116, -0.0579, -0.9354], [0.0131, -0.0576, -0.9287], [0.0051, -0.1639, -0.9188], [0.0045, -0.1158, -0.9277], [0.0051, -0.1156, -0.9251], [0.0051, -0.1639, -0.9188], [0.0045, -0.2123, -0.9126], [0.0045, -0.1643, -0.9214], [0.0051, -0.2591, -0.8989], [0.0045, -0.2123, -0.9126], [0.0051, -0.2118, -0.9101], [0.0051, -0.3058, -0.8853], [0.0045, -0.2598, -0.9014], [0.0051, -0.2591, -0.8989], [0.0051, -0.3058, -0.8853], [0.0045, -0.3526, -0.8718], [0.0045, -0.3066, -0.8878], [0.0051, -0.3968, -0.851], [0.0045, -0.3526, -0.8718], [0.0051, -0.3517, -0.8694], [0.0051, -0.4408, -0.8304], [0.0045, -0.3978, -0.8534], [0.0051, -0.3968, -0.851], [0.0051, -0.4837, -0.8076], [0.0045, -0.442, -0.8327], [0.0051, -0.4408, -0.8304], [0.0051, -0.5254, -0.7825], [0.0045, -0.485, -0.8098], [0.0051, -0.4837, -0.8076], [0.0051, -0.5658, -0.7554], [0.0045, -0.5268, -0.7847], [0.0051, -0.5254, -0.7825], [0.0051, -0.5658, -0.7554], [0.0045, -0.6063, -0.7282], [0.0045, -0.5673, -0.7575], [0.0051, -0.6047, -0.7262], [0.0045, -0.6437, -0.697], [0.0045, -0.6063, -0.7282], [0.0051, -0.642, -0.695], [0.0045, -0.6795, -0.6639], [0.0045, -0.6437, -0.697], [0.0051, -0.6777, -0.662], [0.0045, -0.7135, -0.6289], [0.0045, -0.6795, -0.6639], [0.0051, -0.7116, -0.6272], [0.0045, -0.7457, -0.5923], [0.0045, -0.7135, -0.6289], [0.0051, -0.7437, -0.5907], [0.0045, -0.776, -0.5541], [0.0045, -0.7457, -0.5923], [0.0051, -0.8021, -0.5129], [0.0045, -0.776, -0.5541], [0.0051, -0.7739, -0.5525], [0.0051, -0.8282, -0.4719], [0.0045, -0.8043, -0.5143], [0.0051, -0.8021, -0.5129], [0.0051, -0.8282, -0.4719], [0.0045, -0.8544, -0.4308], [0.0045, -0.8304, -0.4732], [0.0051, -0.8739, -0.386], [0.0045, -0.8544, -0.4308], [0.0051, -0.8522, -0.4295], [0.0051, -0.8934, -0.3415], [0.0045, -0.8762, -0.3871], [0.0051, -0.8739, -0.386], [0.0051, -0.8934, -0.3415], [0.0045, -0.913, -0.2968], [0.0045, -0.8958, -0.3425], [0.0051, -0.9105, -0.296], [0.0045, -0.9278, -0.2504], [0.0045, -0.913, -0.2968], [0.0051, -0.9377, -0.2026], [0.0045, -0.9278, -0.2504], [0.0051, -0.9253, -0.2496], [0.0051, -0.9476, -0.155], [0.0045, -0.9402, -0.2032], [0.0051, -0.9377, -0.2026], [0.0051, -0.9551, -0.107], [0.0045, -0.9502, -0.1555], [0.0051, -0.9476, -0.155], [0.0051, -0.9601, -0.0586], [0.0045, -0.9577, -0.1073], [0.0051, -0.9551, -0.107], [0.0051, -0.9626, -0.01], [0.0045, -0.9627, -0.0588], [0.0051, -0.9601, -0.0586], [0.0051, -0.9626, 0.0386], [0.0045, -0.9652, -0.0101], [0.0051, -0.9626, -0.01], [0.0051, -0.9626, 0.0386], [0.0045, -0.9627, 0.0874], [0.0045, -0.9652, 0.0387], [0.0051, -0.9601, 0.0872], [0.0045, -0.9577, 0.1359], [0.0045, -0.9627, 0.0874], [0.0051, -0.9476, 0.1836], [0.0045, -0.9577, 0.1359], [0.0051, -0.9551, 0.1355], [0.0051, -0.9377, 0.2312], [0.0045, -0.9502, 0.1841], [0.0051, -0.9476, 0.1836], [0.0051, -0.9377, 0.2312], [0.0045, -0.9278, 0.2789], [0.0045, -0.9402, 0.2318], [0.0051, -0.9105, 0.3245], [0.0045, -0.9278, 0.2789], [0.0051, -0.9253, 0.2782], [0.0051, -0.9105, 0.3245], [0.0045, -0.8958, 0.371], [0.0045, -0.913, 0.3254], [0.0051, -0.8934, 0.3701], [0.0045, -0.8762, 0.4157], [0.0045, -0.8958, 0.371], [0.0051, -0.8522, 0.4581], [0.0045, -0.8762, 0.4157], [0.0051, -0.8739, 0.4146], [0.0051, -0.8282, 0.5004], [0.0045, -0.8544, 0.4593], [0.0051, -0.8522, 0.4581], [0.0051, -0.8021, 0.5415], [0.0045, -0.8304, 0.5018], [0.0051, -0.8282, 0.5004], [0.0051, -0.7739, 0.5811], [0.0045, -0.8043, 0.5429], [0.0051, -0.8021, 0.5415], [0.0051, -0.7739, 0.5811], [0.0045, -0.7457, 0.6209], [0.0045, -0.776, 0.5827], [0.0051, -0.7437, 0.6192], [0.0045, -0.7135, 0.6575], [0.0045, -0.7457, 0.6209], [0.0051, -0.6777, 0.6906], [0.0045, -0.7135, 0.6575], [0.0051, -0.7116, 0.6558], [0.0051, -0.6777, 0.6906], [0.0045, -0.6437, 0.7256], [0.0045, -0.6795, 0.6924], [0.0051, -0.6047, 0.7548], [0.0045, -0.6437, 0.7256], [0.0051, -0.642, 0.7236], [0.0051, -0.6047, 0.7548], [0.0045, -0.5673, 0.7861], [0.0045, -0.6063, 0.7568], [0.0051, -0.5658, 0.784], [0.0045, -0.5268, 0.8133], [0.0045, -0.5673, 0.7861], [0.0051, -0.5254, 0.8111], [0.0045, -0.485, 0.8384], [0.0045, -0.5268, 0.8133], [0.0051, -0.4408, 0.859], [0.0045, -0.485, 0.8384], [0.0051, -0.4837, 0.8361], [0.0051, -0.3968, 0.8796], [0.0045, -0.442, 0.8613], [0.0051, -0.4408, 0.859], [0.0051, -0.3968, 0.8796], [0.0045, -0.3526, 0.9004], [0.0045, -0.3978, 0.882], [0.0051, -0.3517, 0.8979], [0.0045, -0.3066, 0.9164], [0.0045, -0.3526, 0.9004], [0.0051, -0.3058, 0.9139], [0.0045, -0.2598, 0.93], [0.0045, -0.3066, 0.9164], [0.0051, -0.2118, 0.9387], [0.0045, -0.2598, 0.93], [0.0051, -0.2591, 0.9275], [0.0051, -0.1639, 0.9474], [0.0045, -0.2123, 0.9412], [0.0051, -0.2118, 0.9387], [0.0051, -0.1639, 0.9474], [0.0045, -0.1158, 0.9562], [0.0045, -0.1643, 0.95], [0.0051, -0.1156, 0.9536], [0.0116, -0.0579, 0.964], [0.0045, -0.1158, 0.9562], [0.0491, -0.0331, -0.9017], [0.0131, -0.0576, -0.9287], [0.0563, -0.0324, -0.9301], [0.0043, -0.1153, -0.9226], [0.0131, -0.0576, -0.9287], [0.0111, -0.0572, -0.9223], [0.0043, -0.1635, -0.9164], [0.0051, -0.1156, -0.9251], [0.0043, -0.1153, -0.9226], [0.0043, -0.2113, -0.9077], [0.0051, -0.1639, -0.9188], [0.0043, -0.1635, -0.9164], [0.0043, -0.2585, -0.8965], [0.0051, -0.2118, -0.9101], [0.0043, -0.2113, -0.9077], [0.0043, -0.2585, -0.8965], [0.0051, -0.3058, -0.8853], [0.0051, -0.2591, -0.8989], [0.0043, -0.305, -0.883], [0.0051, -0.3517, -0.8694], [0.0051, -0.3058, -0.8853], [0.0043, -0.3958, -0.8488], [0.0051, -0.3517, -0.8694], [0.0043, -0.3508, -0.867], [0.0043, -0.4397, -0.8282], [0.0051, -0.3968, -0.851], [0.0043, -0.3958, -0.8488], [0.0043, -0.4397, -0.8282], [0.0051, -0.4837, -0.8076], [0.0051, -0.4408, -0.8304], [0.0043, -0.4825, -0.8054], [0.0051, -0.5254, -0.7825], [0.0051, -0.4837, -0.8076], [0.0043, -0.5241, -0.7805], [0.0051, -0.5658, -0.7554], [0.0051, -0.5254, -0.7825], [0.0043, -0.5643, -0.7534], [0.0051, -0.6047, -0.7262], [0.0051, -0.5658, -0.7554], [0.0043, -0.6031, -0.7243], [0.0051, -0.642, -0.695], [0.0051, -0.6047, -0.7262], [0.0043, -0.6404, -0.6932], [0.0051, -0.6777, -0.662], [0.0051, -0.642, -0.695], [0.0043, -0.676, -0.6602], [0.0051, -0.7116, -0.6272], [0.0051, -0.6777, -0.662], [0.0043, -0.7418, -0.5891], [0.0051, -0.7116, -0.6272], [0.0043, -0.7098, -0.6255], [0.0043, -0.7719, -0.551], [0.0051, -0.7437, -0.5907], [0.0043, -0.7418, -0.5891], [0.0043, -0.7719, -0.551], [0.0051, -0.8021, -0.5129], [0.0051, -0.7739, -0.5525], [0.0043, -0.8001, -0.5115], [0.0051, -0.8282, -0.4719], [0.0051, -0.8021, -0.5129], [0.0043, -0.85, -0.4284], [0.0051, -0.8282, -0.4719], [0.0043, -0.8261, -0.4706], [0.0043, -0.8717, -0.385], [0.0051, -0.8522, -0.4295], [0.0043, -0.85, -0.4284], [0.0043, -0.8911, -0.3405], [0.0051, -0.8739, -0.386], [0.0043, -0.8717, -0.385], [0.0043, -0.9082, -0.2952], [0.0051, -0.8934, -0.3415], [0.0043, -0.8911, -0.3405], [0.0043, -0.9082, -0.2952], [0.0051, -0.9253, -0.2496], [0.0051, -0.9105, -0.296], [0.0043, -0.9229, -0.249], [0.0051, -0.9377, -0.2026], [0.0051, -0.9253, -0.2496], [0.0043, -0.9353, -0.2021], [0.0051, -0.9476, -0.155], [0.0051, -0.9377, -0.2026], [0.0043, -0.9452, -0.1546], [0.0051, -0.9551, -0.107], [0.0051, -0.9476, -0.155], [0.0043, -0.9527, -0.1066], [0.0051, -0.9601, -0.0586], [0.0051, -0.9551, -0.107], [0.0043, -0.9602, -0.01], [0.0051, -0.9601, -0.0586], [0.0043, -0.9577, -0.0584], [0.0043, -0.9602, -0.01], [0.0051, -0.9626, 0.0386], [0.0051, -0.9626, -0.01], [0.0043, -0.9602, 0.0385], [0.0051, -0.9601, 0.0872], [0.0051, -0.9626, 0.0386], [0.0043, -0.9527, 0.1352], [0.0051, -0.9601, 0.0872], [0.0043, -0.9577, 0.087], [0.0043, -0.9452, 0.1832], [0.0051, -0.9551, 0.1355], [0.0043, -0.9527, 0.1352], [0.0043, -0.9452, 0.1832], [0.0051, -0.9377, 0.2312], [0.0051, -0.9476, 0.1836], [0.0043, -0.9353, 0.2306], [0.0051, -0.9253, 0.2782], [0.0051, -0.9377, 0.2312], [0.0043, -0.9082, 0.3237], [0.0051, -0.9253, 0.2782], [0.0043, -0.9229, 0.2775], [0.0043, -0.9082, 0.3237], [0.0051, -0.8934, 0.3701], [0.0051, -0.9105, 0.3245], [0.0043, -0.8911, 0.3691], [0.0051, -0.8739, 0.4146], [0.0051, -0.8934, 0.3701], [0.0043, -0.8717, 0.4136], [0.0051, -0.8522, 0.4581], [0.0051, -0.8739, 0.4146], [0.0043, -0.85, 0.457], [0.0051, -0.8282, 0.5004], [0.0051, -0.8522, 0.4581], [0.0043, -0.8261, 0.4992], [0.0051, -0.8021, 0.5415], [0.0051, -0.8282, 0.5004], [0.0043, -0.8001, 0.5401], [0.0051, -0.7739, 0.5811], [0.0051, -0.8021, 0.5415], [0.0043, -0.7719, 0.5796], [0.0051, -0.7437, 0.6192], [0.0051, -0.7739, 0.5811], [0.0043, -0.7418, 0.6177], [0.0051, -0.7116, 0.6558], [0.0051, -0.7437, 0.6192], [0.0043, -0.676, 0.6888], [0.0051, -0.7116, 0.6558], [0.0043, -0.7098, 0.6541], [0.0043, -0.6404, 0.7218], [0.0051, -0.6777, 0.6906], [0.0043, -0.676, 0.6888], [0.0043, -0.6031, 0.7528], [0.0051, -0.642, 0.7236], [0.0043, -0.6404, 0.7218], [0.0043, -0.6031, 0.7528], [0.0051, -0.5658, 0.784], [0.0051, -0.6047, 0.7548], [0.0043, -0.5241, 0.809], [0.0051, -0.5658, 0.784], [0.0043, -0.5643, 0.782], [0.0043, -0.4825, 0.834], [0.0051, -0.5254, 0.8111], [0.0043, -0.5241, 0.809], [0.0043, -0.4397, 0.8568], [0.0051, -0.4837, 0.8361], [0.0043, -0.4825, 0.834], [0.0043, -0.3958, 0.8774], [0.0051, -0.4408, 0.859], [0.0043, -0.4397, 0.8568], [0.0043, -0.3508, 0.8956], [0.0051, -0.3968, 0.8796], [0.0043, -0.3958, 0.8774], [0.0043, -0.305, 0.9116], [0.0051, -0.3517, 0.8979], [0.0043, -0.3508, 0.8956], [0.0043, -0.2585, 0.9251], [0.0051, -0.3058, 0.9139], [0.0043, -0.305, 0.9116], [0.0043, -0.2113, 0.9363], [0.0051, -0.2591, 0.9275], [0.0043, -0.2585, 0.9251], [0.0043, -0.2113, 0.9363], [0.0051, -0.1639, 0.9474], [0.0051, -0.2118, 0.9387], [0.0043, -0.1635, 0.945], [0.0051, -0.1156, 0.9536], [0.0051, -0.1639, 0.9474], [0.0043, -0.1153, 0.9512], [0.0131, -0.0576, 0.9573], [0.0051, -0.1156, 0.9536], [0.0285, -0.0337, -0.8807], [0.0111, -0.0572, -0.9223], [0.0491, -0.0331, -0.9017], [0.0024, -0.1151, -0.9209], [0.0111, -0.0572, -0.9223], [0.0063, -0.057, -0.9179], [0.0024, -0.1633, -0.9147], [0.0043, -0.1153, -0.9226], [0.0024, -0.1151, -0.9209], [0.0024, -0.2109, -0.906], [0.0043, -0.1635, -0.9164], [0.0024, -0.1633, -0.9147], [0.0024, -0.258, -0.8949], [0.0043, -0.2113, -0.9077], [0.0024, -0.2109, -0.906], [0.0024, -0.3045, -0.8813], [0.0043, -0.2585, -0.8965], [0.0024, -0.258, -0.8949], [0.0024, -0.3502, -0.8654], [0.0043, -0.305, -0.883], [0.0024, -0.3045, -0.8813], [0.0024, -0.3951, -0.8472], [0.0043, -0.3508, -0.867], [0.0024, -0.3502, -0.8654], [0.0024, -0.3951, -0.8472], [0.0043, -0.4397, -0.8282], [0.0043, -0.3958, -0.8488], [0.0024, -0.4389, -0.8267], [0.0043, -0.4825, -0.8054], [0.0043, -0.4397, -0.8282], [0.0024, -0.5232, -0.779], [0.0043, -0.4825, -0.8054], [0.0024, -0.4817, -0.8039], [0.0024, -0.5633, -0.752], [0.0043, -0.5241, -0.7805], [0.0024, -0.5232, -0.779], [0.0024, -0.6021, -0.7229], [0.0043, -0.5643, -0.7534], [0.0024, -0.5633, -0.752], [0.0024, -0.6392, -0.6919], [0.0043, -0.6031, -0.7243], [0.0024, -0.6021, -0.7229], [0.0024, -0.6748, -0.659], [0.0043, -0.6404, -0.6932], [0.0024, -0.6392, -0.6919], [0.0024, -0.7086, -0.6243], [0.0043, -0.676, -0.6602], [0.0024, -0.6748, -0.659], [0.0024, -0.7086, -0.6243], [0.0043, -0.7418, -0.5891], [0.0043, -0.7098, -0.6255], [0.0024, -0.7706, -0.55], [0.0043, -0.7418, -0.5891], [0.0024, -0.7405, -0.588], [0.0024, -0.7986, -0.5105], [0.0043, -0.7719, -0.551], [0.0024, -0.7706, -0.55], [0.0024, -0.8246, -0.4697], [0.0043, -0.8001, -0.5115], [0.0024, -0.7986, -0.5105], [0.0024, -0.8484, -0.4276], [0.0043, -0.8261, -0.4706], [0.0024, -0.8246, -0.4697], [0.0024, -0.8484, -0.4276], [0.0043, -0.8717, -0.385], [0.0043, -0.85, -0.4284], [0.0024, -0.8701, -0.3843], [0.0043, -0.8911, -0.3405], [0.0043, -0.8717, -0.385], [0.0024, -0.8895, -0.3399], [0.0043, -0.9082, -0.2952], [0.0043, -0.8911, -0.3405], [0.0024, -0.9213, -0.2485], [0.0043, -0.9082, -0.2952], [0.0024, -0.9066, -0.2946], [0.0024, -0.9336, -0.2017], [0.0043, -0.9229, -0.249], [0.0024, -0.9213, -0.2485], [0.0024, -0.9435, -0.1543], [0.0043, -0.9353, -0.2021], [0.0024, -0.9336, -0.2017], [0.0024, -0.9435, -0.1543], [0.0043, -0.9527, -0.1066], [0.0043, -0.9452, -0.1546], [0.0024, -0.951, -0.1064], [0.0043, -0.9577, -0.0584], [0.0043, -0.9527, -0.1066], [0.0024, -0.9584, -0.0099], [0.0043, -0.9577, -0.0584], [0.0024, -0.9559, -0.0583], [0.0024, -0.9584, -0.0099], [0.0043, -0.9602, 0.0385], [0.0043, -0.9602, -0.01], [0.0024, -0.9584, 0.0385], [0.0043, -0.9577, 0.087], [0.0043, -0.9602, 0.0385], [0.0024, -0.951, 0.135], [0.0043, -0.9577, 0.087], [0.0024, -0.9559, 0.0868], [0.0024, -0.9435, 0.1828], [0.0043, -0.9527, 0.1352], [0.0024, -0.951, 0.135], [0.0024, -0.9336, 0.2302], [0.0043, -0.9452, 0.1832], [0.0024, -0.9435, 0.1828], [0.0024, -0.9336, 0.2302], [0.0043, -0.9229, 0.2775], [0.0043, -0.9353, 0.2306], [0.0024, -0.9213, 0.277], [0.0043, -0.9082, 0.3237], [0.0043, -0.9229, 0.2775], [0.0024, -0.9066, 0.3232], [0.0043, -0.8911, 0.3691], [0.0043, -0.9082, 0.3237], [0.0024, -0.8895, 0.3685], [0.0043, -0.8717, 0.4136], [0.0043, -0.8911, 0.3691], [0.0024, -0.8484, 0.4561], [0.0043, -0.8717, 0.4136], [0.0024, -0.8701, 0.4128], [0.0024, -0.8484, 0.4561], [0.0043, -0.8261, 0.4992], [0.0043, -0.85, 0.457], [0.0024, -0.7986, 0.5391], [0.0043, -0.8261, 0.4992], [0.0024, -0.8246, 0.4983], [0.0024, -0.7706, 0.5786], [0.0043, -0.8001, 0.5401], [0.0024, -0.7986, 0.5391], [0.0024, -0.7706, 0.5786], [0.0043, -0.7418, 0.6177], [0.0043, -0.7719, 0.5796], [0.0024, -0.7086, 0.6529], [0.0043, -0.7418, 0.6177], [0.0024, -0.7405, 0.6165], [0.0024, -0.7086, 0.6529], [0.0043, -0.676, 0.6888], [0.0043, -0.7098, 0.6541], [0.0024, -0.6748, 0.6876], [0.0043, -0.6404, 0.7218], [0.0043, -0.676, 0.6888], [0.0024, -0.6392, 0.7205], [0.0043, -0.6031, 0.7528], [0.0043, -0.6404, 0.7218], [0.0024, -0.6021, 0.7515], [0.0043, -0.5643, 0.782], [0.0043, -0.6031, 0.7528], [0.0024, -0.5633, 0.7805], [0.0043, -0.5241, 0.809], [0.0043, -0.5643, 0.782], [0.0024, -0.5232, 0.8076], [0.0043, -0.4825, 0.834], [0.0043, -0.5241, 0.809], [0.0024, -0.4389, 0.8552], [0.0043, -0.4825, 0.834], [0.0024, -0.4817, 0.8325], [0.0024, -0.3951, 0.8758], [0.0043, -0.4397, 0.8568], [0.0024, -0.4389, 0.8552], [0.0024, -0.3502, 0.894], [0.0043, -0.3958, 0.8774], [0.0024, -0.3951, 0.8758], [0.0024, -0.3502, 0.894], [0.0043, -0.305, 0.9116], [0.0043, -0.3508, 0.8956], [0.0024, -0.3045, 0.9099], [0.0043, -0.2585, 0.9251], [0.0043, -0.305, 0.9116], [0.0024, -0.258, 0.9234], [0.0043, -0.2113, 0.9363], [0.0043, -0.2585, 0.9251], [0.0024, -0.2109, 0.9346], [0.0043, -0.1635, 0.945], [0.0043, -0.2113, 0.9363], [0.0024, -0.1633, 0.9432], [0.0043, -0.1153, 0.9512], [0.0043, -0.1635, 0.945], [0.0024, -0.1151, 0.9495], [0.0111, -0.0572, 0.9509], [0.0043, -0.1153, 0.9512], [-0.0, -0.0339, -0.873], [0.0063, -0.057, -0.9179], [0.0285, -0.0337, -0.8807], [-0.0, -0.1151, -0.9203], [0.0063, -0.057, -0.9179], [-0.0, -0.0569, -0.9162], [-0.0, -0.1632, -0.914], [0.0024, -0.1151, -0.9209], [-0.0, -0.1151, -0.9203], [-0.0, -0.1632, -0.914], [0.0024, -0.2109, -0.906], [0.0024, -0.1633, -0.9147], [-0.0, -0.2108, -0.9054], [0.0024, -0.258, -0.8949], [0.0024, -0.2109, -0.906], [-0.0, -0.2579, -0.8943], [0.0024, -0.3045, -0.8813], [0.0024, -0.258, -0.8949], [-0.0, -0.3043, -0.8807], [0.0024, -0.3502, -0.8654], [0.0024, -0.3045, -0.8813], [-0.0, -0.35, -0.8648], [0.0024, -0.3951, -0.8472], [0.0024, -0.3502, -0.8654], [-0.0, -0.3948, -0.8466], [0.0024, -0.4389, -0.8267], [0.0024, -0.3951, -0.8472], [-0.0, -0.4386, -0.8261], [0.0024, -0.4817, -0.8039], [0.0024, -0.4389, -0.8267], [-0.0, -0.4814, -0.8034], [0.0024, -0.5232, -0.779], [0.0024, -0.4817, -0.8039], [-0.0, -0.5228, -0.7785], [0.0024, -0.5633, -0.752], [0.0024, -0.5232, -0.779], [-0.0, -0.563, -0.7515], [0.0024, -0.6021, -0.7229], [0.0024, -0.5633, -0.752], [-0.0, -0.6017, -0.7224], [0.0024, -0.6392, -0.6919], [0.0024, -0.6021, -0.7229], [-0.0, -0.6388, -0.6914], [0.0024, -0.6748, -0.659], [0.0024, -0.6392, -0.6919], [-0.0, -0.6743, -0.6586], [0.0024, -0.7086, -0.6243], [0.0024, -0.6748, -0.659], [-0.0, -0.7081, -0.6239], [0.0024, -0.7405, -0.588], [0.0024, -0.7086, -0.6243], [-0.0, -0.74, -0.5876], [0.0024, -0.7706, -0.55], [0.0024, -0.7405, -0.588], [-0.0, -0.7701, -0.5496], [0.0024, -0.7986, -0.5105], [0.0024, -0.7706, -0.55], [-0.0, -0.7981, -0.5102], [0.0024, -0.8246, -0.4697], [0.0024, -0.7986, -0.5105], [-0.0, -0.8241, -0.4694], [0.0024, -0.8484, -0.4276], [0.0024, -0.8246, -0.4697], [-0.0, -0.8479, -0.4273], [0.0024, -0.8701, -0.3843], [0.0024, -0.8484, -0.4276], [-0.0, -0.8695, -0.384], [0.0024, -0.8895, -0.3399], [0.0024, -0.8701, -0.3843], [-0.0, -0.8889, -0.3397], [0.0024, -0.9066, -0.2946], [0.0024, -0.8895, -0.3399], [-0.0, -0.906, -0.2944], [0.0024, -0.9213, -0.2485], [0.0024, -0.9066, -0.2946], [-0.0, -0.9207, -0.2483], [0.0024, -0.9336, -0.2017], [0.0024, -0.9213, -0.2485], [-0.0, -0.933, -0.2015], [0.0024, -0.9435, -0.1543], [0.0024, -0.9336, -0.2017], [-0.0, -0.9429, -0.1542], [0.0024, -0.951, -0.1064], [0.0024, -0.9435, -0.1543], [-0.0, -0.9503, -0.1063], [0.0024, -0.9559, -0.0583], [0.0024, -0.951, -0.1064], [-0.0, -0.9553, -0.0582], [0.0024, -0.9584, -0.0099], [0.0024, -0.9559, -0.0583], [-0.0, -0.9578, -0.0099], [0.0024, -0.9584, 0.0385], [0.0024, -0.9584, -0.0099], [-0.0, -0.9578, 0.0385], [0.0024, -0.9559, 0.0868], [0.0024, -0.9584, 0.0385], [-0.0, -0.9553, 0.0868], [0.0024, -0.951, 0.135], [0.0024, -0.9559, 0.0868], [-0.0, -0.9503, 0.1349], [0.0024, -0.9435, 0.1828], [0.0024, -0.951, 0.135], [-0.0, -0.9429, 0.1827], [0.0024, -0.9336, 0.2302], [0.0024, -0.9435, 0.1828], [-0.0, -0.933, 0.2301], [0.0024, -0.9213, 0.277], [0.0024, -0.9336, 0.2302], [-0.0, -0.9207, 0.2769], [0.0024, -0.9066, 0.3232], [0.0024, -0.9213, 0.277], [-0.0, -0.906, 0.323], [0.0024, -0.8895, 0.3685], [0.0024, -0.9066, 0.3232], [-0.0, -0.8889, 0.3682], [0.0024, -0.8701, 0.4128], [0.0024, -0.8895, 0.3685], [-0.0, -0.8695, 0.4126], [0.0024, -0.8484, 0.4561], [0.0024, -0.8701, 0.4128], [-0.0, -0.8479, 0.4558], [0.0024, -0.8246, 0.4983], [0.0024, -0.8484, 0.4561], [-0.0, -0.8241, 0.498], [0.0024, -0.7986, 0.5391], [0.0024, -0.8246, 0.4983], [-0.0, -0.7981, 0.5388], [0.0024, -0.7706, 0.5786], [0.0024, -0.7986, 0.5391], [-0.0, -0.7701, 0.5782], [0.0024, -0.7405, 0.6165], [0.0024, -0.7706, 0.5786], [-0.0, -0.74, 0.6161], [0.0024, -0.7086, 0.6529], [0.0024, -0.7405, 0.6165], [-0.0, -0.7081, 0.6525], [0.0024, -0.6748, 0.6876], [0.0024, -0.7086, 0.6529], [-0.0, -0.6743, 0.6871], [0.0024, -0.6392, 0.7205], [0.0024, -0.6748, 0.6876], [-0.0, -0.6388, 0.72], [0.0024, -0.6021, 0.7515], [0.0024, -0.6392, 0.7205], [-0.0, -0.6017, 0.751], [0.0024, -0.5633, 0.7805], [0.0024, -0.6021, 0.7515], [-0.0, -0.563, 0.78], [0.0024, -0.5232, 0.8076], [0.0024, -0.5633, 0.7805], [-0.0, -0.5228, 0.807], [0.0024, -0.4817, 0.8325], [0.0024, -0.5232, 0.8076], [-0.0, -0.4814, 0.8319], [0.0024, -0.4389, 0.8552], [0.0024, -0.4817, 0.8325], [-0.0, -0.4386, 0.8547], [0.0024, -0.3951, 0.8758], [0.0024, -0.4389, 0.8552], [-0.0, -0.3948, 0.8752], [0.0024, -0.3502, 0.894], [0.0024, -0.3951, 0.8758], [-0.0, -0.35, 0.8934], [0.0024, -0.3045, 0.9099], [0.0024, -0.3502, 0.894], [-0.0, -0.3043, 0.9093], [0.0024, -0.258, 0.9234], [0.0024, -0.3045, 0.9099], [-0.0, -0.2579, 0.9228], [0.0024, -0.2109, 0.9346], [0.0024, -0.258, 0.9234], [-0.0, -0.2108, 0.934], [0.0024, -0.1633, 0.9432], [0.0024, -0.2109, 0.9346], [-0.0, -0.1632, 0.9426], [0.0024, -0.1151, 0.9495], [0.0024, -0.1633, 0.9432], [-0.0, -0.115, 0.9489], [0.0063, -0.057, 0.9464], [0.0024, -0.1151, 0.9495], [0.0035, 0.0318, 0.9604], [0.0036, 0.0317, 0.9563], [-0.0036, 0.0317, 0.9563], [-0.0041, 0.0318, -0.9297], [-0.0021, 0.0317, -0.9261], [0.0041, 0.0318, -0.9297], [-0.0, -0.0308, -0.9856], [0.002, 0.0319, -0.9333], [0.0278, -0.031, -0.9783], [-0.0491, -0.0331, -0.9017], [-0.0021, 0.0317, -0.9261], [-0.0036, 0.0317, -0.9277], [-0.0, -0.0308, 1.0142], [0.002, 0.0319, 0.9618], [-0.0, 0.0319, 0.9624], [-0.0491, -0.0331, 0.9303], [-0.0021, 0.0317, 0.9547], [-0.0285, -0.0337, 0.9093], [0.0484, -0.0316, -0.9581], [0.0041, 0.0318, -0.9297], [0.0563, -0.0324, -0.9301], [-0.0484, -0.0316, -0.9581], [-0.0041, 0.0318, -0.9297], [-0.0035, 0.0318, -0.9318], [0.0484, -0.0316, 0.9867], [0.0041, 0.0318, 0.9583], [0.0035, 0.0318, 0.9604], [-0.0484, -0.0316, 0.9867], [-0.0041, 0.0318, 0.9583], [-0.0563, -0.0324, 0.9587], [0.0491, -0.0331, -0.9017], [0.0021, 0.0317, -0.9261], [0.0285, -0.0337, -0.8807], [-0.0, -0.0308, -0.9856], [-0.002, 0.0319, -0.9333], [-0.0, 0.0319, -0.9338], [-0.0285, -0.0337, -0.8807], [-0.0, 0.0317, -0.9256], [-0.0021, 0.0317, -0.9261], [0.0491, -0.0331, 0.9303], [0.0021, 0.0317, 0.9547], [0.0036, 0.0317, 0.9563], [-0.0, -0.0308, 1.0142], [-0.002, 0.0319, 0.9618], [-0.0278, -0.031, 1.0069], [-0.0285, -0.0337, 0.9093], [-0.0, 0.0317, 0.9542], [-0.0, -0.0339, 0.9015], [0.0278, -0.031, -0.9783], [0.0035, 0.0318, -0.9318], [0.0484, -0.0316, -0.9581], [-0.0563, -0.0324, -0.9301], [-0.0036, 0.0317, -0.9277], [-0.0041, 0.0318, -0.9297], [0.0278, -0.031, 1.0069], [0.0035, 0.0318, 0.9604], [0.002, 0.0319, 0.9618], [-0.0563, -0.0324, 0.9587], [-0.0036, 0.0317, 0.9563], [-0.0491, -0.0331, 0.9303], [0.0563, -0.0324, -0.9301], [0.0036, 0.0317, -0.9277], [0.0491, -0.0331, -0.9017], [-0.0278, -0.031, -0.9783], [-0.0035, 0.0318, -0.9318], [-0.002, 0.0319, -0.9333], [0.0285, -0.0337, -0.8807], [-0.0, 0.0317, -0.9256], [-0.0, -0.0339, -0.873], [0.0563, -0.0324, 0.9587], [0.0036, 0.0317, 0.9563], [0.0041, 0.0318, 0.9583], [-0.0, -0.0339, 0.9015], [0.0285, -0.0337, 0.9093], [0.0063, -0.057, 0.9464], [0.0285, -0.0337, 0.9093], [0.0491, -0.0331, 0.9303], [0.0111, -0.0572, 0.9509], [0.0491, -0.0331, 0.9303], [0.0563, -0.0324, 0.9587], [0.0131, -0.0576, 0.9573], [0.0563, -0.0324, 0.9587], [0.0484, -0.0316, 0.9867], [0.0116, -0.0579, 0.964], [0.0484, -0.0316, 0.9867], [0.0278, -0.031, 1.0069], [0.0068, -0.0582, 0.9691], [0.0278, -0.031, 1.0069], [-0.0, -0.0308, 1.0142], [-0.0, -0.0583, 0.971], [-0.0, -0.0583, 0.971], [-0.0, -0.0308, 1.0142], [-0.0278, -0.031, 1.0069], [-0.0068, -0.0582, 0.9691], [-0.0278, -0.031, 1.0069], [-0.0484, -0.0316, 0.9867], [-0.0116, -0.0579, 0.964], [-0.0484, -0.0316, 0.9867], [-0.0563, -0.0324, 0.9587], [-0.0131, -0.0576, 0.9573], [-0.0563, -0.0324, 0.9587], [-0.0491, -0.0331, 0.9303], [0.0285, -0.0337, 0.9093], [-0.0, -0.0339, 0.9015], [-0.0, 0.0317, 0.9542], [-0.0111, -0.0572, 0.9509], [-0.0491, -0.0331, 0.9303], [-0.0285, -0.0337, 0.9093], [-0.0063, -0.057, 0.9464], [-0.0285, -0.0337, 0.9093], [-0.0, -0.0339, 0.9015], [-0.0278, -0.031, 1.0069], [-0.002, 0.0319, 0.9618], [-0.0035, 0.0318, 0.9604], [-0.0063, -0.057, -0.9179], [-0.0, -0.0569, -0.9162], [-0.0, -0.0339, -0.873], [-0.0063, -0.057, -0.9179], [-0.0024, -0.1151, -0.9209], [-0.0, -0.1151, -0.9203], [-0.0024, -0.1151, -0.9209], [-0.0024, -0.1633, -0.9147], [-0.0, -0.1632, -0.914], [-0.0024, -0.2109, -0.906], [-0.0, -0.2108, -0.9054], [-0.0, -0.1632, -0.914], [-0.0024, -0.258, -0.8949], [-0.0, -0.2579, -0.8943], [-0.0, -0.2108, -0.9054], [-0.0024, -0.3045, -0.8813], [-0.0, -0.3043, -0.8807], [-0.0, -0.2579, -0.8943], [-0.0024, -0.3502, -0.8654], [-0.0, -0.35, -0.8648], [-0.0, -0.3043, -0.8807], [-0.0024, -0.3951, -0.8472], [-0.0, -0.3948, -0.8466], [-0.0, -0.35, -0.8648], [-0.0024, -0.4389, -0.8267], [-0.0, -0.4386, -0.8261], [-0.0, -0.3948, -0.8466], [-0.0024, -0.4817, -0.8039], [-0.0, -0.4814, -0.8034], [-0.0, -0.4386, -0.8261], [-0.0024, -0.5232, -0.779], [-0.0, -0.5228, -0.7785], [-0.0, -0.4814, -0.8034], [-0.0024, -0.5633, -0.752], [-0.0, -0.563, -0.7515], [-0.0, -0.5228, -0.7785], [-0.0024, -0.6021, -0.7229], [-0.0, -0.6017, -0.7224], [-0.0, -0.563, -0.7515], [-0.0024, -0.6392, -0.6919], [-0.0, -0.6388, -0.6914], [-0.0, -0.6017, -0.7224], [-0.0024, -0.6748, -0.659], [-0.0, -0.6743, -0.6586], [-0.0, -0.6388, -0.6914], [-0.0024, -0.7086, -0.6243], [-0.0, -0.7081, -0.6239], [-0.0, -0.6743, -0.6586], [-0.0024, -0.7405, -0.588], [-0.0, -0.74, -0.5876], [-0.0, -0.7081, -0.6239], [-0.0024, -0.7706, -0.55], [-0.0, -0.7701, -0.5496], [-0.0, -0.74, -0.5876], [-0.0024, -0.7986, -0.5105], [-0.0, -0.7981, -0.5102], [-0.0, -0.7701, -0.5496], [-0.0024, -0.8246, -0.4697], [-0.0, -0.8241, -0.4694], [-0.0, -0.7981, -0.5102], [-0.0024, -0.8484, -0.4276], [-0.0, -0.8479, -0.4273], [-0.0, -0.8241, -0.4694], [-0.0024, -0.8701, -0.3843], [-0.0, -0.8695, -0.384], [-0.0, -0.8479, -0.4273], [-0.0024, -0.8895, -0.3399], [-0.0, -0.8889, -0.3397], [-0.0, -0.8695, -0.384], [-0.0024, -0.9066, -0.2946], [-0.0, -0.906, -0.2944], [-0.0, -0.8889, -0.3397], [-0.0024, -0.9213, -0.2485], [-0.0, -0.9207, -0.2483], [-0.0, -0.906, -0.2944], [-0.0024, -0.9336, -0.2017], [-0.0, -0.933, -0.2015], [-0.0, -0.9207, -0.2483], [-0.0024, -0.9435, -0.1543], [-0.0, -0.9429, -0.1542], [-0.0, -0.933, -0.2015], [-0.0024, -0.951, -0.1064], [-0.0, -0.9503, -0.1063], [-0.0, -0.9429, -0.1542], [-0.0024, -0.9559, -0.0583], [-0.0, -0.9553, -0.0582], [-0.0, -0.9503, -0.1063], [-0.0024, -0.9584, -0.0099], [-0.0, -0.9578, -0.0099], [-0.0, -0.9553, -0.0582], [-0.0024, -0.9584, 0.0385], [-0.0, -0.9578, 0.0385], [-0.0, -0.9578, -0.0099], [-0.0024, -0.9559, 0.0868], [-0.0, -0.9553, 0.0868], [-0.0, -0.9578, 0.0385], [-0.0024, -0.951, 0.135], [-0.0, -0.9503, 0.1349], [-0.0, -0.9553, 0.0868], [-0.0024, -0.9435, 0.1828], [-0.0, -0.9429, 0.1827], [-0.0, -0.9503, 0.1349], [-0.0024, -0.9336, 0.2302], [-0.0, -0.933, 0.2301], [-0.0, -0.9429, 0.1827], [-0.0024, -0.9213, 0.277], [-0.0, -0.9207, 0.2769], [-0.0, -0.933, 0.2301], [-0.0024, -0.9066, 0.3232], [-0.0, -0.906, 0.323], [-0.0, -0.9207, 0.2769], [-0.0024, -0.8895, 0.3685], [-0.0, -0.8889, 0.3682], [-0.0, -0.906, 0.323], [-0.0024, -0.8701, 0.4128], [-0.0, -0.8695, 0.4126], [-0.0, -0.8889, 0.3682], [-0.0024, -0.8484, 0.4561], [-0.0, -0.8479, 0.4558], [-0.0, -0.8695, 0.4126], [-0.0024, -0.8246, 0.4983], [-0.0, -0.8241, 0.498], [-0.0, -0.8479, 0.4558], [-0.0024, -0.7986, 0.5391], [-0.0, -0.7981, 0.5388], [-0.0, -0.8241, 0.498], [-0.0024, -0.7706, 0.5786], [-0.0, -0.7701, 0.5782], [-0.0, -0.7981, 0.5388], [-0.0024, -0.7405, 0.6165], [-0.0, -0.74, 0.6161], [-0.0, -0.7701, 0.5782], [-0.0024, -0.7086, 0.6529], [-0.0, -0.7081, 0.6525], [-0.0, -0.74, 0.6161], [-0.0024, -0.6748, 0.6876], [-0.0, -0.6743, 0.6871], [-0.0, -0.7081, 0.6525], [-0.0024, -0.6392, 0.7205], [-0.0, -0.6388, 0.72], [-0.0, -0.6743, 0.6871], [-0.0024, -0.6021, 0.7515], [-0.0, -0.6017, 0.751], [-0.0, -0.6388, 0.72], [-0.0024, -0.5633, 0.7805], [-0.0, -0.563, 0.78], [-0.0, -0.6017, 0.751], [-0.0024, -0.5232, 0.8076], [-0.0, -0.5228, 0.807], [-0.0, -0.563, 0.78], [-0.0024, -0.4817, 0.8325], [-0.0, -0.4814, 0.8319], [-0.0, -0.5228, 0.807], [-0.0024, -0.4389, 0.8552], [-0.0, -0.4386, 0.8547], [-0.0, -0.4814, 0.8319], [-0.0024, -0.3951, 0.8758], [-0.0, -0.3948, 0.8752], [-0.0, -0.4386, 0.8547], [-0.0024, -0.3502, 0.894], [-0.0, -0.35, 0.8934], [-0.0, -0.3948, 0.8752], [-0.0024, -0.3045, 0.9099], [-0.0, -0.3043, 0.9093], [-0.0, -0.35, 0.8934], [-0.0024, -0.258, 0.9234], [-0.0, -0.2579, 0.9228], [-0.0, -0.3043, 0.9093], [-0.0024, -0.2109, 0.9346], [-0.0, -0.2108, 0.934], [-0.0, -0.2579, 0.9228], [-0.0024, -0.1633, 0.9432], [-0.0, -0.1632, 0.9426], [-0.0, -0.2108, 0.934], [-0.0024, -0.1151, 0.9495], [-0.0, -0.115, 0.9489], [-0.0, -0.1632, 0.9426], [-0.0063, -0.057, 0.9464], [-0.0, -0.0569, 0.9448], [-0.0, -0.115, 0.9489], [-0.0111, -0.0572, -0.9223], [-0.0063, -0.057, -0.9179], [-0.0285, -0.0337, -0.8807], [-0.0111, -0.0572, -0.9223], [-0.0043, -0.1153, -0.9226], [-0.0024, -0.1151, -0.9209], [-0.0043, -0.1153, -0.9226], [-0.0043, -0.1635, -0.9164], [-0.0024, -0.1633, -0.9147], [-0.0043, -0.1635, -0.9164], [-0.0043, -0.2113, -0.9077], [-0.0024, -0.2109, -0.906], [-0.0043, -0.2113, -0.9077], [-0.0043, -0.2585, -0.8965], [-0.0024, -0.258, -0.8949], [-0.0043, -0.2585, -0.8965], [-0.0043, -0.305, -0.883], [-0.0024, -0.3045, -0.8813], [-0.0043, -0.305, -0.883], [-0.0043, -0.3508, -0.867], [-0.0024, -0.3502, -0.8654], [-0.0043, -0.3508, -0.867], [-0.0043, -0.3958, -0.8488], [-0.0024, -0.3951, -0.8472], [-0.0043, -0.3958, -0.8488], [-0.0043, -0.4397, -0.8282], [-0.0024, -0.4389, -0.8267], [-0.0043, -0.4825, -0.8054], [-0.0024, -0.4817, -0.8039], [-0.0024, -0.4389, -0.8267], [-0.0043, -0.4825, -0.8054], [-0.0043, -0.5241, -0.7805], [-0.0024, -0.5232, -0.779], [-0.0043, -0.5241, -0.7805], [-0.0043, -0.5643, -0.7534], [-0.0024, -0.5633, -0.752], [-0.0043, -0.6031, -0.7243], [-0.0024, -0.6021, -0.7229], [-0.0024, -0.5633, -0.752], [-0.0043, -0.6404, -0.6932], [-0.0024, -0.6392, -0.6919], [-0.0024, -0.6021, -0.7229], [-0.0043, -0.676, -0.6602], [-0.0024, -0.6748, -0.659], [-0.0024, -0.6392, -0.6919], [-0.0043, -0.676, -0.6602], [-0.0043, -0.7098, -0.6255], [-0.0024, -0.7086, -0.6243], [-0.0043, -0.7098, -0.6255], [-0.0043, -0.7418, -0.5891], [-0.0024, -0.7405, -0.588], [-0.0043, -0.7418, -0.5891], [-0.0043, -0.7719, -0.551], [-0.0024, -0.7706, -0.55], [-0.0043, -0.7719, -0.551], [-0.0043, -0.8001, -0.5115], [-0.0024, -0.7986, -0.5105], [-0.0043, -0.8001, -0.5115], [-0.0043, -0.8261, -0.4706], [-0.0024, -0.8246, -0.4697], [-0.0043, -0.8261, -0.4706], [-0.0043, -0.85, -0.4284], [-0.0024, -0.8484, -0.4276], [-0.0043, -0.8717, -0.385], [-0.0024, -0.8701, -0.3843], [-0.0024, -0.8484, -0.4276], [-0.0043, -0.8911, -0.3405], [-0.0024, -0.8895, -0.3399], [-0.0024, -0.8701, -0.3843], [-0.0043, -0.9082, -0.2952], [-0.0024, -0.9066, -0.2946], [-0.0024, -0.8895, -0.3399], [-0.0043, -0.9229, -0.249], [-0.0024, -0.9213, -0.2485], [-0.0024, -0.9066, -0.2946], [-0.0043, -0.9229, -0.249], [-0.0043, -0.9353, -0.2021], [-0.0024, -0.9336, -0.2017], [-0.0043, -0.9452, -0.1546], [-0.0024, -0.9435, -0.1543], [-0.0024, -0.9336, -0.2017], [-0.0043, -0.9527, -0.1066], [-0.0024, -0.951, -0.1064], [-0.0024, -0.9435, -0.1543], [-0.0043, -0.9577, -0.0584], [-0.0024, -0.9559, -0.0583], [-0.0024, -0.951, -0.1064], [-0.0043, -0.9602, -0.01], [-0.0024, -0.9584, -0.0099], [-0.0024, -0.9559, -0.0583], [-0.0043, -0.9602, 0.0385], [-0.0024, -0.9584, 0.0385], [-0.0024, -0.9584, -0.0099], [-0.0043, -0.9577, 0.087], [-0.0024, -0.9559, 0.0868], [-0.0024, -0.9584, 0.0385], [-0.0043, -0.9577, 0.087], [-0.0043, -0.9527, 0.1352], [-0.0024, -0.951, 0.135], [-0.0043, -0.9452, 0.1832], [-0.0024, -0.9435, 0.1828], [-0.0024, -0.951, 0.135], [-0.0043, -0.9353, 0.2306], [-0.0024, -0.9336, 0.2302], [-0.0024, -0.9435, 0.1828], [-0.0043, -0.9229, 0.2775], [-0.0024, -0.9213, 0.277], [-0.0024, -0.9336, 0.2302], [-0.0043, -0.9082, 0.3237], [-0.0024, -0.9066, 0.3232], [-0.0024, -0.9213, 0.277], [-0.0043, -0.8911, 0.3691], [-0.0024, -0.8895, 0.3685], [-0.0024, -0.9066, 0.3232], [-0.0043, -0.8717, 0.4136], [-0.0024, -0.8701, 0.4128], [-0.0024, -0.8895, 0.3685], [-0.0043, -0.85, 0.457], [-0.0024, -0.8484, 0.4561], [-0.0024, -0.8701, 0.4128], [-0.0043, -0.8261, 0.4992], [-0.0024, -0.8246, 0.4983], [-0.0024, -0.8484, 0.4561], [-0.0043, -0.8001, 0.5401], [-0.0024, -0.7986, 0.5391], [-0.0024, -0.8246, 0.4983], [-0.0043, -0.7719, 0.5796], [-0.0024, -0.7706, 0.5786], [-0.0024, -0.7986, 0.5391], [-0.0043, -0.7418, 0.6177], [-0.0024, -0.7405, 0.6165], [-0.0024, -0.7706, 0.5786], [-0.0043, -0.7418, 0.6177], [-0.0043, -0.7098, 0.6541], [-0.0024, -0.7086, 0.6529], [-0.0043, -0.676, 0.6888], [-0.0024, -0.6748, 0.6876], [-0.0024, -0.7086, 0.6529], [-0.0043, -0.6404, 0.7218], [-0.0024, -0.6392, 0.7205], [-0.0024, -0.6748, 0.6876], [-0.0043, -0.6031, 0.7528], [-0.0024, -0.6021, 0.7515], [-0.0024, -0.6392, 0.7205], [-0.0043, -0.5643, 0.782], [-0.0024, -0.5633, 0.7805], [-0.0024, -0.6021, 0.7515], [-0.0043, -0.5241, 0.809], [-0.0024, -0.5232, 0.8076], [-0.0024, -0.5633, 0.7805], [-0.0043, -0.4825, 0.834], [-0.0024, -0.4817, 0.8325], [-0.0024, -0.5232, 0.8076], [-0.0043, -0.4825, 0.834], [-0.0043, -0.4397, 0.8568], [-0.0024, -0.4389, 0.8552], [-0.0043, -0.4397, 0.8568], [-0.0043, -0.3958, 0.8774], [-0.0024, -0.3951, 0.8758], [-0.0043, -0.3958, 0.8774], [-0.0043, -0.3508, 0.8956], [-0.0024, -0.3502, 0.894], [-0.0043, -0.305, 0.9116], [-0.0024, -0.3045, 0.9099], [-0.0024, -0.3502, 0.894], [-0.0043, -0.2585, 0.9251], [-0.0024, -0.258, 0.9234], [-0.0024, -0.3045, 0.9099], [-0.0043, -0.2113, 0.9363], [-0.0024, -0.2109, 0.9346], [-0.0024, -0.258, 0.9234], [-0.0043, -0.1635, 0.945], [-0.0024, -0.1633, 0.9432], [-0.0024, -0.2109, 0.9346], [-0.0043, -0.1153, 0.9512], [-0.0024, -0.1151, 0.9495], [-0.0024, -0.1633, 0.9432], [-0.0111, -0.0572, 0.9509], [-0.0063, -0.057, 0.9464], [-0.0024, -0.1151, 0.9495], [-0.0131, -0.0576, -0.9287], [-0.0111, -0.0572, -0.9223], [-0.0491, -0.0331, -0.9017], [-0.0131, -0.0576, -0.9287], [-0.0051, -0.1156, -0.9251], [-0.0043, -0.1153, -0.9226], [-0.0051, -0.1156, -0.9251], [-0.0051, -0.1639, -0.9188], [-0.0043, -0.1635, -0.9164], [-0.0051, -0.1639, -0.9188], [-0.0051, -0.2118, -0.9101], [-0.0043, -0.2113, -0.9077], [-0.0051, -0.2118, -0.9101], [-0.0051, -0.2591, -0.8989], [-0.0043, -0.2585, -0.8965], [-0.0051, -0.3058, -0.8853], [-0.0043, -0.305, -0.883], [-0.0043, -0.2585, -0.8965], [-0.0051, -0.3517, -0.8694], [-0.0043, -0.3508, -0.867], [-0.0043, -0.305, -0.883], [-0.0051, -0.3517, -0.8694], [-0.0051, -0.3968, -0.851], [-0.0043, -0.3958, -0.8488], [-0.0051, -0.4408, -0.8304], [-0.0043, -0.4397, -0.8282], [-0.0043, -0.3958, -0.8488], [-0.0051, -0.4837, -0.8076], [-0.0043, -0.4825, -0.8054], [-0.0043, -0.4397, -0.8282], [-0.0051, -0.5254, -0.7825], [-0.0043, -0.5241, -0.7805], [-0.0043, -0.4825, -0.8054], [-0.0051, -0.5658, -0.7554], [-0.0043, -0.5643, -0.7534], [-0.0043, -0.5241, -0.7805], [-0.0051, -0.5658, -0.7554], [-0.0051, -0.6047, -0.7262], [-0.0043, -0.6031, -0.7243], [-0.0051, -0.642, -0.695], [-0.0043, -0.6404, -0.6932], [-0.0043, -0.6031, -0.7243], [-0.0051, -0.642, -0.695], [-0.0051, -0.6777, -0.662], [-0.0043, -0.676, -0.6602], [-0.0051, -0.7116, -0.6272], [-0.0043, -0.7098, -0.6255], [-0.0043, -0.676, -0.6602], [-0.0051, -0.7116, -0.6272], [-0.0051, -0.7437, -0.5907], [-0.0043, -0.7418, -0.5891], [-0.0051, -0.7437, -0.5907], [-0.0051, -0.7739, -0.5525], [-0.0043, -0.7719, -0.551], [-0.0051, -0.7739, -0.5525], [-0.0051, -0.8021, -0.5129], [-0.0043, -0.8001, -0.5115], [-0.0051, -0.8282, -0.4719], [-0.0043, -0.8261, -0.4706], [-0.0043, -0.8001, -0.5115], [-0.0051, -0.8522, -0.4295], [-0.0043, -0.85, -0.4284], [-0.0043, -0.8261, -0.4706], [-0.0051, -0.8522, -0.4295], [-0.0051, -0.8739, -0.386], [-0.0043, -0.8717, -0.385], [-0.0051, -0.8739, -0.386], [-0.0051, -0.8934, -0.3415], [-0.0043, -0.8911, -0.3405], [-0.0051, -0.8934, -0.3415], [-0.0051, -0.9105, -0.296], [-0.0043, -0.9082, -0.2952], [-0.0051, -0.9253, -0.2496], [-0.0043, -0.9229, -0.249], [-0.0043, -0.9082, -0.2952], [-0.0051, -0.9377, -0.2026], [-0.0043, -0.9353, -0.2021], [-0.0043, -0.9229, -0.249], [-0.0051, -0.9476, -0.155], [-0.0043, -0.9452, -0.1546], [-0.0043, -0.9353, -0.2021], [-0.0051, -0.9551, -0.107], [-0.0043, -0.9527, -0.1066], [-0.0043, -0.9452, -0.1546], [-0.0051, -0.9601, -0.0586], [-0.0043, -0.9577, -0.0584], [-0.0043, -0.9527, -0.1066], [-0.0051, -0.9601, -0.0586], [-0.0051, -0.9626, -0.01], [-0.0043, -0.9602, -0.01], [-0.0051, -0.9626, 0.0386], [-0.0043, -0.9602, 0.0385], [-0.0043, -0.9602, -0.01], [-0.0051, -0.9601, 0.0872], [-0.0043, -0.9577, 0.087], [-0.0043, -0.9602, 0.0385], [-0.0051, -0.9601, 0.0872], [-0.0051, -0.9551, 0.1355], [-0.0043, -0.9527, 0.1352], [-0.0051, -0.9551, 0.1355], [-0.0051, -0.9476, 0.1836], [-0.0043, -0.9452, 0.1832], [-0.0051, -0.9377, 0.2312], [-0.0043, -0.9353, 0.2306], [-0.0043, -0.9452, 0.1832], [-0.0051, -0.9377, 0.2312], [-0.0051, -0.9253, 0.2782], [-0.0043, -0.9229, 0.2775], [-0.0051, -0.9253, 0.2782], [-0.0051, -0.9105, 0.3245], [-0.0043, -0.9082, 0.3237], [-0.0051, -0.9105, 0.3245], [-0.0051, -0.8934, 0.3701], [-0.0043, -0.8911, 0.3691], [-0.0051, -0.8934, 0.3701], [-0.0051, -0.8739, 0.4146], [-0.0043, -0.8717, 0.4136], [-0.0051, -0.8522, 0.4581], [-0.0043, -0.85, 0.457], [-0.0043, -0.8717, 0.4136], [-0.0051, -0.8282, 0.5004], [-0.0043, -0.8261, 0.4992], [-0.0043, -0.85, 0.457], [-0.0051, -0.8021, 0.5415], [-0.0043, -0.8001, 0.5401], [-0.0043, -0.8261, 0.4992], [-0.0051, -0.8021, 0.5415], [-0.0051, -0.7739, 0.5811], [-0.0043, -0.7719, 0.5796], [-0.0051, -0.7437, 0.6192], [-0.0043, -0.7418, 0.6177], [-0.0043, -0.7719, 0.5796], [-0.0051, -0.7437, 0.6192], [-0.0051, -0.7116, 0.6558], [-0.0043, -0.7098, 0.6541], [-0.0051, -0.7116, 0.6558], [-0.0051, -0.6777, 0.6906], [-0.0043, -0.676, 0.6888], [-0.0051, -0.6777, 0.6906], [-0.0051, -0.642, 0.7236], [-0.0043, -0.6404, 0.7218], [-0.0051, -0.642, 0.7236], [-0.0051, -0.6047, 0.7548], [-0.0043, -0.6031, 0.7528], [-0.0051, -0.6047, 0.7548], [-0.0051, -0.5658, 0.784], [-0.0043, -0.5643, 0.782], [-0.0051, -0.5658, 0.784], [-0.0051, -0.5254, 0.8111], [-0.0043, -0.5241, 0.809], [-0.0051, -0.5254, 0.8111], [-0.0051, -0.4837, 0.8361], [-0.0043, -0.4825, 0.834], [-0.0051, -0.4837, 0.8361], [-0.0051, -0.4408, 0.859], [-0.0043, -0.4397, 0.8568], [-0.0051, -0.4408, 0.859], [-0.0051, -0.3968, 0.8796], [-0.0043, -0.3958, 0.8774], [-0.0051, -0.3968, 0.8796], [-0.0051, -0.3517, 0.8979], [-0.0043, -0.3508, 0.8956], [-0.0051, -0.3058, 0.9139], [-0.0043, -0.305, 0.9116], [-0.0043, -0.3508, 0.8956], [-0.0051, -0.3058, 0.9139], [-0.0051, -0.2591, 0.9275], [-0.0043, -0.2585, 0.9251], [-0.0051, -0.2591, 0.9275], [-0.0051, -0.2118, 0.9387], [-0.0043, -0.2113, 0.9363], [-0.0051, -0.1639, 0.9474], [-0.0043, -0.1635, 0.945], [-0.0043, -0.2113, 0.9363], [-0.0051, -0.1156, 0.9536], [-0.0043, -0.1153, 0.9512], [-0.0043, -0.1635, 0.945], [-0.0131, -0.0576, 0.9573], [-0.0111, -0.0572, 0.9509], [-0.0043, -0.1153, 0.9512], [-0.0116, -0.0579, -0.9354], [-0.0131, -0.0576, -0.9287], [-0.0563, -0.0324, -0.9301], [-0.0116, -0.0579, -0.9354], [-0.0045, -0.1158, -0.9277], [-0.0051, -0.1156, -0.9251], [-0.0045, -0.1158, -0.9277], [-0.0045, -0.1643, -0.9214], [-0.0051, -0.1639, -0.9188], [-0.0045, -0.2123, -0.9126], [-0.0051, -0.2118, -0.9101], [-0.0051, -0.1639, -0.9188], [-0.0045, -0.2598, -0.9014], [-0.0051, -0.2591, -0.8989], [-0.0051, -0.2118, -0.9101], [-0.0045, -0.3066, -0.8878], [-0.0051, -0.3058, -0.8853], [-0.0051, -0.2591, -0.8989], [-0.0045, -0.3526, -0.8718], [-0.0051, -0.3517, -0.8694], [-0.0051, -0.3058, -0.8853], [-0.0045, -0.3978, -0.8534], [-0.0051, -0.3968, -0.851], [-0.0051, -0.3517, -0.8694], [-0.0045, -0.442, -0.8327], [-0.0051, -0.4408, -0.8304], [-0.0051, -0.3968, -0.851], [-0.0045, -0.485, -0.8098], [-0.0051, -0.4837, -0.8076], [-0.0051, -0.4408, -0.8304], [-0.0045, -0.485, -0.8098], [-0.0045, -0.5268, -0.7847], [-0.0051, -0.5254, -0.7825], [-0.0045, -0.5268, -0.7847], [-0.0045, -0.5673, -0.7575], [-0.0051, -0.5658, -0.7554], [-0.0045, -0.6063, -0.7282], [-0.0051, -0.6047, -0.7262], [-0.0051, -0.5658, -0.7554], [-0.0045, -0.6063, -0.7282], [-0.0045, -0.6437, -0.697], [-0.0051, -0.642, -0.695], [-0.0045, -0.6795, -0.6639], [-0.0051, -0.6777, -0.662], [-0.0051, -0.642, -0.695], [-0.0045, -0.7135, -0.6289], [-0.0051, -0.7116, -0.6272], [-0.0051, -0.6777, -0.662], [-0.0045, -0.7457, -0.5923], [-0.0051, -0.7437, -0.5907], [-0.0051, -0.7116, -0.6272], [-0.0045, -0.776, -0.5541], [-0.0051, -0.7739, -0.5525], [-0.0051, -0.7437, -0.5907], [-0.0045, -0.8043, -0.5143], [-0.0051, -0.8021, -0.5129], [-0.0051, -0.7739, -0.5525], [-0.0045, -0.8043, -0.5143], [-0.0045, -0.8304, -0.4732], [-0.0051, -0.8282, -0.4719], [-0.0045, -0.8544, -0.4308], [-0.0051, -0.8522, -0.4295], [-0.0051, -0.8282, -0.4719], [-0.0045, -0.8762, -0.3871], [-0.0051, -0.8739, -0.386], [-0.0051, -0.8522, -0.4295], [-0.0045, -0.8762, -0.3871], [-0.0045, -0.8958, -0.3425], [-0.0051, -0.8934, -0.3415], [-0.0045, -0.913, -0.2968], [-0.0051, -0.9105, -0.296], [-0.0051, -0.8934, -0.3415], [-0.0045, -0.9278, -0.2504], [-0.0051, -0.9253, -0.2496], [-0.0051, -0.9105, -0.296], [-0.0045, -0.9402, -0.2032], [-0.0051, -0.9377, -0.2026], [-0.0051, -0.9253, -0.2496], [-0.0045, -0.9502, -0.1555], [-0.0051, -0.9476, -0.155], [-0.0051, -0.9377, -0.2026], [-0.0045, -0.9502, -0.1555], [-0.0045, -0.9577, -0.1073], [-0.0051, -0.9551, -0.107], [-0.0045, -0.9627, -0.0588], [-0.0051, -0.9601, -0.0586], [-0.0051, -0.9551, -0.107], [-0.0045, -0.9627, -0.0588], [-0.0045, -0.9652, -0.0101], [-0.0051, -0.9626, -0.01], [-0.0045, -0.9652, 0.0387], [-0.0051, -0.9626, 0.0386], [-0.0051, -0.9626, -0.01], [-0.0045, -0.9652, 0.0387], [-0.0045, -0.9627, 0.0874], [-0.0051, -0.9601, 0.0872], [-0.0045, -0.9577, 0.1359], [-0.0051, -0.9551, 0.1355], [-0.0051, -0.9601, 0.0872], [-0.0045, -0.9502, 0.1841], [-0.0051, -0.9476, 0.1836], [-0.0051, -0.9551, 0.1355], [-0.0045, -0.9402, 0.2318], [-0.0051, -0.9377, 0.2312], [-0.0051, -0.9476, 0.1836], [-0.0045, -0.9402, 0.2318], [-0.0045, -0.9278, 0.2789], [-0.0051, -0.9253, 0.2782], [-0.0045, -0.9278, 0.2789], [-0.0045, -0.913, 0.3254], [-0.0051, -0.9105, 0.3245], [-0.0045, -0.8958, 0.371], [-0.0051, -0.8934, 0.3701], [-0.0051, -0.9105, 0.3245], [-0.0045, -0.8762, 0.4157], [-0.0051, -0.8739, 0.4146], [-0.0051, -0.8934, 0.3701], [-0.0045, -0.8762, 0.4157], [-0.0045, -0.8544, 0.4593], [-0.0051, -0.8522, 0.4581], [-0.0045, -0.8544, 0.4593], [-0.0045, -0.8304, 0.5018], [-0.0051, -0.8282, 0.5004], [-0.0045, -0.8304, 0.5018], [-0.0045, -0.8043, 0.5429], [-0.0051, -0.8021, 0.5415], [-0.0045, -0.8043, 0.5429], [-0.0045, -0.776, 0.5827], [-0.0051, -0.7739, 0.5811], [-0.0045, -0.776, 0.5827], [-0.0045, -0.7457, 0.6209], [-0.0051, -0.7437, 0.6192], [-0.0045, -0.7135, 0.6575], [-0.0051, -0.7116, 0.6558], [-0.0051, -0.7437, 0.6192], [-0.0045, -0.6795, 0.6924], [-0.0051, -0.6777, 0.6906], [-0.0051, -0.7116, 0.6558], [-0.0045, -0.6437, 0.7256], [-0.0051, -0.642, 0.7236], [-0.0051, -0.6777, 0.6906], [-0.0045, -0.6437, 0.7256], [-0.0045, -0.6063, 0.7568], [-0.0051, -0.6047, 0.7548], [-0.0045, -0.6063, 0.7568], [-0.0045, -0.5673, 0.7861], [-0.0051, -0.5658, 0.784], [-0.0045, -0.5673, 0.7861], [-0.0045, -0.5268, 0.8133], [-0.0051, -0.5254, 0.8111], [-0.0045, -0.485, 0.8384], [-0.0051, -0.4837, 0.8361], [-0.0051, -0.5254, 0.8111], [-0.0045, -0.442, 0.8613], [-0.0051, -0.4408, 0.859], [-0.0051, -0.4837, 0.8361], [-0.0045, -0.442, 0.8613], [-0.0045, -0.3978, 0.882], [-0.0051, -0.3968, 0.8796], [-0.0045, -0.3526, 0.9004], [-0.0051, -0.3517, 0.8979], [-0.0051, -0.3968, 0.8796], [-0.0045, -0.3066, 0.9164], [-0.0051, -0.3058, 0.9139], [-0.0051, -0.3517, 0.8979], [-0.0045, -0.2598, 0.93], [-0.0051, -0.2591, 0.9275], [-0.0051, -0.3058, 0.9139], [-0.0045, -0.2598, 0.93], [-0.0045, -0.2123, 0.9412], [-0.0051, -0.2118, 0.9387], [-0.0045, -0.2123, 0.9412], [-0.0045, -0.1643, 0.95], [-0.0051, -0.1639, 0.9474], [-0.0045, -0.1158, 0.9562], [-0.0051, -0.1156, 0.9536], [-0.0051, -0.1639, 0.9474], [-0.0116, -0.0579, 0.964], [-0.0131, -0.0576, 0.9573], [-0.0051, -0.1156, 0.9536], [-0.0068, -0.0582, -0.9405], [-0.0116, -0.0579, -0.9354], [-0.0484, -0.0316, -0.9581], [-0.0068, -0.0582, -0.9405], [-0.0027, -0.116, -0.9296], [-0.0045, -0.1158, -0.9277], [-0.0027, -0.116, -0.9296], [-0.0026, -0.1646, -0.9233], [-0.0045, -0.1643, -0.9214], [-0.0026, -0.1646, -0.9233], [-0.0026, -0.2127, -0.9146], [-0.0045, -0.2123, -0.9126], [-0.0026, -0.2127, -0.9146], [-0.0026, -0.2603, -0.9034], [-0.0045, -0.2598, -0.9014], [-0.0026, -0.2603, -0.9034], [-0.0026, -0.3072, -0.8897], [-0.0045, -0.3066, -0.8878], [-0.0026, -0.3072, -0.8897], [-0.0026, -0.3533, -0.8736], [-0.0045, -0.3526, -0.8718], [-0.0026, -0.3533, -0.8736], [-0.0026, -0.3986, -0.8552], [-0.0045, -0.3978, -0.8534], [-0.0026, -0.4428, -0.8345], [-0.0045, -0.442, -0.8327], [-0.0045, -0.3978, -0.8534], [-0.0026, -0.486, -0.8115], [-0.0045, -0.485, -0.8098], [-0.0045, -0.442, -0.8327], [-0.0026, -0.486, -0.8115], [-0.0026, -0.5279, -0.7864], [-0.0045, -0.5268, -0.7847], [-0.0026, -0.5279, -0.7864], [-0.0026, -0.5684, -0.7591], [-0.0045, -0.5673, -0.7575], [-0.0026, -0.5684, -0.7591], [-0.0026, -0.6075, -0.7298], [-0.0045, -0.6063, -0.7282], [-0.0026, -0.6075, -0.7298], [-0.0026, -0.645, -0.6985], [-0.0045, -0.6437, -0.697], [-0.0026, -0.645, -0.6985], [-0.0026, -0.6809, -0.6653], [-0.0045, -0.6795, -0.6639], [-0.0026, -0.6809, -0.6653], [-0.0026, -0.715, -0.6303], [-0.0045, -0.7135, -0.6289], [-0.0026, -0.7473, -0.5936], [-0.0045, -0.7457, -0.5923], [-0.0045, -0.7135, -0.6289], [-0.0026, -0.7776, -0.5553], [-0.0045, -0.776, -0.5541], [-0.0045, -0.7457, -0.5923], [-0.0026, -0.8059, -0.5154], [-0.0045, -0.8043, -0.5143], [-0.0045, -0.776, -0.5541], [-0.0026, -0.8321, -0.4742], [-0.0045, -0.8304, -0.4732], [-0.0045, -0.8043, -0.5143], [-0.0026, -0.8321, -0.4742], [-0.0026, -0.8562, -0.4317], [-0.0045, -0.8544, -0.4308], [-0.0026, -0.8562, -0.4317], [-0.0026, -0.878, -0.388], [-0.0045, -0.8762, -0.3871], [-0.0026, -0.878, -0.388], [-0.0026, -0.8976, -0.3432], [-0.0045, -0.8958, -0.3425], [-0.0026, -0.8976, -0.3432], [-0.0026, -0.9148, -0.2975], [-0.0045, -0.913, -0.2968], [-0.0026, -0.9148, -0.2975], [-0.0026, -0.9297, -0.2509], [-0.0045, -0.9278, -0.2504], [-0.0026, -0.9297, -0.2509], [-0.0026, -0.9421, -0.2037], [-0.0045, -0.9402, -0.2032], [-0.0026, -0.9521, -0.1558], [-0.0045, -0.9502, -0.1555], [-0.0045, -0.9402, -0.2032], [-0.0026, -0.9521, -0.1558], [-0.0026, -0.9597, -0.1076], [-0.0045, -0.9577, -0.1073], [-0.0026, -0.9647, -0.0589], [-0.0045, -0.9627, -0.0588], [-0.0045, -0.9577, -0.1073], [-0.0026, -0.9647, -0.0589], [-0.0026, -0.9672, -0.0101], [-0.0045, -0.9652, -0.0101], [-0.0026, -0.9672, 0.0387], [-0.0045, -0.9652, 0.0387], [-0.0045, -0.9652, -0.0101], [-0.0026, -0.9672, 0.0387], [-0.0026, -0.9647, 0.0875], [-0.0045, -0.9627, 0.0874], [-0.0026, -0.9597, 0.1361], [-0.0045, -0.9577, 0.1359], [-0.0045, -0.9627, 0.0874], [-0.0026, -0.9521, 0.1844], [-0.0045, -0.9502, 0.1841], [-0.0045, -0.9577, 0.1359], [-0.0026, -0.9521, 0.1844], [-0.0026, -0.9421, 0.2322], [-0.0045, -0.9402, 0.2318], [-0.0026, -0.9297, 0.2795], [-0.0045, -0.9278, 0.2789], [-0.0045, -0.9402, 0.2318], [-0.0026, -0.9297, 0.2795], [-0.0026, -0.9148, 0.3261], [-0.0045, -0.913, 0.3254], [-0.0026, -0.8976, 0.3718], [-0.0045, -0.8958, 0.371], [-0.0045, -0.913, 0.3254], [-0.0026, -0.8976, 0.3718], [-0.0026, -0.878, 0.4166], [-0.0045, -0.8762, 0.4157], [-0.0026, -0.8562, 0.4603], [-0.0045, -0.8544, 0.4593], [-0.0045, -0.8762, 0.4157], [-0.0026, -0.8321, 0.5028], [-0.0045, -0.8304, 0.5018], [-0.0045, -0.8544, 0.4593], [-0.0026, -0.8059, 0.544], [-0.0045, -0.8043, 0.5429], [-0.0045, -0.8304, 0.5018], [-0.0026, -0.7776, 0.5838], [-0.0045, -0.776, 0.5827], [-0.0045, -0.8043, 0.5429], [-0.0026, -0.7473, 0.6222], [-0.0045, -0.7457, 0.6209], [-0.0045, -0.776, 0.5827], [-0.0026, -0.715, 0.6589], [-0.0045, -0.7135, 0.6575], [-0.0045, -0.7457, 0.6209], [-0.0026, -0.6809, 0.6939], [-0.0045, -0.6795, 0.6924], [-0.0045, -0.7135, 0.6575], [-0.0026, -0.645, 0.7271], [-0.0045, -0.6437, 0.7256], [-0.0045, -0.6795, 0.6924], [-0.0026, -0.6075, 0.7584], [-0.0045, -0.6063, 0.7568], [-0.0045, -0.6437, 0.7256], [-0.0026, -0.5684, 0.7877], [-0.0045, -0.5673, 0.7861], [-0.0045, -0.6063, 0.7568], [-0.0026, -0.5279, 0.815], [-0.0045, -0.5268, 0.8133], [-0.0045, -0.5673, 0.7861], [-0.0026, -0.5279, 0.815], [-0.0026, -0.486, 0.8401], [-0.0045, -0.485, 0.8384], [-0.0026, -0.486, 0.8401], [-0.0026, -0.4429, 0.8631], [-0.0045, -0.442, 0.8613], [-0.0026, -0.4429, 0.8631], [-0.0026, -0.3986, 0.8838], [-0.0045, -0.3978, 0.882], [-0.0026, -0.3986, 0.8838], [-0.0026, -0.3533, 0.9022], [-0.0045, -0.3526, 0.9004], [-0.0026, -0.3533, 0.9022], [-0.0026, -0.3072, 0.9183], [-0.0045, -0.3066, 0.9164], [-0.0026, -0.2603, 0.9319], [-0.0045, -0.2598, 0.93], [-0.0045, -0.3066, 0.9164], [-0.0026, -0.2127, 0.9432], [-0.0045, -0.2123, 0.9412], [-0.0045, -0.2598, 0.93], [-0.0026, -0.2127, 0.9432], [-0.0026, -0.1646, 0.9519], [-0.0045, -0.1643, 0.95], [-0.0027, -0.116, 0.9582], [-0.0045, -0.1158, 0.9562], [-0.0045, -0.1643, 0.95], [-0.0068, -0.0582, 0.9691], [-0.0116, -0.0579, 0.964], [-0.0045, -0.1158, 0.9562], [-0.0, -0.0583, -0.9424], [-0.0068, -0.0582, -0.9405], [-0.0278, -0.031, -0.9783], [-0.0, -0.0583, -0.9424], [-0.0, -0.1161, -0.9304], [-0.0027, -0.116, -0.9296], [-0.0, -0.1161, -0.9304], [-0.0, -0.1647, -0.9241], [-0.0026, -0.1646, -0.9233], [-0.0, -0.1647, -0.9241], [-0.0, -0.2128, -0.9153], [-0.0026, -0.2127, -0.9146], [-0.0, -0.2604, -0.9041], [-0.0026, -0.2603, -0.9034], [-0.0026, -0.2127, -0.9146], [-0.0, -0.3074, -0.8904], [-0.0026, -0.3072, -0.8897], [-0.0026, -0.2603, -0.9034], [-0.0, -0.3536, -0.8743], [-0.0026, -0.3533, -0.8736], [-0.0026, -0.3072, -0.8897], [-0.0, -0.3989, -0.8559], [-0.0026, -0.3986, -0.8552], [-0.0026, -0.3533, -0.8736], [-0.0, -0.3989, -0.8559], [-0.0, -0.4432, -0.8352], [-0.0026, -0.4428, -0.8345], [-0.0, -0.4432, -0.8352], [-0.0, -0.4863, -0.8122], [-0.0026, -0.486, -0.8115], [-0.0, -0.5283, -0.787], [-0.0026, -0.5279, -0.7864], [-0.0026, -0.486, -0.8115], [-0.0, -0.5283, -0.787], [-0.0, -0.5688, -0.7597], [-0.0026, -0.5684, -0.7591], [-0.0, -0.5688, -0.7597], [-0.0, -0.608, -0.7304], [-0.0026, -0.6075, -0.7298], [-0.0, -0.608, -0.7304], [-0.0, -0.6455, -0.699], [-0.0026, -0.645, -0.6985], [-0.0, -0.6814, -0.6658], [-0.0026, -0.6809, -0.6653], [-0.0026, -0.645, -0.6985], [-0.0, -0.7155, -0.6308], [-0.0026, -0.715, -0.6303], [-0.0026, -0.6809, -0.6653], [-0.0, -0.7155, -0.6308], [-0.0, -0.7478, -0.5941], [-0.0026, -0.7473, -0.5936], [-0.0, -0.7478, -0.5941], [-0.0, -0.7782, -0.5557], [-0.0026, -0.7776, -0.5553], [-0.0, -0.7782, -0.5557], [-0.0, -0.8065, -0.5159], [-0.0026, -0.8059, -0.5154], [-0.0, -0.8328, -0.4746], [-0.0026, -0.8321, -0.4742], [-0.0026, -0.8059, -0.5154], [-0.0, -0.8568, -0.432], [-0.0026, -0.8562, -0.4317], [-0.0026, -0.8321, -0.4742], [-0.0, -0.8787, -0.3883], [-0.0026, -0.878, -0.388], [-0.0026, -0.8562, -0.4317], [-0.0, -0.8983, -0.3435], [-0.0026, -0.8976, -0.3432], [-0.0026, -0.878, -0.388], [-0.0, -0.9155, -0.2977], [-0.0026, -0.9148, -0.2975], [-0.0026, -0.8976, -0.3432], [-0.0, -0.9304, -0.2511], [-0.0026, -0.9297, -0.2509], [-0.0026, -0.9148, -0.2975], [-0.0, -0.9429, -0.2038], [-0.0026, -0.9421, -0.2037], [-0.0026, -0.9297, -0.2509], [-0.0, -0.9529, -0.156], [-0.0026, -0.9521, -0.1558], [-0.0026, -0.9421, -0.2037], [-0.0, -0.9529, -0.156], [-0.0, -0.9604, -0.1076], [-0.0026, -0.9597, -0.1076], [-0.0, -0.9654, -0.059], [-0.0026, -0.9647, -0.0589], [-0.0026, -0.9597, -0.1076], [-0.0, -0.9679, -0.0102], [-0.0026, -0.9672, -0.0101], [-0.0026, -0.9647, -0.0589], [-0.0, -0.9679, 0.0387], [-0.0026, -0.9672, 0.0387], [-0.0026, -0.9672, -0.0101], [-0.0, -0.9679, 0.0387], [-0.0, -0.9654, 0.0876], [-0.0026, -0.9647, 0.0875], [-0.0, -0.9604, 0.1362], [-0.0026, -0.9597, 0.1361], [-0.0026, -0.9647, 0.0875], [-0.0, -0.9529, 0.1845], [-0.0026, -0.9521, 0.1844], [-0.0026, -0.9597, 0.1361], [-0.0, -0.9529, 0.1845], [-0.0, -0.9429, 0.2324], [-0.0026, -0.9421, 0.2322], [-0.0, -0.9429, 0.2324], [-0.0, -0.9304, 0.2797], [-0.0026, -0.9297, 0.2795], [-0.0, -0.9155, 0.3263], [-0.0026, -0.9148, 0.3261], [-0.0026, -0.9297, 0.2795], [-0.0, -0.9155, 0.3263], [-0.0, -0.8983, 0.3721], [-0.0026, -0.8976, 0.3718], [-0.0, -0.8787, 0.4169], [-0.0026, -0.878, 0.4166], [-0.0026, -0.8976, 0.3718], [-0.0, -0.8568, 0.4606], [-0.0026, -0.8562, 0.4603], [-0.0026, -0.878, 0.4166], [-0.0, -0.8568, 0.4606], [-0.0, -0.8328, 0.5032], [-0.0026, -0.8321, 0.5028], [-0.0, -0.8328, 0.5032], [-0.0, -0.8065, 0.5444], [-0.0026, -0.8059, 0.544], [-0.0, -0.8065, 0.5444], [-0.0, -0.7782, 0.5843], [-0.0026, -0.7776, 0.5838], [-0.0, -0.7478, 0.6226], [-0.0026, -0.7473, 0.6222], [-0.0026, -0.7776, 0.5838], [-0.0, -0.7155, 0.6594], [-0.0026, -0.715, 0.6589], [-0.0026, -0.7473, 0.6222], [-0.0, -0.7155, 0.6594], [-0.0, -0.6814, 0.6944], [-0.0026, -0.6809, 0.6939], [-0.0, -0.6814, 0.6944], [-0.0, -0.6455, 0.7276], [-0.0026, -0.645, 0.7271], [-0.0, -0.6455, 0.7276], [-0.0, -0.608, 0.7589], [-0.0026, -0.6075, 0.7584], [-0.0, -0.5688, 0.7883], [-0.0026, -0.5684, 0.7877], [-0.0026, -0.6075, 0.7584], [-0.0, -0.5283, 0.8156], [-0.0026, -0.5279, 0.815], [-0.0026, -0.5684, 0.7877], [-0.0, -0.4863, 0.8408], [-0.0026, -0.486, 0.8401], [-0.0026, -0.5279, 0.815], [-0.0, -0.4432, 0.8638], [-0.0026, -0.4429, 0.8631], [-0.0026, -0.486, 0.8401], [-0.0, -0.3989, 0.8845], [-0.0026, -0.3986, 0.8838], [-0.0026, -0.4429, 0.8631], [-0.0, -0.3536, 0.9029], [-0.0026, -0.3533, 0.9022], [-0.0026, -0.3986, 0.8838], [-0.0, -0.3536, 0.9029], [-0.0, -0.3074, 0.919], [-0.0026, -0.3072, 0.9183], [-0.0, -0.3074, 0.919], [-0.0, -0.2604, 0.9326], [-0.0026, -0.2603, 0.9319], [-0.0, -0.2128, 0.9439], [-0.0026, -0.2127, 0.9432], [-0.0026, -0.2603, 0.9319], [-0.0, -0.1647, 0.9526], [-0.0026, -0.1646, 0.9519], [-0.0026, -0.2127, 0.9432], [-0.0, -0.1161, 0.9589], [-0.0027, -0.116, 0.9582], [-0.0026, -0.1646, 0.9519], [-0.0, -0.0583, 0.971], [-0.0068, -0.0582, 0.9691], [-0.0027, -0.116, 0.9582], [0.0278, -0.031, -0.9783], [0.0068, -0.0582, -0.9405], [-0.0, -0.0583, -0.9424], [0.0027, -0.116, -0.9296], [-0.0, -0.1161, -0.9304], [-0.0, -0.0583, -0.9424], [0.0026, -0.1646, -0.9233], [-0.0, -0.1647, -0.9241], [-0.0, -0.1161, -0.9304], [0.0026, -0.2127, -0.9146], [-0.0, -0.2128, -0.9153], [-0.0, -0.1647, -0.9241], [0.0026, -0.2603, -0.9034], [-0.0, -0.2604, -0.9041], [-0.0, -0.2128, -0.9153], [0.0026, -0.2603, -0.9034], [0.0026, -0.3072, -0.8897], [-0.0, -0.3074, -0.8904], [0.0026, -0.3072, -0.8897], [0.0026, -0.3533, -0.8736], [-0.0, -0.3536, -0.8743], [0.0026, -0.3533, -0.8736], [0.0026, -0.3986, -0.8552], [-0.0, -0.3989, -0.8559], [0.0026, -0.4428, -0.8345], [-0.0, -0.4432, -0.8352], [-0.0, -0.3989, -0.8559], [0.0026, -0.486, -0.8115], [-0.0, -0.4863, -0.8122], [-0.0, -0.4432, -0.8352], [0.0026, -0.486, -0.8115], [0.0026, -0.5279, -0.7864], [-0.0, -0.5283, -0.787], [0.0026, -0.5279, -0.7864], [0.0026, -0.5684, -0.7591], [-0.0, -0.5688, -0.7597], [0.0026, -0.5684, -0.7591], [0.0026, -0.6075, -0.7298], [-0.0, -0.608, -0.7304], [0.0026, -0.645, -0.6985], [-0.0, -0.6455, -0.699], [-0.0, -0.608, -0.7304], [0.0026, -0.6809, -0.6653], [-0.0, -0.6814, -0.6658], [-0.0, -0.6455, -0.699], [0.0026, -0.715, -0.6303], [-0.0, -0.7155, -0.6308], [-0.0, -0.6814, -0.6658], [0.0026, -0.7473, -0.5936], [-0.0, -0.7478, -0.5941], [-0.0, -0.7155, -0.6308], [0.0026, -0.7776, -0.5553], [-0.0, -0.7782, -0.5557], [-0.0, -0.7478, -0.5941], [0.0026, -0.8059, -0.5154], [-0.0, -0.8065, -0.5159], [-0.0, -0.7782, -0.5557], [0.0026, -0.8321, -0.4742], [-0.0, -0.8328, -0.4746], [-0.0, -0.8065, -0.5159], [0.0026, -0.8321, -0.4742], [0.0026, -0.8562, -0.4317], [-0.0, -0.8568, -0.432], [0.0026, -0.878, -0.388], [-0.0, -0.8787, -0.3883], [-0.0, -0.8568, -0.432], [0.0026, -0.8976, -0.3432], [-0.0, -0.8983, -0.3435], [-0.0, -0.8787, -0.3883], [0.0026, -0.8976, -0.3432], [0.0026, -0.9148, -0.2975], [-0.0, -0.9155, -0.2977], [0.0026, -0.9148, -0.2975], [0.0026, -0.9297, -0.2509], [-0.0, -0.9304, -0.2511], [0.0026, -0.9421, -0.2037], [-0.0, -0.9429, -0.2038], [-0.0, -0.9304, -0.2511], [0.0026, -0.9521, -0.1558], [-0.0, -0.9529, -0.156], [-0.0, -0.9429, -0.2038], [0.0026, -0.9597, -0.1076], [-0.0, -0.9604, -0.1076], [-0.0, -0.9529, -0.156], [0.0026, -0.9647, -0.0589], [-0.0, -0.9654, -0.059], [-0.0, -0.9604, -0.1076], [0.0026, -0.9672, -0.0101], [-0.0, -0.9679, -0.0102], [-0.0, -0.9654, -0.059], [0.0026, -0.9672, 0.0387], [-0.0, -0.9679, 0.0387], [-0.0, -0.9679, -0.0102], [0.0026, -0.9647, 0.0875], [-0.0, -0.9654, 0.0876], [-0.0, -0.9679, 0.0387], [0.0026, -0.9597, 0.1361], [-0.0, -0.9604, 0.1362], [-0.0, -0.9654, 0.0876], [0.0026, -0.9597, 0.1361], [0.0026, -0.9521, 0.1844], [-0.0, -0.9529, 0.1845], [0.0026, -0.9421, 0.2322], [-0.0, -0.9429, 0.2324], [-0.0, -0.9529, 0.1845], [0.0026, -0.9421, 0.2322], [0.0026, -0.9297, 0.2795], [-0.0, -0.9304, 0.2797], [0.0026, -0.9148, 0.3261], [-0.0, -0.9155, 0.3263], [-0.0, -0.9304, 0.2797], [0.0026, -0.9148, 0.3261], [0.0026, -0.8976, 0.3718], [-0.0, -0.8983, 0.3721], [0.0026, -0.8976, 0.3718], [0.0026, -0.878, 0.4166], [-0.0, -0.8787, 0.4169], [0.0026, -0.878, 0.4166], [0.0026, -0.8562, 0.4603], [-0.0, -0.8568, 0.4606], [0.0026, -0.8321, 0.5028], [-0.0, -0.8328, 0.5032], [-0.0, -0.8568, 0.4606], [0.0026, -0.8059, 0.544], [-0.0, -0.8065, 0.5444], [-0.0, -0.8328, 0.5032], [0.0026, -0.8059, 0.544], [0.0026, -0.7776, 0.5838], [-0.0, -0.7782, 0.5843], [0.0026, -0.7776, 0.5838], [0.0026, -0.7473, 0.6222], [-0.0, -0.7478, 0.6226], [0.0026, -0.7473, 0.6222], [0.0026, -0.715, 0.6589], [-0.0, -0.7155, 0.6594], [0.0026, -0.6809, 0.6939], [-0.0, -0.6814, 0.6944], [-0.0, -0.7155, 0.6594], [0.0026, -0.6809, 0.6939], [0.0026, -0.645, 0.7271], [-0.0, -0.6455, 0.7276], [0.0026, -0.645, 0.7271], [0.0026, -0.6075, 0.7584], [-0.0, -0.608, 0.7589], [0.0026, -0.6075, 0.7584], [0.0026, -0.5684, 0.7877], [-0.0, -0.5688, 0.7883], [0.0026, -0.5684, 0.7877], [0.0026, -0.5279, 0.815], [-0.0, -0.5283, 0.8156], [0.0026, -0.5279, 0.815], [0.0026, -0.486, 0.8401], [-0.0, -0.4863, 0.8408], [0.0026, -0.486, 0.8401], [0.0026, -0.4429, 0.8631], [-0.0, -0.4432, 0.8638], [0.0026, -0.4429, 0.8631], [0.0026, -0.3986, 0.8838], [-0.0, -0.3989, 0.8845], [0.0026, -0.3533, 0.9022], [-0.0, -0.3536, 0.9029], [-0.0, -0.3989, 0.8845], [0.0026, -0.3072, 0.9183], [-0.0, -0.3074, 0.919], [-0.0, -0.3536, 0.9029], [0.0026, -0.2603, 0.9319], [-0.0, -0.2604, 0.9326], [-0.0, -0.3074, 0.919], [0.0026, -0.2603, 0.9319], [0.0026, -0.2127, 0.9432], [-0.0, -0.2128, 0.9439], [0.0026, -0.2127, 0.9432], [0.0026, -0.1646, 0.9519], [-0.0, -0.1647, 0.9526], [0.0026, -0.1646, 0.9519], [0.0027, -0.116, 0.9582], [-0.0, -0.1161, 0.9589], [0.0027, -0.116, 0.9582], [0.0068, -0.0582, 0.9691], [-0.0, -0.0583, 0.971], [0.0484, -0.0316, -0.9581], [0.0116, -0.0579, -0.9354], [0.0068, -0.0582, -0.9405], [0.0045, -0.1158, -0.9277], [0.0027, -0.116, -0.9296], [0.0068, -0.0582, -0.9405], [0.0045, -0.1643, -0.9214], [0.0026, -0.1646, -0.9233], [0.0027, -0.116, -0.9296], [0.0045, -0.1643, -0.9214], [0.0045, -0.2123, -0.9126], [0.0026, -0.2127, -0.9146], [0.0045, -0.2598, -0.9014], [0.0026, -0.2603, -0.9034], [0.0026, -0.2127, -0.9146], [0.0045, -0.2598, -0.9014], [0.0045, -0.3066, -0.8878], [0.0026, -0.3072, -0.8897], [0.0045, -0.3066, -0.8878], [0.0045, -0.3526, -0.8718], [0.0026, -0.3533, -0.8736], [0.0045, -0.3526, -0.8718], [0.0045, -0.3978, -0.8534], [0.0026, -0.3986, -0.8552], [0.0045, -0.3978, -0.8534], [0.0045, -0.442, -0.8327], [0.0026, -0.4428, -0.8345], [0.0045, -0.442, -0.8327], [0.0045, -0.485, -0.8098], [0.0026, -0.486, -0.8115], [0.0045, -0.5268, -0.7847], [0.0026, -0.5279, -0.7864], [0.0026, -0.486, -0.8115], [0.0045, -0.5673, -0.7575], [0.0026, -0.5684, -0.7591], [0.0026, -0.5279, -0.7864], [0.0045, -0.6063, -0.7282], [0.0026, -0.6075, -0.7298], [0.0026, -0.5684, -0.7591], [0.0045, -0.6437, -0.697], [0.0026, -0.645, -0.6985], [0.0026, -0.6075, -0.7298], [0.0045, -0.6795, -0.6639], [0.0026, -0.6809, -0.6653], [0.0026, -0.645, -0.6985], [0.0045, -0.7135, -0.6289], [0.0026, -0.715, -0.6303], [0.0026, -0.6809, -0.6653], [0.0045, -0.7457, -0.5923], [0.0026, -0.7473, -0.5936], [0.0026, -0.715, -0.6303], [0.0045, -0.776, -0.5541], [0.0026, -0.7776, -0.5553], [0.0026, -0.7473, -0.5936], [0.0045, -0.776, -0.5541], [0.0045, -0.8043, -0.5143], [0.0026, -0.8059, -0.5154], [0.0045, -0.8043, -0.5143], [0.0045, -0.8304, -0.4732], [0.0026, -0.8321, -0.4742], [0.0045, -0.8544, -0.4308], [0.0026, -0.8562, -0.4317], [0.0026, -0.8321, -0.4742], [0.0045, -0.8544, -0.4308], [0.0045, -0.8762, -0.3871], [0.0026, -0.878, -0.388], [0.0045, -0.8958, -0.3425], [0.0026, -0.8976, -0.3432], [0.0026, -0.878, -0.388], [0.0045, -0.913, -0.2968], [0.0026, -0.9148, -0.2975], [0.0026, -0.8976, -0.3432], [0.0045, -0.9278, -0.2504], [0.0026, -0.9297, -0.2509], [0.0026, -0.9148, -0.2975], [0.0045, -0.9402, -0.2032], [0.0026, -0.9421, -0.2037], [0.0026, -0.9297, -0.2509], [0.0045, -0.9402, -0.2032], [0.0045, -0.9502, -0.1555], [0.0026, -0.9521, -0.1558], [0.0045, -0.9502, -0.1555], [0.0045, -0.9577, -0.1073], [0.0026, -0.9597, -0.1076], [0.0045, -0.9577, -0.1073], [0.0045, -0.9627, -0.0588], [0.0026, -0.9647, -0.0589], [0.0045, -0.9652, -0.0101], [0.0026, -0.9672, -0.0101], [0.0026, -0.9647, -0.0589], [0.0045, -0.9652, 0.0387], [0.0026, -0.9672, 0.0387], [0.0026, -0.9672, -0.0101], [0.0045, -0.9627, 0.0874], [0.0026, -0.9647, 0.0875], [0.0026, -0.9672, 0.0387], [0.0045, -0.9627, 0.0874], [0.0045, -0.9577, 0.1359], [0.0026, -0.9597, 0.1361], [0.0045, -0.9577, 0.1359], [0.0045, -0.9502, 0.1841], [0.0026, -0.9521, 0.1844], [0.0045, -0.9502, 0.1841], [0.0045, -0.9402, 0.2318], [0.0026, -0.9421, 0.2322], [0.0045, -0.9278, 0.2789], [0.0026, -0.9297, 0.2795], [0.0026, -0.9421, 0.2322], [0.0045, -0.913, 0.3254], [0.0026, -0.9148, 0.3261], [0.0026, -0.9297, 0.2795], [0.0045, -0.913, 0.3254], [0.0045, -0.8958, 0.371], [0.0026, -0.8976, 0.3718], [0.0045, -0.8762, 0.4157], [0.0026, -0.878, 0.4166], [0.0026, -0.8976, 0.3718], [0.0045, -0.8544, 0.4593], [0.0026, -0.8562, 0.4603], [0.0026, -0.878, 0.4166], [0.0045, -0.8544, 0.4593], [0.0045, -0.8304, 0.5018], [0.0026, -0.8321, 0.5028], [0.0045, -0.8304, 0.5018], [0.0045, -0.8043, 0.5429], [0.0026, -0.8059, 0.544], [0.0045, -0.8043, 0.5429], [0.0045, -0.776, 0.5827], [0.0026, -0.7776, 0.5838], [0.0045, -0.776, 0.5827], [0.0045, -0.7457, 0.6209], [0.0026, -0.7473, 0.6222], [0.0045, -0.7457, 0.6209], [0.0045, -0.7135, 0.6575], [0.0026, -0.715, 0.6589], [0.0045, -0.7135, 0.6575], [0.0045, -0.6795, 0.6924], [0.0026, -0.6809, 0.6939], [0.0045, -0.6437, 0.7256], [0.0026, -0.645, 0.7271], [0.0026, -0.6809, 0.6939], [0.0045, -0.6063, 0.7568], [0.0026, -0.6075, 0.7584], [0.0026, -0.645, 0.7271], [0.0045, -0.5673, 0.7861], [0.0026, -0.5684, 0.7877], [0.0026, -0.6075, 0.7584], [0.0045, -0.5268, 0.8133], [0.0026, -0.5279, 0.815], [0.0026, -0.5684, 0.7877], [0.0045, -0.485, 0.8384], [0.0026, -0.486, 0.8401], [0.0026, -0.5279, 0.815], [0.0045, -0.442, 0.8613], [0.0026, -0.4429, 0.8631], [0.0026, -0.486, 0.8401], [0.0045, -0.3978, 0.882], [0.0026, -0.3986, 0.8838], [0.0026, -0.4429, 0.8631], [0.0045, -0.3526, 0.9004], [0.0026, -0.3533, 0.9022], [0.0026, -0.3986, 0.8838], [0.0045, -0.3066, 0.9164], [0.0026, -0.3072, 0.9183], [0.0026, -0.3533, 0.9022], [0.0045, -0.2598, 0.93], [0.0026, -0.2603, 0.9319], [0.0026, -0.3072, 0.9183], [0.0045, -0.2598, 0.93], [0.0045, -0.2123, 0.9412], [0.0026, -0.2127, 0.9432], [0.0045, -0.1643, 0.95], [0.0026, -0.1646, 0.9519], [0.0026, -0.2127, 0.9432], [0.0045, -0.1643, 0.95], [0.0045, -0.1158, 0.9562], [0.0027, -0.116, 0.9582], [0.0045, -0.1158, 0.9562], [0.0116, -0.0579, 0.964], [0.0068, -0.0582, 0.9691], [0.0563, -0.0324, -0.9301], [0.0131, -0.0576, -0.9287], [0.0116, -0.0579, -0.9354], [0.0051, -0.1156, -0.9251], [0.0045, -0.1158, -0.9277], [0.0116, -0.0579, -0.9354], [0.0051, -0.1639, -0.9188], [0.0045, -0.1643, -0.9214], [0.0045, -0.1158, -0.9277], [0.0051, -0.1639, -0.9188], [0.0051, -0.2118, -0.9101], [0.0045, -0.2123, -0.9126], [0.0051, -0.2591, -0.8989], [0.0045, -0.2598, -0.9014], [0.0045, -0.2123, -0.9126], [0.0051, -0.3058, -0.8853], [0.0045, -0.3066, -0.8878], [0.0045, -0.2598, -0.9014], [0.0051, -0.3058, -0.8853], [0.0051, -0.3517, -0.8694], [0.0045, -0.3526, -0.8718], [0.0051, -0.3968, -0.851], [0.0045, -0.3978, -0.8534], [0.0045, -0.3526, -0.8718], [0.0051, -0.4408, -0.8304], [0.0045, -0.442, -0.8327], [0.0045, -0.3978, -0.8534], [0.0051, -0.4837, -0.8076], [0.0045, -0.485, -0.8098], [0.0045, -0.442, -0.8327], [0.0051, -0.5254, -0.7825], [0.0045, -0.5268, -0.7847], [0.0045, -0.485, -0.8098], [0.0051, -0.5658, -0.7554], [0.0045, -0.5673, -0.7575], [0.0045, -0.5268, -0.7847], [0.0051, -0.5658, -0.7554], [0.0051, -0.6047, -0.7262], [0.0045, -0.6063, -0.7282], [0.0051, -0.6047, -0.7262], [0.0051, -0.642, -0.695], [0.0045, -0.6437, -0.697], [0.0051, -0.642, -0.695], [0.0051, -0.6777, -0.662], [0.0045, -0.6795, -0.6639], [0.0051, -0.6777, -0.662], [0.0051, -0.7116, -0.6272], [0.0045, -0.7135, -0.6289], [0.0051, -0.7116, -0.6272], [0.0051, -0.7437, -0.5907], [0.0045, -0.7457, -0.5923], [0.0051, -0.7437, -0.5907], [0.0051, -0.7739, -0.5525], [0.0045, -0.776, -0.5541], [0.0051, -0.8021, -0.5129], [0.0045, -0.8043, -0.5143], [0.0045, -0.776, -0.5541], [0.0051, -0.8282, -0.4719], [0.0045, -0.8304, -0.4732], [0.0045, -0.8043, -0.5143], [0.0051, -0.8282, -0.4719], [0.0051, -0.8522, -0.4295], [0.0045, -0.8544, -0.4308], [0.0051, -0.8739, -0.386], [0.0045, -0.8762, -0.3871], [0.0045, -0.8544, -0.4308], [0.0051, -0.8934, -0.3415], [0.0045, -0.8958, -0.3425], [0.0045, -0.8762, -0.3871], [0.0051, -0.8934, -0.3415], [0.0051, -0.9105, -0.296], [0.0045, -0.913, -0.2968], [0.0051, -0.9105, -0.296], [0.0051, -0.9253, -0.2496], [0.0045, -0.9278, -0.2504], [0.0051, -0.9377, -0.2026], [0.0045, -0.9402, -0.2032], [0.0045, -0.9278, -0.2504], [0.0051, -0.9476, -0.155], [0.0045, -0.9502, -0.1555], [0.0045, -0.9402, -0.2032], [0.0051, -0.9551, -0.107], [0.0045, -0.9577, -0.1073], [0.0045, -0.9502, -0.1555], [0.0051, -0.9601, -0.0586], [0.0045, -0.9627, -0.0588], [0.0045, -0.9577, -0.1073], [0.0051, -0.9626, -0.01], [0.0045, -0.9652, -0.0101], [0.0045, -0.9627, -0.0588], [0.0051, -0.9626, 0.0386], [0.0045, -0.9652, 0.0387], [0.0045, -0.9652, -0.0101], [0.0051, -0.9626, 0.0386], [0.0051, -0.9601, 0.0872], [0.0045, -0.9627, 0.0874], [0.0051, -0.9601, 0.0872], [0.0051, -0.9551, 0.1355], [0.0045, -0.9577, 0.1359], [0.0051, -0.9476, 0.1836], [0.0045, -0.9502, 0.1841], [0.0045, -0.9577, 0.1359], [0.0051, -0.9377, 0.2312], [0.0045, -0.9402, 0.2318], [0.0045, -0.9502, 0.1841], [0.0051, -0.9377, 0.2312], [0.0051, -0.9253, 0.2782], [0.0045, -0.9278, 0.2789], [0.0051, -0.9105, 0.3245], [0.0045, -0.913, 0.3254], [0.0045, -0.9278, 0.2789], [0.0051, -0.9105, 0.3245], [0.0051, -0.8934, 0.3701], [0.0045, -0.8958, 0.371], [0.0051, -0.8934, 0.3701], [0.0051, -0.8739, 0.4146], [0.0045, -0.8762, 0.4157], [0.0051, -0.8522, 0.4581], [0.0045, -0.8544, 0.4593], [0.0045, -0.8762, 0.4157], [0.0051, -0.8282, 0.5004], [0.0045, -0.8304, 0.5018], [0.0045, -0.8544, 0.4593], [0.0051, -0.8021, 0.5415], [0.0045, -0.8043, 0.5429], [0.0045, -0.8304, 0.5018], [0.0051, -0.7739, 0.5811], [0.0045, -0.776, 0.5827], [0.0045, -0.8043, 0.5429], [0.0051, -0.7739, 0.5811], [0.0051, -0.7437, 0.6192], [0.0045, -0.7457, 0.6209], [0.0051, -0.7437, 0.6192], [0.0051, -0.7116, 0.6558], [0.0045, -0.7135, 0.6575], [0.0051, -0.6777, 0.6906], [0.0045, -0.6795, 0.6924], [0.0045, -0.7135, 0.6575], [0.0051, -0.6777, 0.6906], [0.0051, -0.642, 0.7236], [0.0045, -0.6437, 0.7256], [0.0051, -0.6047, 0.7548], [0.0045, -0.6063, 0.7568], [0.0045, -0.6437, 0.7256], [0.0051, -0.6047, 0.7548], [0.0051, -0.5658, 0.784], [0.0045, -0.5673, 0.7861], [0.0051, -0.5658, 0.784], [0.0051, -0.5254, 0.8111], [0.0045, -0.5268, 0.8133], [0.0051, -0.5254, 0.8111], [0.0051, -0.4837, 0.8361], [0.0045, -0.485, 0.8384], [0.0051, -0.4408, 0.859], [0.0045, -0.442, 0.8613], [0.0045, -0.485, 0.8384], [0.0051, -0.3968, 0.8796], [0.0045, -0.3978, 0.882], [0.0045, -0.442, 0.8613], [0.0051, -0.3968, 0.8796], [0.0051, -0.3517, 0.8979], [0.0045, -0.3526, 0.9004], [0.0051, -0.3517, 0.8979], [0.0051, -0.3058, 0.9139], [0.0045, -0.3066, 0.9164], [0.0051, -0.3058, 0.9139], [0.0051, -0.2591, 0.9275], [0.0045, -0.2598, 0.93], [0.0051, -0.2118, 0.9387], [0.0045, -0.2123, 0.9412], [0.0045, -0.2598, 0.93], [0.0051, -0.1639, 0.9474], [0.0045, -0.1643, 0.95], [0.0045, -0.2123, 0.9412], [0.0051, -0.1639, 0.9474], [0.0051, -0.1156, 0.9536], [0.0045, -0.1158, 0.9562], [0.0051, -0.1156, 0.9536], [0.0131, -0.0576, 0.9573], [0.0116, -0.0579, 0.964], [0.0491, -0.0331, -0.9017], [0.0111, -0.0572, -0.9223], [0.0131, -0.0576, -0.9287], [0.0043, -0.1153, -0.9226], [0.0051, -0.1156, -0.9251], [0.0131, -0.0576, -0.9287], [0.0043, -0.1635, -0.9164], [0.0051, -0.1639, -0.9188], [0.0051, -0.1156, -0.9251], [0.0043, -0.2113, -0.9077], [0.0051, -0.2118, -0.9101], [0.0051, -0.1639, -0.9188], [0.0043, -0.2585, -0.8965], [0.0051, -0.2591, -0.8989], [0.0051, -0.2118, -0.9101], [0.0043, -0.2585, -0.8965], [0.0043, -0.305, -0.883], [0.0051, -0.3058, -0.8853], [0.0043, -0.305, -0.883], [0.0043, -0.3508, -0.867], [0.0051, -0.3517, -0.8694], [0.0043, -0.3958, -0.8488], [0.0051, -0.3968, -0.851], [0.0051, -0.3517, -0.8694], [0.0043, -0.4397, -0.8282], [0.0051, -0.4408, -0.8304], [0.0051, -0.3968, -0.851], [0.0043, -0.4397, -0.8282], [0.0043, -0.4825, -0.8054], [0.0051, -0.4837, -0.8076], [0.0043, -0.4825, -0.8054], [0.0043, -0.5241, -0.7805], [0.0051, -0.5254, -0.7825], [0.0043, -0.5241, -0.7805], [0.0043, -0.5643, -0.7534], [0.0051, -0.5658, -0.7554], [0.0043, -0.5643, -0.7534], [0.0043, -0.6031, -0.7243], [0.0051, -0.6047, -0.7262], [0.0043, -0.6031, -0.7243], [0.0043, -0.6404, -0.6932], [0.0051, -0.642, -0.695], [0.0043, -0.6404, -0.6932], [0.0043, -0.676, -0.6602], [0.0051, -0.6777, -0.662], [0.0043, -0.676, -0.6602], [0.0043, -0.7098, -0.6255], [0.0051, -0.7116, -0.6272], [0.0043, -0.7418, -0.5891], [0.0051, -0.7437, -0.5907], [0.0051, -0.7116, -0.6272], [0.0043, -0.7719, -0.551], [0.0051, -0.7739, -0.5525], [0.0051, -0.7437, -0.5907], [0.0043, -0.7719, -0.551], [0.0043, -0.8001, -0.5115], [0.0051, -0.8021, -0.5129], [0.0043, -0.8001, -0.5115], [0.0043, -0.8261, -0.4706], [0.0051, -0.8282, -0.4719], [0.0043, -0.85, -0.4284], [0.0051, -0.8522, -0.4295], [0.0051, -0.8282, -0.4719], [0.0043, -0.8717, -0.385], [0.0051, -0.8739, -0.386], [0.0051, -0.8522, -0.4295], [0.0043, -0.8911, -0.3405], [0.0051, -0.8934, -0.3415], [0.0051, -0.8739, -0.386], [0.0043, -0.9082, -0.2952], [0.0051, -0.9105, -0.296], [0.0051, -0.8934, -0.3415], [0.0043, -0.9082, -0.2952], [0.0043, -0.9229, -0.249], [0.0051, -0.9253, -0.2496], [0.0043, -0.9229, -0.249], [0.0043, -0.9353, -0.2021], [0.0051, -0.9377, -0.2026], [0.0043, -0.9353, -0.2021], [0.0043, -0.9452, -0.1546], [0.0051, -0.9476, -0.155], [0.0043, -0.9452, -0.1546], [0.0043, -0.9527, -0.1066], [0.0051, -0.9551, -0.107], [0.0043, -0.9527, -0.1066], [0.0043, -0.9577, -0.0584], [0.0051, -0.9601, -0.0586], [0.0043, -0.9602, -0.01], [0.0051, -0.9626, -0.01], [0.0051, -0.9601, -0.0586], [0.0043, -0.9602, -0.01], [0.0043, -0.9602, 0.0385], [0.0051, -0.9626, 0.0386], [0.0043, -0.9602, 0.0385], [0.0043, -0.9577, 0.087], [0.0051, -0.9601, 0.0872], [0.0043, -0.9527, 0.1352], [0.0051, -0.9551, 0.1355], [0.0051, -0.9601, 0.0872], [0.0043, -0.9452, 0.1832], [0.0051, -0.9476, 0.1836], [0.0051, -0.9551, 0.1355], [0.0043, -0.9452, 0.1832], [0.0043, -0.9353, 0.2306], [0.0051, -0.9377, 0.2312], [0.0043, -0.9353, 0.2306], [0.0043, -0.9229, 0.2775], [0.0051, -0.9253, 0.2782], [0.0043, -0.9082, 0.3237], [0.0051, -0.9105, 0.3245], [0.0051, -0.9253, 0.2782], [0.0043, -0.9082, 0.3237], [0.0043, -0.8911, 0.3691], [0.0051, -0.8934, 0.3701], [0.0043, -0.8911, 0.3691], [0.0043, -0.8717, 0.4136], [0.0051, -0.8739, 0.4146], [0.0043, -0.8717, 0.4136], [0.0043, -0.85, 0.457], [0.0051, -0.8522, 0.4581], [0.0043, -0.85, 0.457], [0.0043, -0.8261, 0.4992], [0.0051, -0.8282, 0.5004], [0.0043, -0.8261, 0.4992], [0.0043, -0.8001, 0.5401], [0.0051, -0.8021, 0.5415], [0.0043, -0.8001, 0.5401], [0.0043, -0.7719, 0.5796], [0.0051, -0.7739, 0.5811], [0.0043, -0.7719, 0.5796], [0.0043, -0.7418, 0.6177], [0.0051, -0.7437, 0.6192], [0.0043, -0.7418, 0.6177], [0.0043, -0.7098, 0.6541], [0.0051, -0.7116, 0.6558], [0.0043, -0.676, 0.6888], [0.0051, -0.6777, 0.6906], [0.0051, -0.7116, 0.6558], [0.0043, -0.6404, 0.7218], [0.0051, -0.642, 0.7236], [0.0051, -0.6777, 0.6906], [0.0043, -0.6031, 0.7528], [0.0051, -0.6047, 0.7548], [0.0051, -0.642, 0.7236], [0.0043, -0.6031, 0.7528], [0.0043, -0.5643, 0.782], [0.0051, -0.5658, 0.784], [0.0043, -0.5241, 0.809], [0.0051, -0.5254, 0.8111], [0.0051, -0.5658, 0.784], [0.0043, -0.4825, 0.834], [0.0051, -0.4837, 0.8361], [0.0051, -0.5254, 0.8111], [0.0043, -0.4397, 0.8568], [0.0051, -0.4408, 0.859], [0.0051, -0.4837, 0.8361], [0.0043, -0.3958, 0.8774], [0.0051, -0.3968, 0.8796], [0.0051, -0.4408, 0.859], [0.0043, -0.3508, 0.8956], [0.0051, -0.3517, 0.8979], [0.0051, -0.3968, 0.8796], [0.0043, -0.305, 0.9116], [0.0051, -0.3058, 0.9139], [0.0051, -0.3517, 0.8979], [0.0043, -0.2585, 0.9251], [0.0051, -0.2591, 0.9275], [0.0051, -0.3058, 0.9139], [0.0043, -0.2113, 0.9363], [0.0051, -0.2118, 0.9387], [0.0051, -0.2591, 0.9275], [0.0043, -0.2113, 0.9363], [0.0043, -0.1635, 0.945], [0.0051, -0.1639, 0.9474], [0.0043, -0.1635, 0.945], [0.0043, -0.1153, 0.9512], [0.0051, -0.1156, 0.9536], [0.0043, -0.1153, 0.9512], [0.0111, -0.0572, 0.9509], [0.0131, -0.0576, 0.9573], [0.0285, -0.0337, -0.8807], [0.0063, -0.057, -0.9179], [0.0111, -0.0572, -0.9223], [0.0024, -0.1151, -0.9209], [0.0043, -0.1153, -0.9226], [0.0111, -0.0572, -0.9223], [0.0024, -0.1633, -0.9147], [0.0043, -0.1635, -0.9164], [0.0043, -0.1153, -0.9226], [0.0024, -0.2109, -0.906], [0.0043, -0.2113, -0.9077], [0.0043, -0.1635, -0.9164], [0.0024, -0.258, -0.8949], [0.0043, -0.2585, -0.8965], [0.0043, -0.2113, -0.9077], [0.0024, -0.3045, -0.8813], [0.0043, -0.305, -0.883], [0.0043, -0.2585, -0.8965], [0.0024, -0.3502, -0.8654], [0.0043, -0.3508, -0.867], [0.0043, -0.305, -0.883], [0.0024, -0.3951, -0.8472], [0.0043, -0.3958, -0.8488], [0.0043, -0.3508, -0.867], [0.0024, -0.3951, -0.8472], [0.0024, -0.4389, -0.8267], [0.0043, -0.4397, -0.8282], [0.0024, -0.4389, -0.8267], [0.0024, -0.4817, -0.8039], [0.0043, -0.4825, -0.8054], [0.0024, -0.5232, -0.779], [0.0043, -0.5241, -0.7805], [0.0043, -0.4825, -0.8054], [0.0024, -0.5633, -0.752], [0.0043, -0.5643, -0.7534], [0.0043, -0.5241, -0.7805], [0.0024, -0.6021, -0.7229], [0.0043, -0.6031, -0.7243], [0.0043, -0.5643, -0.7534], [0.0024, -0.6392, -0.6919], [0.0043, -0.6404, -0.6932], [0.0043, -0.6031, -0.7243], [0.0024, -0.6748, -0.659], [0.0043, -0.676, -0.6602], [0.0043, -0.6404, -0.6932], [0.0024, -0.7086, -0.6243], [0.0043, -0.7098, -0.6255], [0.0043, -0.676, -0.6602], [0.0024, -0.7086, -0.6243], [0.0024, -0.7405, -0.588], [0.0043, -0.7418, -0.5891], [0.0024, -0.7706, -0.55], [0.0043, -0.7719, -0.551], [0.0043, -0.7418, -0.5891], [0.0024, -0.7986, -0.5105], [0.0043, -0.8001, -0.5115], [0.0043, -0.7719, -0.551], [0.0024, -0.8246, -0.4697], [0.0043, -0.8261, -0.4706], [0.0043, -0.8001, -0.5115], [0.0024, -0.8484, -0.4276], [0.0043, -0.85, -0.4284], [0.0043, -0.8261, -0.4706], [0.0024, -0.8484, -0.4276], [0.0024, -0.8701, -0.3843], [0.0043, -0.8717, -0.385], [0.0024, -0.8701, -0.3843], [0.0024, -0.8895, -0.3399], [0.0043, -0.8911, -0.3405], [0.0024, -0.8895, -0.3399], [0.0024, -0.9066, -0.2946], [0.0043, -0.9082, -0.2952], [0.0024, -0.9213, -0.2485], [0.0043, -0.9229, -0.249], [0.0043, -0.9082, -0.2952], [0.0024, -0.9336, -0.2017], [0.0043, -0.9353, -0.2021], [0.0043, -0.9229, -0.249], [0.0024, -0.9435, -0.1543], [0.0043, -0.9452, -0.1546], [0.0043, -0.9353, -0.2021], [0.0024, -0.9435, -0.1543], [0.0024, -0.951, -0.1064], [0.0043, -0.9527, -0.1066], [0.0024, -0.951, -0.1064], [0.0024, -0.9559, -0.0583], [0.0043, -0.9577, -0.0584], [0.0024, -0.9584, -0.0099], [0.0043, -0.9602, -0.01], [0.0043, -0.9577, -0.0584], [0.0024, -0.9584, -0.0099], [0.0024, -0.9584, 0.0385], [0.0043, -0.9602, 0.0385], [0.0024, -0.9584, 0.0385], [0.0024, -0.9559, 0.0868], [0.0043, -0.9577, 0.087], [0.0024, -0.951, 0.135], [0.0043, -0.9527, 0.1352], [0.0043, -0.9577, 0.087], [0.0024, -0.9435, 0.1828], [0.0043, -0.9452, 0.1832], [0.0043, -0.9527, 0.1352], [0.0024, -0.9336, 0.2302], [0.0043, -0.9353, 0.2306], [0.0043, -0.9452, 0.1832], [0.0024, -0.9336, 0.2302], [0.0024, -0.9213, 0.277], [0.0043, -0.9229, 0.2775], [0.0024, -0.9213, 0.277], [0.0024, -0.9066, 0.3232], [0.0043, -0.9082, 0.3237], [0.0024, -0.9066, 0.3232], [0.0024, -0.8895, 0.3685], [0.0043, -0.8911, 0.3691], [0.0024, -0.8895, 0.3685], [0.0024, -0.8701, 0.4128], [0.0043, -0.8717, 0.4136], [0.0024, -0.8484, 0.4561], [0.0043, -0.85, 0.457], [0.0043, -0.8717, 0.4136], [0.0024, -0.8484, 0.4561], [0.0024, -0.8246, 0.4983], [0.0043, -0.8261, 0.4992], [0.0024, -0.7986, 0.5391], [0.0043, -0.8001, 0.5401], [0.0043, -0.8261, 0.4992], [0.0024, -0.7706, 0.5786], [0.0043, -0.7719, 0.5796], [0.0043, -0.8001, 0.5401], [0.0024, -0.7706, 0.5786], [0.0024, -0.7405, 0.6165], [0.0043, -0.7418, 0.6177], [0.0024, -0.7086, 0.6529], [0.0043, -0.7098, 0.6541], [0.0043, -0.7418, 0.6177], [0.0024, -0.7086, 0.6529], [0.0024, -0.6748, 0.6876], [0.0043, -0.676, 0.6888], [0.0024, -0.6748, 0.6876], [0.0024, -0.6392, 0.7205], [0.0043, -0.6404, 0.7218], [0.0024, -0.6392, 0.7205], [0.0024, -0.6021, 0.7515], [0.0043, -0.6031, 0.7528], [0.0024, -0.6021, 0.7515], [0.0024, -0.5633, 0.7805], [0.0043, -0.5643, 0.782], [0.0024, -0.5633, 0.7805], [0.0024, -0.5232, 0.8076], [0.0043, -0.5241, 0.809], [0.0024, -0.5232, 0.8076], [0.0024, -0.4817, 0.8325], [0.0043, -0.4825, 0.834], [0.0024, -0.4389, 0.8552], [0.0043, -0.4397, 0.8568], [0.0043, -0.4825, 0.834], [0.0024, -0.3951, 0.8758], [0.0043, -0.3958, 0.8774], [0.0043, -0.4397, 0.8568], [0.0024, -0.3502, 0.894], [0.0043, -0.3508, 0.8956], [0.0043, -0.3958, 0.8774], [0.0024, -0.3502, 0.894], [0.0024, -0.3045, 0.9099], [0.0043, -0.305, 0.9116], [0.0024, -0.3045, 0.9099], [0.0024, -0.258, 0.9234], [0.0043, -0.2585, 0.9251], [0.0024, -0.258, 0.9234], [0.0024, -0.2109, 0.9346], [0.0043, -0.2113, 0.9363], [0.0024, -0.2109, 0.9346], [0.0024, -0.1633, 0.9432], [0.0043, -0.1635, 0.945], [0.0024, -0.1633, 0.9432], [0.0024, -0.1151, 0.9495], [0.0043, -0.1153, 0.9512], [0.0024, -0.1151, 0.9495], [0.0063, -0.057, 0.9464], [0.0111, -0.0572, 0.9509], [-0.0, -0.0339, -0.873], [-0.0, -0.0569, -0.9162], [0.0063, -0.057, -0.9179], [-0.0, -0.1151, -0.9203], [0.0024, -0.1151, -0.9209], [0.0063, -0.057, -0.9179], [-0.0, -0.1632, -0.914], [0.0024, -0.1633, -0.9147], [0.0024, -0.1151, -0.9209], [-0.0, -0.1632, -0.914], [-0.0, -0.2108, -0.9054], [0.0024, -0.2109, -0.906], [-0.0, -0.2108, -0.9054], [-0.0, -0.2579, -0.8943], [0.0024, -0.258, -0.8949], [-0.0, -0.2579, -0.8943], [-0.0, -0.3043, -0.8807], [0.0024, -0.3045, -0.8813], [-0.0, -0.3043, -0.8807], [-0.0, -0.35, -0.8648], [0.0024, -0.3502, -0.8654], [-0.0, -0.35, -0.8648], [-0.0, -0.3948, -0.8466], [0.0024, -0.3951, -0.8472], [-0.0, -0.3948, -0.8466], [-0.0, -0.4386, -0.8261], [0.0024, -0.4389, -0.8267], [-0.0, -0.4386, -0.8261], [-0.0, -0.4814, -0.8034], [0.0024, -0.4817, -0.8039], [-0.0, -0.4814, -0.8034], [-0.0, -0.5228, -0.7785], [0.0024, -0.5232, -0.779], [-0.0, -0.5228, -0.7785], [-0.0, -0.563, -0.7515], [0.0024, -0.5633, -0.752], [-0.0, -0.563, -0.7515], [-0.0, -0.6017, -0.7224], [0.0024, -0.6021, -0.7229], [-0.0, -0.6017, -0.7224], [-0.0, -0.6388, -0.6914], [0.0024, -0.6392, -0.6919], [-0.0, -0.6388, -0.6914], [-0.0, -0.6743, -0.6586], [0.0024, -0.6748, -0.659], [-0.0, -0.6743, -0.6586], [-0.0, -0.7081, -0.6239], [0.0024, -0.7086, -0.6243], [-0.0, -0.7081, -0.6239], [-0.0, -0.74, -0.5876], [0.0024, -0.7405, -0.588], [-0.0, -0.74, -0.5876], [-0.0, -0.7701, -0.5496], [0.0024, -0.7706, -0.55], [-0.0, -0.7701, -0.5496], [-0.0, -0.7981, -0.5102], [0.0024, -0.7986, -0.5105], [-0.0, -0.7981, -0.5102], [-0.0, -0.8241, -0.4694], [0.0024, -0.8246, -0.4697], [-0.0, -0.8241, -0.4694], [-0.0, -0.8479, -0.4273], [0.0024, -0.8484, -0.4276], [-0.0, -0.8479, -0.4273], [-0.0, -0.8695, -0.384], [0.0024, -0.8701, -0.3843], [-0.0, -0.8695, -0.384], [-0.0, -0.8889, -0.3397], [0.0024, -0.8895, -0.3399], [-0.0, -0.8889, -0.3397], [-0.0, -0.906, -0.2944], [0.0024, -0.9066, -0.2946], [-0.0, -0.906, -0.2944], [-0.0, -0.9207, -0.2483], [0.0024, -0.9213, -0.2485], [-0.0, -0.9207, -0.2483], [-0.0, -0.933, -0.2015], [0.0024, -0.9336, -0.2017], [-0.0, -0.933, -0.2015], [-0.0, -0.9429, -0.1542], [0.0024, -0.9435, -0.1543], [-0.0, -0.9429, -0.1542], [-0.0, -0.9503, -0.1063], [0.0024, -0.951, -0.1064], [-0.0, -0.9503, -0.1063], [-0.0, -0.9553, -0.0582], [0.0024, -0.9559, -0.0583], [-0.0, -0.9553, -0.0582], [-0.0, -0.9578, -0.0099], [0.0024, -0.9584, -0.0099], [-0.0, -0.9578, -0.0099], [-0.0, -0.9578, 0.0385], [0.0024, -0.9584, 0.0385], [-0.0, -0.9578, 0.0385], [-0.0, -0.9553, 0.0868], [0.0024, -0.9559, 0.0868], [-0.0, -0.9553, 0.0868], [-0.0, -0.9503, 0.1349], [0.0024, -0.951, 0.135], [-0.0, -0.9503, 0.1349], [-0.0, -0.9429, 0.1827], [0.0024, -0.9435, 0.1828], [-0.0, -0.9429, 0.1827], [-0.0, -0.933, 0.2301], [0.0024, -0.9336, 0.2302], [-0.0, -0.933, 0.2301], [-0.0, -0.9207, 0.2769], [0.0024, -0.9213, 0.277], [-0.0, -0.9207, 0.2769], [-0.0, -0.906, 0.323], [0.0024, -0.9066, 0.3232], [-0.0, -0.906, 0.323], [-0.0, -0.8889, 0.3682], [0.0024, -0.8895, 0.3685], [-0.0, -0.8889, 0.3682], [-0.0, -0.8695, 0.4126], [0.0024, -0.8701, 0.4128], [-0.0, -0.8695, 0.4126], [-0.0, -0.8479, 0.4558], [0.0024, -0.8484, 0.4561], [-0.0, -0.8479, 0.4558], [-0.0, -0.8241, 0.498], [0.0024, -0.8246, 0.4983], [-0.0, -0.8241, 0.498], [-0.0, -0.7981, 0.5388], [0.0024, -0.7986, 0.5391], [-0.0, -0.7981, 0.5388], [-0.0, -0.7701, 0.5782], [0.0024, -0.7706, 0.5786], [-0.0, -0.7701, 0.5782], [-0.0, -0.74, 0.6161], [0.0024, -0.7405, 0.6165], [-0.0, -0.74, 0.6161], [-0.0, -0.7081, 0.6525], [0.0024, -0.7086, 0.6529], [-0.0, -0.7081, 0.6525], [-0.0, -0.6743, 0.6871], [0.0024, -0.6748, 0.6876], [-0.0, -0.6743, 0.6871], [-0.0, -0.6388, 0.72], [0.0024, -0.6392, 0.7205], [-0.0, -0.6388, 0.72], [-0.0, -0.6017, 0.751], [0.0024, -0.6021, 0.7515], [-0.0, -0.6017, 0.751], [-0.0, -0.563, 0.78], [0.0024, -0.5633, 0.7805], [-0.0, -0.563, 0.78], [-0.0, -0.5228, 0.807], [0.0024, -0.5232, 0.8076], [-0.0, -0.5228, 0.807], [-0.0, -0.4814, 0.8319], [0.0024, -0.4817, 0.8325], [-0.0, -0.4814, 0.8319], [-0.0, -0.4386, 0.8547], [0.0024, -0.4389, 0.8552], [-0.0, -0.4386, 0.8547], [-0.0, -0.3948, 0.8752], [0.0024, -0.3951, 0.8758], [-0.0, -0.3948, 0.8752], [-0.0, -0.35, 0.8934], [0.0024, -0.3502, 0.894], [-0.0, -0.35, 0.8934], [-0.0, -0.3043, 0.9093], [0.0024, -0.3045, 0.9099], [-0.0, -0.3043, 0.9093], [-0.0, -0.2579, 0.9228], [0.0024, -0.258, 0.9234], [-0.0, -0.2579, 0.9228], [-0.0, -0.2108, 0.934], [0.0024, -0.2109, 0.9346], [-0.0, -0.2108, 0.934], [-0.0, -0.1632, 0.9426], [0.0024, -0.1633, 0.9432], [-0.0, -0.1632, 0.9426], [-0.0, -0.115, 0.9489], [0.0024, -0.1151, 0.9495], [-0.0, -0.115, 0.9489], [-0.0, -0.0569, 0.9448], [0.0063, -0.057, 0.9464], [0.0036, 0.0317, 0.9563], [0.0021, 0.0317, 0.9547], [-0.0036, 0.0317, 0.9563], [0.0021, 0.0317, 0.9547], [-0.0, 0.0317, 0.9542], [-0.0036, 0.0317, 0.9563], [-0.0, 0.0317, 0.9542], [-0.0021, 0.0317, 0.9547], [-0.0036, 0.0317, 0.9563], [-0.0036, 0.0317, 0.9563], [-0.0041, 0.0318, 0.9583], [-0.0, 0.0319, 0.9624], [-0.0041, 0.0318, 0.9583], [-0.0035, 0.0318, 0.9604], [-0.0, 0.0319, 0.9624], [-0.0035, 0.0318, 0.9604], [-0.002, 0.0319, 0.9618], [-0.0, 0.0319, 0.9624], [-0.0, 0.0319, 0.9624], [0.002, 0.0319, 0.9618], [0.0035, 0.0318, 0.9604], [0.0035, 0.0318, 0.9604], [0.0041, 0.0318, 0.9583], [0.0036, 0.0317, 0.9563], [-0.0, 0.0319, 0.9624], [0.0035, 0.0318, 0.9604], [-0.0036, 0.0317, 0.9563], [-0.0021, 0.0317, -0.9261], [-0.0, 0.0317, -0.9256], [0.0021, 0.0317, -0.9261], [0.0021, 0.0317, -0.9261], [0.0036, 0.0317, -0.9277], [-0.0021, 0.0317, -0.9261], [0.0036, 0.0317, -0.9277], [0.0041, 0.0318, -0.9297], [-0.0021, 0.0317, -0.9261], [0.0041, 0.0318, -0.9297], [0.0035, 0.0318, -0.9318], [-0.002, 0.0319, -0.9333], [0.0035, 0.0318, -0.9318], [0.002, 0.0319, -0.9333], [-0.002, 0.0319, -0.9333], [0.002, 0.0319, -0.9333], [-0.0, 0.0319, -0.9338], [-0.002, 0.0319, -0.9333], [-0.002, 0.0319, -0.9333], [-0.0035, 0.0318, -0.9318], [-0.0041, 0.0318, -0.9297], [-0.0041, 0.0318, -0.9297], [-0.0036, 0.0317, -0.9277], [-0.0021, 0.0317, -0.9261], [-0.002, 0.0319, -0.9333], [-0.0041, 0.0318, -0.9297], [0.0041, 0.0318, -0.9297], [-0.0, -0.0308, -0.9856], [-0.0, 0.0319, -0.9338], [0.002, 0.0319, -0.9333], [-0.0491, -0.0331, -0.9017], [-0.0285, -0.0337, -0.8807], [-0.0021, 0.0317, -0.9261], [-0.0, -0.0308, 1.0142], [0.0278, -0.031, 1.0069], [0.002, 0.0319, 0.9618], [-0.0491, -0.0331, 0.9303], [-0.0036, 0.0317, 0.9563], [-0.0021, 0.0317, 0.9547], [0.0484, -0.0316, -0.9581], [0.0035, 0.0318, -0.9318], [0.0041, 0.0318, -0.9297], [-0.0484, -0.0316, -0.9581], [-0.0563, -0.0324, -0.9301], [-0.0041, 0.0318, -0.9297], [0.0484, -0.0316, 0.9867], [0.0563, -0.0324, 0.9587], [0.0041, 0.0318, 0.9583], [-0.0484, -0.0316, 0.9867], [-0.0035, 0.0318, 0.9604], [-0.0041, 0.0318, 0.9583], [0.0491, -0.0331, -0.9017], [0.0036, 0.0317, -0.9277], [0.0021, 0.0317, -0.9261], [-0.0, -0.0308, -0.9856], [-0.0278, -0.031, -0.9783], [-0.002, 0.0319, -0.9333], [-0.0285, -0.0337, -0.8807], [-0.0, -0.0339, -0.873], [-0.0, 0.0317, -0.9256], [0.0491, -0.0331, 0.9303], [0.0285, -0.0337, 0.9093], [0.0021, 0.0317, 0.9547], [-0.0, -0.0308, 1.0142], [-0.0, 0.0319, 0.9624], [-0.002, 0.0319, 0.9618], [-0.0285, -0.0337, 0.9093], [-0.0021, 0.0317, 0.9547], [-0.0, 0.0317, 0.9542], [0.0278, -0.031, -0.9783], [0.002, 0.0319, -0.9333], [0.0035, 0.0318, -0.9318], [-0.0563, -0.0324, -0.9301], [-0.0491, -0.0331, -0.9017], [-0.0036, 0.0317, -0.9277], [0.0278, -0.031, 1.0069], [0.0484, -0.0316, 0.9867], [0.0035, 0.0318, 0.9604], [-0.0563, -0.0324, 0.9587], [-0.0041, 0.0318, 0.9583], [-0.0036, 0.0317, 0.9563], [0.0563, -0.0324, -0.9301], [0.0041, 0.0318, -0.9297], [0.0036, 0.0317, -0.9277], [-0.0278, -0.031, -0.9783], [-0.0484, -0.0316, -0.9581], [-0.0035, 0.0318, -0.9318], [0.0285, -0.0337, -0.8807], [0.0021, 0.0317, -0.9261], [-0.0, 0.0317, -0.9256], [0.0563, -0.0324, 0.9587], [0.0491, -0.0331, 0.9303], [0.0036, 0.0317, 0.9563]], "None_GizmoGroup_": [[0.699, 0.0128, -0.2384], [0.699, 0.0128, 0.238], [0.7675, 0.0128, 0.1765], [0.7675, 0.0128, 0.1765], [0.699, 0.0128, 0.238], [0.9694, 0.0128, 0.238], [0.7675, 0.0128, 0.1765], [0.9694, 0.0128, 0.238], [0.9694, 0.0128, 0.1765], [0.699, 0.0128, -0.2384], [0.7675, 0.0128, 0.1765], [0.7675, 0.0128, 0.0326], [0.699, 0.0128, -0.2384], [0.7675, 0.0128, 0.0326], [0.7675, 0.0128, -0.0289], [0.7675, 0.0128, -0.0289], [0.7675, 0.0128, 0.0326], [0.9624, 0.0128, 0.0326], [0.7675, 0.0128, -0.0289], [0.9624, 0.0128, 0.0326], [0.9624, 0.0128, -0.0289], [0.699, 0.0128, -0.2384], [0.7675, 0.0128, -0.0289], [0.7675, 0.0128, -0.177], [0.699, 0.0128, -0.2384], [0.7675, 0.0128, -0.177], [0.9757, 0.0128, -0.177], [0.699, 0.0128, -0.2384], [0.9757, 0.0128, -0.177], [0.9757, 0.0128, -0.2384], [0.1528, 0.0128, -0.2384], [0.1528, 0.0128, 0.238], [0.2073, 0.0128, 0.238], [0.1528, 0.0128, -0.2384], [0.2073, 0.0128, 0.238], [0.217, 0.0128, 0.1283], [0.217, 0.0128, 0.1283], [0.2073, 0.0128, 0.238], [0.53, 0.0128, -0.1309], [0.53, 0.0128, -0.1309], [0.53, 0.0128, 0.238], [0.5943, 0.0128, 0.238], [0.53, 0.0128, -0.1309], [0.5943, 0.0128, 0.238], [0.5943, 0.0128, -0.2384], [0.1528, 0.0128, -0.2384], [0.217, 0.0128, 0.1283], [0.217, 0.0128, -0.2384], [0.5356, 0.0128, -0.2384], [0.217, 0.0128, 0.1283], [0.53, 0.0128, -0.1309], [0.5356, 0.0128, -0.2384], [0.53, 0.0128, -0.1309], [0.5943, 0.0128, -0.2384], [-0.2242, 0.0128, 0.242], [-0.1867, 0.0128, 0.2443], [-0.1487, 0.0128, 0.242], [-0.2242, 0.0128, 0.242], [-0.1487, 0.0128, 0.242], [-0.1132, 0.0128, 0.2354], [-0.2593, 0.0128, 0.2353], [-0.2242, 0.0128, 0.242], [-0.1132, 0.0128, 0.2354], [-0.2593, 0.0128, 0.2353], [-0.1132, 0.0128, 0.2354], [-0.0804, 0.0128, 0.2247], [-0.2918, 0.0128, 0.2246], [-0.2593, 0.0128, 0.2353], [-0.0804, 0.0128, 0.2247], [-0.2918, 0.0128, 0.2246], [-0.0804, 0.0128, 0.2247], [-0.0504, 0.0128, 0.2104], [-0.3216, 0.0128, 0.2102], [-0.2918, 0.0128, 0.2246], [-0.0504, 0.0128, 0.2104], [-0.3216, 0.0128, 0.2102], [-0.0504, 0.0128, 0.2104], [-0.0234, 0.0128, 0.1926], [-0.3485, 0.0128, 0.1924], [-0.3216, 0.0128, 0.2102], [-0.0234, 0.0128, 0.1926], [-0.3485, 0.0128, 0.1924], [-0.0234, 0.0128, 0.1926], [0.0004, 0.0128, 0.1718], [-0.3724, 0.0128, 0.1715], [-0.3485, 0.0128, 0.1924], [-0.1867, 0.0128, 0.1814], [-0.1867, 0.0128, 0.1814], [-0.3485, 0.0128, 0.1924], [0.0004, 0.0128, 0.1718], [-0.3724, 0.0128, 0.1715], [-0.1867, 0.0128, 0.1814], [-0.2127, 0.0128, 0.1798], [-0.1606, 0.0128, 0.1798], [-0.1867, 0.0128, 0.1814], [0.0004, 0.0128, 0.1718], [-0.1358, 0.0128, 0.1752], [-0.1606, 0.0128, 0.1798], [0.0004, 0.0128, 0.1718], [-0.3724, 0.0128, 0.1715], [-0.2127, 0.0128, 0.1798], [-0.2373, 0.0128, 0.1752], [-0.1126, 0.0128, 0.1677], [-0.1358, 0.0128, 0.1752], [0.0004, 0.0128, 0.1718], [-0.3724, 0.0128, 0.1715], [-0.2373, 0.0128, 0.1752], [-0.2604, 0.0128, 0.1677], [-0.1126, 0.0128, 0.1677], [0.0004, 0.0128, 0.1718], [0.021, 0.0128, 0.1482], [-0.3931, 0.0128, 0.1479], [-0.3724, 0.0128, 0.1715], [-0.2604, 0.0128, 0.1677], [-0.091, 0.0128, 0.1576], [-0.1126, 0.0128, 0.1677], [0.021, 0.0128, 0.1482], [-0.3931, 0.0128, 0.1479], [-0.2604, 0.0128, 0.1677], [-0.2819, 0.0128, 0.1576], [-0.0714, 0.0128, 0.1449], [-0.091, 0.0128, 0.1576], [0.021, 0.0128, 0.1482], [-0.3931, 0.0128, 0.1479], [-0.2819, 0.0128, 0.1576], [-0.3015, 0.0128, 0.1449], [-0.0714, 0.0128, 0.1449], [0.021, 0.0128, 0.1482], [0.0381, 0.0128, 0.1221], [-0.4104, 0.0128, 0.1218], [-0.3931, 0.0128, 0.1479], [-0.3015, 0.0128, 0.1449], [-0.0537, 0.0128, 0.1299], [-0.0714, 0.0128, 0.1449], [0.0381, 0.0128, 0.1221], [-0.4104, 0.0128, 0.1218], [-0.3015, 0.0128, 0.1449], [-0.3191, 0.0128, 0.1299], [-0.0383, 0.0128, 0.1127], [-0.0537, 0.0128, 0.1299], [0.0381, 0.0128, 0.1221], [-0.4104, 0.0128, 0.1218], [-0.3191, 0.0128, 0.1299], [-0.3345, 0.0128, 0.1127], [-0.0383, 0.0128, 0.1127], [0.0381, 0.0128, 0.1221], [0.0517, 0.0128, 0.094], [-0.4241, 0.0128, 0.0937], [-0.4104, 0.0128, 0.1218], [-0.3345, 0.0128, 0.1127], [-0.0253, 0.0128, 0.0934], [-0.0383, 0.0128, 0.1127], [0.0517, 0.0128, 0.094], [-0.4241, 0.0128, 0.0937], [-0.3345, 0.0128, 0.1127], [-0.3474, 0.0128, 0.0934], [-0.0253, 0.0128, 0.0934], [0.0517, 0.0128, 0.094], [0.0616, 0.0128, 0.064], [-0.4342, 0.0128, 0.0637], [-0.4241, 0.0128, 0.0937], [-0.3474, 0.0128, 0.0934], [-0.0149, 0.0128, 0.0724], [-0.0253, 0.0128, 0.0934], [0.0616, 0.0128, 0.064], [-0.4342, 0.0128, 0.0637], [-0.3474, 0.0128, 0.0934], [-0.3578, 0.0128, 0.0724], [-0.0072, 0.0128, 0.0496], [-0.0149, 0.0128, 0.0724], [0.0616, 0.0128, 0.064], [-0.4342, 0.0128, 0.0637], [-0.3578, 0.0128, 0.0724], [-0.3655, 0.0128, 0.0496], [-0.0072, 0.0128, 0.0496], [0.0616, 0.0128, 0.064], [0.0676, 0.0128, 0.0325], [-0.4403, 0.0128, 0.0323], [-0.4342, 0.0128, 0.0637], [-0.3655, 0.0128, 0.0496], [-0.0025, 0.0128, 0.0254], [-0.0072, 0.0128, 0.0496], [0.0676, 0.0128, 0.0325], [-0.4403, 0.0128, 0.0323], [-0.3655, 0.0128, 0.0496], [-0.3702, 0.0128, 0.0254], [-0.0025, 0.0128, 0.0254], [0.0676, 0.0128, 0.0325], [0.0696, 0.0128, -0.0002], [-0.4424, 0.0128, -0.0002], [-0.4403, 0.0128, 0.0323], [-0.3702, 0.0128, 0.0254], [-0.0009, 0.0128, -0.0002], [-0.0025, 0.0128, 0.0254], [0.0696, 0.0128, -0.0002], [-0.4424, 0.0128, -0.0002], [-0.3702, 0.0128, 0.0254], [-0.3718, 0.0128, -0.0002], [-0.4404, 0.0128, -0.0322], [-0.4424, 0.0128, -0.0002], [-0.3718, 0.0128, -0.0002], [-0.4404, 0.0128, -0.0322], [-0.3718, 0.0128, -0.0002], [-0.3702, 0.0128, -0.0257], [-0.0025, 0.0128, -0.0257], [-0.0009, 0.0128, -0.0002], [0.0696, 0.0128, -0.0002], [-0.0025, 0.0128, -0.0257], [0.0696, 0.0128, -0.0002], [0.0677, 0.0128, -0.032], [-0.4404, 0.0128, -0.0322], [-0.3702, 0.0128, -0.0257], [-0.3655, 0.0128, -0.0498], [-0.0072, 0.0128, -0.0498], [-0.0025, 0.0128, -0.0257], [0.0677, 0.0128, -0.032], [-0.0072, 0.0128, -0.0498], [0.0677, 0.0128, -0.032], [0.0618, 0.0128, -0.063], [-0.4344, 0.0128, -0.0632], [-0.4404, 0.0128, -0.0322], [-0.3655, 0.0128, -0.0498], [-0.4344, 0.0128, -0.0632], [-0.3655, 0.0128, -0.0498], [-0.3578, 0.0128, -0.0725], [-0.0149, 0.0128, -0.0725], [-0.0072, 0.0128, -0.0498], [0.0618, 0.0128, -0.063], [-0.0149, 0.0128, -0.0725], [0.0618, 0.0128, -0.063], [0.0521, 0.0128, -0.0927], [-0.4246, 0.0128, -0.0929], [-0.4344, 0.0128, -0.0632], [-0.3578, 0.0128, -0.0725], [-0.0253, 0.0128, -0.0936], [-0.0149, 0.0128, -0.0725], [0.0521, 0.0128, -0.0927], [-0.4246, 0.0128, -0.0929], [-0.3578, 0.0128, -0.0725], [-0.3474, 0.0128, -0.0936], [-0.0253, 0.0128, -0.0936], [0.0521, 0.0128, -0.0927], [0.0387, 0.0128, -0.1207], [-0.4111, 0.0128, -0.121], [-0.4246, 0.0128, -0.0929], [-0.3474, 0.0128, -0.0936], [-0.0383, 0.0128, -0.1128], [-0.0253, 0.0128, -0.0936], [0.0387, 0.0128, -0.1207], [-0.4111, 0.0128, -0.121], [-0.3474, 0.0128, -0.0936], [-0.3345, 0.0128, -0.1128], [-0.0537, 0.0128, -0.1301], [-0.0383, 0.0128, -0.1128], [0.0387, 0.0128, -0.1207], [-0.4111, 0.0128, -0.121], [-0.3345, 0.0128, -0.1128], [-0.3191, 0.0128, -0.1301], [-0.0537, 0.0128, -0.1301], [0.0387, 0.0128, -0.1207], [0.0217, 0.0128, -0.1469], [-0.3941, 0.0128, -0.1472], [-0.4111, 0.0128, -0.121], [-0.3191, 0.0128, -0.1301], [-0.0714, 0.0128, -0.1452], [-0.0537, 0.0128, -0.1301], [0.0217, 0.0128, -0.1469], [-0.3941, 0.0128, -0.1472], [-0.3191, 0.0128, -0.1301], [-0.3015, 0.0128, -0.1452], [-0.091, 0.0128, -0.1579], [-0.0714, 0.0128, -0.1452], [0.0217, 0.0128, -0.1469], [-0.3941, 0.0128, -0.1472], [-0.3015, 0.0128, -0.1452], [-0.2819, 0.0128, -0.1579], [-0.091, 0.0128, -0.1579], [0.0217, 0.0128, -0.1469], [0.0013, 0.0128, -0.1707], [-0.3737, 0.0128, -0.1709], [-0.3941, 0.0128, -0.1472], [-0.2819, 0.0128, -0.1579], [-0.1126, 0.0128, -0.1681], [-0.091, 0.0128, -0.1579], [0.0013, 0.0128, -0.1707], [-0.3737, 0.0128, -0.1709], [-0.2819, 0.0128, -0.1579], [-0.2604, 0.0128, -0.1681], [-0.1358, 0.0128, -0.1756], [-0.1126, 0.0128, -0.1681], [0.0013, 0.0128, -0.1707], [-0.3737, 0.0128, -0.1709], [-0.2604, 0.0128, -0.1681], [-0.2373, 0.0128, -0.1756], [-0.1358, 0.0128, -0.1756], [0.0013, 0.0128, -0.1707], [-0.0225, 0.0128, -0.1918], [-0.35, 0.0128, -0.192], [-0.3737, 0.0128, -0.1709], [-0.2373, 0.0128, -0.1756], [-0.1606, 0.0128, -0.1803], [-0.1358, 0.0128, -0.1756], [-0.0225, 0.0128, -0.1918], [-0.35, 0.0128, -0.192], [-0.2373, 0.0128, -0.1756], [-0.2127, 0.0128, -0.1803], [-0.1867, 0.0128, -0.1818], [-0.1606, 0.0128, -0.1803], [-0.0225, 0.0128, -0.1918], [-0.35, 0.0128, -0.192], [-0.2127, 0.0128, -0.1803], [-0.1867, 0.0128, -0.1818], [-0.35, 0.0128, -0.192], [-0.1867, 0.0128, -0.1818], [-0.0225, 0.0128, -0.1918], [-0.35, 0.0128, -0.192], [-0.0225, 0.0128, -0.1918], [-0.0496, 0.0128, -0.2099], [-0.3233, 0.0128, -0.21], [-0.35, 0.0128, -0.192], [-0.0496, 0.0128, -0.2099], [-0.3233, 0.0128, -0.21], [-0.0496, 0.0128, -0.2099], [-0.0798, 0.0128, -0.2246], [-0.2936, 0.0128, -0.2247], [-0.3233, 0.0128, -0.21], [-0.0798, 0.0128, -0.2246], [-0.2936, 0.0128, -0.2247], [-0.0798, 0.0128, -0.2246], [-0.113, 0.0128, -0.2355], [-0.261, 0.0128, -0.2356], [-0.2936, 0.0128, -0.2247], [-0.113, 0.0128, -0.2355], [-0.261, 0.0128, -0.2356], [-0.113, 0.0128, -0.2355], [-0.1491, 0.0128, -0.2424], [-0.2258, 0.0128, -0.2424], [-0.261, 0.0128, -0.2356], [-0.1491, 0.0128, -0.2424], [-0.2258, 0.0128, -0.2424], [-0.1491, 0.0128, -0.2424], [-0.1881, 0.0128, -0.2447], [-0.9677, 0.0128, -0.2384], [-0.9677, 0.0128, 0.238], [-0.9132, 0.0128, 0.238], [-0.9677, 0.0128, -0.2384], [-0.9132, 0.0128, 0.238], [-0.9034, 0.0128, 0.1283], [-0.9034, 0.0128, 0.1283], [-0.9132, 0.0128, 0.238], [-0.5905, 0.0128, -0.1309], [-0.5905, 0.0128, -0.1309], [-0.5905, 0.0128, 0.238], [-0.5262, 0.0128, 0.238], [-0.5905, 0.0128, -0.1309], [-0.5262, 0.0128, 0.238], [-0.5262, 0.0128, -0.2384], [-0.9677, 0.0128, -0.2384], [-0.9034, 0.0128, 0.1283], [-0.9034, 0.0128, -0.2384], [-0.5849, 0.0128, -0.2384], [-0.9034, 0.0128, 0.1283], [-0.5905, 0.0128, -0.1309], [-0.5849, 0.0128, -0.2384], [-0.5905, 0.0128, -0.1309], [-0.5262, 0.0128, -0.2384], [0.699, -0.0084, -0.2384], [0.7675, -0.0084, 0.1765], [0.699, -0.0084, 0.238], [0.7675, -0.0084, 0.1765], [0.9694, -0.0084, 0.238], [0.699, -0.0084, 0.238], [0.7675, -0.0084, 0.1765], [0.9694, -0.0084, 0.1765], [0.9694, -0.0084, 0.238], [0.699, -0.0084, -0.2384], [0.7675, -0.0084, 0.0326], [0.7675, -0.0084, 0.1765], [0.699, -0.0084, -0.2384], [0.7675, -0.0084, -0.0289], [0.7675, -0.0084, 0.0326], [0.7675, -0.0084, -0.0289], [0.9624, -0.0084, 0.0326], [0.7675, -0.0084, 0.0326], [0.7675, -0.0084, -0.0289], [0.9624, -0.0084, -0.0289], [0.9624, -0.0084, 0.0326], [0.699, -0.0084, -0.2384], [0.7675, -0.0084, -0.177], [0.7675, -0.0084, -0.0289], [0.699, -0.0084, -0.2384], [0.9757, -0.0084, -0.177], [0.7675, -0.0084, -0.177], [0.699, -0.0084, -0.2384], [0.9757, -0.0084, -0.2384], [0.9757, -0.0084, -0.177], [0.1528, -0.0084, -0.2384], [0.2073, -0.0084, 0.238], [0.1528, -0.0084, 0.238], [0.1528, -0.0084, -0.2384], [0.217, -0.0084, 0.1283], [0.2073, -0.0084, 0.238], [0.217, -0.0084, 0.1283], [0.53, -0.0084, -0.1309], [0.2073, -0.0084, 0.238], [0.53, -0.0084, -0.1309], [0.5943, -0.0084, 0.238], [0.53, -0.0084, 0.238], [0.53, -0.0084, -0.1309], [0.5943, -0.0084, -0.2384], [0.5943, -0.0084, 0.238], [0.1528, -0.0084, -0.2384], [0.217, -0.0084, -0.2384], [0.217, -0.0084, 0.1283], [0.5356, -0.0084, -0.2384], [0.53, -0.0084, -0.1309], [0.217, -0.0084, 0.1283], [0.5356, -0.0084, -0.2384], [0.5943, -0.0084, -0.2384], [0.53, -0.0084, -0.1309], [-0.2242, -0.0084, 0.242], [-0.1487, -0.0084, 0.242], [-0.1867, -0.0084, 0.2443], [-0.2242, -0.0084, 0.242], [-0.1132, -0.0084, 0.2354], [-0.1487, -0.0084, 0.242], [-0.2593, -0.0084, 0.2353], [-0.1132, -0.0084, 0.2354], [-0.2242, -0.0084, 0.242], [-0.2593, -0.0084, 0.2353], [-0.0804, -0.0084, 0.2247], [-0.1132, -0.0084, 0.2354], [-0.2918, -0.0084, 0.2246], [-0.0804, -0.0084, 0.2247], [-0.2593, -0.0084, 0.2353], [-0.2918, -0.0084, 0.2246], [-0.0504, -0.0084, 0.2104], [-0.0804, -0.0084, 0.2247], [-0.3216, -0.0084, 0.2102], [-0.0504, -0.0084, 0.2104], [-0.2918, -0.0084, 0.2246], [-0.3216, -0.0084, 0.2102], [-0.0234, -0.0084, 0.1926], [-0.0504, -0.0084, 0.2104], [-0.3485, -0.0084, 0.1924], [-0.0234, -0.0084, 0.1926], [-0.3216, -0.0084, 0.2102], [-0.3485, -0.0084, 0.1924], [0.0004, -0.0084, 0.1718], [-0.0234, -0.0084, 0.1926], [-0.3724, -0.0084, 0.1715], [-0.1867, -0.0084, 0.1814], [-0.3485, -0.0084, 0.1924], [-0.1867, -0.0084, 0.1814], [0.0004, -0.0084, 0.1718], [-0.3485, -0.0084, 0.1924], [-0.3724, -0.0084, 0.1715], [-0.2127, -0.0084, 0.1798], [-0.1867, -0.0084, 0.1814], [-0.1606, -0.0084, 0.1798], [0.0004, -0.0084, 0.1718], [-0.1867, -0.0084, 0.1814], [-0.1358, -0.0084, 0.1752], [0.0004, -0.0084, 0.1718], [-0.1606, -0.0084, 0.1798], [-0.3724, -0.0084, 0.1715], [-0.2373, -0.0084, 0.1752], [-0.2127, -0.0084, 0.1798], [-0.1126, -0.0084, 0.1677], [0.0004, -0.0084, 0.1718], [-0.1358, -0.0084, 0.1752], [-0.3724, -0.0084, 0.1715], [-0.2604, -0.0084, 0.1677], [-0.2373, -0.0084, 0.1752], [-0.1126, -0.0084, 0.1677], [0.021, -0.0084, 0.1482], [0.0004, -0.0084, 0.1718], [-0.3931, -0.0084, 0.1479], [-0.2604, -0.0084, 0.1677], [-0.3724, -0.0084, 0.1715], [-0.091, -0.0084, 0.1576], [0.021, -0.0084, 0.1482], [-0.1126, -0.0084, 0.1677], [-0.3931, -0.0084, 0.1479], [-0.2819, -0.0084, 0.1576], [-0.2604, -0.0084, 0.1677], [-0.0714, -0.0084, 0.1449], [0.021, -0.0084, 0.1482], [-0.091, -0.0084, 0.1576], [-0.3931, -0.0084, 0.1479], [-0.3015, -0.0084, 0.1449], [-0.2819, -0.0084, 0.1576], [-0.0714, -0.0084, 0.1449], [0.0381, -0.0084, 0.1221], [0.021, -0.0084, 0.1482], [-0.4104, -0.0084, 0.1218], [-0.3015, -0.0084, 0.1449], [-0.3931, -0.0084, 0.1479], [-0.0537, -0.0084, 0.1299], [0.0381, -0.0084, 0.1221], [-0.0714, -0.0084, 0.1449], [-0.4104, -0.0084, 0.1218], [-0.3191, -0.0084, 0.1299], [-0.3015, -0.0084, 0.1449], [-0.0383, -0.0084, 0.1127], [0.0381, -0.0084, 0.1221], [-0.0537, -0.0084, 0.1299], [-0.4104, -0.0084, 0.1218], [-0.3345, -0.0084, 0.1127], [-0.3191, -0.0084, 0.1299], [-0.0383, -0.0084, 0.1127], [0.0517, -0.0084, 0.094], [0.0381, -0.0084, 0.1221], [-0.4241, -0.0084, 0.0937], [-0.3345, -0.0084, 0.1127], [-0.4104, -0.0084, 0.1218], [-0.0253, -0.0084, 0.0934], [0.0517, -0.0084, 0.094], [-0.0383, -0.0084, 0.1127], [-0.4241, -0.0084, 0.0937], [-0.3474, -0.0084, 0.0934], [-0.3345, -0.0084, 0.1127], [-0.0253, -0.0084, 0.0934], [0.0616, -0.0084, 0.064], [0.0517, -0.0084, 0.094], [-0.4342, -0.0084, 0.0637], [-0.3474, -0.0084, 0.0934], [-0.4241, -0.0084, 0.0937], [-0.0149, -0.0084, 0.0724], [0.0616, -0.0084, 0.064], [-0.0253, -0.0084, 0.0934], [-0.4342, -0.0084, 0.0637], [-0.3578, -0.0084, 0.0724], [-0.3474, -0.0084, 0.0934], [-0.0072, -0.0084, 0.0496], [0.0616, -0.0084, 0.064], [-0.0149, -0.0084, 0.0724], [-0.4342, -0.0084, 0.0637], [-0.3655, -0.0084, 0.0496], [-0.3578, -0.0084, 0.0724], [-0.0072, -0.0084, 0.0496], [0.0676, -0.0084, 0.0325], [0.0616, -0.0084, 0.064], [-0.4403, -0.0084, 0.0323], [-0.3655, -0.0084, 0.0496], [-0.4342, -0.0084, 0.0637], [-0.0025, -0.0084, 0.0254], [0.0676, -0.0084, 0.0325], [-0.0072, -0.0084, 0.0496], [-0.4403, -0.0084, 0.0323], [-0.3702, -0.0084, 0.0254], [-0.3655, -0.0084, 0.0496], [-0.0025, -0.0084, 0.0254], [0.0696, -0.0084, -0.0002], [0.0676, -0.0084, 0.0325], [-0.4424, -0.0084, -0.0002], [-0.3702, -0.0084, 0.0254], [-0.4403, -0.0084, 0.0323], [-0.0009, -0.0084, -0.0002], [0.0696, -0.0084, -0.0002], [-0.0025, -0.0084, 0.0254], [-0.4424, -0.0084, -0.0002], [-0.3718, -0.0084, -0.0002], [-0.3702, -0.0084, 0.0254], [-0.4404, -0.0084, -0.0322], [-0.3718, -0.0084, -0.0002], [-0.4424, -0.0084, -0.0002], [-0.4404, -0.0084, -0.0322], [-0.3702, -0.0084, -0.0257], [-0.3718, -0.0084, -0.0002], [-0.0025, -0.0084, -0.0257], [0.0696, -0.0084, -0.0002], [-0.0009, -0.0084, -0.0002], [-0.0025, -0.0084, -0.0257], [0.0677, -0.0084, -0.032], [0.0696, -0.0084, -0.0002], [-0.4404, -0.0084, -0.0322], [-0.3655, -0.0084, -0.0498], [-0.3702, -0.0084, -0.0257], [-0.0072, -0.0084, -0.0498], [0.0677, -0.0084, -0.032], [-0.0025, -0.0084, -0.0257], [-0.0072, -0.0084, -0.0498], [0.0618, -0.0084, -0.063], [0.0677, -0.0084, -0.032], [-0.4344, -0.0084, -0.0632], [-0.3655, -0.0084, -0.0498], [-0.4404, -0.0084, -0.0322], [-0.4344, -0.0084, -0.0632], [-0.3578, -0.0084, -0.0725], [-0.3655, -0.0084, -0.0498], [-0.0149, -0.0084, -0.0725], [0.0618, -0.0084, -0.063], [-0.0072, -0.0084, -0.0498], [-0.0149, -0.0084, -0.0725], [0.0521, -0.0084, -0.0927], [0.0618, -0.0084, -0.063], [-0.4246, -0.0084, -0.0929], [-0.3578, -0.0084, -0.0725], [-0.4344, -0.0084, -0.0632], [-0.0253, -0.0084, -0.0936], [0.0521, -0.0084, -0.0927], [-0.0149, -0.0084, -0.0725], [-0.4246, -0.0084, -0.0929], [-0.3474, -0.0084, -0.0936], [-0.3578, -0.0084, -0.0725], [-0.0253, -0.0084, -0.0936], [0.0387, -0.0084, -0.1207], [0.0521, -0.0084, -0.0927], [-0.4111, -0.0084, -0.121], [-0.3474, -0.0084, -0.0936], [-0.4246, -0.0084, -0.0929], [-0.0383, -0.0084, -0.1128], [0.0387, -0.0084, -0.1207], [-0.0253, -0.0084, -0.0936], [-0.4111, -0.0084, -0.121], [-0.3345, -0.0084, -0.1128], [-0.3474, -0.0084, -0.0936], [-0.0537, -0.0084, -0.1301], [0.0387, -0.0084, -0.1207], [-0.0383, -0.0084, -0.1128], [-0.4111, -0.0084, -0.121], [-0.3191, -0.0084, -0.1301], [-0.3345, -0.0084, -0.1128], [-0.0537, -0.0084, -0.1301], [0.0217, -0.0084, -0.1469], [0.0387, -0.0084, -0.1207], [-0.3941, -0.0084, -0.1472], [-0.3191, -0.0084, -0.1301], [-0.4111, -0.0084, -0.121], [-0.0714, -0.0084, -0.1452], [0.0217, -0.0084, -0.1469], [-0.0537, -0.0084, -0.1301], [-0.3941, -0.0084, -0.1472], [-0.3015, -0.0084, -0.1452], [-0.3191, -0.0084, -0.1301], [-0.091, -0.0084, -0.1579], [0.0217, -0.0084, -0.1469], [-0.0714, -0.0084, -0.1452], [-0.3941, -0.0084, -0.1472], [-0.2819, -0.0084, -0.1579], [-0.3015, -0.0084, -0.1452], [-0.091, -0.0084, -0.1579], [0.0013, -0.0084, -0.1707], [0.0217, -0.0084, -0.1469], [-0.3737, -0.0084, -0.1709], [-0.2819, -0.0084, -0.1579], [-0.3941, -0.0084, -0.1472], [-0.1126, -0.0084, -0.1681], [0.0013, -0.0084, -0.1707], [-0.091, -0.0084, -0.1579], [-0.3737, -0.0084, -0.1709], [-0.2604, -0.0084, -0.1681], [-0.2819, -0.0084, -0.1579], [-0.1358, -0.0084, -0.1756], [0.0013, -0.0084, -0.1707], [-0.1126, -0.0084, -0.1681], [-0.3737, -0.0084, -0.1709], [-0.2373, -0.0084, -0.1756], [-0.2604, -0.0084, -0.1681], [-0.1358, -0.0084, -0.1756], [-0.0225, -0.0084, -0.1918], [0.0013, -0.0084, -0.1707], [-0.35, -0.0084, -0.192], [-0.2373, -0.0084, -0.1756], [-0.3737, -0.0084, -0.1709], [-0.1606, -0.0084, -0.1803], [-0.0225, -0.0084, -0.1918], [-0.1358, -0.0084, -0.1756], [-0.35, -0.0084, -0.192], [-0.2127, -0.0084, -0.1803], [-0.2373, -0.0084, -0.1756], [-0.1867, -0.0084, -0.1818], [-0.0225, -0.0084, -0.1918], [-0.1606, -0.0084, -0.1803], [-0.35, -0.0084, -0.192], [-0.1867, -0.0084, -0.1818], [-0.2127, -0.0084, -0.1803], [-0.35, -0.0084, -0.192], [-0.0225, -0.0084, -0.1918], [-0.1867, -0.0084, -0.1818], [-0.35, -0.0084, -0.192], [-0.0496, -0.0084, -0.2099], [-0.0225, -0.0084, -0.1918], [-0.3233, -0.0084, -0.21], [-0.0496, -0.0084, -0.2099], [-0.35, -0.0084, -0.192], [-0.3233, -0.0084, -0.21], [-0.0798, -0.0084, -0.2246], [-0.0496, -0.0084, -0.2099], [-0.2936, -0.0084, -0.2247], [-0.0798, -0.0084, -0.2246], [-0.3233, -0.0084, -0.21], [-0.2936, -0.0084, -0.2247], [-0.113, -0.0084, -0.2355], [-0.0798, -0.0084, -0.2246], [-0.261, -0.0084, -0.2356], [-0.113, -0.0084, -0.2355], [-0.2936, -0.0084, -0.2247], [-0.261, -0.0084, -0.2356], [-0.1491, -0.0084, -0.2424], [-0.113, -0.0084, -0.2355], [-0.2258, -0.0084, -0.2424], [-0.1491, -0.0084, -0.2424], [-0.261, -0.0084, -0.2356], [-0.2258, -0.0084, -0.2424], [-0.1881, -0.0084, -0.2447], [-0.1491, -0.0084, -0.2424], [-0.9677, -0.0084, -0.2384], [-0.9132, -0.0084, 0.238], [-0.9677, -0.0084, 0.238], [-0.9677, -0.0084, -0.2384], [-0.9034, -0.0084, 0.1283], [-0.9132, -0.0084, 0.238], [-0.9034, -0.0084, 0.1283], [-0.5905, -0.0084, -0.1309], [-0.9132, -0.0084, 0.238], [-0.5905, -0.0084, -0.1309], [-0.5262, -0.0084, 0.238], [-0.5905, -0.0084, 0.238], [-0.5905, -0.0084, -0.1309], [-0.5262, -0.0084, -0.2384], [-0.5262, -0.0084, 0.238], [-0.9677, -0.0084, -0.2384], [-0.9034, -0.0084, -0.2384], [-0.9034, -0.0084, 0.1283], [-0.5849, -0.0084, -0.2384], [-0.5905, -0.0084, -0.1309], [-0.9034, -0.0084, 0.1283], [-0.5849, -0.0084, -0.2384], [-0.5262, -0.0084, -0.2384], [-0.5905, -0.0084, -0.1309], [0.0387, 0.0128, -0.1207], [0.0217, -0.0084, -0.1469], [0.0217, 0.0128, -0.1469], [-0.1881, 0.0128, -0.2447], [-0.2258, -0.0084, -0.2424], [-0.2258, 0.0128, -0.2424], [-0.2373, 0.0128, 0.1752], [-0.2604, -0.0084, 0.1677], [-0.2604, 0.0128, 0.1677], [-0.3941, 0.0128, -0.1472], [-0.4111, -0.0084, -0.121], [-0.4111, 0.0128, -0.121], [0.1528, 0.0128, 0.238], [0.2073, -0.0084, 0.238], [0.2073, 0.0128, 0.238], [-0.3702, 0.0128, 0.0254], [-0.3655, -0.0084, 0.0496], [-0.3702, -0.0084, 0.0254], [-0.1491, 0.0128, -0.2424], [-0.1881, -0.0084, -0.2447], [-0.1881, 0.0128, -0.2447], [-0.9677, 0.0128, -0.2384], [-0.9677, -0.0084, 0.238], [-0.9677, 0.0128, 0.238], [0.0004, 0.0128, 0.1718], [0.021, -0.0084, 0.1482], [0.021, 0.0128, 0.1482], [-0.0714, 0.0128, -0.1452], [-0.0537, -0.0084, -0.1301], [-0.0537, 0.0128, -0.1301], [0.0696, 0.0128, -0.0002], [0.0676, -0.0084, 0.0325], [0.0696, -0.0084, -0.0002], [-0.3931, 0.0128, 0.1479], [-0.3724, -0.0084, 0.1715], [-0.3724, 0.0128, 0.1715], [-0.4424, 0.0128, -0.0002], [-0.4403, -0.0084, 0.0323], [-0.4403, 0.0128, 0.0323], [-0.9677, 0.0128, 0.238], [-0.9132, -0.0084, 0.238], [-0.9132, 0.0128, 0.238], [0.2073, 0.0128, 0.238], [0.53, -0.0084, -0.1309], [0.53, 0.0128, -0.1309], [-0.091, 0.0128, 0.1576], [-0.1126, -0.0084, 0.1677], [-0.1126, 0.0128, 0.1677], [-0.3191, 0.0128, -0.1301], [-0.3015, -0.0084, -0.1452], [-0.3015, 0.0128, -0.1452], [0.53, 0.0128, -0.1309], [0.53, -0.0084, 0.238], [0.53, 0.0128, 0.238], [-0.0009, 0.0128, -0.0002], [-0.0025, -0.0084, 0.0254], [-0.0025, 0.0128, 0.0254], [-0.091, 0.0128, -0.1579], [-0.0714, -0.0084, -0.1452], [-0.0714, 0.0128, -0.1452], [0.53, 0.0128, 0.238], [0.5943, -0.0084, 0.238], [0.5943, 0.0128, 0.238], [-0.9132, 0.0128, 0.238], [-0.5905, -0.0084, -0.1309], [-0.5905, 0.0128, -0.1309], [-0.2604, 0.0128, 0.1677], [-0.2819, -0.0084, 0.1576], [-0.2819, 0.0128, 0.1576], [-0.3718, 0.0128, -0.0002], [-0.3702, -0.0084, 0.0254], [-0.3718, -0.0084, -0.0002], [-0.5905, 0.0128, -0.1309], [-0.5905, -0.0084, 0.238], [-0.5905, 0.0128, 0.238], [-0.0714, 0.0128, 0.1449], [-0.091, -0.0084, 0.1576], [-0.091, 0.0128, 0.1576], [-0.3015, 0.0128, -0.1452], [-0.2819, -0.0084, -0.1579], [-0.2819, 0.0128, -0.1579], [0.5943, 0.0128, 0.238], [0.5943, -0.0084, -0.2384], [0.5943, 0.0128, -0.2384], [-0.4404, 0.0128, -0.0322], [-0.4424, -0.0084, -0.0002], [-0.4424, 0.0128, -0.0002], [0.217, 0.0128, -0.2384], [0.1528, -0.0084, -0.2384], [0.1528, 0.0128, -0.2384], [-0.5905, 0.0128, 0.238], [-0.5262, -0.0084, 0.238], [-0.5262, 0.0128, 0.238], [0.0217, 0.0128, -0.1469], [0.0013, -0.0084, -0.1707], [0.0013, 0.0128, -0.1707], [0.217, 0.0128, 0.1283], [0.217, -0.0084, -0.2384], [0.217, 0.0128, -0.2384], [-0.2819, 0.0128, 0.1576], [-0.3015, -0.0084, 0.1449], [-0.3015, 0.0128, 0.1449], [-0.3737, 0.0128, -0.1709], [-0.3941, -0.0084, -0.1472], [-0.3941, 0.0128, -0.1472], [0.5356, 0.0128, -0.2384], [0.217, -0.0084, 0.1283], [0.217, 0.0128, 0.1283], [-0.3702, 0.0128, -0.0257], [-0.3718, -0.0084, -0.0002], [-0.3702, -0.0084, -0.0257], [-0.5262, 0.0128, 0.238], [-0.5262, -0.0084, -0.2384], [-0.5262, 0.0128, -0.2384], [-0.0025, 0.0128, -0.0257], [-0.0009, -0.0084, -0.0002], [-0.0009, 0.0128, -0.0002], [-0.9034, 0.0128, -0.2384], [-0.9677, -0.0084, -0.2384], [-0.9677, 0.0128, -0.2384], [0.0381, 0.0128, 0.1221], [0.021, -0.0084, 0.1482], [0.0381, -0.0084, 0.1221], [-0.1126, 0.0128, -0.1681], [-0.091, -0.0084, -0.1579], [-0.091, 0.0128, -0.1579], [0.5943, 0.0128, -0.2384], [0.5356, -0.0084, -0.2384], [0.5356, 0.0128, -0.2384], [-0.9034, 0.0128, 0.1283], [-0.9034, -0.0084, -0.2384], [-0.9034, 0.0128, -0.2384], [-0.4104, 0.0128, 0.1218], [-0.3931, -0.0084, 0.1479], [-0.3931, 0.0128, 0.1479], [-0.2242, 0.0128, 0.242], [-0.1867, -0.0084, 0.2443], [-0.1867, 0.0128, 0.2443], [-0.5849, 0.0128, -0.2384], [-0.9034, -0.0084, 0.1283], [-0.9034, 0.0128, 0.1283], [0.0677, 0.0128, -0.032], [0.0696, -0.0084, -0.0002], [0.0677, -0.0084, -0.032], [-0.0537, 0.0128, 0.1299], [-0.0714, -0.0084, 0.1449], [-0.0714, 0.0128, 0.1449], [-0.2819, 0.0128, -0.1579], [-0.2604, -0.0084, -0.1681], [-0.2604, 0.0128, -0.1681], [-0.1867, 0.0128, 0.2443], [-0.1487, -0.0084, 0.242], [-0.1487, 0.0128, 0.242], [-0.5262, 0.0128, -0.2384], [-0.5849, -0.0084, -0.2384], [-0.5849, 0.0128, -0.2384], [-0.1358, 0.0128, -0.1756], [-0.1126, -0.0084, -0.1681], [-0.1126, 0.0128, -0.1681], [-0.3655, 0.0128, -0.0498], [-0.3702, -0.0084, -0.0257], [-0.3655, -0.0084, -0.0498], [-0.1487, 0.0128, 0.242], [-0.1132, -0.0084, 0.2354], [-0.1132, 0.0128, 0.2354], [-0.0072, 0.0128, -0.0498], [-0.0025, -0.0084, -0.0257], [-0.0025, 0.0128, -0.0257], [-0.3015, 0.0128, 0.1449], [-0.3191, -0.0084, 0.1299], [-0.3191, 0.0128, 0.1299], [-0.2593, 0.0128, 0.2353], [-0.2242, -0.0084, 0.242], [-0.2242, 0.0128, 0.242], [-0.0383, 0.0128, 0.1127], [-0.0537, -0.0084, 0.1299], [-0.0537, 0.0128, 0.1299], [-0.2604, 0.0128, -0.1681], [-0.2373, -0.0084, -0.1756], [-0.2373, 0.0128, -0.1756], [0.0618, 0.0128, -0.063], [0.0677, -0.0084, -0.032], [0.0618, -0.0084, -0.063], [0.0013, 0.0128, -0.1707], [-0.0225, -0.0084, -0.1918], [-0.0225, 0.0128, -0.1918], [-0.1132, 0.0128, 0.2354], [-0.0804, -0.0084, 0.2247], [-0.0804, 0.0128, 0.2247], [-0.4344, 0.0128, -0.0632], [-0.4404, -0.0084, -0.0322], [-0.4404, 0.0128, -0.0322], [-0.3191, 0.0128, 0.1299], [-0.3345, -0.0084, 0.1127], [-0.3345, 0.0128, 0.1127], [-0.35, 0.0128, -0.192], [-0.3737, -0.0084, -0.1709], [-0.3737, 0.0128, -0.1709], [-0.2918, 0.0128, 0.2246], [-0.2593, -0.0084, 0.2353], [-0.2593, 0.0128, 0.2353], [0.0517, 0.0128, 0.094], [0.0381, -0.0084, 0.1221], [0.0517, -0.0084, 0.094], [-0.1606, 0.0128, -0.1803], [-0.1358, -0.0084, -0.1756], [-0.1358, 0.0128, -0.1756], [-0.3578, 0.0128, -0.0725], [-0.3655, -0.0084, -0.0498], [-0.3578, -0.0084, -0.0725], [-0.4241, 0.0128, 0.0937], [-0.4104, -0.0084, 0.1218], [-0.4104, 0.0128, 0.1218], [-0.0804, 0.0128, 0.2247], [-0.0504, -0.0084, 0.2104], [-0.0504, 0.0128, 0.2104], [-0.0149, 0.0128, -0.0725], [-0.0072, -0.0084, -0.0498], [-0.0072, 0.0128, -0.0498], [-0.3216, 0.0128, 0.2102], [-0.2918, -0.0084, 0.2246], [-0.2918, 0.0128, 0.2246], [0.699, 0.0128, -0.2384], [0.699, -0.0084, 0.238], [0.699, 0.0128, 0.238], [-0.0253, 0.0128, 0.0934], [-0.0383, -0.0084, 0.1127], [-0.0383, 0.0128, 0.1127], [-0.2373, 0.0128, -0.1756], [-0.2127, -0.0084, -0.1803], [-0.2127, 0.0128, -0.1803], [-0.1867, 0.0128, -0.1818], [-0.1606, -0.0084, -0.1803], [-0.1606, 0.0128, -0.1803], [0.0521, 0.0128, -0.0927], [0.0618, -0.0084, -0.063], [0.0521, -0.0084, -0.0927], [-0.0504, 0.0128, 0.2104], [-0.0234, -0.0084, 0.1926], [-0.0234, 0.0128, 0.1926], [-0.4246, 0.0128, -0.0929], [-0.4344, -0.0084, -0.0632], [-0.4344, 0.0128, -0.0632], [-0.3345, 0.0128, 0.1127], [-0.3474, -0.0084, 0.0934], [-0.3474, 0.0128, 0.0934], [-0.3485, 0.0128, 0.1924], [-0.3216, -0.0084, 0.2102], [-0.3216, 0.0128, 0.2102], [0.699, 0.0128, 0.238], [0.9694, -0.0084, 0.238], [0.9694, 0.0128, 0.238], [-0.2127, 0.0128, -0.1803], [-0.1867, -0.0084, -0.1818], [-0.1867, 0.0128, -0.1818], [-0.0253, 0.0128, -0.0936], [-0.0149, -0.0084, -0.0725], [-0.0149, 0.0128, -0.0725], [0.9694, 0.0128, 0.1765], [0.7675, -0.0084, 0.1765], [0.7675, 0.0128, 0.1765], [0.0517, 0.0128, 0.094], [0.0616, -0.0084, 0.064], [0.0616, 0.0128, 0.064], [0.9694, 0.0128, 0.238], [0.9694, -0.0084, 0.1765], [0.9694, 0.0128, 0.1765], [-0.4342, 0.0128, 0.0637], [-0.4241, -0.0084, 0.0937], [-0.4241, 0.0128, 0.0937], [-0.0234, 0.0128, 0.1926], [0.0004, -0.0084, 0.1718], [0.0004, 0.0128, 0.1718], [-0.0225, 0.0128, -0.1918], [-0.0496, -0.0084, -0.2099], [-0.0496, 0.0128, -0.2099], [-0.3724, 0.0128, 0.1715], [-0.3485, -0.0084, 0.1924], [-0.3485, 0.0128, 0.1924], [-0.3474, 0.0128, -0.0936], [-0.3578, -0.0084, -0.0725], [-0.3474, -0.0084, -0.0936], [0.7675, 0.0128, 0.1765], [0.7675, -0.0084, 0.0326], [0.7675, 0.0128, 0.0326], [-0.0149, 0.0128, 0.0724], [-0.0253, -0.0084, 0.0934], [-0.0253, 0.0128, 0.0934], [-0.3233, 0.0128, -0.21], [-0.35, -0.0084, -0.192], [-0.35, 0.0128, -0.192], [0.0387, 0.0128, -0.1207], [0.0521, -0.0084, -0.0927], [0.0387, -0.0084, -0.1207], [-0.4111, 0.0128, -0.121], [-0.4246, -0.0084, -0.0929], [-0.4246, 0.0128, -0.0929], [-0.3474, 0.0128, 0.0934], [-0.3578, -0.0084, 0.0724], [-0.3578, 0.0128, 0.0724], [-0.0496, 0.0128, -0.2099], [-0.0798, -0.0084, -0.2246], [-0.0798, 0.0128, -0.2246], [0.7675, 0.0128, 0.0326], [0.9624, -0.0084, 0.0326], [0.9624, 0.0128, 0.0326], [-0.0072, 0.0128, 0.0496], [-0.0149, -0.0084, 0.0724], [-0.0149, 0.0128, 0.0724], [-0.2936, 0.0128, -0.2247], [-0.3233, -0.0084, -0.21], [-0.3233, 0.0128, -0.21], [-0.1867, 0.0128, 0.1814], [-0.2127, -0.0084, 0.1798], [-0.2127, 0.0128, 0.1798], [-0.0383, 0.0128, -0.1128], [-0.0253, -0.0084, -0.0936], [-0.0253, 0.0128, -0.0936], [0.9624, 0.0128, -0.0289], [0.7675, -0.0084, -0.0289], [0.7675, 0.0128, -0.0289], [-0.1606, 0.0128, 0.1798], [-0.1867, -0.0084, 0.1814], [-0.1867, 0.0128, 0.1814], [0.9624, 0.0128, -0.0289], [0.9624, -0.0084, 0.0326], [0.9624, -0.0084, -0.0289], [-0.3655, 0.0128, 0.0496], [-0.3578, -0.0084, 0.0724], [-0.3655, -0.0084, 0.0496], [-0.0798, 0.0128, -0.2246], [-0.113, -0.0084, -0.2355], [-0.113, 0.0128, -0.2355], [-0.1358, 0.0128, 0.1752], [-0.1606, -0.0084, 0.1798], [-0.1606, 0.0128, 0.1798], [-0.3345, 0.0128, -0.1128], [-0.3474, -0.0084, -0.0936], [-0.3345, -0.0084, -0.1128], [0.7675, 0.0128, -0.177], [0.7675, -0.0084, -0.0289], [0.7675, -0.0084, -0.177], [-0.261, 0.0128, -0.2356], [-0.2936, -0.0084, -0.2247], [-0.2936, 0.0128, -0.2247], [-0.0537, 0.0128, -0.1301], [-0.0383, -0.0084, -0.1128], [-0.0383, 0.0128, -0.1128], [0.0676, 0.0128, 0.0325], [0.0616, -0.0084, 0.064], [0.0676, -0.0084, 0.0325], [0.7675, 0.0128, -0.177], [0.9757, -0.0084, -0.177], [0.9757, 0.0128, -0.177], [-0.4403, 0.0128, 0.0323], [-0.4342, -0.0084, 0.0637], [-0.4342, 0.0128, 0.0637], [-0.2127, 0.0128, 0.1798], [-0.2373, -0.0084, 0.1752], [-0.2373, 0.0128, 0.1752], [0.9757, 0.0128, -0.2384], [0.699, -0.0084, -0.2384], [0.699, 0.0128, -0.2384], [-0.113, 0.0128, -0.2355], [-0.1491, -0.0084, -0.2424], [-0.1491, 0.0128, -0.2424], [-0.1126, 0.0128, 0.1677], [-0.1358, -0.0084, 0.1752], [-0.1358, 0.0128, 0.1752], [-0.3345, 0.0128, -0.1128], [-0.3191, -0.0084, -0.1301], [-0.3191, 0.0128, -0.1301], [0.9757, 0.0128, -0.177], [0.9757, -0.0084, -0.2384], [0.9757, 0.0128, -0.2384], [-0.0025, 0.0128, 0.0254], [-0.0072, -0.0084, 0.0496], [-0.0072, 0.0128, 0.0496], [-0.2258, 0.0128, -0.2424], [-0.261, -0.0084, -0.2356], [-0.261, 0.0128, -0.2356], [0.1528, 0.0128, -0.2384], [0.1528, -0.0084, 0.238], [0.1528, 0.0128, 0.238], [0.0387, 0.0128, -0.1207], [0.0387, -0.0084, -0.1207], [0.0217, -0.0084, -0.1469], [-0.1881, 0.0128, -0.2447], [-0.1881, -0.0084, -0.2447], [-0.2258, -0.0084, -0.2424], [-0.2373, 0.0128, 0.1752], [-0.2373, -0.0084, 0.1752], [-0.2604, -0.0084, 0.1677], [-0.3941, 0.0128, -0.1472], [-0.3941, -0.0084, -0.1472], [-0.4111, -0.0084, -0.121], [0.1528, 0.0128, 0.238], [0.1528, -0.0084, 0.238], [0.2073, -0.0084, 0.238], [-0.3702, 0.0128, 0.0254], [-0.3655, 0.0128, 0.0496], [-0.3655, -0.0084, 0.0496], [-0.1491, 0.0128, -0.2424], [-0.1491, -0.0084, -0.2424], [-0.1881, -0.0084, -0.2447], [-0.9677, 0.0128, -0.2384], [-0.9677, -0.0084, -0.2384], [-0.9677, -0.0084, 0.238], [0.0004, 0.0128, 0.1718], [0.0004, -0.0084, 0.1718], [0.021, -0.0084, 0.1482], [-0.0714, 0.0128, -0.1452], [-0.0714, -0.0084, -0.1452], [-0.0537, -0.0084, -0.1301], [0.0696, 0.0128, -0.0002], [0.0676, 0.0128, 0.0325], [0.0676, -0.0084, 0.0325], [-0.3931, 0.0128, 0.1479], [-0.3931, -0.0084, 0.1479], [-0.3724, -0.0084, 0.1715], [-0.4424, 0.0128, -0.0002], [-0.4424, -0.0084, -0.0002], [-0.4403, -0.0084, 0.0323], [-0.9677, 0.0128, 0.238], [-0.9677, -0.0084, 0.238], [-0.9132, -0.0084, 0.238], [0.2073, 0.0128, 0.238], [0.2073, -0.0084, 0.238], [0.53, -0.0084, -0.1309], [-0.091, 0.0128, 0.1576], [-0.091, -0.0084, 0.1576], [-0.1126, -0.0084, 0.1677], [-0.3191, 0.0128, -0.1301], [-0.3191, -0.0084, -0.1301], [-0.3015, -0.0084, -0.1452], [0.53, 0.0128, -0.1309], [0.53, -0.0084, -0.1309], [0.53, -0.0084, 0.238], [-0.0009, 0.0128, -0.0002], [-0.0009, -0.0084, -0.0002], [-0.0025, -0.0084, 0.0254], [-0.091, 0.0128, -0.1579], [-0.091, -0.0084, -0.1579], [-0.0714, -0.0084, -0.1452], [0.53, 0.0128, 0.238], [0.53, -0.0084, 0.238], [0.5943, -0.0084, 0.238], [-0.9132, 0.0128, 0.238], [-0.9132, -0.0084, 0.238], [-0.5905, -0.0084, -0.1309], [-0.2604, 0.0128, 0.1677], [-0.2604, -0.0084, 0.1677], [-0.2819, -0.0084, 0.1576], [-0.3718, 0.0128, -0.0002], [-0.3702, 0.0128, 0.0254], [-0.3702, -0.0084, 0.0254], [-0.5905, 0.0128, -0.1309], [-0.5905, -0.0084, -0.1309], [-0.5905, -0.0084, 0.238], [-0.0714, 0.0128, 0.1449], [-0.0714, -0.0084, 0.1449], [-0.091, -0.0084, 0.1576], [-0.3015, 0.0128, -0.1452], [-0.3015, -0.0084, -0.1452], [-0.2819, -0.0084, -0.1579], [0.5943, 0.0128, 0.238], [0.5943, -0.0084, 0.238], [0.5943, -0.0084, -0.2384], [-0.4404, 0.0128, -0.0322], [-0.4404, -0.0084, -0.0322], [-0.4424, -0.0084, -0.0002], [0.217, 0.0128, -0.2384], [0.217, -0.0084, -0.2384], [0.1528, -0.0084, -0.2384], [-0.5905, 0.0128, 0.238], [-0.5905, -0.0084, 0.238], [-0.5262, -0.0084, 0.238], [0.0217, 0.0128, -0.1469], [0.0217, -0.0084, -0.1469], [0.0013, -0.0084, -0.1707], [0.217, 0.0128, 0.1283], [0.217, -0.0084, 0.1283], [0.217, -0.0084, -0.2384], [-0.2819, 0.0128, 0.1576], [-0.2819, -0.0084, 0.1576], [-0.3015, -0.0084, 0.1449], [-0.3737, 0.0128, -0.1709], [-0.3737, -0.0084, -0.1709], [-0.3941, -0.0084, -0.1472], [0.5356, 0.0128, -0.2384], [0.5356, -0.0084, -0.2384], [0.217, -0.0084, 0.1283], [-0.3702, 0.0128, -0.0257], [-0.3718, 0.0128, -0.0002], [-0.3718, -0.0084, -0.0002], [-0.5262, 0.0128, 0.238], [-0.5262, -0.0084, 0.238], [-0.5262, -0.0084, -0.2384], [-0.0025, 0.0128, -0.0257], [-0.0025, -0.0084, -0.0257], [-0.0009, -0.0084, -0.0002], [-0.9034, 0.0128, -0.2384], [-0.9034, -0.0084, -0.2384], [-0.9677, -0.0084, -0.2384], [0.0381, 0.0128, 0.1221], [0.021, 0.0128, 0.1482], [0.021, -0.0084, 0.1482], [-0.1126, 0.0128, -0.1681], [-0.1126, -0.0084, -0.1681], [-0.091, -0.0084, -0.1579], [0.5943, 0.0128, -0.2384], [0.5943, -0.0084, -0.2384], [0.5356, -0.0084, -0.2384], [-0.9034, 0.0128, 0.1283], [-0.9034, -0.0084, 0.1283], [-0.9034, -0.0084, -0.2384], [-0.4104, 0.0128, 0.1218], [-0.4104, -0.0084, 0.1218], [-0.3931, -0.0084, 0.1479], [-0.2242, 0.0128, 0.242], [-0.2242, -0.0084, 0.242], [-0.1867, -0.0084, 0.2443], [-0.5849, 0.0128, -0.2384], [-0.5849, -0.0084, -0.2384], [-0.9034, -0.0084, 0.1283], [0.0677, 0.0128, -0.032], [0.0696, 0.0128, -0.0002], [0.0696, -0.0084, -0.0002], [-0.0537, 0.0128, 0.1299], [-0.0537, -0.0084, 0.1299], [-0.0714, -0.0084, 0.1449], [-0.2819, 0.0128, -0.1579], [-0.2819, -0.0084, -0.1579], [-0.2604, -0.0084, -0.1681], [-0.1867, 0.0128, 0.2443], [-0.1867, -0.0084, 0.2443], [-0.1487, -0.0084, 0.242], [-0.5262, 0.0128, -0.2384], [-0.5262, -0.0084, -0.2384], [-0.5849, -0.0084, -0.2384], [-0.1358, 0.0128, -0.1756], [-0.1358, -0.0084, -0.1756], [-0.1126, -0.0084, -0.1681], [-0.3655, 0.0128, -0.0498], [-0.3702, 0.0128, -0.0257], [-0.3702, -0.0084, -0.0257], [-0.1487, 0.0128, 0.242], [-0.1487, -0.0084, 0.242], [-0.1132, -0.0084, 0.2354], [-0.0072, 0.0128, -0.0498], [-0.0072, -0.0084, -0.0498], [-0.0025, -0.0084, -0.0257], [-0.3015, 0.0128, 0.1449], [-0.3015, -0.0084, 0.1449], [-0.3191, -0.0084, 0.1299], [-0.2593, 0.0128, 0.2353], [-0.2593, -0.0084, 0.2353], [-0.2242, -0.0084, 0.242], [-0.0383, 0.0128, 0.1127], [-0.0383, -0.0084, 0.1127], [-0.0537, -0.0084, 0.1299], [-0.2604, 0.0128, -0.1681], [-0.2604, -0.0084, -0.1681], [-0.2373, -0.0084, -0.1756], [0.0618, 0.0128, -0.063], [0.0677, 0.0128, -0.032], [0.0677, -0.0084, -0.032], [0.0013, 0.0128, -0.1707], [0.0013, -0.0084, -0.1707], [-0.0225, -0.0084, -0.1918], [-0.1132, 0.0128, 0.2354], [-0.1132, -0.0084, 0.2354], [-0.0804, -0.0084, 0.2247], [-0.4344, 0.0128, -0.0632], [-0.4344, -0.0084, -0.0632], [-0.4404, -0.0084, -0.0322], [-0.3191, 0.0128, 0.1299], [-0.3191, -0.0084, 0.1299], [-0.3345, -0.0084, 0.1127], [-0.35, 0.0128, -0.192], [-0.35, -0.0084, -0.192], [-0.3737, -0.0084, -0.1709], [-0.2918, 0.0128, 0.2246], [-0.2918, -0.0084, 0.2246], [-0.2593, -0.0084, 0.2353], [0.0517, 0.0128, 0.094], [0.0381, 0.0128, 0.1221], [0.0381, -0.0084, 0.1221], [-0.1606, 0.0128, -0.1803], [-0.1606, -0.0084, -0.1803], [-0.1358, -0.0084, -0.1756], [-0.3578, 0.0128, -0.0725], [-0.3655, 0.0128, -0.0498], [-0.3655, -0.0084, -0.0498], [-0.4241, 0.0128, 0.0937], [-0.4241, -0.0084, 0.0937], [-0.4104, -0.0084, 0.1218], [-0.0804, 0.0128, 0.2247], [-0.0804, -0.0084, 0.2247], [-0.0504, -0.0084, 0.2104], [-0.0149, 0.0128, -0.0725], [-0.0149, -0.0084, -0.0725], [-0.0072, -0.0084, -0.0498], [-0.3216, 0.0128, 0.2102], [-0.3216, -0.0084, 0.2102], [-0.2918, -0.0084, 0.2246], [0.699, 0.0128, -0.2384], [0.699, -0.0084, -0.2384], [0.699, -0.0084, 0.238], [-0.0253, 0.0128, 0.0934], [-0.0253, -0.0084, 0.0934], [-0.0383, -0.0084, 0.1127], [-0.2373, 0.0128, -0.1756], [-0.2373, -0.0084, -0.1756], [-0.2127, -0.0084, -0.1803], [-0.1867, 0.0128, -0.1818], [-0.1867, -0.0084, -0.1818], [-0.1606, -0.0084, -0.1803], [0.0521, 0.0128, -0.0927], [0.0618, 0.0128, -0.063], [0.0618, -0.0084, -0.063], [-0.0504, 0.0128, 0.2104], [-0.0504, -0.0084, 0.2104], [-0.0234, -0.0084, 0.1926], [-0.4246, 0.0128, -0.0929], [-0.4246, -0.0084, -0.0929], [-0.4344, -0.0084, -0.0632], [-0.3345, 0.0128, 0.1127], [-0.3345, -0.0084, 0.1127], [-0.3474, -0.0084, 0.0934], [-0.3485, 0.0128, 0.1924], [-0.3485, -0.0084, 0.1924], [-0.3216, -0.0084, 0.2102], [0.699, 0.0128, 0.238], [0.699, -0.0084, 0.238], [0.9694, -0.0084, 0.238], [-0.2127, 0.0128, -0.1803], [-0.2127, -0.0084, -0.1803], [-0.1867, -0.0084, -0.1818], [-0.0253, 0.0128, -0.0936], [-0.0253, -0.0084, -0.0936], [-0.0149, -0.0084, -0.0725], [0.9694, 0.0128, 0.1765], [0.9694, -0.0084, 0.1765], [0.7675, -0.0084, 0.1765], [0.0517, 0.0128, 0.094], [0.0517, -0.0084, 0.094], [0.0616, -0.0084, 0.064], [0.9694, 0.0128, 0.238], [0.9694, -0.0084, 0.238], [0.9694, -0.0084, 0.1765], [-0.4342, 0.0128, 0.0637], [-0.4342, -0.0084, 0.0637], [-0.4241, -0.0084, 0.0937], [-0.0234, 0.0128, 0.1926], [-0.0234, -0.0084, 0.1926], [0.0004, -0.0084, 0.1718], [-0.0225, 0.0128, -0.1918], [-0.0225, -0.0084, -0.1918], [-0.0496, -0.0084, -0.2099], [-0.3724, 0.0128, 0.1715], [-0.3724, -0.0084, 0.1715], [-0.3485, -0.0084, 0.1924], [-0.3474, 0.0128, -0.0936], [-0.3578, 0.0128, -0.0725], [-0.3578, -0.0084, -0.0725], [0.7675, 0.0128, 0.1765], [0.7675, -0.0084, 0.1765], [0.7675, -0.0084, 0.0326], [-0.0149, 0.0128, 0.0724], [-0.0149, -0.0084, 0.0724], [-0.0253, -0.0084, 0.0934], [-0.3233, 0.0128, -0.21], [-0.3233, -0.0084, -0.21], [-0.35, -0.0084, -0.192], [0.0387, 0.0128, -0.1207], [0.0521, 0.0128, -0.0927], [0.0521, -0.0084, -0.0927], [-0.4111, 0.0128, -0.121], [-0.4111, -0.0084, -0.121], [-0.4246, -0.0084, -0.0929], [-0.3474, 0.0128, 0.0934], [-0.3474, -0.0084, 0.0934], [-0.3578, -0.0084, 0.0724], [-0.0496, 0.0128, -0.2099], [-0.0496, -0.0084, -0.2099], [-0.0798, -0.0084, -0.2246], [0.7675, 0.0128, 0.0326], [0.7675, -0.0084, 0.0326], [0.9624, -0.0084, 0.0326], [-0.0072, 0.0128, 0.0496], [-0.0072, -0.0084, 0.0496], [-0.0149, -0.0084, 0.0724], [-0.2936, 0.0128, -0.2247], [-0.2936, -0.0084, -0.2247], [-0.3233, -0.0084, -0.21], [-0.1867, 0.0128, 0.1814], [-0.1867, -0.0084, 0.1814], [-0.2127, -0.0084, 0.1798], [-0.0383, 0.0128, -0.1128], [-0.0383, -0.0084, -0.1128], [-0.0253, -0.0084, -0.0936], [0.9624, 0.0128, -0.0289], [0.9624, -0.0084, -0.0289], [0.7675, -0.0084, -0.0289], [-0.1606, 0.0128, 0.1798], [-0.1606, -0.0084, 0.1798], [-0.1867, -0.0084, 0.1814], [0.9624, 0.0128, -0.0289], [0.9624, 0.0128, 0.0326], [0.9624, -0.0084, 0.0326], [-0.3655, 0.0128, 0.0496], [-0.3578, 0.0128, 0.0724], [-0.3578, -0.0084, 0.0724], [-0.0798, 0.0128, -0.2246], [-0.0798, -0.0084, -0.2246], [-0.113, -0.0084, -0.2355], [-0.1358, 0.0128, 0.1752], [-0.1358, -0.0084, 0.1752], [-0.1606, -0.0084, 0.1798], [-0.3345, 0.0128, -0.1128], [-0.3474, 0.0128, -0.0936], [-0.3474, -0.0084, -0.0936], [0.7675, 0.0128, -0.177], [0.7675, 0.0128, -0.0289], [0.7675, -0.0084, -0.0289], [-0.261, 0.0128, -0.2356], [-0.261, -0.0084, -0.2356], [-0.2936, -0.0084, -0.2247], [-0.0537, 0.0128, -0.1301], [-0.0537, -0.0084, -0.1301], [-0.0383, -0.0084, -0.1128], [0.0676, 0.0128, 0.0325], [0.0616, 0.0128, 0.064], [0.0616, -0.0084, 0.064], [0.7675, 0.0128, -0.177], [0.7675, -0.0084, -0.177], [0.9757, -0.0084, -0.177], [-0.4403, 0.0128, 0.0323], [-0.4403, -0.0084, 0.0323], [-0.4342, -0.0084, 0.0637], [-0.2127, 0.0128, 0.1798], [-0.2127, -0.0084, 0.1798], [-0.2373, -0.0084, 0.1752], [0.9757, 0.0128, -0.2384], [0.9757, -0.0084, -0.2384], [0.699, -0.0084, -0.2384], [-0.113, 0.0128, -0.2355], [-0.113, -0.0084, -0.2355], [-0.1491, -0.0084, -0.2424], [-0.1126, 0.0128, 0.1677], [-0.1126, -0.0084, 0.1677], [-0.1358, -0.0084, 0.1752], [-0.3345, 0.0128, -0.1128], [-0.3345, -0.0084, -0.1128], [-0.3191, -0.0084, -0.1301], [0.9757, 0.0128, -0.177], [0.9757, -0.0084, -0.177], [0.9757, -0.0084, -0.2384], [-0.0025, 0.0128, 0.0254], [-0.0025, -0.0084, 0.0254], [-0.0072, -0.0084, 0.0496], [-0.2258, 0.0128, -0.2424], [-0.2258, -0.0084, -0.2424], [-0.261, -0.0084, -0.2356], [0.1528, 0.0128, -0.2384], [0.1528, -0.0084, -0.2384], [0.1528, -0.0084, 0.238]], "Box_GizmoGroup_": [[-0.329, -0.329, 0.329], [-0.329, 0.329, -0.329], [-0.329, -0.329, -0.329], [-0.329, 0.329, 0.329], [0.329, 0.329, -0.329], [-0.329, 0.329, -0.329], [0.329, 0.329, 0.329], [0.329, -0.329, -0.329], [0.329, 0.329, -0.329], [0.329, -0.329, 0.329], [-0.329, -0.329, -0.329], [0.329, -0.329, -0.329], [0.329, 0.329, -0.329], [-0.329, -0.329, -0.329], [-0.329, 0.329, -0.329], [-0.329, 0.329, 0.329], [0.329, -0.329, 0.329], [0.329, 0.329, 0.329], [-0.329, -0.329, 0.329], [-0.329, 0.329, 0.329], [-0.329, 0.329, -0.329], [-0.329, 0.329, 0.329], [0.329, 0.329, 0.329], [0.329, 0.329, -0.329], [0.329, 0.329, 0.329], [0.329, -0.329, 0.329], [0.329, -0.329, -0.329], [0.329, -0.329, 0.329], [-0.329, -0.329, 0.329], [-0.329, -0.329, -0.329], [0.329, 0.329, -0.329], [0.329, -0.329, -0.329], [-0.329, -0.329, -0.329], [-0.329, 0.329, 0.329], [-0.329, -0.329, 0.329], [0.329, -0.329, 0.329]]} \ No newline at end of file +{"SimpleDeform_GizmoGroup_": [[-0.5, 0.1, -1.0], [-0.5, -0.8, -0.2], [-0.5, 0.2, -0.6], [0.5, 0.4, -0.4], [-0.5, 1.0, -0.1], [0.5, 1.0, -0.1], [0.3, -0.3, 0.5], [0.5, -0.4, 0.4], [0.5, 1.0, 1.0], [0.5, -1.0, -1.0], [-0.5, 0.1, -1.0], [0.5, 0.1, -1.0], [0.5, 1.0, -0.1], [-0.5, 1.0, 1.0], [0.5, 1.0, 1.0], [-0.5, 0.2, -0.6], [-0.5, -0.4, 0.4], [-0.5, 0.4, -0.4], [0.5, 0.2, -0.6], [-0.5, 0.4, -0.4], [0.5, 0.4, -0.4], [0.3, -0.9, -0.7], [-0.3, -0.9, -0.7], [-0.5, -1.0, -1.0], [0.5, 0.1, -1.0], [-0.5, 0.2, -0.6], [0.5, 0.2, -0.6], [0.3, -0.9, 1.0], [0.3, -0.9, -0.7], [0.3, -0.8, -0.2], [0.3, -0.9, -0.7], [0.3, -0.9, 1.0], [-0.3, -0.9, -0.7], [-0.3, -0.3, 0.5], [0.3, -0.3, 1.0], [0.3, -0.3, 0.5], [0.5, -0.4, 0.4], [0.5, -0.8, -0.2], [0.5, 0.4, -0.4], [0.3, -0.8, -0.2], [0.5, -0.4, 0.4], [0.3, -0.3, 0.5], [-0.5, -0.4, 0.4], [-0.3, -0.8, -0.2], [-0.3, -0.3, 0.5], [-0.5, -0.4, 0.4], [-0.5, 1.0, -0.1], [-0.5, 0.4, -0.4], [0.3, -0.9, 1.0], [-0.3, -0.3, 0.5], [-0.3, -0.8, -0.2], [-0.5, 0.1, -1.0], [-0.5, -1.0, -1.0], [-0.5, -0.8, -0.2], [0.5, 0.4, -0.4], [-0.5, 0.4, -0.4], [-0.5, 1.0, -0.1], [0.5, 1.0, 1.0], [-0.5, 1.0, 1.0], [0.3, -0.3, 0.5], [-0.5, 1.0, 1.0], [-0.5, -0.4, 0.4], [-0.3, -0.3, 0.5], [-0.5, 1.0, 1.0], [-0.3, -0.3, 0.5], [0.3, -0.3, 0.5], [0.5, -1.0, -1.0], [-0.5, -1.0, -1.0], [-0.5, 0.1, -1.0], [0.5, 1.0, -0.1], [-0.5, 1.0, -0.1], [-0.5, 1.0, 1.0], [-0.5, 0.2, -0.6], [-0.5, -0.8, -0.2], [-0.5, -0.4, 0.4], [0.5, 0.2, -0.6], [-0.5, 0.2, -0.6], [-0.5, 0.4, -0.4], [0.5, -1.0, -1.0], [0.5, -0.8, -0.2], [0.3, -0.9, -0.7], [0.5, -0.8, -0.2], [0.3, -0.8, -0.2], [0.3, -0.9, -0.7], [-0.3, -0.8, -0.2], [-0.5, -0.8, -0.2], [-0.3, -0.9, -0.7], [-0.5, -0.8, -0.2], [-0.5, -1.0, -1.0], [-0.3, -0.9, -0.7], [0.5, -1.0, -1.0], [0.3, -0.9, -0.7], [-0.5, -1.0, -1.0], [0.5, 0.1, -1.0], [-0.5, 0.1, -1.0], [-0.5, 0.2, -0.6], [0.3, -0.8, -0.2], [0.3, -0.3, 0.5], [0.3, -0.9, 1.0], [0.3, -0.3, 0.5], [0.3, -0.3, 1.0], [0.3, -0.9, 1.0], [0.5, -1.0, -1.0], [0.5, 0.1, -1.0], [0.5, 0.2, -0.6], [0.5, 0.4, -0.4], [0.5, 1.0, -0.1], [0.5, -0.4, 0.4], [0.5, 1.0, -0.1], [0.5, 1.0, 1.0], [0.5, -0.4, 0.4], [0.5, -1.0, -1.0], [0.5, 0.2, -0.6], [0.5, -0.8, -0.2], [0.5, 0.2, -0.6], [0.5, 0.4, -0.4], [0.5, -0.8, -0.2], [0.3, -0.8, -0.2], [0.5, -0.8, -0.2], [0.5, -0.4, 0.4], [-0.5, -0.4, 0.4], [-0.5, -0.8, -0.2], [-0.3, -0.8, -0.2], [-0.5, -0.4, 0.4], [-0.5, 1.0, 1.0], [-0.5, 1.0, -0.1], [-0.3, -0.8, -0.2], [-0.3, -0.9, -0.7], [0.3, -0.9, 1.0], [0.3, -0.9, 1.0], [0.3, -0.3, 1.0], [-0.3, -0.3, 0.5]], "None_GizmoGroup_": [[1.0, -0.0, 0.2], [1.0, -0.0, -0.2], [1.0, -0.0, -0.0], [0.5, -0.0, 0.2], [0.2, -0.0, 0.2], [0.2, -0.0, -0.2], [-0.6, -0.0, 0.2], [-1.0, -0.0, 0.2], [-0.9, -0.0, -0.2], [-0.2, -0.0, 0.3], [-0.1, -0.0, 0.2], [-0.1, -0.0, 0.2], [-0.4, -0.0, 0.1], [-0.3, -0.0, 0.2], [-0.3, -0.0, 0.2], [0.1, -0.0, -0.0], [-0.0, -0.0, -0.1], [0.0, -0.0, -0.1], [-0.2, -0.0, -0.3], [-0.3, 0.0, -0.2], [-0.3, 0.0, -0.2], [-0.4, -0.0, 0.1], [-0.4, -0.0, -0.0], [-0.4, -0.0, 0.1], [0.1, -0.0, -0.0], [-0.0, -0.0, 0.1], [0.0, -0.0, -0.0], [-0.1, 0.0, -0.2], [-0.2, -0.0, -0.2], [-0.2, -0.0, -0.3], [-0.4, -0.0, -0.1], [-0.4, -0.0, -0.0], [-0.4, -0.0, -0.0], [-0.1, -0.0, 0.2], [-0.0, -0.0, 0.1], [0.0, -0.0, 0.1], [-0.3, -0.0, 0.2], [-0.2, -0.0, 0.2], [-0.2, -0.0, 0.3], [0.0, -0.0, -0.1], [-0.1, 0.0, -0.2], [-0.1, 0.0, -0.2], [-0.4, -0.0, -0.1], [-0.3, 0.0, -0.2], [-0.4, -0.0, -0.1], [-0.2, -0.0, 0.3], [-0.2, -0.0, 0.2], [-0.1, -0.0, 0.2], [-0.4, -0.0, 0.1], [-0.4, -0.0, 0.1], [-0.3, -0.0, 0.2], [0.1, -0.0, -0.0], [0.0, -0.0, -0.0], [-0.0, -0.0, -0.1], [-0.2, -0.0, -0.3], [-0.2, -0.0, -0.2], [-0.3, 0.0, -0.2], [-0.4, -0.0, 0.1], [-0.4, -0.0, -0.0], [-0.4, -0.0, -0.0], [0.1, -0.0, -0.0], [0.0, -0.0, 0.1], [-0.0, -0.0, 0.1], [-0.1, 0.0, -0.2], [-0.1, 0.0, -0.2], [-0.2, -0.0, -0.2], [-0.4, -0.0, -0.1], [-0.4, -0.0, -0.1], [-0.4, -0.0, -0.0], [-0.1, -0.0, 0.2], [-0.1, -0.0, 0.2], [-0.0, -0.0, 0.1], [-0.3, -0.0, 0.2], [-0.3, -0.0, 0.2], [-0.2, -0.0, 0.2], [0.0, -0.0, -0.1], [-0.0, -0.0, -0.1], [-0.1, 0.0, -0.2], [-0.4, -0.0, -0.1], [-0.3, 0.0, -0.2], [-0.3, 0.0, -0.2]], "SimpleDeform_Bend_Direction_": [[-2.5, 0.4, 1.0], [-3.0, -0.0, 1.7], [-2.5, -0.4, 1.0], [2.5, 0.4, 1.0], [2.5, -0.4, 1.0], [3.0, -0.0, 1.7], [1.3, 0.1, 0.4], [1.9, -0.1, 0.7], [1.9, 0.1, 0.7], [-2.5, -0.4, 1.0], [-1.3, 0.1, 0.4], [-2.5, 0.4, 1.0], [1.9, -0.1, 0.7], [2.5, 0.4, 1.0], [1.9, 0.1, 0.7], [0.0, 0.1, 0.3], [-1.3, -0.1, 0.4], [0.0, -0.1, 0.3], [1.3, -0.1, 0.4], [0.0, 0.1, 0.3], [0.0, -0.1, 0.3], [1.3, 0.1, 0.4], [1.3, -0.1, 0.4], [1.9, -0.1, 0.7], [-2.5, -0.4, 1.0], [-1.3, -0.1, 0.4], [-1.3, 0.1, 0.4], [1.9, -0.1, 0.7], [2.5, -0.4, 1.0], [2.5, 0.4, 1.0], [0.0, 0.1, 0.3], [-1.3, 0.1, 0.4], [-1.3, -0.1, 0.4], [1.3, -0.1, 0.4], [1.3, 0.1, 0.4], [0.0, 0.1, 0.3]], "Sphere_GizmoGroup_": [[0.7, -0.7, 0.0], [-0.7, 0.7, 0.0], [-0.7, -0.7, 0.0], [0.7, -0.7, 0.0], [0.7, 0.7, 0.0], [-0.7, 0.7, 0.0]]} \ No newline at end of file -- 2.30.2 From d6a4326ee3afb64915c87d5dcad86793b7e689f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=90=8C=E6=96=B0?= <3209970865@qq.com> Date: Thu, 23 Mar 2023 01:11:34 +0800 Subject: [PATCH 07/24] header only show method, axis, and angle Other properties are displayed to VIEW3D_HT_tool_header and VIEW3D_PT_tools_object_options --- simple_deform_helper/__init__.py | 13 +- simple_deform_helper/data.py | 58 -- simple_deform_helper/draw.py | 55 +- simple_deform_helper/gizmo.py | 620 ------------------ simple_deform_helper/gizmo/__init__.py | 96 +++ simple_deform_helper/gizmo/bend_axis.py | 107 +++ simple_deform_helper/gizmo/ctrl_tow_point.py | 341 ++++++++++ .../gizmo/ctrl_value_and_factor.py | 132 ++++ simple_deform_helper/operators.py | 12 +- simple_deform_helper/panel.py | 6 +- simple_deform_helper/preferences.py | 13 +- simple_deform_helper/utils.py | 579 ++++++++-------- 12 files changed, 1027 insertions(+), 1005 deletions(-) delete mode 100644 simple_deform_helper/data.py delete mode 100644 simple_deform_helper/gizmo.py create mode 100644 simple_deform_helper/gizmo/__init__.py create mode 100644 simple_deform_helper/gizmo/bend_axis.py create mode 100644 simple_deform_helper/gizmo/ctrl_tow_point.py create mode 100644 simple_deform_helper/gizmo/ctrl_value_and_factor.py diff --git a/simple_deform_helper/__init__.py b/simple_deform_helper/__init__.py index 8b94dbebf..9a9052c8d 100644 --- a/simple_deform_helper/__init__.py +++ b/simple_deform_helper/__init__.py @@ -1,5 +1,13 @@ # SPDX-License-Identifier: GPL-2.0-or-later -from . import gizmo, operators, preferences, data, update, translate, panel +from . import ( + panel, # + gizmo, + utils, + update, + translate, + operators, + preferences, +) bl_info = { "name": "SimpleDeformHelper", @@ -15,6 +23,7 @@ bl_info = { module_tuple = ( panel, gizmo, + utils, update, translate, operators, @@ -23,8 +32,6 @@ module_tuple = ( def register(): - data.Data.load_gizmo_data() - for item in module_tuple: item.register() diff --git a/simple_deform_helper/data.py b/simple_deform_helper/data.py deleted file mode 100644 index 4da383ab7..000000000 --- a/simple_deform_helper/data.py +++ /dev/null @@ -1,58 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -from os.path import dirname, basename, realpath - -G_MODIFIERS_PROPERTY = [ # copy modifier data - 'angle', - 'deform_axis', - 'deform_method', - 'factor', - 'invert_vertex_group', - 'limits', - 'lock_x', - 'lock_y', - 'lock_z', - 'origin', - 'show_expanded', - 'show_in_editmode', - 'vertex_group', -] - -G_INDICES = ( - (0, 1), (0, 2), (1, 3), (2, 3), - (4, 5), (4, 6), (5, 7), (6, 7), - (0, 4), (1, 5), (2, 6), (3, 7)) - -G_NAME = 'ViewSimpleDeformGizmo_' # Temporary use files -G_CON_LIMIT_NAME = G_NAME + 'constraints_limit_rotation' # 约束名称 -G_ADDON_NAME = basename(dirname(realpath(__file__))) # "simple_deform_helper" - - -class Data: - G_GizmoCustomShapeDict = {} - G_SimpleDeformGizmoHandlerDit = {} - - @classmethod - def load_gizmo_data(cls) -> None: - import json - import os - json_path = os.path.join(os.path.dirname(__file__), "gizmo.json") - with open(json_path, "r") as file: - cls.G_GizmoCustomShapeDict = json.load(file) - - @staticmethod - def from_bmesh_get_triangle_face_co(mesh: 'bpy.types.Mesh') -> list: - """ - :param mesh: 输入一个网格数据 - :type mesh: bpy.data.meshes - :return list: 反回顶点列表[[co1,co2,co3],[co1,co2,co3]...] - """ - import bmesh - - bm = bmesh.new() - bm.from_mesh(mesh) - bm.faces.ensure_lookup_table() - bm.verts.ensure_lookup_table() - bmesh.ops.triangulate(bm, faces=bm.faces) - co_list = [list(float(format(j, ".4f")) for j in vert.co) for face in bm.faces for vert in face.verts] - bm.free() - return co_list diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index 9fb5a674b..54d74b53e 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -5,23 +5,18 @@ import gpu from gpu_extras.batch import batch_for_shader from mathutils import Vector -from .data import G_INDICES, G_MODIFIERS_PROPERTY, G_NAME, Data -from .utils import PublicClass, Utils +from .utils import PublicUtils -class Handler(Data): +class Handler: @classmethod def add_handler(cls): - """向3d视图添加绘制handler - 并将其存储下来 - """ if 'handler' not in cls.G_SimpleDeformGizmoHandlerDit: cls.G_SimpleDeformGizmoHandlerDit['handler'] = bpy.types.SpaceView3D.draw_handler_add( Draw3D.draw_bound_box, (), 'WINDOW', 'POST_VIEW') @classmethod def del_handler_text(cls): - if 'handler_text' in cls.G_SimpleDeformGizmoHandlerDit: bpy.types.SpaceView3D.draw_handler_remove( cls.G_SimpleDeformGizmoHandlerDit['handler_text'], 'WINDOW') @@ -30,11 +25,11 @@ class Handler(Data): @classmethod def del_handler(cls): data = bpy.data - if data.meshes.get(G_NAME): - data.meshes.remove(data.meshes.get(G_NAME)) + if data.meshes.get(cls.G_NAME): + data.meshes.remove(data.meshes.get(cls.G_NAME)) - if data.objects.get(G_NAME): - data.objects.remove(data.objects.get(G_NAME)) + if data.objects.get(cls.G_NAME): + data.objects.remove(data.objects.get(cls.G_NAME)) cls.del_handler_text() @@ -44,23 +39,9 @@ class Handler(Data): cls.G_SimpleDeformGizmoHandlerDit.clear() -class Draw3D(PublicClass, Data): - +class Draw3D(PublicUtils): @classmethod def draw_3d_shader(cls, pos, indices, color=None, *, shader_name='3D_UNIFORM_COLOR', draw_type='LINES'): - """ - :param draw_type: - :param shader_name: - :param color: - :param indices: - :param pos: - :type pos:list ((0,0,0),(1,1,1)) - 2D_FLAT_COLOR - 2D_IMAGE - 2D_SMOOTH_COLOR - 2D_UNIFORM_COLOR - 3D_FLAT_COLOR - 3D_SMOOTH_COLOR - 3D_UNIFORM_COLOR - 3D_POLYLINE_FLAT_COLOR - 3D_POLYLINE_SMOOTH_COLOR - 3D_POLYLINE_UNIFORM_COLOR - ('POINTS', 'LINES', 'TRIS', 'LINE_STRIP', 'LINE_LOOP','TRI_STRIP', - 'TRI_FAN', 'LINES_ADJ', 'TRIS_ADJ', 'LINE_STRIP_ADJ') - `NONE`, `ALWAYS`, `LESS`, `LESS_EQUAL`, `EQUAL`, `GREATER` and `GREATER_EQUAL` - """ - shader = gpu.shader.from_builtin(shader_name) if draw_type == 'POINTS': batch = batch_for_shader(shader, draw_type, {'pos': pos}) @@ -105,9 +86,9 @@ class Draw3D(PublicClass, Data): @classmethod def draw_box(cls, data, mat): pref = cls.pref_() - coords = Utils.matrix_calculation(mat, - cls.data_to_calculation(data)) - cls.draw_3d_shader(coords, G_INDICES, pref.bound_box_color) + coords = PublicUtils.matrix_calculation(mat, + cls.data_to_calculation(data)) + cls.draw_3d_shader(coords, cls.G_INDICES, pref.bound_box_color) @classmethod def data_to_calculation(cls, data): @@ -130,9 +111,9 @@ class Draw3D(PublicClass, Data): if 'draw_limits_bound_box' in handler_dit: # draw limits_bound_box mat, data = handler_dit['draw_limits_bound_box'] - coords = Utils.matrix_calculation(mat, cls.data_to_calculation(data)) + coords = PublicUtils.matrix_calculation(mat, cls.data_to_calculation(data)) cls.draw_3d_shader(coords, - G_INDICES, + cls.G_INDICES, pref.limits_bound_box_color) @classmethod @@ -156,7 +137,7 @@ class Draw3D(PublicClass, Data): # draw deform mesh if 'draw' in handler_dit: pos, indices, mat, mod_data, limits = handler_dit['draw'] - if ([getattr(active, i) for i in G_MODIFIERS_PROPERTY] == mod_data) and ( + if ([getattr(active, i) for i in cls.G_MODIFIERS_PROPERTY] == mod_data) and ( ob.matrix_world == mat) and limits == active.limits[:]: cls.draw_3d_shader( pos, indices, pref.deform_wireframe_color) @@ -174,14 +155,14 @@ class Draw3D(PublicClass, Data): modifier = context.object.modifiers.active # 活动修改器 pref = cls.pref_() - simple_poll = Utils.simple_deform_poll(context) + simple_poll = PublicUtils.simple_deform_public_poll(context) bend = modifier and (modifier.deform_method == 'BEND') display_switch_axis = not pref.display_bend_axis_switch_gizmo cls.draw_scale_text(obj) - Utils.update_co_data(obj, modifier) + PublicUtils.update_co_data(obj, modifier) - co_data = Utils.generate_co_data() + co_data = PublicUtils.generate_co_data() if simple_poll and ((not bend) or display_switch_axis): # draw bound box @@ -191,7 +172,7 @@ class Draw3D(PublicClass, Data): cls.draw_limits_bound_box() elif simple_poll and (bend and not display_switch_axis): cls.draw_box(co_data, matrix) - Utils.new_empty(obj, modifier) + PublicUtils.new_empty(obj, modifier) @classmethod def draw_bound_box(cls): @@ -202,7 +183,7 @@ class Draw3D(PublicClass, Data): gpu.state.depth_test_set('ALWAYS') context = bpy.context - if Utils.simple_deform_poll(context): + if PublicUtils.simple_deform_public_poll(context): cls.is_draw_box(context) else: Handler.del_handler() diff --git a/simple_deform_helper/gizmo.py b/simple_deform_helper/gizmo.py deleted file mode 100644 index 15d03cd99..000000000 --- a/simple_deform_helper/gizmo.py +++ /dev/null @@ -1,620 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -import bpy -import math -from bpy_extras import view3d_utils -from mathutils import Vector, Euler -from bpy.types import ( - Gizmo, - GizmoGroup, -) - -from .draw import Handler -from .utils import Utils, PublicClass -from .data import Data - - -class CustomGizmo(Gizmo, Utils, Handler, Data): - """绘制自定义Gizmo""" - bl_idname = '_Custom_Gizmo' - - def setup(self): - self.draw_type = 'None_GizmoGroup_' - if not hasattr(self, 'custom_shape'): - self.custom_shape = {} - for i in self.G_GizmoCustomShapeDict: - self.custom_shape[i] = self.new_custom_shape( - 'TRIS', self.G_GizmoCustomShapeDict[i]) - self.add_handler() - - def draw(self, context): - self.draw_custom_shape(self.custom_shape[self.draw_type]) - - def draw_select(self, context, select_id): - self.draw_custom_shape( - self.custom_shape[self.draw_type], select_id=select_id) - - def invoke(self, context, event): - return {'RUNNING_MODAL'} - - def modal(self, context, event, tweak): - self.add_handler() - - self.update_bound_box(context.object) - self.update_empty_matrix() - return {'RUNNING_MODAL'} - - -class ViewSimpleDeformGizmo(Gizmo, Utils, Handler, Data, PublicClass): - """显示轴向切换拖动点Gizmo(两个点) - """ - bl_idname = 'ViewSimpleDeformGizmo' - - bl_target_properties = ( - {'id': 'up_limits', 'type': 'FLOAT', 'array_length': 1}, - {'id': 'down_limits', 'type': 'FLOAT', 'array_length': 1}, - {'id': 'angle', 'type': 'FLOAT', 'array_length': 1}, - ) - - __slots__ = ( - 'mod', - 'up', - 'down', - 'up_', - 'down_', - 'draw_type', - 'mouse_dpi', - 'ctrl_mode', - 'empty_object', - 'init_mouse_y', - 'init_mouse_x', - 'custom_shape', - 'int_value_angle', - 'value_deform_axis', - 'int_value_up_limits', - 'int_value_down_limits', - 'rotate_follow_modifier', - ) - - def update_gizmo_rotate(self, axis, mod): - if self.rotate_follow_modifier: - rot = Euler() - if axis == 'X' and (not self.is_positive(mod.angle)): - rot.z = math.pi - - elif axis == 'Y': - if self.is_positive(mod.angle): - rot.z = -(math.pi / 2) - else: - rot.z = math.pi / 2 - elif axis == 'Z': - if self.is_positive(mod.angle): - rot.x = rot.z = rot.y = math.pi / 2 - else: - rot.z = rot.y = math.pi / 2 - rot.x = -(math.pi / 2) - - rot = rot.to_matrix() - self.matrix_basis = self.matrix_basis @ rot.to_4x4() - - def update_draw_limits_bound_box(self, data, mod, axis, mat, up_, down_): - top, bottom, left, right, front, back = data - if mod.origin: - vector_axis = self.get_vector_axis(mod) - origin_mat = mod.origin.matrix_world.to_3x3() - axis_ = origin_mat @ vector_axis - point_lit = [[top, bottom], [left, right], [front, back]] - for f in range(point_lit.__len__()): - i = point_lit[f][0] - j = point_lit[f][1] - angle = self.point_to_angle(i, j, f, axis_) - if abs(angle - 180) < 0.00001: - point_lit[f][1], point_lit[f][0] = up_, down_ - elif abs(angle) < 0.00001: - point_lit[f][0], point_lit[f][1] = up_, down_ - [[top, bottom], [left, right], [front, back]] = point_lit - else: - top, bottom, left, right, front, back = self.get_up_down_return_list( - mod, axis, up_, down_, data) - data = top, bottom, left, right, front, back - (top, bottom, left, right, front, - back) = self.matrix_calculation(mat.inverted(), data) - self.G_SimpleDeformGizmoHandlerDit['draw_limits_bound_box'] = ( - mat, ((right[0], back[1], top[2]), (left[0], front[1], bottom[2],))) - - def update_matrix_basis_translation(self, co, mat, up_, down_): - if 'angle' == self.ctrl_mode: - self.matrix_basis.translation = mat @ Vector((co[1])) - elif 'up_limits' == self.ctrl_mode: - self.matrix_basis.translation = up_ - elif 'down_limits' == self.ctrl_mode: - self.matrix_basis.translation = down_ - - def update_gizmo_matrix(self, context): - ob = context.object - mat = ob.matrix_world - mod = context.object.modifiers.active - axis = mod.deform_axis - if mod.origin: - self.matrix_basis = mod.origin.matrix_world.normalized() - else: - self.matrix_basis = ob.matrix_world.normalized() - - co = self.generate_co_data() - self.update_gizmo_rotate(axis, mod) - # calculation limits position - top, bottom, left, right, front, back = self.each_face_pos(mat) - (up, down), (up_, down_) = self.get_limits_pos( - mod, (top, bottom, left, right, front, back)) - self.update_matrix_basis_translation(co, mat, up_, down_) - - self.up = up - self.down = down - self.up_ = up_ - self.down_ = down_ - self.G_SimpleDeformGizmoHandlerDit['draw_line'] = ( - (up, down), (up_, down_)) - data = top, bottom, left, right, front, back - self.update_draw_limits_bound_box(data, mod, axis, mat, up_, down_) - - def setup(self): - self.generate_co_data() - self.draw_type = 'None_GizmoGroup_' - self.ctrl_mode = 'angle' # up_limits , down_limits - self.mouse_dpi = 10 - self.rotate_follow_modifier = True - if not hasattr(self, 'custom_shape'): - self.custom_shape = {} - for i in self.G_GizmoCustomShapeDict: - item = self.G_GizmoCustomShapeDict[i] - self.custom_shape[i] = self.new_custom_shape('TRIS', item) - self.add_handler() - - def draw(self, context): - self.add_handler() - - self.update_gizmo_matrix(context) - self.draw_custom_shape(self.custom_shape[self.draw_type]) - - def draw_select(self, context, select_id): - self.update_gizmo_matrix(context) - self.draw_custom_shape( - self.custom_shape[self.draw_type], select_id=select_id) - - def invoke(self, context, event): - self.init_mouse_y = event.mouse_y - self.init_mouse_x = event.mouse_x - mod = context.object.modifiers.active - limits = mod.limits - up_limits = limits[1] - down_limits = limits[0] - - if 'angle' == self.ctrl_mode: - self.int_value_angle = self.target_get_value('angle') - elif 'up_limits' == self.ctrl_mode: - self.int_value_up_limits = up_limits - self.target_set_value('up_limits', self.int_value_up_limits) - elif 'down_limits' == self.ctrl_mode: - self.int_value_down_limits = down_limits - self.target_set_value('down_limits', self.int_value_down_limits) - return {'RUNNING_MODAL'} - - def exit(self, context, cancel): - context.area.header_text_set(None) - - if cancel: - if 'angle' == self.ctrl_mode: - self.target_set_value('angle', self.int_value_angle) - elif 'deform_axis' == self.ctrl_mode: - self.target_set_value('deform_axis', self.value_deform_axis) - elif 'up_limits' == self.ctrl_mode: - self.target_set_value('up_limits', self.int_value_up_limits) - - elif 'down_limits' == self.ctrl_mode: - self.target_set_value( - 'down_limits', self.int_value_down_limits) - - def delta_update(self, context, event, delta): - if ('draw_line' in self.G_SimpleDeformGizmoHandlerDit) and (self.ctrl_mode in ('up_limits', 'down_limits')): - x, y = view3d_utils.location_3d_to_region_2d( - context.region, context.space_data.region_3d, self.up) - x2, y2 = view3d_utils.location_3d_to_region_2d( - context.region, context.space_data.region_3d, self.down) - - mouse_line_distance = math.sqrt(((event.mouse_region_x - x2) ** 2) + - ((event.mouse_region_y - y2) ** 2)) - straight_line_distance = math.sqrt(((x2 - x) ** 2) + - ((y2 - y) ** 2)) - delta = mouse_line_distance / \ - straight_line_distance + 0 - - v_up = Vector((x, y)) - v_down = Vector((x2, y2)) - limits_angle = v_up - v_down - - mouse_v = Vector((event.mouse_region_x, event.mouse_region_y)) - - mouse_angle = mouse_v - v_down - angle_ = mouse_angle.angle(limits_angle) - if angle_ > (math.pi / 2): - delta = 0 - return delta - - def set_down_value(self, data, mu): - up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode = data - value = self.value_limit(delta, max_value=mu - - limit_scope if middle else max_value) - self.target_set_value('down_limits', value) - if event.ctrl: - self.target_set_value( - 'up_limits', value + difference_value) - elif middle: - if origin_mode == 'LIMITS_MIDDLE': - self.target_set_value('up_limits', mu - (value - mu)) - elif origin_mode == 'MIDDLE': - self.target_set_value('up_limits', 1 - value) - else: - self.target_set_value('up_limits', up_limits) - else: - self.target_set_value('up_limits', up_limits) - - def set_up_value(self, data, mu): - up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode = data - value = self.value_limit(delta, min_value=mu + - limit_scope if middle else min_value) - self.target_set_value('up_limits', value) - if event.ctrl: - self.target_set_value( - 'down_limits', value - difference_value) - elif middle: - if origin_mode == 'LIMITS_MIDDLE': - self.target_set_value('down_limits', mu - (value - mu)) - elif origin_mode == 'MIDDLE': - self.target_set_value('down_limits', 1 - value) - else: - self.target_set_value('down_limits', down_limits) - else: - self.target_set_value('down_limits', down_limits) - - def set_prop_value(self, data): - up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode = data - mu = (up_limits + down_limits) / 2 - if 'angle' == self.ctrl_mode: - value = self.int_value_angle - delta - self.target_set_value('angle', value) - elif 'up_limits' == self.ctrl_mode: - self.set_up_value(data, mu) - elif 'down_limits' == self.ctrl_mode: - self.set_down_value(data, mu) - - def update_header_text(self, context, mod, origin, up_limits, down_limits): - t = lambda a: bpy.app.translations.pgettext(a) - - if (mod.deform_method in ('TWIST', 'BEND')) and (self.ctrl_mode in ('angle',)): - text = t("Angle") + ':{}'.format(math.degrees(mod.angle)) - elif 'up_limits' == self.ctrl_mode: - text = t("Upper limit") + ':{}'.format(up_limits) - elif 'down_limits' == self.ctrl_mode: - text = t("Down limit") + ':{}'.format(down_limits) - else: - text = t("Coefficient") + ':{}'.format(mod.factor) - text += ' ' - text += t(origin.bl_rna.properties[ - 'origin_mode'].enum_items[origin.origin_mode].name) - context.area.header_text_set(text) - - def event_ops(self, event, ob, origin): - """通过输入键位来更改属性""" - # event ctrl - data_path = ('object.SimpleDeformGizmo_PropertyGroup.origin_mode', - 'object.modifiers.active.origin.SimpleDeformGizmo_PropertyGroup.origin_mode') - - if event.type in ('WHEELUPMOUSE', 'WHEELDOWNMOUSE'): - reverse = (event.type == 'WHEELUPMOUSE') - for path in data_path: - bpy.ops.wm.context_cycle_enum( - data_path=path, reverse=reverse, wrap=True) - elif event.type in ('X', 'Y', 'Z'): - ob.modifiers.active.deform_axis = event.type - elif event.type == 'A': - self.pref.display_bend_axis_switch_gizmo = True - return {'FINISHED'} - self.add_handler() - - return {'RUNNING_MODAL'} - - def modal(self, context, event, tweak): - self.update_bound_box(context.object) - - delta = (self.init_mouse_x - event.mouse_x) / self.mouse_dpi - ob = context.object - mod = ob.modifiers.active - limits = mod.limits - up_limits = limits[1] - down_limits = limits[0] - origin = self.get_origin_property_group(mod, ob) - origin_mode = origin.origin_mode - middle = origin_mode in ('LIMITS_MIDDLE', 'MIDDLE') - limit_scope = self.pref.modifiers_limits_tolerance - max_value = up_limits - limit_scope - min_value = down_limits + limit_scope - difference_value = up_limits - down_limits - - if 'SNAP' in tweak: - delta = round(delta) - if 'PRECISE' in tweak: - delta /= self.mouse_dpi - delta = self.delta_update(context, event, delta) - - if origin_mode != 'NOT' and ('draw_line' in self.G_SimpleDeformGizmoHandlerDit): - self.empty_object, _ = self.new_empty(ob, mod) - self.G_SimpleDeformGizmoHandlerDit['empty_object'] = self.empty_object - data = up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode - self.set_prop_value(data) - self.update_gizmo_matrix(context) - self.update_empty_matrix() - self.update_bound_box(context.object) - - self.update_header_text(context, mod, origin, up_limits, down_limits) - self.add_handler() - - return self.event_ops(event, ob, origin) - - -class SimpleDeformGizmoGroup(GizmoGroup, Utils, Handler, PublicClass, Data): - """显示Gizmo - """ - bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup' - bl_label = 'SimpleDeformGizmoGroup' - bl_space_type = 'VIEW_3D' - bl_region_type = 'WINDOW' - bl_options = {'3D', 'PERSISTENT', } - - @classmethod - def poll(cls, context): - pol = cls.simple_deform_poll(context) - pref = cls.pref_() - deform_method = ( - pol and (context.object.modifiers.active.deform_method != 'BEND')) - display_gizmo = pref.display_bend_axis_switch_gizmo - switch = (not display_gizmo) - return pol and (deform_method or switch) - - def generate_gizmo_mode(self, gizmo_data): - """生成gizmo的上限下限及角度设置 - - Args: - gizmo_data (_type_): _description_ - """ - for i, j, k in gizmo_data: - setattr(self, i, self.gizmos.new(j)) - gizmo = getattr(self, i) - for f in k: - if f == 'target_set_operator': - gizmo.target_set_operator(k[f]) - elif f == 'target_set_prop': - gizmo.target_set_prop(*k[f]) - else: - setattr(gizmo, f, k[f]) - - def setup(self, context): - sd_name = ViewSimpleDeformGizmo.bl_idname - - add_data = (('up_limits', - sd_name, - {'ctrl_mode': 'up_limits', - 'draw_type': 'Sphere_GizmoGroup_', - 'mouse_dpi': 1000, - 'color': (1.0, 0, 0), - 'alpha': 0.5, - 'color_highlight': (1.0, 1.0, 1.0), - 'alpha_highlight': 0.3, - 'use_draw_modal': True, - 'scale_basis': 0.1, - 'use_draw_value': True, }), - ('down_limits', - sd_name, - {'ctrl_mode': 'down_limits', - 'draw_type': 'Sphere_GizmoGroup_', - 'mouse_dpi': 1000, - 'color': (0, 1.0, 0), - 'alpha': 0.5, - 'color_highlight': (1.0, 1.0, 1.0), - 'alpha_highlight': 0.3, - 'use_draw_modal': True, - 'scale_basis': 0.1, - 'use_draw_value': True, }), - ('angle', - sd_name, - {'ctrl_mode': 'angle', - 'draw_type': 'SimpleDeform_GizmoGroup_', - 'color': (1.0, 0.5, 1.0), - 'alpha': 0.3, - 'color_highlight': (1.0, 1.0, 1.0), - 'alpha_highlight': 0.3, - 'use_draw_modal': True, - 'scale_basis': 0.1, - 'use_draw_value': True, - 'mouse_dpi': 100, - }), - ) - - self.generate_gizmo_mode(add_data) - - data_path = 'object.modifiers.active.deform_axis' - set_enum = 'wm.context_set_enum' - - for axis in ('X', 'Y', 'Z'): - # show toggle axis button - gizmo = self.gizmos.new('GIZMO_GT_button_2d') - gizmo.icon = f'EVENT_{axis.upper()}' - gizmo.draw_options = {'BACKDROP', 'HELPLINE'} - ops = gizmo.target_set_operator(set_enum) - ops.data_path = data_path - ops.value = axis - gizmo.color = (0, 0, 0) - gizmo.alpha = 0.3 - gizmo.color_highlight = 1.0, 1.0, 1.0 - gizmo.alpha_highlight = 0.3 - gizmo.use_draw_modal = True - gizmo.use_draw_value = True - gizmo.scale_basis = 0.1 - setattr(self, f'deform_axis_{axis.lower()}', gizmo) - self.add_handler() - - def refresh(self, context): - pro = context.object.SimpleDeformGizmo_PropertyGroup - - self.angle.target_set_prop('angle', - context.object.modifiers.active, - 'angle') - self.down_limits.target_set_prop('down_limits', - pro, - 'down_limits') - self.down_limits.target_set_prop('up_limits', - pro, - 'up_limits') - self.up_limits.target_set_prop('down_limits', - pro, - 'down_limits') - self.up_limits.target_set_prop('up_limits', - pro, - 'up_limits') - self.add_handler() - - def draw_prepare(self, context): - ob = context.object - mat = ob.matrix_world - - if 'co' in self.G_SimpleDeformGizmoHandlerDit: - def _mat(f): - co = self.G_SimpleDeformGizmoHandlerDit['co'][0] - co = (co[0] + (max(ob.dimensions) * f), co[1], - co[2] - (min(ob.dimensions) * 0.3)) - return mat @ Vector(co) - - self.deform_axis_x.matrix_basis.translation = _mat(0) - self.deform_axis_y.matrix_basis.translation = _mat(0.3) - self.deform_axis_z.matrix_basis.translation = _mat(0.6) - self.add_handler() - - def invoke_prepare(self, context, gizmo): - self.add_handler() - - -class SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo(GizmoGroup, Utils, Handler, PublicClass): - """绘制切换变型轴的 - 变换方向 - """ - bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup_display_bend_axis_switch_gizmo' - bl_label = 'SimpleDeformGizmoGroup_display_bend_axis_switch_gizmo' - - bl_space_type = 'VIEW_3D' - bl_region_type = 'WINDOW' - bl_options = { - '3D', - 'PERSISTENT', - } - - @classmethod - def poll(cls, context): - pref = cls.pref_() - simple = cls.simple_deform_poll(context) - bend = simple and ( - context.object.modifiers.active.deform_method == 'BEND') - switch_axis = (pref.display_bend_axis_switch_gizmo == True) - return switch_axis and bend - - def setup(self, context): - _draw_type = 'SimpleDeform_Bend_Direction_' - _color_a = 1, 0, 0 - _color_b = 0, 1, 0 - self.add_handler() - - for na, axis, rot, positive in ( - ('top_a', 'X', (math.radians(90), 0, math.radians(90)), True), - ('top_b', 'X', (math.radians(90), 0, 0), True), - - ('bottom_a', 'X', (math.radians(90), 0, math.radians(90)), False), - ('bottom_b', 'X', (math.radians(90), 0, 0), False), - - ('left_a', 'Y', (math.radians(90), 0, 0), False), - ('left_b', 'Y', (0, 0, 0), False), - - ('right_a', 'Y', (math.radians(90), 0, 0), True), - ('right_b', 'Y', (0, 0, 0), True), - - ('front_a', 'Z', (0, 0, 0), False), - ('front_b', 'X', (0, 0, 0), False), - - ('back_a', 'Z', (0, 0, 0), True), - ('back_b', 'X', (0, 0, 0), True),): - _a = (na.split('_')[1] == 'a') - setattr(self, na, self.gizmos.new(CustomGizmo.bl_idname)) - gizmo = getattr(self, na) - gizmo.mode = na - gizmo.draw_type = _draw_type - gizmo.color = _color_a if _a else _color_b - gizmo.alpha = 0.3 - gizmo.color_highlight = 1.0, 1.0, 1.0 - gizmo.alpha_highlight = 1 - gizmo.use_draw_modal = True - gizmo.scale_basis = 0.2 - gizmo.use_draw_value = True - ops = gizmo.target_set_operator( - 'simple_deform_gizmo.deform_axis') - ops.Deform_Axis = axis - ops.X_Value = rot[0] - ops.Y_Value = rot[1] - ops.Z_Value = rot[2] - ops.Is_Positive = positive - - def draw_prepare(self, context): - ob = context.object - mat = ob.matrix_world - top, bottom, left, right, front, back = self.each_face_pos(mat) - - rad = math.radians - for_list = ( - ('top_a', top, (0, 0, 0),), - ('top_b', top, (0, 0, rad(90)),), - - ('bottom_a', bottom, (0, rad(180), 0),), - ('bottom_b', bottom, (0, rad(180), rad(90)),), - - ('left_a', left, (rad(-90), 0, rad(90)),), - ('left_b', left, (0, rad(-90), 0),), - - ('right_a', right, (rad(90), 0, rad(90)),), - ('right_b', right, (0, rad(90), 0),), - - ('front_a', front, (rad(90), 0, 0),), - ('front_b', front, (rad(90), rad(90), 0),), - - ('back_a', back, (rad(-90), 0, 0),), - ('back_b', back, (rad(-90), rad(-90), 0),), - ) - for i, j, w, in for_list: - gizmo = getattr(self, i, False) - rot = Euler(w, 'XYZ').to_matrix().to_4x4() - - gizmo.matrix_basis = mat.to_euler().to_matrix().to_4x4() @ rot - gizmo.matrix_basis.translation = Vector(j) - - -class_list = ( - CustomGizmo, - ViewSimpleDeformGizmo, - SimpleDeformGizmoGroup, - SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo, -) - -register_class, unregister_class = bpy.utils.register_classes_factory(class_list) - - -def register(): - register_class() - - -def unregister(): - Handler.del_handler() - unregister_class() diff --git a/simple_deform_helper/gizmo/__init__.py b/simple_deform_helper/gizmo/__init__.py new file mode 100644 index 000000000..f73e4cb20 --- /dev/null +++ b/simple_deform_helper/gizmo/__init__.py @@ -0,0 +1,96 @@ +import bpy +from bpy_types import Gizmo + +from draw import Handler +from utils import PublicUtils + + +class GizmoProperty: + + @property + def obj(self): + return bpy.context.object + + @property + def modifier(self): + obj = self.obj + if not obj: + return + return obj.modifiers.active + + @property + def active_modifier_is_simple_deform(self): + return self.modifier and self.modifier.type == 'SIMPLE_DEFORM' + + @property + def is_use_angle_value(self): + if self.active_modifier_is_simple_deform: + return self.modifier.deform_method in ('TWIST', 'BEND') + + +class GizmoPublic(GizmoProperty, PublicUtils, Handler): + def generate_gizmo_mode(self, gizmo_data): + """生成gizmo的上限下限及角度设置 + + Args: + gizmo_data (_type_): _description_ + """ + for i, j, k in gizmo_data: + setattr(self, i, self.gizmos.new(j)) + gizmo = getattr(self, i) + for f in k: + if f == 'target_set_operator': + gizmo.target_set_operator(k[f]) + elif f == 'target_set_prop': + gizmo.target_set_prop(*k[f]) + else: + setattr(gizmo, f, k[f]) + + +class CustomGizmo(Gizmo, PublicUtils, Handler): + """绘制自定义Gizmo""" + bl_idname = '_Custom_Gizmo' + draw_type: str + custom_shape: dict + + def setup(self): + self.draw_type = 'None_GizmoGroup_' + if not hasattr(self, 'custom_shape'): + self.custom_shape = {} + for i in self.G_GizmoCustomShapeDict: + self.custom_shape[i] = self.new_custom_shape( + 'TRIS', self.G_GizmoCustomShapeDict[i]) + self.add_handler() + + def draw(self, context): + self.draw_custom_shape(self.custom_shape[self.draw_type]) + + def draw_select(self, context, select_id): + self.draw_custom_shape( + self.custom_shape[self.draw_type], select_id=select_id) + + def invoke(self, context, event): + return {'RUNNING_MODAL'} + + def modal(self, context, event, tweak): + self.add_handler() + self.update_bound_box(context.object) + self.update_empty_matrix() + return {'RUNNING_MODAL'} + + +class_list = ( + ViewSimpleDeformGizmo, + SimpleDeformGizmoGroup, +) + +register_class, unregister_class = bpy.utils.register_classes_factory(class_list) + + +def register(): + register_class() + + +def unregister(): + Handler.del_handler() + unregister_class() diff --git a/simple_deform_helper/gizmo/bend_axis.py b/simple_deform_helper/gizmo/bend_axis.py new file mode 100644 index 000000000..6fa7cf7af --- /dev/null +++ b/simple_deform_helper/gizmo/bend_axis.py @@ -0,0 +1,107 @@ +import math + +from bpy.types import GizmoGroup +from mathutils import Euler, Vector + +from ..draw import Handler +from ..utils import PublicUtils + + +class SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo(GizmoGroup, PublicUtils, Handler): + """绘制切换变型轴的 + 变换方向 + """ + bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup_display_bend_axis_switch_gizmo' + bl_label = 'SimpleDeformGizmoGroup_display_bend_axis_switch_gizmo' + + bl_space_type = 'VIEW_3D' + bl_region_type = 'WINDOW' + bl_options = { + '3D', + 'PERSISTENT', + } + + @classmethod + def poll(cls, context): + pref = cls.pref_() + simple = cls.simple_deform_public_poll(context) + bend = simple and ( + context.object.modifiers.active.deform_method == 'BEND') + switch_axis = pref.display_bend_axis_switch_gizmo + return switch_axis and bend + + def setup(self, context): + _draw_type = 'SimpleDeform_Bend_Direction_' + _color_a = 1, 0, 0 + _color_b = 0, 1, 0 + self.add_handler() + + for na, axis, rot, positive in ( + ('top_a', 'X', (math.radians(90), 0, math.radians(90)), True), + ('top_b', 'X', (math.radians(90), 0, 0), True), + + ('bottom_a', 'X', (math.radians(90), 0, math.radians(90)), False), + ('bottom_b', 'X', (math.radians(90), 0, 0), False), + + ('left_a', 'Y', (math.radians(90), 0, 0), False), + ('left_b', 'Y', (0, 0, 0), False), + + ('right_a', 'Y', (math.radians(90), 0, 0), True), + ('right_b', 'Y', (0, 0, 0), True), + + ('front_a', 'Z', (0, 0, 0), False), + ('front_b', 'X', (0, 0, 0), False), + + ('back_a', 'Z', (0, 0, 0), True), + ('back_b', 'X', (0, 0, 0), True),): + _a = (na.split('_')[1] == 'a') + setattr(self, na, self.gizmos.new(CustomGizmo.bl_idname)) + gizmo = getattr(self, na) + gizmo.mode = na + gizmo.draw_type = _draw_type + gizmo.color = _color_a if _a else _color_b + gizmo.alpha = 0.3 + gizmo.color_highlight = 1.0, 1.0, 1.0 + gizmo.alpha_highlight = 1 + gizmo.use_draw_modal = True + gizmo.scale_basis = 0.2 + gizmo.use_draw_value = True + ops = gizmo.target_set_operator( + 'simple_deform_gizmo.deform_axis') + ops.Deform_Axis = axis + ops.X_Value = rot[0] + ops.Y_Value = rot[1] + ops.Z_Value = rot[2] + ops.Is_Positive = positive + + def draw_prepare(self, context): + ob = context.object + mat = ob.matrix_world + top, bottom, left, right, front, back = self.each_face_pos(mat) + + rad = math.radians + for_list = ( + ('top_a', top, (0, 0, 0),), + ('top_b', top, (0, 0, rad(90)),), + + ('bottom_a', bottom, (0, rad(180), 0),), + ('bottom_b', bottom, (0, rad(180), rad(90)),), + + ('left_a', left, (rad(-90), 0, rad(90)),), + ('left_b', left, (0, rad(-90), 0),), + + ('right_a', right, (rad(90), 0, rad(90)),), + ('right_b', right, (0, rad(90), 0),), + + ('front_a', front, (rad(90), 0, 0),), + ('front_b', front, (rad(90), rad(90), 0),), + + ('back_a', back, (rad(-90), 0, 0),), + ('back_b', back, (rad(-90), rad(-90), 0),), + ) + for i, j, w, in for_list: + gizmo = getattr(self, i, False) + rot = Euler(w, 'XYZ').to_matrix().to_4x4() + + gizmo.matrix_basis = mat.to_euler().to_matrix().to_4x4() @ rot + gizmo.matrix_basis.translation = Vector(j) diff --git a/simple_deform_helper/gizmo/ctrl_tow_point.py b/simple_deform_helper/gizmo/ctrl_tow_point.py new file mode 100644 index 000000000..3a8e5583a --- /dev/null +++ b/simple_deform_helper/gizmo/ctrl_tow_point.py @@ -0,0 +1,341 @@ +import bpy + + +class GizmoProperty(Gizmo, PublicUtils, Handler): + @property + def is_angle_mode(self): + return self.ctrl_mode == 'angle' + + @property + def is_up_limits_mode(self): + return self.ctrl_mode == 'up_limits' + + @property + def is_down_limits_mode(self): + return self.ctrl_mode == 'down_limits' + + +class ViewSimpleDeformGizmo(GizmoProperty): + """显示轴向切换拖动点Gizmo(两个点) + """ + bl_idname = 'ViewSimpleDeformGizmo' + + bl_target_properties = ( + {'id': 'up_limits', 'type': 'FLOAT', 'array_length': 1}, + {'id': 'down_limits', 'type': 'FLOAT', 'array_length': 1}, + {'id': 'angle', 'type': 'FLOAT', 'array_length': 1}, + ) + + __slots__ = ( + 'mod', + 'up', + 'down', + 'up_', + 'down_', + 'draw_type', + 'mouse_dpi', + 'ctrl_mode', + 'empty_object', + 'init_mouse_y', + 'init_mouse_x', + 'custom_shape', + 'int_value_angle', + 'value_deform_axis', + 'int_value_up_limits', + 'int_value_down_limits', + 'rotate_follow_modifier', + ) + + def update_gizmo_rotate(self, axis, mod): + if self.rotate_follow_modifier: + rot = Euler() + if axis == 'X' and (not self.is_positive(mod.angle)): + rot.z = math.pi + + elif axis == 'Y': + if self.is_positive(mod.angle): + rot.z = -(math.pi / 2) + else: + rot.z = math.pi / 2 + elif axis == 'Z': + if self.is_positive(mod.angle): + rot.x = rot.z = rot.y = math.pi / 2 + else: + rot.z = rot.y = math.pi / 2 + rot.x = -(math.pi / 2) + + rot = rot.to_matrix() + self.matrix_basis = self.matrix_basis @ rot.to_4x4() + + def update_draw_limits_bound_box(self, data, mod, axis, mat, up_, down_): + top, bottom, left, right, front, back = data + if mod.origin: + vector_axis = self.get_vector_axis(mod) + origin_mat = mod.origin.matrix_world.to_3x3() + axis_ = origin_mat @ vector_axis + point_lit = [[top, bottom], [left, right], [front, back]] + for f in range(point_lit.__len__()): + i = point_lit[f][0] + j = point_lit[f][1] + angle = self.point_to_angle(i, j, f, axis_) + if abs(angle - 180) < 0.00001: + point_lit[f][1], point_lit[f][0] = up_, down_ + elif abs(angle) < 0.00001: + point_lit[f][0], point_lit[f][1] = up_, down_ + [[top, bottom], [left, right], [front, back]] = point_lit + else: + top, bottom, left, right, front, back = self.get_up_down_return_list( + mod, axis, up_, down_, data) + data = top, bottom, left, right, front, back + (top, bottom, left, right, front, + back) = self.matrix_calculation(mat.inverted(), data) + self.G_SimpleDeformGizmoHandlerDit['draw_limits_bound_box'] = ( + mat, ((right[0], back[1], top[2]), (left[0], front[1], bottom[2],))) + + def update_matrix_basis_translation(self, co, mat, up_, down_): + if self.is_angle_mode: + self.matrix_basis.translation = mat @ Vector((co[1])) + elif self.is_up_limits_mode: + self.matrix_basis.translation = up_ + elif self.is_down_limits_mode: + self.matrix_basis.translation = down_ + + def update_gizmo_matrix(self, context): + ob = context.object + mat = ob.matrix_world + mod = context.object.modifiers.active + axis = mod.deform_axis + if mod.origin: + self.matrix_basis = mod.origin.matrix_world.normalized() + else: + self.matrix_basis = ob.matrix_world.normalized() + + co = self.generate_co_data() + self.update_gizmo_rotate(axis, mod) + # calculation limits position + top, bottom, left, right, front, back = self.each_face_pos(mat) + (up, down), (up_, down_) = self.get_limits_pos( + mod, (top, bottom, left, right, front, back)) + self.update_matrix_basis_translation(co, mat, up_, down_) + + self.up = up + self.down = down + self.up_ = up_ + self.down_ = down_ + self.G_SimpleDeformGizmoHandlerDit['draw_line'] = ( + (up, down), (up_, down_)) + data = top, bottom, left, right, front, back + self.update_draw_limits_bound_box(data, mod, axis, mat, up_, down_) + + def setup(self): + self.generate_co_data() + self.draw_type = 'None_GizmoGroup_' + self.ctrl_mode = 'angle' # up_limits , down_limits + self.mouse_dpi = 10 + self.rotate_follow_modifier = True + if not hasattr(self, 'custom_shape'): + self.custom_shape = {} + for i in self.G_GizmoCustomShapeDict: + item = self.G_GizmoCustomShapeDict[i] + self.custom_shape[i] = self.new_custom_shape('TRIS', item) + self.add_handler() + + def draw(self, context): + self.add_handler() + + self.update_gizmo_matrix(context) + self.draw_custom_shape(self.custom_shape[self.draw_type]) + + def draw_select(self, context, select_id): + self.update_gizmo_matrix(context) + self.draw_custom_shape( + self.custom_shape[self.draw_type], select_id=select_id) + + def invoke(self, context, event): + self.init_mouse_y = event.mouse_y + self.init_mouse_x = event.mouse_x + mod = context.object.modifiers.active + limits = mod.limits + up_limits = limits[1] + down_limits = limits[0] + + if 'angle' == self.ctrl_mode: + self.int_value_angle = self.target_get_value('angle') + elif 'up_limits' == self.ctrl_mode: + self.int_value_up_limits = up_limits + self.target_set_value('up_limits', self.int_value_up_limits) + elif 'down_limits' == self.ctrl_mode: + self.int_value_down_limits = down_limits + self.target_set_value('down_limits', self.int_value_down_limits) + return {'RUNNING_MODAL'} + + def exit(self, context, cancel): + context.area.header_text_set(None) + + if cancel: + if 'angle' == self.ctrl_mode: + self.target_set_value('angle', self.int_value_angle) + elif 'deform_axis' == self.ctrl_mode: + self.target_set_value('deform_axis', self.value_deform_axis) + elif 'up_limits' == self.ctrl_mode: + self.target_set_value('up_limits', self.int_value_up_limits) + + elif 'down_limits' == self.ctrl_mode: + self.target_set_value( + 'down_limits', self.int_value_down_limits) + + def delta_update(self, context, event, delta): + if ('draw_line' in self.G_SimpleDeformGizmoHandlerDit) and (self.ctrl_mode in ('up_limits', 'down_limits')): + x, y = view3d_utils.location_3d_to_region_2d( + context.region, context.space_data.region_3d, self.up) + x2, y2 = view3d_utils.location_3d_to_region_2d( + context.region, context.space_data.region_3d, self.down) + + mouse_line_distance = math.sqrt(((event.mouse_region_x - x2) ** 2) + + ((event.mouse_region_y - y2) ** 2)) + straight_line_distance = math.sqrt(((x2 - x) ** 2) + + ((y2 - y) ** 2)) + delta = mouse_line_distance / straight_line_distance + 0 + + v_up = Vector((x, y)) + v_down = Vector((x2, y2)) + limits_angle = v_up - v_down + + mouse_v = Vector((event.mouse_region_x, event.mouse_region_y)) + + mouse_angle = mouse_v - v_down + angle_ = mouse_angle.angle(limits_angle) + if angle_ > (math.pi / 2): + delta = 0 + return delta + + def set_down_value(self, data, mu): + up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode = data + value = self.value_limit(delta, max_value=mu - limit_scope if middle else max_value) + self.target_set_value('down_limits', value) + if event.ctrl: + self.target_set_value( + 'up_limits', value + difference_value) + elif middle: + if origin_mode == 'LIMITS_MIDDLE': + self.target_set_value('up_limits', mu - (value - mu)) + elif origin_mode == 'MIDDLE': + self.target_set_value('up_limits', 1 - value) + else: + self.target_set_value('up_limits', up_limits) + else: + self.target_set_value('up_limits', up_limits) + + def set_up_value(self, data, mu): + up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode = data + value = self.value_limit(delta, min_value=mu + limit_scope if middle else min_value) + self.target_set_value('up_limits', value) + if event.ctrl: + self.target_set_value( + 'down_limits', value - difference_value) + elif middle: + if origin_mode == 'LIMITS_MIDDLE': + self.target_set_value('down_limits', mu - (value - mu)) + elif origin_mode == 'MIDDLE': + self.target_set_value('down_limits', 1 - value) + else: + self.target_set_value('down_limits', down_limits) + else: + self.target_set_value('down_limits', down_limits) + + def set_prop_value(self, data): + up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode = data + mu = (up_limits + down_limits) / 2 + if self.is_angle_mode: + value = self.int_value_angle - delta + v = self.snap_value(value, event) + print(v) + self.target_set_value('angle', v) + elif self.is_up_limits_mode: + self.set_up_value(data, mu) + elif self.is_down_limits_mode: + self.set_down_value(data, mu) + + @staticmethod + def snap_value(value, event: 'bpy.types.Event'): + if event.ctrl: + value //= 5 + elif event.ctrl and event.shift: + value //= 1 + return value + + def update_header_text(self, context, mod, origin, up_limits, down_limits): + translate: Callable[[Any], str] = lambda t: bpy.app.translations.pgettext(t) + mode = origin.bl_rna.properties['origin_mode'].enum_items[origin.origin_mode].name + + def t_(a, b): + return translate(a) + ':{}'.format(round(b, 3)) + + text = translate(mode) + ' ' + + if self.is_use_angle_value and self.is_angle_mode: + text += t_('Angle', math.degrees(mod.angle)) + elif self.is_up_limits_mode: + text += t_('Upper limit', up_limits) + elif self.is_down_limits_mode: + text += t_('Down limit', down_limits) + else: + text += t_('Coefficient', mod.factor) + context.area.header_text_set(text) + + def event_ops(self, event, ob, origin): + """通过输入键位来更改属性""" + # event ctrl + data_path = ('object.SimpleDeformGizmo_PropertyGroup.origin_mode', + 'object.modifiers.active.origin.SimpleDeformGizmo_PropertyGroup.origin_mode') + + if event.type in ('WHEELUPMOUSE', 'WHEELDOWNMOUSE'): + reverse = (event.type == 'WHEELUPMOUSE') + for path in data_path: + bpy.ops.wm.context_cycle_enum( + data_path=path, reverse=reverse, wrap=True) + elif event.type in ('X', 'Y', 'Z'): + ob.modifiers.active.deform_axis = event.type + elif event.type == 'A': + self.pref.display_bend_axis_switch_gizmo = True + return {'FINISHED'} + self.add_handler() + + return {'RUNNING_MODAL'} + + def modal(self, context, event, tweak): + self.update_bound_box(context.object) + + delta = (self.init_mouse_x - event.mouse_x) / self.mouse_dpi + ob = context.object + mod = ob.modifiers.active + limits = mod.limits + up_limits = limits[1] + down_limits = limits[0] + origin = self.get_origin_property_group(mod, ob) + origin_mode = origin.origin_mode + middle = origin_mode in ('LIMITS_MIDDLE', 'MIDDLE') + limit_scope = self.pref.modifiers_limits_tolerance + max_value = up_limits - limit_scope + min_value = down_limits + limit_scope + difference_value = up_limits - down_limits + + if 'SNAP' in tweak: + delta = round(delta) + if 'PRECISE' in tweak: + delta /= self.mouse_dpi + delta = self.delta_update(context, event, delta) + + if origin_mode != 'NOT' and ('draw_line' in self.G_SimpleDeformGizmoHandlerDit): + self.empty_object, _ = self.new_empty(ob, mod) + self.G_SimpleDeformGizmoHandlerDit['empty_object'] = self.empty_object + data = up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode + self.set_prop_value(data) + self.update_gizmo_matrix(context) + self.update_empty_matrix() + self.update_bound_box(context.object) + + self.update_header_text(context, mod, origin, up_limits, down_limits) + self.add_handler() + + return self.event_ops(event, ob, origin) diff --git a/simple_deform_helper/gizmo/ctrl_value_and_factor.py b/simple_deform_helper/gizmo/ctrl_value_and_factor.py new file mode 100644 index 000000000..2dd4ad36b --- /dev/null +++ b/simple_deform_helper/gizmo/ctrl_value_and_factor.py @@ -0,0 +1,132 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +from bpy.types import ( + GizmoGroup, +) +from mathutils import Vector + +from utils import PublicUtils + + +class SimpleDeformGizmoGroup(GizmoGroup, PublicUtils): + """显示Gizmo + """ + bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup' + bl_label = 'SimpleDeformGizmoGroup' + bl_space_type = 'VIEW_3D' + bl_region_type = 'WINDOW' + bl_options = {'3D', 'PERSISTENT', } + + @classmethod + def poll(cls, context): + pol = cls.simple_deform_public_poll(context) + pref = cls.pref_() + deform_method = ( + pol and (context.object.modifiers.active.deform_method != 'BEND')) + display_gizmo = pref.display_bend_axis_switch_gizmo + switch = (not display_gizmo) + return pol and (deform_method or switch) + + def setup(self, context): + sd_name = ViewSimpleDeformGizmo.bl_idname + + add_data = (('up_limits', + sd_name, + {'ctrl_mode': 'up_limits', + 'draw_type': 'Sphere_GizmoGroup_', + 'mouse_dpi': 1000, + 'color': (1.0, 0, 0), + 'alpha': 0.5, + 'color_highlight': (1.0, 1.0, 1.0), + 'alpha_highlight': 0.3, + 'use_draw_modal': True, + 'scale_basis': 0.1, + 'use_draw_value': True, }), + ('down_limits', + sd_name, + {'ctrl_mode': 'down_limits', + 'draw_type': 'Sphere_GizmoGroup_', + 'mouse_dpi': 1000, + 'color': (0, 1.0, 0), + 'alpha': 0.5, + 'color_highlight': (1.0, 1.0, 1.0), + 'alpha_highlight': 0.3, + 'use_draw_modal': True, + 'scale_basis': 0.1, + 'use_draw_value': True, }), + ('angle', + sd_name, + {'ctrl_mode': 'angle', + 'draw_type': 'SimpleDeform_GizmoGroup_', + 'color': (1.0, 0.5, 1.0), + 'alpha': 0.3, + 'color_highlight': (1.0, 1.0, 1.0), + 'alpha_highlight': 0.3, + 'use_draw_modal': True, + 'scale_basis': 0.1, + 'use_draw_value': True, + 'mouse_dpi': 100, + }), + ) + + self.generate_gizmo_mode(add_data) + + data_path = 'object.modifiers.active.deform_axis' + set_enum = 'wm.context_set_enum' + + for axis in ('X', 'Y', 'Z'): + # show toggle axis button + gizmo = self.gizmos.new('GIZMO_GT_button_2d') + gizmo.icon = f'EVENT_{axis.upper()}' + gizmo.draw_options = {'BACKDROP', 'HELPLINE'} + ops = gizmo.target_set_operator(set_enum) + ops.data_path = data_path + ops.value = axis + gizmo.color = (0, 0, 0) + gizmo.alpha = 0.3 + gizmo.color_highlight = 1.0, 1.0, 1.0 + gizmo.alpha_highlight = 0.3 + gizmo.use_draw_modal = True + gizmo.use_draw_value = True + gizmo.scale_basis = 0.1 + setattr(self, f'deform_axis_{axis.lower()}', gizmo) + self.add_handler() + + def refresh(self, context): + pro = context.object.SimpleDeformGizmo_PropertyGroup + + self.angle.target_set_prop('angle', + context.object.modifiers.active, + 'angle') + self.down_limits.target_set_prop('down_limits', + pro, + 'down_limits') + self.down_limits.target_set_prop('up_limits', + pro, + 'up_limits') + self.up_limits.target_set_prop('down_limits', + pro, + 'down_limits') + self.up_limits.target_set_prop('up_limits', + pro, + 'up_limits') + self.add_handler() + + def draw_prepare(self, context): + ob = context.object + mat = ob.matrix_world + + if 'co' in self.G_SimpleDeformGizmoHandlerDit: + def _mat(f): + co = self.G_SimpleDeformGizmoHandlerDit['co'][0] + co = (co[0] + (max(ob.dimensions) * f), co[1], + co[2] - (min(ob.dimensions) * 0.3)) + return mat @ Vector(co) + + self.deform_axis_x.matrix_basis.translation = _mat(0) + self.deform_axis_y.matrix_basis.translation = _mat(0.3) + self.deform_axis_z.matrix_basis.translation = _mat(0.6) + self.add_handler() + + def invoke_prepare(self, context, gizmo): + self.add_handler() diff --git a/simple_deform_helper/operators.py b/simple_deform_helper/operators.py index f933085ac..70f05c8de 100644 --- a/simple_deform_helper/operators.py +++ b/simple_deform_helper/operators.py @@ -4,10 +4,10 @@ import bpy from bpy.types import Operator from bpy.props import FloatProperty, StringProperty, BoolProperty -from .utils import PublicClass +from .utils import PublicUtils -class DeformAxisOperator(Operator, PublicClass): +class DeformAxisOperator(Operator, PublicUtils): bl_idname = 'simple_deform_gizmo.deform_axis' bl_label = 'deform_axis' bl_description = 'deform_axis operator' @@ -26,12 +26,12 @@ class DeformAxisOperator(Operator, PublicClass): return {'RUNNING_MODAL'} def modal(self, context, event): - from .gizmo import Utils + from gizmo.ctrl_value_and_factor import PublicUtils mod = context.object.modifiers.active mod.deform_axis = self.Deform_Axis - empty, con_limit_name = Utils.new_empty(context.object, mod) - is_positive = Utils.is_positive(mod.angle) + empty, con_limit_name = PublicUtils.new_empty(context.object, mod) + is_positive = PublicUtils.is_positive(mod.angle) for limit, value in (('max_x', self.X_Value), ('min_x', self.X_Value), @@ -48,7 +48,7 @@ class DeformAxisOperator(Operator, PublicClass): if not event.ctrl: self.pref.display_bend_axis_switch_gizmo = False - Utils.update_bound_box(context.object) + PublicUtils.update_bound_box(context.object) return {'FINISHED'} diff --git a/simple_deform_helper/panel.py b/simple_deform_helper/panel.py index 512017b0e..76d859ff9 100644 --- a/simple_deform_helper/panel.py +++ b/simple_deform_helper/panel.py @@ -2,10 +2,10 @@ import bpy from bpy.types import Panel, VIEW3D_HT_tool_header -from .utils import PublicClass, Utils +from .utils import PublicUtils -class SimpleDeformHelperToolPanel(Panel, PublicClass): +class SimpleDeformHelperToolPanel(Panel, PublicUtils): bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = 'Tool' @@ -16,7 +16,7 @@ class SimpleDeformHelperToolPanel(Panel, PublicClass): @classmethod def poll(cls, context): - return Utils.simple_deform_poll(context) + return PublicUtils.simple_deform_public_poll(context) def draw(self, context): cls = SimpleDeformHelperToolPanel diff --git a/simple_deform_helper/preferences.py b/simple_deform_helper/preferences.py index 90835854e..526d02f92 100644 --- a/simple_deform_helper/preferences.py +++ b/simple_deform_helper/preferences.py @@ -1,6 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-or-later -import os import bpy from bpy.props import (FloatProperty, PointerProperty, @@ -12,12 +11,11 @@ from bpy.types import ( PropertyGroup, ) -from .data import G_ADDON_NAME -from .utils import PublicClass, Utils +from .utils import PublicUtils, GizmoUtils -class SimpleDeformGizmoAddonPreferences(AddonPreferences, PublicClass): - bl_idname = G_ADDON_NAME +class SimpleDeformGizmoAddonPreferences(AddonPreferences, PublicUtils): + bl_idname = PublicUtils.G_ADDON_NAME deform_wireframe_color: FloatVectorProperty( name='Deform Wireframe', @@ -63,7 +61,7 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, PublicClass): col.prop(self, 'display_bend_axis_switch_gizmo') def draw_header_tool_settings(self, context): - if Utils.simple_deform_poll(context): + if GizmoUtils.simple_deform_public_poll(context): row = self.layout.row() obj = context.object mod = obj.modifiers.active @@ -81,7 +79,6 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, PublicClass): class SimpleDeformGizmoObjectPropertyGroup(PropertyGroup): - def _limits_up(self, context): mod = context.object.modifiers if mod and (mod.active.type == 'SIMPLE_DEFORM'): @@ -144,7 +141,7 @@ register_class, unregister_class = bpy.utils.register_classes_factory(class_list def register(): register_class() - PublicClass.pref_().display_bend_axis_switch_gizmo = False + PublicUtils.pref_().display_bend_axis_switch_gizmo = False bpy.types.Object.SimpleDeformGizmo_PropertyGroup = PointerProperty( type=SimpleDeformGizmoObjectPropertyGroup, name='SimpleDeformGizmo_PropertyGroup') diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index ae9df8ca8..74fb8b7c2 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -2,19 +2,88 @@ import math import uuid +from os.path import dirname, basename, realpath +from typing import Callable, Any import bpy import numpy as np from bpy.types import AddonPreferences from mathutils import Vector, Matrix -from .data import G_ADDON_NAME, G_NAME, G_INDICES, G_MODIFIERS_PROPERTY, G_CON_LIMIT_NAME, Data + +class PublicData: + """Public data class, all fixed data will be placed here + """ + G_GizmoCustomShapeDict = {} + G_SimpleDeformGizmoHandlerDit = {} + G_INDICES = ( + (0, 1), (0, 2), (1, 3), (2, 3), + (4, 5), (4, 6), (5, 7), (6, 7), + (0, 4), (1, 5), (2, 6), (3, 7)) + + G_NAME = 'ViewSimpleDeformGizmo_' # Temporary use files prefix + G_ADDON_NAME = basename(dirname(realpath(__file__))) # "simple_deform_helper" + G_CON_LIMIT_NAME = G_NAME + 'constraints_limit_rotation' # constraints name + + G_MODIFIERS_PROPERTY = [ # copy modifier data + 'angle', + 'deform_axis', + 'deform_method', + 'factor', + 'invert_vertex_group', + 'limits', + 'lock_x', + 'lock_y', + 'lock_z', + 'origin', + 'show_expanded', + 'show_in_editmode', + 'vertex_group', + ] + + @classmethod + def load_gizmo_data(cls) -> None: + import json + import os + json_path = os.path.join(os.path.dirname(__file__), "gizmo.json") + with open(json_path, "r") as file: + cls.G_GizmoCustomShapeDict = json.load(file) + + @staticmethod + def from_mesh_get_triangle_face_co(mesh: 'bpy.types.Mesh') -> list: + """ + :param mesh: input mesh read vertex + :type mesh: bpy.data.meshes + :return list: vertex coordinate list[[cox,coy,coz],[cox,coy,coz]...] + """ + import bmesh + bm = bmesh.new() + bm.from_mesh(mesh) + bm.faces.ensure_lookup_table() + bm.verts.ensure_lookup_table() + bmesh.ops.triangulate(bm, faces=bm.faces) + co_list = [list(float(format(j, ".3f")) for j in vert.co) for face in bm.faces for vert in face.verts] + bm.free() + return co_list + + @classmethod + def from_selected_obj_generate_json(cls): + """Export selected object vertex data as gizmo custom paint data + The output file should be in the blender folder + """ + import json + data = {} + for obj in bpy.context.selected_object: + data[obj.name] = cls.from_mesh_get_triangle_face_co(obj.data) + print(data) + with open('gizmo.json', 'w+') as f: + f.write(json.dumps(data)) -class PublicClass: +class PublicClass(PublicData): @staticmethod def pref_() -> "AddonPreferences": - return bpy.context.preferences.addons[G_ADDON_NAME].preferences + return bpy.context.preferences.addons[PublicData.G_ADDON_NAME].preferences @property def pref(self=None) -> 'AddonPreferences': @@ -24,37 +93,15 @@ class PublicClass: return PublicClass.pref_() -class Utils(Data): +class PublicUtils(PublicClass): @classmethod - def set_reduce(cls, list_a, list_b, operation_type='-') -> list: + def value_limit(cls, value, max_value=1, min_value=0): """ - :param list_a: 列表a - :type list_a: list or set - :param list_b: 列表b - :type list_b:list or set - :param operation_type :运算方法Enumerator in ['+','-','*','/']. - :type operation_type :str - :return list: 反回运算后的列表 - """ - if operation_type == '-': - return [list_a[i] - list_b[i] for i in range(0, len(list_a))] - elif operation_type == '+': - return [list_a[i] + list_b[i] for i in range(0, len(list_a))] - elif operation_type == '/': - return [list_a[i] / list_b[i] for i in range(0, len(list_a))] - elif operation_type == '*': - return [list_a[i] * list_b[i] for i in range(0, len(list_a))] - - @classmethod - def value_limit(cls, value, max_value=1, min_value=0) -> float: - """ - :param value: 输入值 - :type value: float - :param max_value: 允许的最大值 - :type max_value: float - :param min_value: 允许的最小值 - :type min_value: float - :return float: 反回小于最大值及大于最小值的浮点数 + @param value: limit value + @param max_value: Maximum allowed + @param min_value: Minimum allowed + @return: If the input value is greater than the maximum value or less than the minimum value + it will be limited to the maximum or minimum value """ if value > max_value: return max_value @@ -71,33 +118,29 @@ class Utils(Data): return number == abs(number) @classmethod - def get_depsgraph(cls, obj: 'bpy.context.object'): + def get_depsgraph(cls, obj: 'bpy.types.Object'): """ - :param obj: 要被评估的物体 - :type obj: bpy.types.Object - :return bpy.types.Object: 反回评估后的物体,计算应用修改器和实例化的数据 - 如果未输入物休将会评估活动物体 + @param obj: dep obj + @return: If there is no input obj, reverse the active object evaluated """ context = bpy.context if obj is None: obj = context.object - depsgraph = context.evaluated_depsgraph_get() - return obj.evaluated_get(depsgraph) + dep = context.evaluated_depsgraph_get() + return obj.evaluated_get(dep) @classmethod - def link_active_collection(cls, - obj: 'bpy.context.object') -> \ - 'bpy.context.view_layer.active_layer_collection.collection.objects': + def link_obj_to_active_collection(cls, obj: 'bpy.types.Object'): context = bpy.context - if obj.name not in context.view_layer.active_layer_collection.collection.objects: - context.view_layer.active_layer_collection.collection.objects.link( + objects = context.view_layer.active_layer_collection.collection.objects + if obj.name not in objects: + objects.link( obj) - return context.view_layer.active_layer_collection.collection.objects @classmethod def properties_is_modifier(cls) -> bool: - """ - 反回活动窗口内是否有修改器属性面板被打开,如果打开则反回True else False + """Returns whether there is a modifier property panel open in the active window. + If it is open, it returns to True else False """ for area in bpy.context.screen.areas: if area.type == 'PROPERTIES': @@ -107,54 +150,9 @@ class Utils(Data): return False @classmethod - def simple_deform_poll(cls, context: 'bpy.context') -> bool: - """Public poll""" - obj = context.object - if not obj: - return False - - mod = obj.modifiers.active - if not mod: - return False - - space = context.space_data - show_gizmo = space.show_gizmo if space.type == 'VIEW_3D' else True - - available_obj_type = obj and (obj.type in ('MESH', 'LATTICE')) - available_modifiers_type = mod and (mod.type == 'SIMPLE_DEFORM') - is_available_obj = available_modifiers_type and available_obj_type - is_obj_mode = context.mode == 'OBJECT' - show_mod = mod.show_viewport - return is_available_obj and is_obj_mode and show_gizmo and show_mod - - @classmethod - def bound_box_to_list(cls, obj: 'bpy.context.object') -> tuple: - """ - :param obj:输入一个物体,反回物体的边界框列表 - :type obj:bpy.types.Object - :return tuple: - """ + def bound_box_to_list(cls, obj: 'bpy.types.Object'): return tuple(i[:] for i in obj.bound_box) - @classmethod - def get_origin_bounds(cls, obj: 'bpy.context.object') -> list: - modifiers_list = {} - for mod in obj.modifiers: - if (mod == obj.modifiers.active) or (modifiers_list != {}): - modifiers_list[mod] = (mod.show_render, mod.show_viewport) - mod.show_viewport = False - mod.show_render = False - matrix_obj = obj.matrix_world.copy() - obj.matrix_world.zero() - obj.scale = (1, 1, 1) - bound = cls.bound_box_to_list(obj) - obj.matrix_world = matrix_obj - for mod in modifiers_list: - show_render, show_viewport = modifiers_list[mod] - mod.show_render = show_render - mod.show_viewport = show_viewport - return list(bound) - @classmethod def get_mesh_max_min_co(cls, obj: 'bpy.context.object') -> tuple: if obj.type == 'MESH': @@ -173,41 +171,6 @@ class Utils(Data): def matrix_calculation(cls, mat: 'Matrix', calculation_list: 'list') -> list: return [mat @ Vector(i) for i in calculation_list] - @classmethod - def get_origin_property_group(cls, mod, ob): - if mod.origin: - return mod.origin.SimpleDeformGizmo_PropertyGroup - else: - return ob.SimpleDeformGizmo_PropertyGroup - - @classmethod - def set_empty_obj_matrix(cls, origin_mode, empty_object, up_, down_, up, down): - tow = (2, 2, 2) - if origin_mode == 'UP_LIMITS': - empty_object.matrix_world.translation = Vector(up_) - elif origin_mode == 'DOWN_LIMITS': - empty_object.matrix_world.translation = Vector( - down_) - elif origin_mode == 'LIMITS_MIDDLE': - empty_object.matrix_world.translation = cls.set_reduce( - cls.set_reduce(up_, down_, '+'), tow, '/') - elif origin_mode == 'MIDDLE': - empty_object.matrix_world.translation = cls.set_reduce( - cls.set_reduce(up, down, '+'), tow, '/') - - @classmethod - def get_vector_axis(cls, mod): - axis = mod.deform_axis - if 'BEND' == mod.deform_method: - vector_axis = Vector((0, 0, 1)) if axis in ( - 'Y', 'X') else Vector((1, 0, 0)) - else: - vector = (Vector((1, 0, 0)) if ( - axis == 'X') else Vector((0, 1, 0))) - vector_axis = Vector((0, 0, 1)) if ( - axis == 'Z') else vector - return vector_axis - @classmethod def point_to_angle(cls, i, j, f, axis_): if i == j: @@ -225,6 +188,170 @@ class Utils(Data): angle = (180 * vector_value.angle(axis_) / math.pi) return angle + @classmethod + def co_to_direction(cls, mat, data): + (min_x, min_y, min_z), (max_x, max_y, + max_z) = data + a = mat @ Vector((max_x, max_y, max_z)) + b = mat @ Vector((max_x, min_y, min_z)) + c = mat @ Vector((min_x, max_y, min_z)) + d = mat @ Vector((min_x, min_y, max_z)) + return ((aa + bb) / Vector((2, 2, 2)) for aa, bb in ((a, d) + (c, b) + (c, d) + (a, b) + (d, b) + (c, a))) + + +class GizmoUtils(PublicUtils): + + @classmethod + def each_face_pos(cls, mat: 'Matrix' = None): + if mat is None: + mat = Matrix() + return cls.co_to_direction(mat, cls.G_SimpleDeformGizmoHandlerDit['co']) + + @classmethod + def update_matrix(cls, mod, ob): + if mod.deform_method == 'BEND': + cls.new_empty(ob, mod) + if mod.origin: + empty_object = mod.origin + modifiers_co = cls.G_SimpleDeformGizmoHandlerDit['modifiers_co'] + for index, mod_name in enumerate(modifiers_co): + co_items = list(modifiers_co.items()) + if mod.name == mod_name: + data = co_items[index - 1][1] if ( + index or (index != 1)) else modifiers_co['co'] + (up, down), (up_, down_) = cls.get_limits_pos( + mod, cls.co_to_direction(ob.matrix_world.copy(), data)) + origin_mode = cls.get_origin_property_group( + mod, ob).origin_mode + cls.set_empty_obj_matrix( + origin_mode, empty_object, up_, down_, up, down) + + @classmethod + def update_empty_matrix(cls): + ob = bpy.context.object + for mod in ob.modifiers: + if mod.type == 'SIMPLE_DEFORM': + cls.update_matrix(mod, ob) + + @classmethod + def get_origin_property_group(cls, mod, ob): + if mod.origin: + return mod.origin.SimpleDeformGizmo_PropertyGroup + else: + return ob.SimpleDeformGizmo_PropertyGroup + + @classmethod + def simple_deform_public_poll(cls, context: 'bpy.types.context') -> bool: + """Public poll + In 3D View + Active Object in ('MESH', 'LATTICE') + Active Modifier Type Is 'SIMPLE_DEFORM' and show_viewport + return True + """ + obj = context.object + if not obj: + return False + + mod = obj.modifiers.active + if not mod: + return False + + space = context.space_data + show_gizmo = space.show_gizmo if space.type == 'VIEW_3D' else True + + available_obj_type = obj and (obj.type in ('MESH', 'LATTICE')) + available_modifiers_type = mod and (mod.type == 'SIMPLE_DEFORM') + is_available_obj = available_modifiers_type and available_obj_type + is_obj_mode = context.mode == 'OBJECT' + show_mod = mod.show_viewport + return is_available_obj and is_obj_mode and show_gizmo and show_mod + + @classmethod + def get_up_down_return_list(cls, mod, axis, up_, down_, data): + top, bottom, left, right, front, back = data + if 'BEND' == mod.deform_method: + if axis in ('X', 'Y'): + top = up_ + bottom = down_ + elif axis == 'Z': + right = up_ + left = down_ + else: + if axis == 'X': + right = up_ + left = down_ + elif axis == 'Y': + back = up_ + front = down_ + elif axis == 'Z': + top = up_ + bottom = down_ + return top, bottom, left, right, front, back + + @classmethod + def new_empty(cls, obj, mod): + origin = mod.origin + if origin is None: + new_name = cls.G_NAME + '_Empty_' + str(uuid.uuid4()) + origin_object = bpy.data.objects.new(new_name, None) + cls.link_obj_to_active_collection(origin_object) + origin_object.hide_set(True) + origin_object.empty_display_size = min(obj.dimensions) + mod.origin = origin_object + else: + origin_object = mod.origin + origin_object.hide_viewport = False + + if origin_object.parent != obj: + origin_object.parent = obj + + # add constraints + con_name = cls.G_CON_LIMIT_NAME + if con_name in origin_object.constraints.keys(): + limit_constraints = origin.constraints.get(con_name) + else: + limit_constraints = origin_object.constraints.new( + 'LIMIT_ROTATION') + limit_constraints.name = con_name + limit_constraints.owner_space = 'WORLD' + limit_constraints.space_object = obj + limit_constraints.use_transform_limit = True + limit_constraints.use_limit_x = True + limit_constraints.use_limit_y = True + limit_constraints.use_limit_z = True + con_copy_name = cls.G_NAME + 'constraints_copy_rotation' + if con_copy_name in origin_object.constraints.keys(): + copy_constraints = origin.constraints.get(con_copy_name) + else: + copy_constraints = origin_object.constraints.new( + 'COPY_ROTATION') + copy_constraints.name = con_copy_name + copy_constraints.target = obj + copy_constraints.mix_mode = 'BEFORE' + copy_constraints.target_space = 'WORLD' + copy_constraints.owner_space = 'WORLD' + origin_object.rotation_euler.zero() + origin_object.scale = 1, 1, 1 + return origin_object, con_name + + @classmethod + def set_empty_obj_matrix(cls, origin_mode, empty_object, up_, down_, up, down): + tow = Vector((2, 2, 2)) + if origin_mode == 'UP_LIMITS': + empty_object.matrix_world.translation = Vector(up_) + elif origin_mode == 'DOWN_LIMITS': + empty_object.matrix_world.translation = Vector( + down_) + elif origin_mode == 'LIMITS_MIDDLE': + empty_object.matrix_world.translation = (up_ + down_) / tow + elif origin_mode == 'MIDDLE': + empty_object.matrix_world.translation = (up + down) / tow + @classmethod def get_up_down(cls, mod, axis, top, bottom, left, right, front, back): if 'BEND' == mod.deform_method: @@ -265,21 +392,30 @@ class Utils(Data): up, down = cls.get_up_down(mod, axis, top, bottom, left, right, front, back) - ex = lambda a: cls.set_reduce(down, cls.set_reduce(cls.set_reduce( - up, down, '-'), (a, a, a), '*'), '+') + ex = lambda a: down + ((up - down) * Vector((a, a, a))) up_ = ex(up_limits) down_ = ex(down_limits) return (up, down), (up_, down_) @classmethod - def update_bound_box(cls, object): + def get_vector_axis(cls, mod): + axis = mod.deform_axis + if 'BEND' == mod.deform_method: + vector_axis = Vector((0, 0, 1)) if axis in ( + 'Y', 'X') else Vector((1, 0, 0)) + else: + vector = (Vector((1, 0, 0)) if ( + axis == 'X') else Vector((0, 1, 0))) + vector_axis = Vector((0, 0, 1)) if ( + axis == 'Z') else vector + return vector_axis + @classmethod + def update_bound_box(cls, obj: 'bpy.types.Object'): context = bpy.context data = bpy.data - obj = object matrix = obj.matrix_world.copy() # 物体矩阵 - # add simple_deform mesh (min_x, min_y, min_z), (max_x, max_y, max_z) = cls.get_mesh_max_min_co(object) @@ -291,18 +427,19 @@ class Utils(Data): (min_x, min_y, max_z), (max_x, max_y, max_z), (min_x, max_y, max_z)) - if data.objects.get(G_NAME): - data.objects.remove(data.objects.get(G_NAME)) + name = cls.G_NAME + if data.objects.get(name): + data.objects.remove(data.objects.get(name)) - if data.meshes.get(G_NAME): - data.meshes.remove(data.meshes.get(G_NAME)) - mesh = data.meshes.new(G_NAME) - mesh.from_pydata(vertexes, G_INDICES, []) + if data.meshes.get(name): + data.meshes.remove(data.meshes.get(name)) + mesh = data.meshes.new(name) + mesh.from_pydata(vertexes, cls.G_INDICES, []) mesh.update() - new_object = data.objects.new(G_NAME, mesh) + new_object = data.objects.new(name, mesh) - cls.link_active_collection(new_object) + cls.link_obj_to_active_collection(new_object) if new_object.parent != obj: new_object.parent = obj @@ -327,7 +464,7 @@ class Utils(Data): simple_deform.limits[0] = mo.limits[0] simple_deform.angle = mo.angle simple_deform.show_viewport = mo.show_viewport - obj = Utils.get_depsgraph(new_object) + obj = PublicUtils.get_depsgraph(new_object) cls.G_SimpleDeformGizmoHandlerDit['modifiers_co'][mo.name] = cls.get_mesh_max_min_co( obj) new_object.hide_set(True) @@ -363,10 +500,19 @@ class Utils(Data): limits = context.object.modifiers.active.limits[:] modifiers = [getattr(context.object.modifiers.active, i) - for i in G_MODIFIERS_PROPERTY] + for i in cls.G_MODIFIERS_PROPERTY] cls.G_SimpleDeformGizmoHandlerDit['draw'] = (ver, indices, matrix, modifiers, limits) + @classmethod + def generate_co_data(cls): + handler_dit = cls.G_SimpleDeformGizmoHandlerDit + + if 'co' not in handler_dit: + handler_dit['co'] = cls.get_mesh_max_min_co( + bpy.context.object) + return handler_dit['co'] + @classmethod def update_co_data(cls, ob, mod): handler_dit = cls.G_SimpleDeformGizmoHandlerDit @@ -379,137 +525,30 @@ class Utils(Data): cls.G_SimpleDeformGizmoHandlerDit['co'] = co_items[index - 1][1] if (index or (index != 1)) else \ modifiers_co['co'] + +class tmp: @classmethod - def generate_co_data(cls): - handler_dit = cls.G_SimpleDeformGizmoHandlerDit - - if 'co' not in handler_dit: - handler_dit['co'] = cls.get_mesh_max_min_co( - bpy.context.object) - return handler_dit['co'] - - @classmethod - def new_empty(cls, obj, mod): - origin = mod.origin - if origin is None: - new_name = G_NAME + '_Empty_' + str(uuid.uuid4()) - origin_object = bpy.data.objects.new(new_name, None) - cls.link_active_collection(origin_object) - origin_object.hide_set(True) - origin_object.empty_display_size = min(obj.dimensions) - mod.origin = origin_object - else: - origin_object = mod.origin - origin_object.hide_viewport = False - - if origin_object.parent != obj: - origin_object.parent = obj - - # add constraints - if G_CON_LIMIT_NAME in origin_object.constraints.keys(): - limit_constraints = origin.constraints.get(G_CON_LIMIT_NAME) - else: - limit_constraints = origin_object.constraints.new( - 'LIMIT_ROTATION') - limit_constraints.name = G_CON_LIMIT_NAME - limit_constraints.owner_space = 'WORLD' - limit_constraints.space_object = obj - limit_constraints.use_transform_limit = True - limit_constraints.use_limit_x = True - limit_constraints.use_limit_y = True - limit_constraints.use_limit_z = True - con_copy_name = G_NAME + 'constraints_copy_rotation' - if con_copy_name in origin_object.constraints.keys(): - copy_constraints = origin.constraints.get(con_copy_name) - else: - copy_constraints = origin_object.constraints.new( - 'COPY_ROTATION') - copy_constraints.name = con_copy_name - copy_constraints.target = obj - copy_constraints.mix_mode = 'BEFORE' - copy_constraints.target_space = 'WORLD' - copy_constraints.owner_space = 'WORLD' - origin_object.rotation_euler.zero() - origin_object.scale = 1, 1, 1 - return origin_object, G_CON_LIMIT_NAME - - @classmethod - def co_to_direction(cls, mat, data): - (min_x, min_y, min_z), (max_x, max_y, - max_z) = data - a = mat @ Vector((max_x, max_y, max_z)) - b = mat @ Vector((max_x, min_y, min_z)) - c = mat @ Vector((min_x, max_y, min_z)) - d = mat @ Vector((min_x, min_y, max_z)) - - def pos_get(a, b): - return cls.set_reduce(cls.set_reduce(a, b, '+'), (2, 2, 2), '/') - - top = Vector(pos_get(a, d)) - bottom = Vector(pos_get(c, b)) - left = Vector(pos_get(c, d)) - right = Vector(pos_get(a, b)) - front = Vector(pos_get(d, b)) - back = Vector(pos_get(c, a)) - return top, bottom, left, right, front, back - - @classmethod - def each_face_pos(cls, mat: 'Matrix' = None): - if mat is None: - mat = Matrix() - return cls.co_to_direction(mat, cls.G_SimpleDeformGizmoHandlerDit['co']) - - @classmethod - def update_matrix(cls, mod, ob): - if mod.deform_method == 'BEND': - cls.new_empty(ob, mod) - if mod.origin: - empty_object = mod.origin - modifiers_co = cls.G_SimpleDeformGizmoHandlerDit['modifiers_co'] - for index, mod_name in enumerate(modifiers_co): - co_items = list(modifiers_co.items()) - if mod.name == mod_name: - data = co_items[index - 1][1] if ( - index or (index != 1)) else modifiers_co['co'] - (up, down), (up_, down_) = cls.get_limits_pos( - mod, cls.co_to_direction(ob.matrix_world.copy(), data)) - origin_mode = cls.get_origin_property_group( - mod, ob).origin_mode - cls.set_empty_obj_matrix( - origin_mode, empty_object, up_, down_, up, down) - - @classmethod - def update_empty_matrix(cls): - ob = bpy.context.object - for mod in ob.modifiers: - if mod.type == 'SIMPLE_DEFORM': - cls.update_matrix(mod, ob) - - @classmethod - def get_up_down_return_list(cls, mod, axis, up_, down_, data): - top, bottom, left, right, front, back = data - if 'BEND' == mod.deform_method: - if axis in ('X', 'Y'): - top = up_ - bottom = down_ - elif axis == 'Z': - right = up_ - left = down_ - else: - if axis == 'X': - right = up_ - left = down_ - elif axis == 'Y': - back = up_ - front = down_ - elif axis == 'Z': - top = up_ - bottom = down_ - return top, bottom, left, right, front, back + def get_origin_bounds(cls, obj: 'bpy.types.Object') -> list: + modifiers_dict = {} + for mod in obj.modifiers: + if (mod == obj.modifiers.active) or (modifiers_dict != {}): + modifiers_dict[mod] = (mod.show_render, mod.show_viewport) + mod.show_viewport = False + mod.show_render = False + matrix_obj = obj.matrix_world.copy() + obj.matrix_world.zero() + obj.scale = (1, 1, 1) + bound = cls.bound_box_to_list(obj) + obj.matrix_world = matrix_obj + for mod in modifiers_dict: + show_render, show_viewport = modifiers_dict[mod] + mod.show_render = show_render + mod.show_viewport = show_viewport + return list(bound) def register(): - PublicClass.load_gizmo_data() + PublicData.load_gizmo_data() def unregister(): -- 2.30.2 From af50b2f258787836e823b38d15f74b757141aa01 Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Wed, 29 Mar 2023 18:31:45 +0800 Subject: [PATCH 08/24] TODO add property snap value --- simple_deform_helper/draw.py | 91 +++---- simple_deform_helper/gizmo/__init__.py | 91 +------ .../gizmo/angle_and_factor.py | 163 ++++++++++++ simple_deform_helper/gizmo/bend_axis.py | 48 +++- .../gizmo/ctrl_value_and_factor.py | 132 ---------- ...l_tow_point.py => up_down_limits_point.py} | 80 ++---- simple_deform_helper/operators.py | 12 +- simple_deform_helper/panel.py | 6 +- simple_deform_helper/preferences.py | 8 +- simple_deform_helper/utils.py | 237 +++++++++++++++--- 10 files changed, 492 insertions(+), 376 deletions(-) create mode 100644 simple_deform_helper/gizmo/angle_and_factor.py delete mode 100644 simple_deform_helper/gizmo/ctrl_value_and_factor.py rename simple_deform_helper/gizmo/{ctrl_tow_point.py => up_down_limits_point.py} (82%) diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index 54d74b53e..e7970055b 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -5,7 +5,7 @@ import gpu from gpu_extras.batch import batch_for_shader from mathutils import Vector -from .utils import PublicUtils +from .utils import GizmoUtils class Handler: @@ -39,7 +39,48 @@ class Handler: cls.G_SimpleDeformGizmoHandlerDit.clear() -class Draw3D(PublicUtils): +class Draw3D(GizmoUtils): + + @classmethod + def draw_bound_box(cls): + gpu.state.blend_set('ALPHA') + gpu.state.line_width_set(1) + + gpu.state.blend_set('ALPHA') + gpu.state.depth_test_set('ALWAYS') + + context = bpy.context + if cls.simple_deform_public_poll(context): + cls.is_draw_box(context) + else: + Handler.del_handler() + + @classmethod + def is_draw_box(cls, context): + obj = context.object # 活动物体 + matrix = obj.matrix_world # 活动物体矩阵 + modifier = context.object.modifiers.active # 活动修改器 + + pref = cls.pref_() + simple_poll = cls.simple_deform_public_poll(context) + bend = modifier and (modifier.deform_method == 'BEND') + display_switch_axis = not pref.display_bend_axis_switch_gizmo + + cls.draw_scale_text(obj) + cls.update_co_data(obj, modifier) + + co_data = cls.generate_co_data() + + if simple_poll and ((not bend) or display_switch_axis): + # draw bound box + cls.draw_box(co_data, matrix) + # cls.draw_deform_mesh(obj, context) + cls.draw_limits_line() + cls.draw_limits_bound_box() + elif simple_poll and (bend and not display_switch_axis): + cls.draw_box(co_data, matrix) + cls.new_empty(obj, modifier) + @classmethod def draw_3d_shader(cls, pos, indices, color=None, *, shader_name='3D_UNIFORM_COLOR', draw_type='LINES'): shader = gpu.shader.from_builtin(shader_name) @@ -86,8 +127,8 @@ class Draw3D(PublicUtils): @classmethod def draw_box(cls, data, mat): pref = cls.pref_() - coords = PublicUtils.matrix_calculation(mat, - cls.data_to_calculation(data)) + coords = cls.matrix_calculation(mat, + cls.data_to_calculation(data)) cls.draw_3d_shader(coords, cls.G_INDICES, pref.bound_box_color) @classmethod @@ -111,7 +152,7 @@ class Draw3D(PublicUtils): if 'draw_limits_bound_box' in handler_dit: # draw limits_bound_box mat, data = handler_dit['draw_limits_bound_box'] - coords = PublicUtils.matrix_calculation(mat, cls.data_to_calculation(data)) + coords = cls.matrix_calculation(mat, cls.data_to_calculation(data)) cls.draw_3d_shader(coords, cls.G_INDICES, pref.limits_bound_box_color) @@ -147,43 +188,3 @@ class Draw3D(PublicUtils): if (ob.scale != Vector((1, 1, 1))) and ('handler_text' not in cls.G_SimpleDeformGizmoHandlerDit): cls.G_SimpleDeformGizmoHandlerDit['handler_text'] = bpy.types.SpaceView3D.draw_handler_add( cls.draw_str, (), 'WINDOW', 'POST_PIXEL') - - @classmethod - def is_draw_box(cls, context): - obj = context.object # 活动物体 - matrix = obj.matrix_world # 活动物体矩阵 - modifier = context.object.modifiers.active # 活动修改器 - - pref = cls.pref_() - simple_poll = PublicUtils.simple_deform_public_poll(context) - bend = modifier and (modifier.deform_method == 'BEND') - display_switch_axis = not pref.display_bend_axis_switch_gizmo - - cls.draw_scale_text(obj) - PublicUtils.update_co_data(obj, modifier) - - co_data = PublicUtils.generate_co_data() - - if simple_poll and ((not bend) or display_switch_axis): - # draw bound box - cls.draw_box(co_data, matrix) - cls.draw_deform_mesh(obj, context) - cls.draw_limits_line() - cls.draw_limits_bound_box() - elif simple_poll and (bend and not display_switch_axis): - cls.draw_box(co_data, matrix) - PublicUtils.new_empty(obj, modifier) - - @classmethod - def draw_bound_box(cls): - gpu.state.blend_set('ALPHA') - gpu.state.line_width_set(1) - - gpu.state.blend_set('ALPHA') - gpu.state.depth_test_set('ALWAYS') - - context = bpy.context - if PublicUtils.simple_deform_public_poll(context): - cls.is_draw_box(context) - else: - Handler.del_handler() diff --git a/simple_deform_helper/gizmo/__init__.py b/simple_deform_helper/gizmo/__init__.py index f73e4cb20..5bb9fcee9 100644 --- a/simple_deform_helper/gizmo/__init__.py +++ b/simple_deform_helper/gizmo/__init__.py @@ -1,87 +1,20 @@ import bpy from bpy_types import Gizmo -from draw import Handler -from utils import PublicUtils - - -class GizmoProperty: - - @property - def obj(self): - return bpy.context.object - - @property - def modifier(self): - obj = self.obj - if not obj: - return - return obj.modifiers.active - - @property - def active_modifier_is_simple_deform(self): - return self.modifier and self.modifier.type == 'SIMPLE_DEFORM' - - @property - def is_use_angle_value(self): - if self.active_modifier_is_simple_deform: - return self.modifier.deform_method in ('TWIST', 'BEND') - - -class GizmoPublic(GizmoProperty, PublicUtils, Handler): - def generate_gizmo_mode(self, gizmo_data): - """生成gizmo的上限下限及角度设置 - - Args: - gizmo_data (_type_): _description_ - """ - for i, j, k in gizmo_data: - setattr(self, i, self.gizmos.new(j)) - gizmo = getattr(self, i) - for f in k: - if f == 'target_set_operator': - gizmo.target_set_operator(k[f]) - elif f == 'target_set_prop': - gizmo.target_set_prop(*k[f]) - else: - setattr(gizmo, f, k[f]) - - -class CustomGizmo(Gizmo, PublicUtils, Handler): - """绘制自定义Gizmo""" - bl_idname = '_Custom_Gizmo' - draw_type: str - custom_shape: dict - - def setup(self): - self.draw_type = 'None_GizmoGroup_' - if not hasattr(self, 'custom_shape'): - self.custom_shape = {} - for i in self.G_GizmoCustomShapeDict: - self.custom_shape[i] = self.new_custom_shape( - 'TRIS', self.G_GizmoCustomShapeDict[i]) - self.add_handler() - - def draw(self, context): - self.draw_custom_shape(self.custom_shape[self.draw_type]) - - def draw_select(self, context, select_id): - self.draw_custom_shape( - self.custom_shape[self.draw_type], select_id=select_id) - - def invoke(self, context, event): - return {'RUNNING_MODAL'} - - def modal(self, context, event, tweak): - self.add_handler() - self.update_bound_box(context.object) - self.update_empty_matrix() - return {'RUNNING_MODAL'} - +from .bend_axis import SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo, CustomGizmo +from .up_down_limits_point import GizmoProperty, UpDownLimitsGizmo +from .angle_and_factor import AngleGizmoGroup, AngleGizmo +from ..draw import Handler class_list = ( - ViewSimpleDeformGizmo, - SimpleDeformGizmoGroup, + # GizmoProperty, + # UpDownLimitsGizmo, + + AngleGizmo, + AngleGizmoGroup, + + CustomGizmo, + SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo, ) register_class, unregister_class = bpy.utils.register_classes_factory(class_list) diff --git a/simple_deform_helper/gizmo/angle_and_factor.py b/simple_deform_helper/gizmo/angle_and_factor.py new file mode 100644 index 000000000..1fcd2a1b1 --- /dev/null +++ b/simple_deform_helper/gizmo/angle_and_factor.py @@ -0,0 +1,163 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +import math + +from bpy.types import ( + GizmoGroup, +) +from bpy.types import Gizmo +from mathutils import Vector, Euler, Matrix + +from ..utils import GizmoUtils +from ..draw import Handler + + +class AngleGizmo(Gizmo, GizmoUtils): + bl_idname = 'ViewSimpleAngleGizmo' + + bl_target_properties = ( + {'id': 'up_limits', 'type': 'FLOAT', 'array_length': 1}, + {'id': 'down_limits', 'type': 'FLOAT', 'array_length': 1}, + {'id': 'angle', 'type': 'FLOAT', 'array_length': 1}, + ) + + __slots__ = ( + 'draw_type', + 'mouse_dpi', + 'empty_object', + 'init_mouse_y', + 'init_mouse_x', + 'custom_shape', + 'int_value_angle', + 'rotate_follow_modifier', + ) + + int_value_angle: float + rotate_follow_modifier: bool + + def setup(self): + self.mouse_dpi = 2 + self.rotate_follow_modifier = True + self.init_setup() + + def invoke(self, context, event): + self.init_invoke(context, event) + self.int_value_angle = self.target_get_value('angle') + return {'RUNNING_MODAL'} + + def modal(self, context, event, tweak): + self.update_header_text(context) + self.update_prop_value(event, tweak) + return {'RUNNING_MODAL'} + + def exit(self, context, cancel): + context.area.header_text_set(None) + if cancel: + self.target_set_value('angle', self.int_value_angle) + + def update_prop_value(self, event, tweak): + # radians 弧度 + # degrees 角度 + delta = self.get_delta(event) + value = math.degrees(self.int_value_angle - delta) + new_value = (self.get_snap(value, tweak)) + old_value = math.degrees(self.target_get_value('angle')) + + print(new_value, old_value) + self.target_set_value('angle', math.radians(new_value)) + + def update_gizmo_matrix(self, context): + matrix = context.object.matrix_world + self.matrix_basis.translation = matrix @ Vector((self.generate_co_data()[1])) + + def update_header_text(self, context): + text = self.translate_header_text('Angle', round(math.degrees(self.modifier_angle), 3)) + context.area.header_text_set(text) + + +class AngleGizmoGroup(GizmoGroup, GizmoUtils, Handler): + """ShowGizmo + """ + bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup' + bl_label = 'AngleGizmoGroup' + bl_space_type = 'VIEW_3D' + bl_region_type = 'WINDOW' + bl_options = {'3D', 'PERSISTENT', } + + @classmethod + def poll(cls, context): + return cls.simple_deform_show_gizmo_poll(context) + + def setup(self, context): + sd_name = AngleGizmo.bl_idname + + add_data = [ + ('angle', + sd_name, + {'draw_type': 'SimpleDeform_GizmoGroup_', + 'color': (1.0, 0.5, 1.0), + 'alpha': 0.3, + 'color_highlight': (1.0, 1.0, 1.0), + 'alpha_highlight': 0.3, + 'use_draw_modal': True, + 'scale_basis': 0.1, + 'use_draw_value': True, + 'mouse_dpi': 100, + }), + ] + + self.generate_gizmo_mode(add_data) + + data_path = 'object.modifiers.active.deform_axis' + set_enum = 'wm.context_set_enum' + + for axis in ('X', 'Y', 'Z'): + # show toggle axis button + gizmo = self.gizmos.new('GIZMO_GT_button_2d') + gizmo.icon = f'EVENT_{axis.upper()}' + gizmo.draw_options = {'BACKDROP', 'HELPLINE'} + ops = gizmo.target_set_operator(set_enum) + ops.data_path = data_path + ops.value = axis + gizmo.color = (0, 0, 0) + gizmo.alpha = 0.3 + gizmo.color_highlight = 1.0, 1.0, 1.0 + gizmo.alpha_highlight = 0.3 + gizmo.use_draw_modal = True + gizmo.use_draw_value = True + gizmo.scale_basis = 0.1 + setattr(self, f'deform_axis_{axis.lower()}', gizmo) + + def refresh(self, context): + + self.angle.target_set_prop('angle', + context.object.modifiers.active, + 'angle') + + # pro = context.object.SimpleDeformGizmo_PropertyGroup + # self.down_limits.target_set_prop('down_limits', + # pro, + # 'down_limits') + # self.down_limits.target_set_prop('up_limits', + # pro, + # 'up_limits') + # self.up_limits.target_set_prop('down_limits', + # pro, + # 'down_limits') + # self.up_limits.target_set_prop('up_limits', + # pro, + # 'up_limits') + + def draw_prepare(self, context): + ob = context.object + mat = ob.matrix_world + + if 'co' in self.G_SimpleDeformGizmoHandlerDit: + def _mat(f): + co = self.G_SimpleDeformGizmoHandlerDit['co'][0] + co = (co[0] + (max(ob.dimensions) * f), co[1], + co[2] - (min(ob.dimensions) * 0.3)) + return mat @ Vector(co) + + self.deform_axis_x.matrix_basis.translation = _mat(0) + self.deform_axis_y.matrix_basis.translation = _mat(0.3) + self.deform_axis_z.matrix_basis.translation = _mat(0.6) diff --git a/simple_deform_helper/gizmo/bend_axis.py b/simple_deform_helper/gizmo/bend_axis.py index 6fa7cf7af..3d102ec70 100644 --- a/simple_deform_helper/gizmo/bend_axis.py +++ b/simple_deform_helper/gizmo/bend_axis.py @@ -1,13 +1,46 @@ import math from bpy.types import GizmoGroup +from bpy_types import Gizmo from mathutils import Euler, Vector from ..draw import Handler -from ..utils import PublicUtils +from ..utils import GizmoUtils -class SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo(GizmoGroup, PublicUtils, Handler): +class CustomGizmo(Gizmo, GizmoUtils, Handler): + """绘制自定义Gizmo""" + bl_idname = '_Custom_Gizmo' + draw_type: str + custom_shape: dict + + def setup(self): + self.draw_type = 'None_GizmoGroup_' + if not hasattr(self, 'custom_shape'): + self.custom_shape = {} + for i in self.G_GizmoCustomShapeDict: + self.custom_shape[i] = self.new_custom_shape( + 'TRIS', self.G_GizmoCustomShapeDict[i]) + self.add_handler() + + def draw(self, context): + self.draw_custom_shape(self.custom_shape[self.draw_type]) + + def draw_select(self, context, select_id): + self.draw_custom_shape( + self.custom_shape[self.draw_type], select_id=select_id) + + def invoke(self, context, event): + return {'RUNNING_MODAL'} + + def modal(self, context, event, tweak): + self.add_handler() + self.update_bound_box(context.object) + self.update_empty_matrix() + return {'RUNNING_MODAL'} + + +class SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo(GizmoGroup, GizmoUtils): """绘制切换变型轴的 变换方向 """ @@ -23,21 +56,15 @@ class SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo(GizmoGroup, PublicUtils, H @classmethod def poll(cls, context): - pref = cls.pref_() - simple = cls.simple_deform_public_poll(context) - bend = simple and ( - context.object.modifiers.active.deform_method == 'BEND') - switch_axis = pref.display_bend_axis_switch_gizmo - return switch_axis and bend + return cls.simple_deform_show_bend_axis_witch_poll(context) def setup(self, context): _draw_type = 'SimpleDeform_Bend_Direction_' _color_a = 1, 0, 0 _color_b = 0, 1, 0 - self.add_handler() for na, axis, rot, positive in ( - ('top_a', 'X', (math.radians(90), 0, math.radians(90)), True), + ('top_a', 'X', (math.radians(90), 0, math.radians(9 - 0)), True), ('top_b', 'X', (math.radians(90), 0, 0), True), ('bottom_a', 'X', (math.radians(90), 0, math.radians(90)), False), @@ -102,6 +129,5 @@ class SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo(GizmoGroup, PublicUtils, H for i, j, w, in for_list: gizmo = getattr(self, i, False) rot = Euler(w, 'XYZ').to_matrix().to_4x4() - gizmo.matrix_basis = mat.to_euler().to_matrix().to_4x4() @ rot gizmo.matrix_basis.translation = Vector(j) diff --git a/simple_deform_helper/gizmo/ctrl_value_and_factor.py b/simple_deform_helper/gizmo/ctrl_value_and_factor.py deleted file mode 100644 index 2dd4ad36b..000000000 --- a/simple_deform_helper/gizmo/ctrl_value_and_factor.py +++ /dev/null @@ -1,132 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later - -from bpy.types import ( - GizmoGroup, -) -from mathutils import Vector - -from utils import PublicUtils - - -class SimpleDeformGizmoGroup(GizmoGroup, PublicUtils): - """显示Gizmo - """ - bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup' - bl_label = 'SimpleDeformGizmoGroup' - bl_space_type = 'VIEW_3D' - bl_region_type = 'WINDOW' - bl_options = {'3D', 'PERSISTENT', } - - @classmethod - def poll(cls, context): - pol = cls.simple_deform_public_poll(context) - pref = cls.pref_() - deform_method = ( - pol and (context.object.modifiers.active.deform_method != 'BEND')) - display_gizmo = pref.display_bend_axis_switch_gizmo - switch = (not display_gizmo) - return pol and (deform_method or switch) - - def setup(self, context): - sd_name = ViewSimpleDeformGizmo.bl_idname - - add_data = (('up_limits', - sd_name, - {'ctrl_mode': 'up_limits', - 'draw_type': 'Sphere_GizmoGroup_', - 'mouse_dpi': 1000, - 'color': (1.0, 0, 0), - 'alpha': 0.5, - 'color_highlight': (1.0, 1.0, 1.0), - 'alpha_highlight': 0.3, - 'use_draw_modal': True, - 'scale_basis': 0.1, - 'use_draw_value': True, }), - ('down_limits', - sd_name, - {'ctrl_mode': 'down_limits', - 'draw_type': 'Sphere_GizmoGroup_', - 'mouse_dpi': 1000, - 'color': (0, 1.0, 0), - 'alpha': 0.5, - 'color_highlight': (1.0, 1.0, 1.0), - 'alpha_highlight': 0.3, - 'use_draw_modal': True, - 'scale_basis': 0.1, - 'use_draw_value': True, }), - ('angle', - sd_name, - {'ctrl_mode': 'angle', - 'draw_type': 'SimpleDeform_GizmoGroup_', - 'color': (1.0, 0.5, 1.0), - 'alpha': 0.3, - 'color_highlight': (1.0, 1.0, 1.0), - 'alpha_highlight': 0.3, - 'use_draw_modal': True, - 'scale_basis': 0.1, - 'use_draw_value': True, - 'mouse_dpi': 100, - }), - ) - - self.generate_gizmo_mode(add_data) - - data_path = 'object.modifiers.active.deform_axis' - set_enum = 'wm.context_set_enum' - - for axis in ('X', 'Y', 'Z'): - # show toggle axis button - gizmo = self.gizmos.new('GIZMO_GT_button_2d') - gizmo.icon = f'EVENT_{axis.upper()}' - gizmo.draw_options = {'BACKDROP', 'HELPLINE'} - ops = gizmo.target_set_operator(set_enum) - ops.data_path = data_path - ops.value = axis - gizmo.color = (0, 0, 0) - gizmo.alpha = 0.3 - gizmo.color_highlight = 1.0, 1.0, 1.0 - gizmo.alpha_highlight = 0.3 - gizmo.use_draw_modal = True - gizmo.use_draw_value = True - gizmo.scale_basis = 0.1 - setattr(self, f'deform_axis_{axis.lower()}', gizmo) - self.add_handler() - - def refresh(self, context): - pro = context.object.SimpleDeformGizmo_PropertyGroup - - self.angle.target_set_prop('angle', - context.object.modifiers.active, - 'angle') - self.down_limits.target_set_prop('down_limits', - pro, - 'down_limits') - self.down_limits.target_set_prop('up_limits', - pro, - 'up_limits') - self.up_limits.target_set_prop('down_limits', - pro, - 'down_limits') - self.up_limits.target_set_prop('up_limits', - pro, - 'up_limits') - self.add_handler() - - def draw_prepare(self, context): - ob = context.object - mat = ob.matrix_world - - if 'co' in self.G_SimpleDeformGizmoHandlerDit: - def _mat(f): - co = self.G_SimpleDeformGizmoHandlerDit['co'][0] - co = (co[0] + (max(ob.dimensions) * f), co[1], - co[2] - (min(ob.dimensions) * 0.3)) - return mat @ Vector(co) - - self.deform_axis_x.matrix_basis.translation = _mat(0) - self.deform_axis_y.matrix_basis.translation = _mat(0.3) - self.deform_axis_z.matrix_basis.translation = _mat(0.6) - self.add_handler() - - def invoke_prepare(self, context, gizmo): - self.add_handler() diff --git a/simple_deform_helper/gizmo/ctrl_tow_point.py b/simple_deform_helper/gizmo/up_down_limits_point.py similarity index 82% rename from simple_deform_helper/gizmo/ctrl_tow_point.py rename to simple_deform_helper/gizmo/up_down_limits_point.py index 3a8e5583a..c7e1eb46e 100644 --- a/simple_deform_helper/gizmo/ctrl_tow_point.py +++ b/simple_deform_helper/gizmo/up_down_limits_point.py @@ -1,7 +1,16 @@ +import math +from typing import Callable, Any + import bpy +from bpy_extras import view3d_utils +from bpy.types import Gizmo +from mathutils import Euler, Vector + +from ..draw import Handler +from ..utils import GizmoUtils -class GizmoProperty(Gizmo, PublicUtils, Handler): +class GizmoProperty(GizmoUtils, Handler): @property def is_angle_mode(self): return self.ctrl_mode == 'angle' @@ -15,15 +24,14 @@ class GizmoProperty(Gizmo, PublicUtils, Handler): return self.ctrl_mode == 'down_limits' -class ViewSimpleDeformGizmo(GizmoProperty): +class UpDownLimitsGizmo(GizmoProperty, Gizmo): """显示轴向切换拖动点Gizmo(两个点) """ - bl_idname = 'ViewSimpleDeformGizmo' + bl_idname = 'UpDownLimitsGizmo' bl_target_properties = ( {'id': 'up_limits', 'type': 'FLOAT', 'array_length': 1}, {'id': 'down_limits', 'type': 'FLOAT', 'array_length': 1}, - {'id': 'angle', 'type': 'FLOAT', 'array_length': 1}, ) __slots__ = ( @@ -46,27 +54,6 @@ class ViewSimpleDeformGizmo(GizmoProperty): 'rotate_follow_modifier', ) - def update_gizmo_rotate(self, axis, mod): - if self.rotate_follow_modifier: - rot = Euler() - if axis == 'X' and (not self.is_positive(mod.angle)): - rot.z = math.pi - - elif axis == 'Y': - if self.is_positive(mod.angle): - rot.z = -(math.pi / 2) - else: - rot.z = math.pi / 2 - elif axis == 'Z': - if self.is_positive(mod.angle): - rot.x = rot.z = rot.y = math.pi / 2 - else: - rot.z = rot.y = math.pi / 2 - rot.x = -(math.pi / 2) - - rot = rot.to_matrix() - self.matrix_basis = self.matrix_basis @ rot.to_4x4() - def update_draw_limits_bound_box(self, data, mod, axis, mat, up_, down_): top, bottom, left, right, front, back = data if mod.origin: @@ -111,7 +98,6 @@ class ViewSimpleDeformGizmo(GizmoProperty): self.matrix_basis = ob.matrix_world.normalized() co = self.generate_co_data() - self.update_gizmo_rotate(axis, mod) # calculation limits position top, bottom, left, right, front, back = self.each_face_pos(mat) (up, down), (up_, down_) = self.get_limits_pos( @@ -130,38 +116,19 @@ class ViewSimpleDeformGizmo(GizmoProperty): def setup(self): self.generate_co_data() self.draw_type = 'None_GizmoGroup_' - self.ctrl_mode = 'angle' # up_limits , down_limits + self.ctrl_mode = 'up_limits' # up_limits , down_limits self.mouse_dpi = 10 self.rotate_follow_modifier = True - if not hasattr(self, 'custom_shape'): - self.custom_shape = {} - for i in self.G_GizmoCustomShapeDict: - item = self.G_GizmoCustomShapeDict[i] - self.custom_shape[i] = self.new_custom_shape('TRIS', item) self.add_handler() - def draw(self, context): - self.add_handler() - - self.update_gizmo_matrix(context) - self.draw_custom_shape(self.custom_shape[self.draw_type]) - - def draw_select(self, context, select_id): - self.update_gizmo_matrix(context) - self.draw_custom_shape( - self.custom_shape[self.draw_type], select_id=select_id) - def invoke(self, context, event): - self.init_mouse_y = event.mouse_y - self.init_mouse_x = event.mouse_x + self.init_invoke(context, event) mod = context.object.modifiers.active limits = mod.limits up_limits = limits[1] down_limits = limits[0] - if 'angle' == self.ctrl_mode: - self.int_value_angle = self.target_get_value('angle') - elif 'up_limits' == self.ctrl_mode: + if 'up_limits' == self.ctrl_mode: self.int_value_up_limits = up_limits self.target_set_value('up_limits', self.int_value_up_limits) elif 'down_limits' == self.ctrl_mode: @@ -179,7 +146,6 @@ class ViewSimpleDeformGizmo(GizmoProperty): self.target_set_value('deform_axis', self.value_deform_axis) elif 'up_limits' == self.ctrl_mode: self.target_set_value('up_limits', self.int_value_up_limits) - elif 'down_limits' == self.ctrl_mode: self.target_set_value( 'down_limits', self.int_value_down_limits) @@ -256,14 +222,6 @@ class ViewSimpleDeformGizmo(GizmoProperty): elif self.is_down_limits_mode: self.set_down_value(data, mu) - @staticmethod - def snap_value(value, event: 'bpy.types.Event'): - if event.ctrl: - value //= 5 - elif event.ctrl and event.shift: - value //= 1 - return value - def update_header_text(self, context, mod, origin, up_limits, down_limits): translate: Callable[[Any], str] = lambda t: bpy.app.translations.pgettext(t) mode = origin.bl_rna.properties['origin_mode'].enum_items[origin.origin_mode].name @@ -274,7 +232,7 @@ class ViewSimpleDeformGizmo(GizmoProperty): text = translate(mode) + ' ' if self.is_use_angle_value and self.is_angle_mode: - text += t_('Angle', math.degrees(mod.angle)) + text += t_() elif self.is_up_limits_mode: text += t_('Upper limit', up_limits) elif self.is_down_limits_mode: @@ -306,7 +264,6 @@ class ViewSimpleDeformGizmo(GizmoProperty): def modal(self, context, event, tweak): self.update_bound_box(context.object) - delta = (self.init_mouse_x - event.mouse_x) / self.mouse_dpi ob = context.object mod = ob.modifiers.active limits = mod.limits @@ -320,10 +277,7 @@ class ViewSimpleDeformGizmo(GizmoProperty): min_value = down_limits + limit_scope difference_value = up_limits - down_limits - if 'SNAP' in tweak: - delta = round(delta) - if 'PRECISE' in tweak: - delta /= self.mouse_dpi + delta = self.get_delta(event, tweak) delta = self.delta_update(context, event, delta) if origin_mode != 'NOT' and ('draw_line' in self.G_SimpleDeformGizmoHandlerDit): diff --git a/simple_deform_helper/operators.py b/simple_deform_helper/operators.py index 70f05c8de..332962e6b 100644 --- a/simple_deform_helper/operators.py +++ b/simple_deform_helper/operators.py @@ -4,10 +4,10 @@ import bpy from bpy.types import Operator from bpy.props import FloatProperty, StringProperty, BoolProperty -from .utils import PublicUtils +from .utils import GizmoUtils -class DeformAxisOperator(Operator, PublicUtils): +class DeformAxisOperator(Operator, GizmoUtils): bl_idname = 'simple_deform_gizmo.deform_axis' bl_label = 'deform_axis' bl_description = 'deform_axis operator' @@ -26,12 +26,12 @@ class DeformAxisOperator(Operator, PublicUtils): return {'RUNNING_MODAL'} def modal(self, context, event): - from gizmo.ctrl_value_and_factor import PublicUtils + from gizmo.angle_and_factor import GizmoUtils mod = context.object.modifiers.active mod.deform_axis = self.Deform_Axis - empty, con_limit_name = PublicUtils.new_empty(context.object, mod) - is_positive = PublicUtils.is_positive(mod.angle) + empty, con_limit_name = GizmoUtils.new_empty(context.object, mod) + is_positive = GizmoUtils.is_positive(mod.angle) for limit, value in (('max_x', self.X_Value), ('min_x', self.X_Value), @@ -48,7 +48,7 @@ class DeformAxisOperator(Operator, PublicUtils): if not event.ctrl: self.pref.display_bend_axis_switch_gizmo = False - PublicUtils.update_bound_box(context.object) + GizmoUtils.update_bound_box(context.object) return {'FINISHED'} diff --git a/simple_deform_helper/panel.py b/simple_deform_helper/panel.py index 76d859ff9..3b840b0b2 100644 --- a/simple_deform_helper/panel.py +++ b/simple_deform_helper/panel.py @@ -2,10 +2,10 @@ import bpy from bpy.types import Panel, VIEW3D_HT_tool_header -from .utils import PublicUtils +from .utils import GizmoUtils -class SimpleDeformHelperToolPanel(Panel, PublicUtils): +class SimpleDeformHelperToolPanel(Panel, GizmoUtils): bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = 'Tool' @@ -16,7 +16,7 @@ class SimpleDeformHelperToolPanel(Panel, PublicUtils): @classmethod def poll(cls, context): - return PublicUtils.simple_deform_public_poll(context) + return cls.simple_deform_public_poll(context) def draw(self, context): cls = SimpleDeformHelperToolPanel diff --git a/simple_deform_helper/preferences.py b/simple_deform_helper/preferences.py index 526d02f92..d168f4813 100644 --- a/simple_deform_helper/preferences.py +++ b/simple_deform_helper/preferences.py @@ -11,11 +11,11 @@ from bpy.types import ( PropertyGroup, ) -from .utils import PublicUtils, GizmoUtils +from .utils import GizmoUtils -class SimpleDeformGizmoAddonPreferences(AddonPreferences, PublicUtils): - bl_idname = PublicUtils.G_ADDON_NAME +class SimpleDeformGizmoAddonPreferences(AddonPreferences, GizmoUtils): + bl_idname = GizmoUtils.G_ADDON_NAME deform_wireframe_color: FloatVectorProperty( name='Deform Wireframe', @@ -141,7 +141,7 @@ register_class, unregister_class = bpy.utils.register_classes_factory(class_list def register(): register_class() - PublicUtils.pref_().display_bend_axis_switch_gizmo = False + GizmoUtils.pref_().display_bend_axis_switch_gizmo = False bpy.types.Object.SimpleDeformGizmo_PropertyGroup = PointerProperty( type=SimpleDeformGizmoObjectPropertyGroup, name='SimpleDeformGizmo_PropertyGroup') diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index 74fb8b7c2..10f65a7c9 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -8,7 +8,7 @@ from typing import Callable, Any import bpy import numpy as np from bpy.types import AddonPreferences -from mathutils import Vector, Matrix +from mathutils import Vector, Matrix, Euler class PublicData: @@ -93,7 +93,61 @@ class PublicClass(PublicData): return PublicClass.pref_() -class PublicUtils(PublicClass): +class PublicPoll(PublicClass): + + @classmethod + def simple_deform_public_poll(cls, context: 'bpy.types.context') -> bool: + """Public poll + In 3D View + Active Object in ('MESH', 'LATTICE') + Active Modifier Type Is 'SIMPLE_DEFORM' and show_viewport + return True + """ + obj = context.object + if not obj: + return False + + mod = obj.modifiers.active + if not mod: + return False + + space = context.space_data + show_gizmo = space.show_gizmo if space.type == 'VIEW_3D' else True + + available_obj_type = obj and (obj.type in ('MESH', 'LATTICE')) + available_modifiers_type = mod and (mod.type == 'SIMPLE_DEFORM') + is_available_obj = available_modifiers_type and available_obj_type + is_obj_mode = context.mode == 'OBJECT' + show_mod = mod.show_viewport + return is_available_obj and is_obj_mode and show_gizmo and show_mod + + @classmethod + def _simple_deform_modifier_is_bend_poll(cls, context): + """ + Public poll + active modifier deform_method =='BEND' + """ + simple = cls.simple_deform_public_poll(context) + is_bend = (context.object.modifiers.active.deform_method == 'BEND') + return simple and is_bend + + @classmethod + def simple_deform_show_bend_axis_witch_poll(cls, context): + """ + Show D + """ + switch_axis = cls.pref_().display_bend_axis_switch_gizmo + bend = cls._simple_deform_modifier_is_bend_poll(context) + return switch_axis and bend + + @classmethod + def simple_deform_show_gizmo_poll(cls, context): + poll = cls.simple_deform_public_poll(context) + not_switch = (not cls.simple_deform_show_bend_axis_witch_poll(context)) + return poll and not_switch + + +class PublicUtils(PublicPoll): @classmethod def value_limit(cls, value, max_value=1, min_value=0): """ @@ -154,7 +208,7 @@ class PublicUtils(PublicClass): return tuple(i[:] for i in obj.bound_box) @classmethod - def get_mesh_max_min_co(cls, obj: 'bpy.context.object') -> tuple: + def get_mesh_max_min_co(cls, obj: 'bpy.context.object') -> '[Vector,Vector]': if obj.type == 'MESH': ver_len = obj.data.vertices.__len__() list_vertices = np.zeros(ver_len * 3, dtype=np.float32) @@ -165,7 +219,7 @@ class PublicUtils(PublicClass): list_vertices = np.zeros(ver_len * 3, dtype=np.float32) obj.data.points.foreach_get('co', list_vertices) list_vertices = list_vertices.reshape(ver_len, 3) - return tuple(list_vertices.min(axis=0)), tuple(list_vertices.max(axis=0)) + return Vector(list_vertices.min(axis=0)), Vector(list_vertices.max(axis=0)) @classmethod def matrix_calculation(cls, mat: 'Matrix', calculation_list: 'list') -> list: @@ -203,9 +257,51 @@ class PublicUtils(PublicClass): (d, b) (c, a))) + @classmethod + def translate_text(cls, text): + return bpy.app.translations.pgettext(text) -class GizmoUtils(PublicUtils): + @classmethod + def translate_header_text(cls, mode, value): + return cls.translate_text(mode) + ':{}'.format(value) + +class GizmoProperty: + + @property + def obj(self): + return bpy.context.object + + @property + def modifier(self): + obj = self.obj + if not obj: + return + return obj.modifiers.active + + @property + def modifier_deform_axis(self): + mod = self.modifier + if mod: + return mod.deform_axis + + @property + def modifier_angle(self): + mod = self.modifier + if mod: + return mod.angle + + @property + def active_modifier_is_simple_deform(self): + return self.modifier and self.modifier.type == 'SIMPLE_DEFORM' + + @property + def is_use_angle_value(self): + if self.active_modifier_is_simple_deform: + return self.modifier.deform_method in ('TWIST', 'BEND') + + +class GizmoClassMethod(GizmoProperty, PublicUtils): @classmethod def each_face_pos(cls, mat: 'Matrix' = None): if mat is None: @@ -245,32 +341,6 @@ class GizmoUtils(PublicUtils): else: return ob.SimpleDeformGizmo_PropertyGroup - @classmethod - def simple_deform_public_poll(cls, context: 'bpy.types.context') -> bool: - """Public poll - In 3D View - Active Object in ('MESH', 'LATTICE') - Active Modifier Type Is 'SIMPLE_DEFORM' and show_viewport - return True - """ - obj = context.object - if not obj: - return False - - mod = obj.modifiers.active - if not mod: - return False - - space = context.space_data - show_gizmo = space.show_gizmo if space.type == 'VIEW_3D' else True - - available_obj_type = obj and (obj.type in ('MESH', 'LATTICE')) - available_modifiers_type = mod and (mod.type == 'SIMPLE_DEFORM') - is_available_obj = available_modifiers_type and available_obj_type - is_obj_mode = context.mode == 'OBJECT' - show_mod = mod.show_viewport - return is_available_obj and is_obj_mode and show_gizmo and show_mod - @classmethod def get_up_down_return_list(cls, mod, axis, up_, down_, data): top, bottom, left, right, front, back = data @@ -418,7 +488,7 @@ class GizmoUtils(PublicUtils): matrix = obj.matrix_world.copy() # 物体矩阵 # add simple_deform mesh (min_x, min_y, min_z), (max_x, max_y, - max_z) = cls.get_mesh_max_min_co(object) + max_z) = cls.get_mesh_max_min_co(obj) vertexes = ((max_x, min_y, min_z), (min_x, min_y, min_z), (max_x, max_y, min_z), @@ -526,7 +596,85 @@ class GizmoUtils(PublicUtils): modifiers_co['co'] -class tmp: +class GizmoUtils(GizmoClassMethod): + custom_shape: dict + init_mouse_y: float + init_mouse_x: float + mouse_dpi: int + matrix_basis: Matrix + draw_type: str + + def generate_gizmo_mode(self, gizmo_data): + """生成gizmo的上限下限及角度设置 + + Args: + gizmo_data (_type_): _description_ + """ + for i, j, k in gizmo_data: + setattr(self, i, self.gizmos.new(j)) + gizmo = getattr(self, i) + for f in k: + if f == 'target_set_operator': + gizmo.target_set_operator(k[f]) + elif f == 'target_set_prop': + gizmo.target_set_prop(*k[f]) + else: + setattr(gizmo, f, k[f]) + + def init_shape(self): + if not hasattr(self, 'custom_shape'): + self.custom_shape = {} + for i in self.G_GizmoCustomShapeDict: + item = self.G_GizmoCustomShapeDict[i] + self.custom_shape[i] = self.new_custom_shape('TRIS', item) + + def init_setup(self): + self.init_shape() + + def init_invoke(self, context, event): + self.init_mouse_y = event.mouse_y + self.init_mouse_x = event.mouse_x + + def _update_matrix(self, context): + func = getattr(self, 'update_gizmo_matrix', None) + if func: + func(context) + + def draw(self, context): + self.draw_custom_shape(self.custom_shape[self.draw_type]) + self._update_matrix(context) + + def draw_select(self, context, select_id): + self.draw_custom_shape( + self.custom_shape[self.draw_type], select_id=select_id) + self._update_matrix(context) + + def get_delta(self, event): + delta = (self.init_mouse_x - event.mouse_x) / self.mouse_dpi + return delta + + def get_snap(self, delta, tweak): + # ctrl SNAP + # shift PRECISE + is_snap = 'SNAP' in tweak + is_precise = 'PRECISE' in tweak + if is_snap and is_precise: + delta = round(delta) + # delta /= self.mouse_dpi + elif is_snap: + delta //= 5 + delta *= 5 + elif is_precise: + delta //= 0.01 + delta *= 0.01 + print('tweak', delta, tweak) + return delta + + def update_gizmo_matrix(self): + ... + + +class Tmp: @classmethod def get_origin_bounds(cls, obj: 'bpy.types.Object') -> list: modifiers_dict = {} @@ -546,6 +694,29 @@ class tmp: mod.show_viewport = show_viewport return list(bound) + def update_gizmo_rotate(self): + mod = self.modifier + axis = self.modifier_deform_axis + if self.rotate_follow_modifier: + rot = Euler() + if axis == 'X' and (not self.is_positive(mod.angle)): + rot.z = math.pi + + elif axis == 'Y': + if self.is_positive(mod.angle): + rot.z = -(math.pi / 2) + else: + rot.z = math.pi / 2 + elif axis == 'Z': + if self.is_positive(mod.angle): + rot.x = rot.z = rot.y = math.pi / 2 + else: + rot.z = rot.y = math.pi / 2 + rot.x = -(math.pi / 2) + + rot = rot.to_matrix() + self.matrix_basis = self.matrix_basis @ rot.to_4x4() + def register(): PublicData.load_gizmo_data() -- 2.30.2 From 9351c3c895e9372af41e7fff6f4b71f3e6a6533d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=90=8C=E6=96=B0?= <3209970865@qq.com> Date: Thu, 30 Mar 2023 01:42:48 +0800 Subject: [PATCH 09/24] move set deform axis gizmo to file --- simple_deform_helper/gizmo/__init__.py | 14 +- .../gizmo/angle_and_factor.py | 151 ++++----- simple_deform_helper/gizmo/bend_axis.py | 2 +- simple_deform_helper/gizmo/set_deform_axis.py | 53 ++++ .../gizmo/up_down_limits_point.py | 291 +++++++++--------- simple_deform_helper/utils.py | 251 ++++++++++----- 6 files changed, 440 insertions(+), 322 deletions(-) create mode 100644 simple_deform_helper/gizmo/set_deform_axis.py diff --git a/simple_deform_helper/gizmo/__init__.py b/simple_deform_helper/gizmo/__init__.py index 5bb9fcee9..8d136e80a 100644 --- a/simple_deform_helper/gizmo/__init__.py +++ b/simple_deform_helper/gizmo/__init__.py @@ -1,20 +1,22 @@ import bpy -from bpy_types import Gizmo -from .bend_axis import SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo, CustomGizmo -from .up_down_limits_point import GizmoProperty, UpDownLimitsGizmo from .angle_and_factor import AngleGizmoGroup, AngleGizmo +from .bend_axis import BendAxiSwitchGizmoGroup, CustomGizmo +from .set_deform_axis import SetDeformGizmoGroup +from .up_down_limits_point import UpDownLimitsGizmo, UpDownLimitsGizmoGroup from ..draw import Handler class_list = ( - # GizmoProperty, - # UpDownLimitsGizmo, + UpDownLimitsGizmo, + UpDownLimitsGizmoGroup, AngleGizmo, AngleGizmoGroup, CustomGizmo, - SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo, + BendAxiSwitchGizmoGroup, + + SetDeformGizmoGroup, ) register_class, unregister_class = bpy.utils.register_classes_factory(class_list) diff --git a/simple_deform_helper/gizmo/angle_and_factor.py b/simple_deform_helper/gizmo/angle_and_factor.py index 1fcd2a1b1..b8a3f9af3 100644 --- a/simple_deform_helper/gizmo/angle_and_factor.py +++ b/simple_deform_helper/gizmo/angle_and_factor.py @@ -1,58 +1,17 @@ # SPDX-License-Identifier: GPL-2.0-or-later import math +from bpy.types import Gizmo from bpy.types import ( GizmoGroup, ) -from bpy.types import Gizmo -from mathutils import Vector, Euler, Matrix +from mathutils import Vector -from ..utils import GizmoUtils from ..draw import Handler +from ..utils import GizmoUtils -class AngleGizmo(Gizmo, GizmoUtils): - bl_idname = 'ViewSimpleAngleGizmo' - - bl_target_properties = ( - {'id': 'up_limits', 'type': 'FLOAT', 'array_length': 1}, - {'id': 'down_limits', 'type': 'FLOAT', 'array_length': 1}, - {'id': 'angle', 'type': 'FLOAT', 'array_length': 1}, - ) - - __slots__ = ( - 'draw_type', - 'mouse_dpi', - 'empty_object', - 'init_mouse_y', - 'init_mouse_x', - 'custom_shape', - 'int_value_angle', - 'rotate_follow_modifier', - ) - - int_value_angle: float - rotate_follow_modifier: bool - - def setup(self): - self.mouse_dpi = 2 - self.rotate_follow_modifier = True - self.init_setup() - - def invoke(self, context, event): - self.init_invoke(context, event) - self.int_value_angle = self.target_get_value('angle') - return {'RUNNING_MODAL'} - - def modal(self, context, event, tweak): - self.update_header_text(context) - self.update_prop_value(event, tweak) - return {'RUNNING_MODAL'} - - def exit(self, context, cancel): - context.area.header_text_set(None) - if cancel: - self.target_set_value('angle', self.int_value_angle) +class AngleUpdate(GizmoUtils): def update_prop_value(self, event, tweak): # radians 弧度 @@ -74,6 +33,47 @@ class AngleGizmo(Gizmo, GizmoUtils): context.area.header_text_set(text) +class AngleGizmo(Gizmo, AngleUpdate): + bl_idname = 'ViewSimpleAngleGizmo' + + bl_target_properties = ( + {'id': 'up_limits', 'type': 'FLOAT', 'array_length': 1}, + {'id': 'down_limits', 'type': 'FLOAT', 'array_length': 1}, + {'id': 'angle', 'type': 'FLOAT', 'array_length': 1}, + ) + + __slots__ = ( + 'draw_type', + 'mouse_dpi', + 'empty_object', + 'init_mouse_y', + 'init_mouse_x', + 'custom_shape', + 'int_value_angle', + ) + + int_value_angle: float + + def setup(self): + self.mouse_dpi = 10 + self.init_setup() + + def invoke(self, context, event): + self.init_invoke(context, event) + self.int_value_angle = self.target_get_value('angle') + return {'RUNNING_MODAL'} + + def modal(self, context, event, tweak): + self.update_header_text(context) + self.update_prop_value(event, tweak) + return {'RUNNING_MODAL'} + + def exit(self, context, cancel): + context.area.header_text_set(None) + if cancel: + self.target_set_value('angle', self.int_value_angle) + + class AngleGizmoGroup(GizmoGroup, GizmoUtils, Handler): """ShowGizmo """ @@ -81,7 +81,17 @@ class AngleGizmoGroup(GizmoGroup, GizmoUtils, Handler): bl_label = 'AngleGizmoGroup' bl_space_type = 'VIEW_3D' bl_region_type = 'WINDOW' - bl_options = {'3D', 'PERSISTENT', } + bl_options = {'3D', + # 'SCALE', + # 'DEPTH_3D', + # 'SELECT', + 'PERSISTENT', + 'SHOW_MODAL_ALL', + # 'EXCLUDE_MODAL', + # 'TOOL_INIT', # not show + # 'TOOL_FALLBACK_KEYMAP', + # 'VR_REDRAWS' + } @classmethod def poll(cls, context): @@ -107,57 +117,8 @@ class AngleGizmoGroup(GizmoGroup, GizmoUtils, Handler): self.generate_gizmo_mode(add_data) - data_path = 'object.modifiers.active.deform_axis' - set_enum = 'wm.context_set_enum' - - for axis in ('X', 'Y', 'Z'): - # show toggle axis button - gizmo = self.gizmos.new('GIZMO_GT_button_2d') - gizmo.icon = f'EVENT_{axis.upper()}' - gizmo.draw_options = {'BACKDROP', 'HELPLINE'} - ops = gizmo.target_set_operator(set_enum) - ops.data_path = data_path - ops.value = axis - gizmo.color = (0, 0, 0) - gizmo.alpha = 0.3 - gizmo.color_highlight = 1.0, 1.0, 1.0 - gizmo.alpha_highlight = 0.3 - gizmo.use_draw_modal = True - gizmo.use_draw_value = True - gizmo.scale_basis = 0.1 - setattr(self, f'deform_axis_{axis.lower()}', gizmo) - def refresh(self, context): self.angle.target_set_prop('angle', context.object.modifiers.active, 'angle') - - # pro = context.object.SimpleDeformGizmo_PropertyGroup - # self.down_limits.target_set_prop('down_limits', - # pro, - # 'down_limits') - # self.down_limits.target_set_prop('up_limits', - # pro, - # 'up_limits') - # self.up_limits.target_set_prop('down_limits', - # pro, - # 'down_limits') - # self.up_limits.target_set_prop('up_limits', - # pro, - # 'up_limits') - - def draw_prepare(self, context): - ob = context.object - mat = ob.matrix_world - - if 'co' in self.G_SimpleDeformGizmoHandlerDit: - def _mat(f): - co = self.G_SimpleDeformGizmoHandlerDit['co'][0] - co = (co[0] + (max(ob.dimensions) * f), co[1], - co[2] - (min(ob.dimensions) * 0.3)) - return mat @ Vector(co) - - self.deform_axis_x.matrix_basis.translation = _mat(0) - self.deform_axis_y.matrix_basis.translation = _mat(0.3) - self.deform_axis_z.matrix_basis.translation = _mat(0.6) diff --git a/simple_deform_helper/gizmo/bend_axis.py b/simple_deform_helper/gizmo/bend_axis.py index 3d102ec70..7134e0e1b 100644 --- a/simple_deform_helper/gizmo/bend_axis.py +++ b/simple_deform_helper/gizmo/bend_axis.py @@ -40,7 +40,7 @@ class CustomGizmo(Gizmo, GizmoUtils, Handler): return {'RUNNING_MODAL'} -class SimpleDeformGizmoGroupDisplayBendAxiSwitchGizmo(GizmoGroup, GizmoUtils): +class BendAxiSwitchGizmoGroup(GizmoGroup, GizmoUtils): """绘制切换变型轴的 变换方向 """ diff --git a/simple_deform_helper/gizmo/set_deform_axis.py b/simple_deform_helper/gizmo/set_deform_axis.py new file mode 100644 index 000000000..875ab6745 --- /dev/null +++ b/simple_deform_helper/gizmo/set_deform_axis.py @@ -0,0 +1,53 @@ +from bpy.types import GizmoGroup +from mathutils import Vector + +from utils import GizmoUtils + + +class SetDeformGizmoGroup(GizmoGroup, GizmoUtils): + bl_idname = 'OBJECT_GGT_SetDeformGizmoGroup' + bl_label = 'SetDeformGizmoGroup' + bl_space_type = 'VIEW_3D' + bl_region_type = 'WINDOW' + bl_options = {'3D', + 'PERSISTENT', + 'SHOW_MODAL_ALL', + } + + @classmethod + def poll(cls, context): + return cls.simple_deform_show_gizmo_poll(context) + + def setup(self, context): + data_path = 'object.modifiers.active.deform_axis' + set_enum = 'wm.context_set_enum' + + for axis in ('X', 'Y', 'Z'): + # show toggle axis button + gizmo = self.gizmos.new('GIZMO_GT_button_2d') + gizmo.icon = f'EVENT_{axis.upper()}' + gizmo.draw_options = {'BACKDROP', 'HELPLINE'} + ops = gizmo.target_set_operator(set_enum) + ops.data_path = data_path + ops.value = axis + gizmo.color = (0, 0, 0) + gizmo.alpha = 0.3 + gizmo.color_highlight = 1.0, 1.0, 1.0 + gizmo.alpha_highlight = 0.3 + gizmo.use_draw_modal = True + gizmo.use_draw_value = True + gizmo.scale_basis = 0.1 + setattr(self, f'deform_axis_{axis.lower()}', gizmo) + + def draw_prepare(self, context): + + if 'co' in self.G_SimpleDeformGizmoHandlerDit: + def _mat(f): + co = self.G_SimpleDeformGizmoHandlerDit['co'][0] + co = (co[0] + (max(self.obj.dimensions) * f), co[1], + co[2] - (min(self.obj.dimensions) * 0.3)) + return self.obj_matrix_world @ Vector(co) + + self.deform_axis_x.matrix_basis.translation = _mat(0) + self.deform_axis_y.matrix_basis.translation = _mat(0.3) + self.deform_axis_z.matrix_basis.translation = _mat(0.6) diff --git a/simple_deform_helper/gizmo/up_down_limits_point.py b/simple_deform_helper/gizmo/up_down_limits_point.py index c7e1eb46e..2f2c11309 100644 --- a/simple_deform_helper/gizmo/up_down_limits_point.py +++ b/simple_deform_helper/gizmo/up_down_limits_point.py @@ -2,19 +2,15 @@ import math from typing import Callable, Any import bpy +from bpy.types import Gizmo, GizmoGroup from bpy_extras import view3d_utils -from bpy.types import Gizmo -from mathutils import Euler, Vector +from mathutils import Vector from ..draw import Handler from ..utils import GizmoUtils class GizmoProperty(GizmoUtils, Handler): - @property - def is_angle_mode(self): - return self.ctrl_mode == 'angle' - @property def is_up_limits_mode(self): return self.ctrl_mode == 'up_limits' @@ -24,85 +20,17 @@ class GizmoProperty(GizmoUtils, Handler): return self.ctrl_mode == 'down_limits' -class UpDownLimitsGizmo(GizmoProperty, Gizmo): - """显示轴向切换拖动点Gizmo(两个点) - """ - bl_idname = 'UpDownLimitsGizmo' - - bl_target_properties = ( - {'id': 'up_limits', 'type': 'FLOAT', 'array_length': 1}, - {'id': 'down_limits', 'type': 'FLOAT', 'array_length': 1}, - ) - - __slots__ = ( - 'mod', - 'up', - 'down', - 'up_', - 'down_', - 'draw_type', - 'mouse_dpi', - 'ctrl_mode', - 'empty_object', - 'init_mouse_y', - 'init_mouse_x', - 'custom_shape', - 'int_value_angle', - 'value_deform_axis', - 'int_value_up_limits', - 'int_value_down_limits', - 'rotate_follow_modifier', - ) - - def update_draw_limits_bound_box(self, data, mod, axis, mat, up_, down_): - top, bottom, left, right, front, back = data - if mod.origin: - vector_axis = self.get_vector_axis(mod) - origin_mat = mod.origin.matrix_world.to_3x3() - axis_ = origin_mat @ vector_axis - point_lit = [[top, bottom], [left, right], [front, back]] - for f in range(point_lit.__len__()): - i = point_lit[f][0] - j = point_lit[f][1] - angle = self.point_to_angle(i, j, f, axis_) - if abs(angle - 180) < 0.00001: - point_lit[f][1], point_lit[f][0] = up_, down_ - elif abs(angle) < 0.00001: - point_lit[f][0], point_lit[f][1] = up_, down_ - [[top, bottom], [left, right], [front, back]] = point_lit - else: - top, bottom, left, right, front, back = self.get_up_down_return_list( - mod, axis, up_, down_, data) - data = top, bottom, left, right, front, back - (top, bottom, left, right, front, - back) = self.matrix_calculation(mat.inverted(), data) - self.G_SimpleDeformGizmoHandlerDit['draw_limits_bound_box'] = ( - mat, ((right[0], back[1], top[2]), (left[0], front[1], bottom[2],))) - - def update_matrix_basis_translation(self, co, mat, up_, down_): - if self.is_angle_mode: - self.matrix_basis.translation = mat @ Vector((co[1])) - elif self.is_up_limits_mode: - self.matrix_basis.translation = up_ - elif self.is_down_limits_mode: - self.matrix_basis.translation = down_ +class GizmoUpdate(GizmoProperty): def update_gizmo_matrix(self, context): - ob = context.object - mat = ob.matrix_world - mod = context.object.modifiers.active - axis = mod.deform_axis - if mod.origin: - self.matrix_basis = mod.origin.matrix_world.normalized() - else: - self.matrix_basis = ob.matrix_world.normalized() + self._update_matrix_basis_to_obj() co = self.generate_co_data() # calculation limits position top, bottom, left, right, front, back = self.each_face_pos(mat) (up, down), (up_, down_) = self.get_limits_pos( mod, (top, bottom, left, right, front, back)) - self.update_matrix_basis_translation(co, mat, up_, down_) + self._update_matrix_basis_translation(co, mat, up_, down_) self.up = up self.down = down @@ -113,42 +41,18 @@ class UpDownLimitsGizmo(GizmoProperty, Gizmo): data = top, bottom, left, right, front, back self.update_draw_limits_bound_box(data, mod, axis, mat, up_, down_) - def setup(self): - self.generate_co_data() - self.draw_type = 'None_GizmoGroup_' - self.ctrl_mode = 'up_limits' # up_limits , down_limits - self.mouse_dpi = 10 - self.rotate_follow_modifier = True - self.add_handler() + def _update_matrix_basis_to_obj(self): + origin = self.modifier.origin + if origin: + self.matrix_basis = origin.matrix_world.normalized() + else: + self.matrix_basis = self.obj_matrix_world.normalized() - def invoke(self, context, event): - self.init_invoke(context, event) - mod = context.object.modifiers.active - limits = mod.limits - up_limits = limits[1] - down_limits = limits[0] - - if 'up_limits' == self.ctrl_mode: - self.int_value_up_limits = up_limits - self.target_set_value('up_limits', self.int_value_up_limits) - elif 'down_limits' == self.ctrl_mode: - self.int_value_down_limits = down_limits - self.target_set_value('down_limits', self.int_value_down_limits) - return {'RUNNING_MODAL'} - - def exit(self, context, cancel): - context.area.header_text_set(None) - - if cancel: - if 'angle' == self.ctrl_mode: - self.target_set_value('angle', self.int_value_angle) - elif 'deform_axis' == self.ctrl_mode: - self.target_set_value('deform_axis', self.value_deform_axis) - elif 'up_limits' == self.ctrl_mode: - self.target_set_value('up_limits', self.int_value_up_limits) - elif 'down_limits' == self.ctrl_mode: - self.target_set_value( - 'down_limits', self.int_value_down_limits) + def _update_matrix_basis_translation(self, co, mat, up_, down_): + if self.is_up_limits_mode: + self.matrix_basis.translation = up_ + elif self.is_down_limits_mode: + self.matrix_basis.translation = down_ def delta_update(self, context, event, delta): if ('draw_line' in self.G_SimpleDeformGizmoHandlerDit) and (self.ctrl_mode in ('up_limits', 'down_limits')): @@ -231,7 +135,7 @@ class UpDownLimitsGizmo(GizmoProperty, Gizmo): text = translate(mode) + ' ' - if self.is_use_angle_value and self.is_angle_mode: + if self.modifier_is_use_angle_value and self.is_angle_mode: text += t_() elif self.is_up_limits_mode: text += t_('Upper limit', up_limits) @@ -261,35 +165,148 @@ class UpDownLimitsGizmo(GizmoProperty, Gizmo): return {'RUNNING_MODAL'} - def modal(self, context, event, tweak): - self.update_bound_box(context.object) - ob = context.object - mod = ob.modifiers.active +class UpDownLimitsGizmo(Gizmo, GizmoUpdate): + """显示轴向切换拖动点Gizmo(两个点) + """ + bl_idname = 'UpDownLimitsGizmo' + + bl_target_properties = ( + {'id': 'up_limits', 'type': 'FLOAT', 'array_length': 1}, + {'id': 'down_limits', 'type': 'FLOAT', 'array_length': 1}, + ) + + __slots__ = ( + 'mod', + 'up_limits', + 'down_limits', + 'draw_type', + 'mouse_dpi', + 'ctrl_mode', + 'empty_object', + 'init_mouse_y', + 'init_mouse_x', + 'custom_shape', + 'value_deform_axis', + 'int_value_up_limits', + 'int_value_down_limits', + ) + + def setup(self): + self.generate_co_data() + self.draw_type = 'None_GizmoGroup_' + self.ctrl_mode = 'up_limits' # up_limits , down_limits + self.mouse_dpi = 10 + + def invoke(self, context, event): + self.init_invoke(context, event) + mod = context.object.modifiers.active limits = mod.limits up_limits = limits[1] down_limits = limits[0] - origin = self.get_origin_property_group(mod, ob) - origin_mode = origin.origin_mode - middle = origin_mode in ('LIMITS_MIDDLE', 'MIDDLE') - limit_scope = self.pref.modifiers_limits_tolerance - max_value = up_limits - limit_scope - min_value = down_limits + limit_scope - difference_value = up_limits - down_limits - delta = self.get_delta(event, tweak) - delta = self.delta_update(context, event, delta) + if 'up_limits' == self.ctrl_mode: + self.int_value_up_limits = up_limits + self.target_set_value('up_limits', self.int_value_up_limits) + elif 'down_limits' == self.ctrl_mode: + self.int_value_down_limits = down_limits + self.target_set_value('down_limits', self.int_value_down_limits) + return {'RUNNING_MODAL'} - if origin_mode != 'NOT' and ('draw_line' in self.G_SimpleDeformGizmoHandlerDit): - self.empty_object, _ = self.new_empty(ob, mod) - self.G_SimpleDeformGizmoHandlerDit['empty_object'] = self.empty_object - data = up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode - self.set_prop_value(data) - self.update_gizmo_matrix(context) - self.update_empty_matrix() - self.update_bound_box(context.object) + def exit(self, context, cancel): + context.area.header_text_set(None) - self.update_header_text(context, mod, origin, up_limits, down_limits) - self.add_handler() + if cancel: + if 'deform_axis' == self.ctrl_mode: + self.target_set_value('deform_axis', self.value_deform_axis) + elif 'up_limits' == self.ctrl_mode: + self.target_set_value('up_limits', self.int_value_up_limits) + elif 'down_limits' == self.ctrl_mode: + self.target_set_value( + 'down_limits', self.int_value_down_limits) - return self.event_ops(event, ob, origin) + def modal(self, context, event, tweak): + # self.update_bound_box(context.object) + # + # ob = context.object + # mod = ob.modifiers.active + # limits = mod.limits + # up_limits = limits[1] + # down_limits = limits[0] + # origin = self.get_origin_property_group(mod, ob) + # origin_mode = origin.origin_mode + # middle = origin_mode in ('LIMITS_MIDDLE', 'MIDDLE') + # limit_scope = self.pref.modifiers_limits_tolerance + # max_value = up_limits - limit_scope + # min_value = down_limits + limit_scope + # difference_value = up_limits - down_limits + # + # delta = self.get_delta(event, tweak) + # delta = self.delta_update(context, event, delta) + # + # if origin_mode != 'NOT' and ('draw_line' in self.G_SimpleDeformGizmoHandlerDit): + # self.empty_object, _ = self.new_empty(ob, mod) + # self.G_SimpleDeformGizmoHandlerDit['empty_object'] = self.empty_object + # data = up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode + # self.set_prop_value(data) + # self.update_gizmo_matrix(context) + # self.update_empty_matrix() + # self.update_bound_box(context.object) + # self.update_header_text(context, mod, origin, up_limits, down_limits) + # self.add_handler() + + # return self.event_ops(event, ob, origin) + return {'RUNNING_MODAL'} + + +class UpDownLimitsGizmoGroup(GizmoGroup, GizmoUtils, Handler): + bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup' + + @classmethod + def poll(cls, context): + return cls.simple_deform_show_gizmo_poll(context) + + def setup(self, context): + sd_name = UpDownLimitsGizmo.bl_idname + + add_data = ( + ('up_limits', + sd_name, + {'ctrl_mode': 'up_limits', + 'draw_type': 'Sphere_GizmoGroup_', + 'mouse_dpi': 1000, + 'color': (1.0, 0, 0), + 'alpha': 0.5, + 'color_highlight': (1.0, 1.0, 1.0), + 'alpha_highlight': 0.3, + 'use_draw_modal': True, + 'scale_basis': 0.1, + 'use_draw_value': True, }), + ('down_limits', + sd_name, + {'ctrl_mode': 'down_limits', + 'draw_type': 'Sphere_GizmoGroup_', + 'mouse_dpi': 1000, + 'color': (0, 1.0, 0), + 'alpha': 0.5, + 'color_highlight': (1.0, 1.0, 1.0), + 'alpha_highlight': 0.3, + 'use_draw_modal': True, + 'scale_basis': 0.1, + 'use_draw_value': True, }), + ) + + def refresh(self, context): + pro = context.object.SimpleDeformGizmo_PropertyGroup + self.down_limits.target_set_prop('down_limits', + pro, + 'down_limits') + self.down_limits.target_set_prop('up_limits', + pro, + 'up_limits') + self.up_limits.target_set_prop('down_limits', + pro, + 'down_limits') + self.up_limits.target_set_prop('up_limits', + pro, + 'up_limits') diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index 10f65a7c9..aea0e8e3a 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -128,7 +128,7 @@ class PublicPoll(PublicClass): active modifier deform_method =='BEND' """ simple = cls.simple_deform_public_poll(context) - is_bend = (context.object.modifiers.active.deform_method == 'BEND') + is_bend = simple and (context.object.modifiers.active.deform_method == 'BEND') return simple and is_bend @classmethod @@ -266,74 +266,7 @@ class PublicUtils(PublicPoll): return cls.translate_text(mode) + ':{}'.format(value) -class GizmoProperty: - - @property - def obj(self): - return bpy.context.object - - @property - def modifier(self): - obj = self.obj - if not obj: - return - return obj.modifiers.active - - @property - def modifier_deform_axis(self): - mod = self.modifier - if mod: - return mod.deform_axis - - @property - def modifier_angle(self): - mod = self.modifier - if mod: - return mod.angle - - @property - def active_modifier_is_simple_deform(self): - return self.modifier and self.modifier.type == 'SIMPLE_DEFORM' - - @property - def is_use_angle_value(self): - if self.active_modifier_is_simple_deform: - return self.modifier.deform_method in ('TWIST', 'BEND') - - -class GizmoClassMethod(GizmoProperty, PublicUtils): - @classmethod - def each_face_pos(cls, mat: 'Matrix' = None): - if mat is None: - mat = Matrix() - return cls.co_to_direction(mat, cls.G_SimpleDeformGizmoHandlerDit['co']) - - @classmethod - def update_matrix(cls, mod, ob): - if mod.deform_method == 'BEND': - cls.new_empty(ob, mod) - if mod.origin: - empty_object = mod.origin - modifiers_co = cls.G_SimpleDeformGizmoHandlerDit['modifiers_co'] - for index, mod_name in enumerate(modifiers_co): - co_items = list(modifiers_co.items()) - if mod.name == mod_name: - data = co_items[index - 1][1] if ( - index or (index != 1)) else modifiers_co['co'] - (up, down), (up_, down_) = cls.get_limits_pos( - mod, cls.co_to_direction(ob.matrix_world.copy(), data)) - origin_mode = cls.get_origin_property_group( - mod, ob).origin_mode - cls.set_empty_obj_matrix( - origin_mode, empty_object, up_, down_, up, down) - - @classmethod - def update_empty_matrix(cls): - ob = bpy.context.object - for mod in ob.modifiers: - if mod.type == 'SIMPLE_DEFORM': - cls.update_matrix(mod, ob) - +class GizmoClassMethod(PublicUtils): @classmethod def get_origin_property_group(cls, mod, ob): if mod.origin: @@ -481,6 +414,44 @@ class GizmoClassMethod(GizmoProperty, PublicUtils): axis == 'Z') else vector return vector_axis + @classmethod + def generate_co_data(cls): + handler_dit = cls.G_SimpleDeformGizmoHandlerDit + + if 'co' not in handler_dit: + handler_dit['co'] = cls.get_mesh_max_min_co( + bpy.context.object) + return handler_dit['co'] + + +class GizmoUpdate(GizmoClassMethod): + + @classmethod + def update_matrix(cls, mod, ob): + if mod.deform_method == 'BEND': + cls.new_empty(ob, mod) + if mod.origin: + empty_object = mod.origin + modifiers_co = cls.G_SimpleDeformGizmoHandlerDit['modifiers_co'] + for index, mod_name in enumerate(modifiers_co): + co_items = list(modifiers_co.items()) + if mod.name == mod_name: + data = co_items[index - 1][1] if ( + index or (index != 1)) else modifiers_co['co'] + (up, down), (up_, down_) = cls.get_limits_pos( + mod, cls.co_to_direction(ob.matrix_world.copy(), data)) + origin_mode = cls.get_origin_property_group( + mod, ob).origin_mode + cls.set_empty_obj_matrix( + origin_mode, empty_object, up_, down_, up, down) + + @classmethod + def update_empty_matrix(cls): + ob = bpy.context.object + for mod in ob.modifiers: + if mod.type == 'SIMPLE_DEFORM': + cls.update_matrix(mod, ob) + @classmethod def update_bound_box(cls, obj: 'bpy.types.Object'): context = bpy.context @@ -574,15 +545,6 @@ class GizmoClassMethod(GizmoProperty, PublicUtils): cls.G_SimpleDeformGizmoHandlerDit['draw'] = (ver, indices, matrix, modifiers, limits) - @classmethod - def generate_co_data(cls): - handler_dit = cls.G_SimpleDeformGizmoHandlerDit - - if 'co' not in handler_dit: - handler_dit['co'] = cls.get_mesh_max_min_co( - bpy.context.object) - return handler_dit['co'] - @classmethod def update_co_data(cls, ob, mod): handler_dit = cls.G_SimpleDeformGizmoHandlerDit @@ -595,8 +557,132 @@ class GizmoClassMethod(GizmoProperty, PublicUtils): cls.G_SimpleDeformGizmoHandlerDit['co'] = co_items[index - 1][1] if (index or (index != 1)) else \ modifiers_co['co'] + def update_draw_limits_bound_box(self, data, mod, axis, mat, up_, down_): + top, bottom, left, right, front, back = data + if mod.origin: + vector_axis = self.get_vector_axis(mod) + origin_mat = mod.origin.matrix_world.to_3x3() + axis_ = origin_mat @ vector_axis + point_lit = [[top, bottom], [left, right], [front, back]] + for f in range(point_lit.__len__()): + i = point_lit[f][0] + j = point_lit[f][1] + angle = self.point_to_angle(i, j, f, axis_) + if abs(angle - 180) < 0.00001: + point_lit[f][1], point_lit[f][0] = up_, down_ + elif abs(angle) < 0.00001: + point_lit[f][0], point_lit[f][1] = up_, down_ + [[top, bottom], [left, right], [front, back]] = point_lit + else: + top, bottom, left, right, front, back = self.get_up_down_return_list( + mod, axis, up_, down_, data) + data = top, bottom, left, right, front, back + (top, bottom, left, right, front, + back) = self.matrix_calculation(mat.inverted(), data) + self.G_SimpleDeformGizmoHandlerDit['draw_limits_bound_box'] = ( + mat, ((right[0], back[1], top[2]), (left[0], front[1], bottom[2],))) -class GizmoUtils(GizmoClassMethod): + def update_bound_box_wireframe(self): + ... + + def update_up_down_limits_wireframe(self): + ... + + def update_deform_wireframe(self): + ... + + +class PublicProperty(GizmoUpdate): + + @classmethod + def each_face_pos(cls, mat: 'Matrix' = None): + if mat is None: + mat = Matrix() + return cls.co_to_direction(mat, cls.G_SimpleDeformGizmoHandlerDit['co']) + + @property + def obj(self): + return bpy.context.object + + @property + def obj_matrix_world(self): + if self.obj: + return self.obj.matrix_world + + @property + def modifier(self): + obj = self.obj + if not obj: + return + return obj.modifiers.active + + @property + def modifier_deform_axis(self): + mod = self.modifier + if mod: + return mod.deform_axis + + @property + def modifier_angle(self): + mod = self.modifier + if mod: + return mod.angle + + @property + def active_modifier_is_simple_deform(self): + return self.modifier and self.modifier.type == 'SIMPLE_DEFORM' + + @property + def modifier_is_use_angle_value(self): + if self.active_modifier_is_simple_deform: + return self.modifier.deform_method in ('TWIST', 'BEND') + + @property + def point_up(self): + ... + + @property + def point_down(self): + ... + + @property + def point_limits_up(self): + ... + + @property + def point_limits_down(self): + ... + + @property + def point_top(self): + ... + + @property + def point_bottom(self): + ... + + @property + def point_left(self): + ... + + @property + def point_right(self): + ... + + @property + def point_front(self): + ... + + @property + def point_back(self): + ... + + @classmethod + def clear_cache(cls): + ... + + +class GizmoUtils(PublicProperty): custom_shape: dict init_mouse_y: float init_mouse_x: float @@ -654,20 +740,19 @@ class GizmoUtils(GizmoClassMethod): return delta def get_snap(self, delta, tweak): - # ctrl SNAP - # shift PRECISE + # TODO ctrl SNAP + # TODO shift PRECISE is_snap = 'SNAP' in tweak is_precise = 'PRECISE' in tweak if is_snap and is_precise: delta = round(delta) - # delta /= self.mouse_dpi elif is_snap: delta //= 5 delta *= 5 elif is_precise: + delta /= self.mouse_dpi delta //= 0.01 delta *= 0.01 - print('tweak', delta, tweak) return delta def update_gizmo_matrix(self): -- 2.30.2 From 5beacd168afc380eb5a68652c5fa263e974e8f19 Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Thu, 30 Mar 2023 19:02:49 +0800 Subject: [PATCH 10/24] draw bound and line --- simple_deform_helper/draw.py | 166 ++--- simple_deform_helper/gizmo/__init__.py | 5 +- .../gizmo/angle_and_factor.py | 36 +- simple_deform_helper/gizmo/bend_axis.py | 23 +- simple_deform_helper/gizmo/set_deform_axis.py | 14 +- .../gizmo/up_down_limits_point.py | 282 ++++---- simple_deform_helper/operators.py | 2 - simple_deform_helper/preferences.py | 2 +- simple_deform_helper/update.py | 14 +- simple_deform_helper/utils.py | 608 +++++++++--------- 10 files changed, 554 insertions(+), 598 deletions(-) diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index e7970055b..72dde2f8d 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -11,16 +11,16 @@ from .utils import GizmoUtils class Handler: @classmethod def add_handler(cls): - if 'handler' not in cls.G_SimpleDeformGizmoHandlerDit: - cls.G_SimpleDeformGizmoHandlerDit['handler'] = bpy.types.SpaceView3D.draw_handler_add( - Draw3D.draw_bound_box, (), 'WINDOW', 'POST_VIEW') + if 'handler' not in cls.G_GizmoData: + cls.G_GizmoData['handler'] = bpy.types.SpaceView3D.draw_handler_add( + Draw3D().draw, (), 'WINDOW', 'POST_VIEW') @classmethod def del_handler_text(cls): - if 'handler_text' in cls.G_SimpleDeformGizmoHandlerDit: + if 'handler_text' in cls.G_GizmoData: bpy.types.SpaceView3D.draw_handler_remove( - cls.G_SimpleDeformGizmoHandlerDit['handler_text'], 'WINDOW') - cls.G_SimpleDeformGizmoHandlerDit.pop('handler_text') + cls.G_GizmoData['handler_text'], 'WINDOW') + cls.G_GizmoData.pop('handler_text') @classmethod def del_handler(cls): @@ -33,54 +33,13 @@ class Handler: cls.del_handler_text() - if 'handler' in cls.G_SimpleDeformGizmoHandlerDit: + if 'handler' in cls.G_GizmoData: bpy.types.SpaceView3D.draw_handler_remove( - cls.G_SimpleDeformGizmoHandlerDit['handler'], 'WINDOW') - cls.G_SimpleDeformGizmoHandlerDit.clear() + cls.G_GizmoData['handler'], 'WINDOW') + cls.G_GizmoData.clear() -class Draw3D(GizmoUtils): - - @classmethod - def draw_bound_box(cls): - gpu.state.blend_set('ALPHA') - gpu.state.line_width_set(1) - - gpu.state.blend_set('ALPHA') - gpu.state.depth_test_set('ALWAYS') - - context = bpy.context - if cls.simple_deform_public_poll(context): - cls.is_draw_box(context) - else: - Handler.del_handler() - - @classmethod - def is_draw_box(cls, context): - obj = context.object # 活动物体 - matrix = obj.matrix_world # 活动物体矩阵 - modifier = context.object.modifiers.active # 活动修改器 - - pref = cls.pref_() - simple_poll = cls.simple_deform_public_poll(context) - bend = modifier and (modifier.deform_method == 'BEND') - display_switch_axis = not pref.display_bend_axis_switch_gizmo - - cls.draw_scale_text(obj) - cls.update_co_data(obj, modifier) - - co_data = cls.generate_co_data() - - if simple_poll and ((not bend) or display_switch_axis): - # draw bound box - cls.draw_box(co_data, matrix) - # cls.draw_deform_mesh(obj, context) - cls.draw_limits_line() - cls.draw_limits_bound_box() - elif simple_poll and (bend and not display_switch_axis): - cls.draw_box(co_data, matrix) - cls.new_empty(obj, modifier) - +class DrawPublic: @classmethod def draw_3d_shader(cls, pos, indices, color=None, *, shader_name='3D_UNIFORM_COLOR', draw_type='LINES'): shader = gpu.shader.from_builtin(shader_name) @@ -96,6 +55,8 @@ class Draw3D(GizmoUtils): batch.draw(shader) + +class DrawText: font_info = { 'font_id': 0, 'handler': None, @@ -115,7 +76,7 @@ class Draw3D(GizmoUtils): f' which will cause the deformation of the simple deformation modifier.' f' Please apply the scaling before deformation') if obj.scale == Vector((1, 1, 1)): - Handler.del_handler_text() + cls.del_handler_text() @classmethod def draw_text(cls, x, y, text='Hello Word', font_id=0, size=10, *, color=(0.5, 0.5, 0.5, 1), dpi=72, column=0): @@ -124,56 +85,62 @@ class Draw3D(GizmoUtils): blf.draw(font_id, text) blf.color(font_id, *color) - @classmethod - def draw_box(cls, data, mat): - pref = cls.pref_() - coords = cls.matrix_calculation(mat, - cls.data_to_calculation(data)) - cls.draw_3d_shader(coords, cls.G_INDICES, pref.bound_box_color) - @classmethod - def data_to_calculation(cls, data): - ((min_x, min_y, min_z), (max_x, max_y, max_z)) = data - return ( - (max_x, min_y, min_z), - (min_x, min_y, min_z), - (max_x, max_y, min_z), - (min_x, max_y, min_z), - (max_x, min_y, max_z), - (min_x, min_y, max_z), - (max_x, max_y, max_z), - (min_x, max_y, max_z)) +class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): - @classmethod - def draw_limits_bound_box(cls): + def draw(self): + gpu.state.blend_set('ALPHA') + gpu.state.line_width_set(1) - pref = cls.pref_() - handler_dit = cls.G_SimpleDeformGizmoHandlerDit - if 'draw_limits_bound_box' in handler_dit: - # draw limits_bound_box - mat, data = handler_dit['draw_limits_bound_box'] - coords = cls.matrix_calculation(mat, cls.data_to_calculation(data)) - cls.draw_3d_shader(coords, - cls.G_INDICES, - pref.limits_bound_box_color) + gpu.state.blend_set('ALPHA') + gpu.state.depth_test_set('ALWAYS') - @classmethod - def draw_limits_line(cls): - handler_dit = cls.G_SimpleDeformGizmoHandlerDit - if 'draw_line' in handler_dit: - line_pos, limits_pos, = handler_dit['draw_line'] - # draw limits line - cls.draw_3d_shader(limits_pos, ((1, 0),), (1, 1, 0, 0.5)) - # draw line - cls.draw_3d_shader(line_pos, ((1, 0),), (1, 1, 0, 0.3)) - # draw pos - cls.draw_3d_shader([line_pos[1]], (), (0, 1, 0, 0.5), - shader_name='3D_UNIFORM_COLOR', draw_type='POINTS') + context = bpy.context + if self.simple_deform_public_poll(context): + self.draw_3d(context) + + def draw_3d(self, context): + obj = context.object # 活动物体 + + self.draw_scale_text(obj) + if not self.modifier_origin_angle_is_available: + self.draw_bound_box() + ... + if self.simple_deform_show_gizmo_poll(context): + # draw bound box + self.draw_bound_box() + # cls.draw_deform_mesh(obj, context) + self.draw_limits_line() + self.draw_limits_bound_box() + elif self.simple_deform_show_bend_axis_witch_poll(context): + self.draw_bound_box() + # self.new_empty(obj, modifier) + + def draw_bound_box(self): + coords = self.matrix_calculation(self.obj_matrix_world, + self.tow_co_to_coordinate(self.get_bound_co_data())) + self.draw_3d_shader(coords, self.G_INDICES, self.pref.bound_box_color) + + def draw_limits_bound_box(self): + self.draw_3d_shader(self.modifier_limits_bound_box, + self.G_INDICES, + self.pref.limits_bound_box_color, + ) + + def draw_limits_line(self): + line_pos, limits_pos, = self.modifier_limits_point + # draw limits line + self.draw_3d_shader(limits_pos, ((1, 0),), (1, 1, 0, 0.5)) + # draw line + self.draw_3d_shader(line_pos, ((1, 0),), (1, 1, 0, 0.3)) + # draw pos + self.draw_3d_shader([line_pos[1]], (), (0, 1, 0, 0.5), + shader_name='3D_UNIFORM_COLOR', draw_type='POINTS') @classmethod def draw_deform_mesh(cls, ob, context): pref = cls.pref_() - handler_dit = cls.G_SimpleDeformGizmoHandlerDit + handler_dit = cls.G_GizmoData active = context.object.modifiers.active # draw deform mesh if 'draw' in handler_dit: @@ -183,8 +150,9 @@ class Draw3D(GizmoUtils): cls.draw_3d_shader( pos, indices, pref.deform_wireframe_color) - @classmethod - def draw_scale_text(cls, ob): - if (ob.scale != Vector((1, 1, 1))) and ('handler_text' not in cls.G_SimpleDeformGizmoHandlerDit): - cls.G_SimpleDeformGizmoHandlerDit['handler_text'] = bpy.types.SpaceView3D.draw_handler_add( - cls.draw_str, (), 'WINDOW', 'POST_PIXEL') + def draw_scale_text(self, ob): + ob = self.obj + dit = self.G_GizmoData + if (ob.scale != Vector((1, 1, 1))) and ('handler_text' not in dit): + dit['handler_text'] = bpy.types.SpaceView3D.draw_handler_add( + self.draw_str, (), 'WINDOW', 'POST_PIXEL') diff --git a/simple_deform_helper/gizmo/__init__.py b/simple_deform_helper/gizmo/__init__.py index 8d136e80a..756b41aec 100644 --- a/simple_deform_helper/gizmo/__init__.py +++ b/simple_deform_helper/gizmo/__init__.py @@ -4,7 +4,7 @@ from .angle_and_factor import AngleGizmoGroup, AngleGizmo from .bend_axis import BendAxiSwitchGizmoGroup, CustomGizmo from .set_deform_axis import SetDeformGizmoGroup from .up_down_limits_point import UpDownLimitsGizmo, UpDownLimitsGizmoGroup -from ..draw import Handler +from ..draw import Draw3D class_list = ( UpDownLimitsGizmo, @@ -23,9 +23,10 @@ register_class, unregister_class = bpy.utils.register_classes_factory(class_list def register(): + Draw3D.add_handler() register_class() def unregister(): - Handler.del_handler() + Draw3D.del_handler() unregister_class() diff --git a/simple_deform_helper/gizmo/angle_and_factor.py b/simple_deform_helper/gizmo/angle_and_factor.py index b8a3f9af3..5aecb93ce 100644 --- a/simple_deform_helper/gizmo/angle_and_factor.py +++ b/simple_deform_helper/gizmo/angle_and_factor.py @@ -5,10 +5,8 @@ from bpy.types import Gizmo from bpy.types import ( GizmoGroup, ) -from mathutils import Vector -from ..draw import Handler -from ..utils import GizmoUtils +from ..utils import GizmoUtils, GizmoGroupUtils class AngleUpdate(GizmoUtils): @@ -26,10 +24,16 @@ class AngleUpdate(GizmoUtils): def update_gizmo_matrix(self, context): matrix = context.object.matrix_world - self.matrix_basis.translation = matrix @ Vector((self.generate_co_data()[1])) + point = self.get_bound_co_data()[1] + self.matrix_basis = self.obj_matrix_world + self.matrix_basis.translation = matrix @ point def update_header_text(self, context): - text = self.translate_header_text('Angle', round(math.degrees(self.modifier_angle), 3)) + if self.modifier_origin_angle_is_available: + value = round(math.degrees(self.modifier_angle), 3) + text = self.translate_header_text('Angle', value) + else: + text = self.translate_header_text('Coefficient', self.modifier.factor) context.area.header_text_set(text) @@ -46,8 +50,8 @@ class AngleGizmo(Gizmo, AngleUpdate): 'draw_type', 'mouse_dpi', 'empty_object', - 'init_mouse_y', - 'init_mouse_x', + 'init_mouse_region_y', + 'init_mouse_region_x', 'custom_shape', 'int_value_angle', ) @@ -64,6 +68,8 @@ class AngleGizmo(Gizmo, AngleUpdate): return {'RUNNING_MODAL'} def modal(self, context, event, tweak): + self.clear_cache() + self.update_header_text(context) self.update_prop_value(event, tweak) return {'RUNNING_MODAL'} @@ -74,24 +80,11 @@ class AngleGizmo(Gizmo, AngleUpdate): self.target_set_value('angle', self.int_value_angle) -class AngleGizmoGroup(GizmoGroup, GizmoUtils, Handler): +class AngleGizmoGroup(GizmoGroup, GizmoGroupUtils): """ShowGizmo """ bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup' bl_label = 'AngleGizmoGroup' - bl_space_type = 'VIEW_3D' - bl_region_type = 'WINDOW' - bl_options = {'3D', - # 'SCALE', - # 'DEPTH_3D', - # 'SELECT', - 'PERSISTENT', - 'SHOW_MODAL_ALL', - # 'EXCLUDE_MODAL', - # 'TOOL_INIT', # not show - # 'TOOL_FALLBACK_KEYMAP', - # 'VR_REDRAWS' - } @classmethod def poll(cls, context): @@ -118,7 +111,6 @@ class AngleGizmoGroup(GizmoGroup, GizmoUtils, Handler): self.generate_gizmo_mode(add_data) def refresh(self, context): - self.angle.target_set_prop('angle', context.object.modifiers.active, 'angle') diff --git a/simple_deform_helper/gizmo/bend_axis.py b/simple_deform_helper/gizmo/bend_axis.py index 7134e0e1b..0c91505fd 100644 --- a/simple_deform_helper/gizmo/bend_axis.py +++ b/simple_deform_helper/gizmo/bend_axis.py @@ -4,11 +4,10 @@ from bpy.types import GizmoGroup from bpy_types import Gizmo from mathutils import Euler, Vector -from ..draw import Handler -from ..utils import GizmoUtils +from ..utils import GizmoUtils, GizmoGroupUtils -class CustomGizmo(Gizmo, GizmoUtils, Handler): +class CustomGizmo(Gizmo, GizmoUtils): """绘制自定义Gizmo""" bl_idname = '_Custom_Gizmo' draw_type: str @@ -18,10 +17,9 @@ class CustomGizmo(Gizmo, GizmoUtils, Handler): self.draw_type = 'None_GizmoGroup_' if not hasattr(self, 'custom_shape'): self.custom_shape = {} - for i in self.G_GizmoCustomShapeDict: + for i in self.G_CustomShape: self.custom_shape[i] = self.new_custom_shape( - 'TRIS', self.G_GizmoCustomShapeDict[i]) - self.add_handler() + 'TRIS', self.G_CustomShape[i]) def draw(self, context): self.draw_custom_shape(self.custom_shape[self.draw_type]) @@ -34,26 +32,17 @@ class CustomGizmo(Gizmo, GizmoUtils, Handler): return {'RUNNING_MODAL'} def modal(self, context, event, tweak): - self.add_handler() - self.update_bound_box(context.object) self.update_empty_matrix() return {'RUNNING_MODAL'} -class BendAxiSwitchGizmoGroup(GizmoGroup, GizmoUtils): +class BendAxiSwitchGizmoGroup(GizmoGroup, GizmoGroupUtils): """绘制切换变型轴的 变换方向 """ bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup_display_bend_axis_switch_gizmo' bl_label = 'SimpleDeformGizmoGroup_display_bend_axis_switch_gizmo' - bl_space_type = 'VIEW_3D' - bl_region_type = 'WINDOW' - bl_options = { - '3D', - 'PERSISTENT', - } - @classmethod def poll(cls, context): return cls.simple_deform_show_bend_axis_witch_poll(context) @@ -104,7 +93,7 @@ class BendAxiSwitchGizmoGroup(GizmoGroup, GizmoUtils): def draw_prepare(self, context): ob = context.object mat = ob.matrix_world - top, bottom, left, right, front, back = self.each_face_pos(mat) + top, bottom, left, right, front, back = self.each_face_pos rad = math.radians for_list = ( diff --git a/simple_deform_helper/gizmo/set_deform_axis.py b/simple_deform_helper/gizmo/set_deform_axis.py index 875ab6745..fc780b8d2 100644 --- a/simple_deform_helper/gizmo/set_deform_axis.py +++ b/simple_deform_helper/gizmo/set_deform_axis.py @@ -1,18 +1,12 @@ from bpy.types import GizmoGroup from mathutils import Vector -from utils import GizmoUtils +from ..utils import GizmoGroupUtils -class SetDeformGizmoGroup(GizmoGroup, GizmoUtils): +class SetDeformGizmoGroup(GizmoGroup, GizmoGroupUtils): bl_idname = 'OBJECT_GGT_SetDeformGizmoGroup' bl_label = 'SetDeformGizmoGroup' - bl_space_type = 'VIEW_3D' - bl_region_type = 'WINDOW' - bl_options = {'3D', - 'PERSISTENT', - 'SHOW_MODAL_ALL', - } @classmethod def poll(cls, context): @@ -41,9 +35,9 @@ class SetDeformGizmoGroup(GizmoGroup, GizmoUtils): def draw_prepare(self, context): - if 'co' in self.G_SimpleDeformGizmoHandlerDit: + if 'co' in self.G_GizmoData: def _mat(f): - co = self.G_SimpleDeformGizmoHandlerDit['co'][0] + co = self.G_GizmoData['co'][0] co = (co[0] + (max(self.obj.dimensions) * f), co[1], co[2] - (min(self.obj.dimensions) * 0.3)) return self.obj_matrix_world @ Vector(co) diff --git a/simple_deform_helper/gizmo/up_down_limits_point.py b/simple_deform_helper/gizmo/up_down_limits_point.py index 2f2c11309..0c3b0e418 100644 --- a/simple_deform_helper/gizmo/up_down_limits_point.py +++ b/simple_deform_helper/gizmo/up_down_limits_point.py @@ -6,11 +6,14 @@ from bpy.types import Gizmo, GizmoGroup from bpy_extras import view3d_utils from mathutils import Vector -from ..draw import Handler -from ..utils import GizmoUtils +from ..utils import GizmoUtils, GizmoGroupUtils -class GizmoProperty(GizmoUtils, Handler): +class GizmoProperty(GizmoUtils): + ctrl_mode: str + int_value_up_limits: int + int_value_down_limits: int + @property def is_up_limits_mode(self): return self.ctrl_mode == 'up_limits' @@ -19,130 +22,145 @@ class GizmoProperty(GizmoUtils, Handler): def is_down_limits_mode(self): return self.ctrl_mode == 'down_limits' + @property + def origin_mode(self): + return self.SimpleDeformGizmo_origin_property_group.origin_mode + + @property + def is_middle_mode(self): + return self.origin_mode in ('LIMITS_MIDDLE', 'MIDDLE') + + @property + def limit_scope(self): + return self.pref.modifiers_limits_tolerance + + @property + def difference_value(self): + return self.modifier_up_limits - self.modifier_down_limits + + @property + def middle_value(self): + return (self.modifier_up_limits + self.modifier_down_limits) / 2 + + @property + def limits_min_value(self): + return self.modifier_up_limits + self.limit_scope + + @property + def limits_max_value(self): + return self.modifier_up_limits - self.limit_scope + + # ----get func + + def get_up_limits_value(self, event): + delta = self.get_delta(event) + mid = self.middle_value + self.limit_scope + min_value = mid if self.is_middle_mode else self.limits_min_value + return self.value_limit(delta, min_value=min_value) + + def get_down_limits_value(self, event): + delta = self.get_delta(event) + mid = self.middle_value - self.limit_scope + max_value = mid if self.is_middle_mode else self.limits_max_value + return self.value_limit(delta, max_value=max_value) + class GizmoUpdate(GizmoProperty): def update_gizmo_matrix(self, context): - self._update_matrix_basis_to_obj() + self.align_orientation_to_user_perspective(context) + self.align_point_to_limits_point() - co = self.generate_co_data() - # calculation limits position - top, bottom, left, right, front, back = self.each_face_pos(mat) - (up, down), (up_, down_) = self.get_limits_pos( - mod, (top, bottom, left, right, front, back)) - self._update_matrix_basis_translation(co, mat, up_, down_) + def align_orientation_to_user_perspective(self, context): + rotation = context.space_data.region_3d.view_matrix.inverted().to_quaternion() + matrix = rotation.to_matrix().to_4x4() + self.matrix_basis = matrix - self.up = up - self.down = down - self.up_ = up_ - self.down_ = down_ - self.G_SimpleDeformGizmoHandlerDit['draw_line'] = ( - (up, down), (up_, down_)) - data = top, bottom, left, right, front, back - self.update_draw_limits_bound_box(data, mod, axis, mat, up_, down_) - - def _update_matrix_basis_to_obj(self): - origin = self.modifier.origin - if origin: - self.matrix_basis = origin.matrix_world.normalized() - else: - self.matrix_basis = self.obj_matrix_world.normalized() - - def _update_matrix_basis_translation(self, co, mat, up_, down_): + def align_point_to_limits_point(self): if self.is_up_limits_mode: - self.matrix_basis.translation = up_ + self.matrix_basis.translation = self.point_limits_up elif self.is_down_limits_mode: - self.matrix_basis.translation = down_ + self.matrix_basis.translation = self.point_limits_down def delta_update(self, context, event, delta): - if ('draw_line' in self.G_SimpleDeformGizmoHandlerDit) and (self.ctrl_mode in ('up_limits', 'down_limits')): - x, y = view3d_utils.location_3d_to_region_2d( - context.region, context.space_data.region_3d, self.up) - x2, y2 = view3d_utils.location_3d_to_region_2d( - context.region, context.space_data.region_3d, self.down) + x, y = view3d_utils.location_3d_to_region_2d( + context.region, context.space_data.region_3d, self.up) + x2, y2 = view3d_utils.location_3d_to_region_2d( + context.region, context.space_data.region_3d, self.down) - mouse_line_distance = math.sqrt(((event.mouse_region_x - x2) ** 2) + - ((event.mouse_region_y - y2) ** 2)) - straight_line_distance = math.sqrt(((x2 - x) ** 2) + - ((y2 - y) ** 2)) - delta = mouse_line_distance / straight_line_distance + 0 + mouse_line_distance = math.sqrt(((event.mouse_region_x - x2) ** 2) + + ((event.mouse_region_y - y2) ** 2)) + straight_line_distance = math.sqrt(((x2 - x) ** 2) + + ((y2 - y) ** 2)) + delta = mouse_line_distance / straight_line_distance + 0 - v_up = Vector((x, y)) - v_down = Vector((x2, y2)) - limits_angle = v_up - v_down + v_up = Vector((x, y)) + v_down = Vector((x2, y2)) + limits_angle = v_up - v_down - mouse_v = Vector((event.mouse_region_x, event.mouse_region_y)) + mouse_v = Vector((event.mouse_region_x, event.mouse_region_y)) + + mouse_angle = mouse_v - v_down + angle_ = mouse_angle.angle(limits_angle) + if angle_ > (math.pi / 2): + delta = 0 - mouse_angle = mouse_v - v_down - angle_ = mouse_angle.angle(limits_angle) - if angle_ > (math.pi / 2): - delta = 0 return delta - def set_down_value(self, data, mu): - up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode = data - value = self.value_limit(delta, max_value=mu - limit_scope if middle else max_value) + def set_down_value(self, event): + value = self.get_down_limits_value(event) self.target_set_value('down_limits', value) if event.ctrl: self.target_set_value( - 'up_limits', value + difference_value) - elif middle: - if origin_mode == 'LIMITS_MIDDLE': + 'up_limits', value + self.difference_value) + + elif self.is_middle_mode: + if self.origin_mode == 'LIMITS_MIDDLE': + mu = self.middle_value self.target_set_value('up_limits', mu - (value - mu)) - elif origin_mode == 'MIDDLE': + elif self.origin_mode == 'MIDDLE': self.target_set_value('up_limits', 1 - value) else: - self.target_set_value('up_limits', up_limits) + self.target_set_value('up_limits', self.modifier_up_limits) else: - self.target_set_value('up_limits', up_limits) + self.target_set_value('up_limits', self.modifier_up_limits) - def set_up_value(self, data, mu): - up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode = data - value = self.value_limit(delta, min_value=mu + limit_scope if middle else min_value) + def set_up_value(self, event): + value = self.get_up_limits_value(event) self.target_set_value('up_limits', value) if event.ctrl: self.target_set_value( - 'down_limits', value - difference_value) - elif middle: - if origin_mode == 'LIMITS_MIDDLE': + 'down_limits', value - self.difference_value) + elif self.is_middle_mode: + if self.origin_mode == 'LIMITS_MIDDLE': + mu = self.middle_value self.target_set_value('down_limits', mu - (value - mu)) - elif origin_mode == 'MIDDLE': + elif self.origin_mode == 'MIDDLE': self.target_set_value('down_limits', 1 - value) else: - self.target_set_value('down_limits', down_limits) + self.target_set_value('down_limits', self.modifier_down_limits) else: - self.target_set_value('down_limits', down_limits) + self.target_set_value('down_limits', self.modifier_down_limits) - def set_prop_value(self, data): - up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode = data - mu = (up_limits + down_limits) / 2 - if self.is_angle_mode: - value = self.int_value_angle - delta - v = self.snap_value(value, event) - print(v) - self.target_set_value('angle', v) - elif self.is_up_limits_mode: - self.set_up_value(data, mu) + def set_prop_value(self, event): + if self.is_up_limits_mode: + self.set_up_value(event) elif self.is_down_limits_mode: - self.set_down_value(data, mu) + self.set_down_value(event) - def update_header_text(self, context, mod, origin, up_limits, down_limits): - translate: Callable[[Any], str] = lambda t: bpy.app.translations.pgettext(t) + def update_header_text(self, context): + origin = self.SimpleDeformGizmo_origin_property_group mode = origin.bl_rna.properties['origin_mode'].enum_items[origin.origin_mode].name - def t_(a, b): - return translate(a) + ':{}'.format(round(b, 3)) + t = self.translate_header_text + text = self.translate_text(mode) + ' ' - text = translate(mode) + ' ' - - if self.modifier_is_use_angle_value and self.is_angle_mode: - text += t_() - elif self.is_up_limits_mode: - text += t_('Upper limit', up_limits) + if self.is_up_limits_mode: + value = round(self.modifier_up_limits, 3) + text += t('Upper limit', value) elif self.is_down_limits_mode: - text += t_('Down limit', down_limits) - else: - text += t_('Coefficient', mod.factor) + value = round(self.modifier_down_limits, 3) + text += t('Down limit', value) context.area.header_text_set(text) def event_ops(self, event, ob, origin): @@ -161,16 +179,13 @@ class GizmoUpdate(GizmoProperty): elif event.type == 'A': self.pref.display_bend_axis_switch_gizmo = True return {'FINISHED'} - self.add_handler() return {'RUNNING_MODAL'} class UpDownLimitsGizmo(Gizmo, GizmoUpdate): - """显示轴向切换拖动点Gizmo(两个点) - """ bl_idname = 'UpDownLimitsGizmo' - + bl_label = 'UpDownLimitsGizmo' bl_target_properties = ( {'id': 'up_limits', 'type': 'FLOAT', 'array_length': 1}, {'id': 'down_limits', 'type': 'FLOAT', 'array_length': 1}, @@ -183,84 +198,54 @@ class UpDownLimitsGizmo(Gizmo, GizmoUpdate): 'draw_type', 'mouse_dpi', 'ctrl_mode', - 'empty_object', - 'init_mouse_y', - 'init_mouse_x', + 'init_mouse_region_y', + 'init_mouse_region_x', 'custom_shape', - 'value_deform_axis', 'int_value_up_limits', 'int_value_down_limits', ) def setup(self): - self.generate_co_data() - self.draw_type = 'None_GizmoGroup_' - self.ctrl_mode = 'up_limits' # up_limits , down_limits self.mouse_dpi = 10 + self.init_setup() def invoke(self, context, event): self.init_invoke(context, event) - mod = context.object.modifiers.active - limits = mod.limits - up_limits = limits[1] - down_limits = limits[0] - if 'up_limits' == self.ctrl_mode: - self.int_value_up_limits = up_limits - self.target_set_value('up_limits', self.int_value_up_limits) - elif 'down_limits' == self.ctrl_mode: - self.int_value_down_limits = down_limits - self.target_set_value('down_limits', self.int_value_down_limits) + if self.is_up_limits_mode: + self.int_value_up_limits = up_limits = self.modifier_up_limits + self.target_set_value('up_limits', up_limits) + elif self.is_down_limits_mode: + self.int_value_down_limits = down_limits = self.modifier_down_limits + self.target_set_value('down_limits', down_limits) return {'RUNNING_MODAL'} def exit(self, context, cancel): context.area.header_text_set(None) - if cancel: - if 'deform_axis' == self.ctrl_mode: - self.target_set_value('deform_axis', self.value_deform_axis) - elif 'up_limits' == self.ctrl_mode: + if self.is_up_limits_mode: self.target_set_value('up_limits', self.int_value_up_limits) - elif 'down_limits' == self.ctrl_mode: + elif self.is_down_limits_mode: self.target_set_value( 'down_limits', self.int_value_down_limits) def modal(self, context, event, tweak): - # self.update_bound_box(context.object) - # - # ob = context.object - # mod = ob.modifiers.active - # limits = mod.limits - # up_limits = limits[1] - # down_limits = limits[0] - # origin = self.get_origin_property_group(mod, ob) - # origin_mode = origin.origin_mode - # middle = origin_mode in ('LIMITS_MIDDLE', 'MIDDLE') - # limit_scope = self.pref.modifiers_limits_tolerance - # max_value = up_limits - limit_scope - # min_value = down_limits + limit_scope - # difference_value = up_limits - down_limits - # - # delta = self.get_delta(event, tweak) - # delta = self.delta_update(context, event, delta) - # - # if origin_mode != 'NOT' and ('draw_line' in self.G_SimpleDeformGizmoHandlerDit): - # self.empty_object, _ = self.new_empty(ob, mod) - # self.G_SimpleDeformGizmoHandlerDit['empty_object'] = self.empty_object - # data = up_limits, down_limits, delta, middle, min_value, max_value, limit_scope, difference_value, event, origin_mode - # self.set_prop_value(data) - # self.update_gizmo_matrix(context) - # self.update_empty_matrix() - # self.update_bound_box(context.object) + self.clear_cache() + + self.set_prop_value(event) + if self.SimpleDeformGizmo_is_use_empty_as_axis: + self.new_empty(self.obj, self.modifier) + # self.update_empty_matrix() + # self.update_header_text(context, mod, origin, up_limits, down_limits) - # self.add_handler() # return self.event_ops(event, ob, origin) return {'RUNNING_MODAL'} -class UpDownLimitsGizmoGroup(GizmoGroup, GizmoUtils, Handler): - bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup' +class UpDownLimitsGizmoGroup(GizmoGroup, GizmoGroupUtils): + bl_idname = 'OBJECT_GGT_UpDownLimitsGizmoGroup' + bl_label = 'UpDownLimitsGizmoGroup' @classmethod def poll(cls, context): @@ -268,8 +253,7 @@ class UpDownLimitsGizmoGroup(GizmoGroup, GizmoUtils, Handler): def setup(self, context): sd_name = UpDownLimitsGizmo.bl_idname - - add_data = ( + gizmo_data = [ ('up_limits', sd_name, {'ctrl_mode': 'up_limits', @@ -294,10 +278,14 @@ class UpDownLimitsGizmoGroup(GizmoGroup, GizmoUtils, Handler): 'use_draw_modal': True, 'scale_basis': 0.1, 'use_draw_value': True, }), - ) + ] + self.generate_gizmo_mode(gizmo_data) def refresh(self, context): pro = context.object.SimpleDeformGizmo_PropertyGroup + for i in (self.down_limits, self.up_limits): + for j in ('down_limits', 'up_limits'): + i.target_set_prop(j, pro, j) self.down_limits.target_set_prop('down_limits', pro, 'down_limits') diff --git a/simple_deform_helper/operators.py b/simple_deform_helper/operators.py index 332962e6b..e4948f2b5 100644 --- a/simple_deform_helper/operators.py +++ b/simple_deform_helper/operators.py @@ -47,8 +47,6 @@ class DeformAxisOperator(Operator, GizmoUtils): if not event.ctrl: self.pref.display_bend_axis_switch_gizmo = False - - GizmoUtils.update_bound_box(context.object) return {'FINISHED'} diff --git a/simple_deform_helper/preferences.py b/simple_deform_helper/preferences.py index d168f4813..8656ac8ec 100644 --- a/simple_deform_helper/preferences.py +++ b/simple_deform_helper/preferences.py @@ -27,7 +27,7 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, GizmoUtils): bound_box_color: FloatVectorProperty( name='Bound Box', description='Draw Bound Box Color', - default=(1, 0, 0, 0.1), + default=(1, 0, 0, 0.5), soft_max=1, soft_min=0, size=4, diff --git a/simple_deform_helper/update.py b/simple_deform_helper/update.py index fb61082be..c584669e0 100644 --- a/simple_deform_helper/update.py +++ b/simple_deform_helper/update.py @@ -3,18 +3,22 @@ import bpy from bpy.app.handlers import depsgraph_update_post, persistent +from .utils import GizmoUpdate + @persistent def remove_not_use_empty(scene, dep): """循环场景内的所有物体,找出没用的空物体并删掉 """ + GizmoUpdate.clear_cache() remove_name: str = "ViewSimpleDeformGizmo__Empty_" context = bpy.context - for obj in context.scene.objects: - is_empty = obj.type == "EMPTY" - not_parent = not obj.parent - if remove_name in obj.name and not_parent and is_empty: - bpy.data.objects.remove(obj) # remove object + if GizmoUpdate.simple_deform_modifier_is_simple(context): + for obj in context.scene.objects: + is_empty = obj.type == "EMPTY" + not_parent = not obj.parent + if remove_name in obj.name and not_parent and is_empty: + bpy.data.objects.remove(obj) # remove object def register(): diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index aea0e8e3a..ad8812017 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -2,8 +2,8 @@ import math import uuid +from functools import cache from os.path import dirname, basename, realpath -from typing import Callable, Any import bpy import numpy as np @@ -14,8 +14,8 @@ from mathutils import Vector, Matrix, Euler class PublicData: """Public data class, all fixed data will be placed here """ - G_GizmoCustomShapeDict = {} - G_SimpleDeformGizmoHandlerDit = {} + G_CustomShape = {} + G_GizmoData = {} G_INDICES = ( (0, 1), (0, 2), (1, 3), (2, 3), (4, 5), (4, 6), (5, 7), (6, 7), @@ -47,7 +47,7 @@ class PublicData: import os json_path = os.path.join(os.path.dirname(__file__), "gizmo.json") with open(json_path, "r") as file: - cls.G_GizmoCustomShapeDict = json.load(file) + cls.G_CustomShape = json.load(file) @staticmethod def from_mesh_get_triangle_face_co(mesh: 'bpy.types.Mesh') -> list: @@ -94,32 +94,41 @@ class PublicClass(PublicData): class PublicPoll(PublicClass): - @classmethod - def simple_deform_public_poll(cls, context: 'bpy.types.context') -> bool: - """Public poll - In 3D View + def simple_deform_modifier_is_simple(cls, context): + """ Active Object in ('MESH', 'LATTICE') Active Modifier Type Is 'SIMPLE_DEFORM' and show_viewport - return True + :param context:bpy.types.Object + :return: """ + obj = context.object if not obj: return False - mod = obj.modifiers.active if not mod: return False - space = context.space_data - show_gizmo = space.show_gizmo if space.type == 'VIEW_3D' else True - available_obj_type = obj and (obj.type in ('MESH', 'LATTICE')) available_modifiers_type = mod and (mod.type == 'SIMPLE_DEFORM') is_available_obj = available_modifiers_type and available_obj_type is_obj_mode = context.mode == 'OBJECT' show_mod = mod.show_viewport - return is_available_obj and is_obj_mode and show_gizmo and show_mod + return is_available_obj and is_obj_mode and show_mod + + @classmethod + def simple_deform_public_poll(cls, context: 'bpy.types.context') -> bool: + """Public poll + In 3D View + return True + """ + space = context.space_data + if not space: + return False + show_gizmo = space.show_gizmo if space.type == 'VIEW_3D' else True + obj = cls.simple_deform_modifier_is_simple(context) + return obj and show_gizmo @classmethod def _simple_deform_modifier_is_bend_poll(cls, context): @@ -250,12 +259,14 @@ class PublicUtils(PublicPoll): b = mat @ Vector((max_x, min_y, min_z)) c = mat @ Vector((min_x, max_y, min_z)) d = mat @ Vector((min_x, min_y, max_z)) - return ((aa + bb) / Vector((2, 2, 2)) for aa, bb in ((a, d) - (c, b) - (c, d) - (a, b) - (d, b) - (c, a))) + point_list = ((a, d), + (c, b), + (c, d), + (a, b), + (d, b), + (c, a),) + + return list((aa + bb) / 2 for (aa, bb) in point_list) @classmethod def translate_text(cls, text): @@ -267,35 +278,6 @@ class PublicUtils(PublicPoll): class GizmoClassMethod(PublicUtils): - @classmethod - def get_origin_property_group(cls, mod, ob): - if mod.origin: - return mod.origin.SimpleDeformGizmo_PropertyGroup - else: - return ob.SimpleDeformGizmo_PropertyGroup - - @classmethod - def get_up_down_return_list(cls, mod, axis, up_, down_, data): - top, bottom, left, right, front, back = data - if 'BEND' == mod.deform_method: - if axis in ('X', 'Y'): - top = up_ - bottom = down_ - elif axis == 'Z': - right = up_ - left = down_ - else: - if axis == 'X': - right = up_ - left = down_ - elif axis == 'Y': - back = up_ - front = down_ - elif axis == 'Z': - top = up_ - bottom = down_ - return top, bottom, left, right, front, back - @classmethod def new_empty(cls, obj, mod): origin = mod.origin @@ -355,52 +337,6 @@ class GizmoClassMethod(PublicUtils): elif origin_mode == 'MIDDLE': empty_object.matrix_world.translation = (up + down) / tow - @classmethod - def get_up_down(cls, mod, axis, top, bottom, left, right, front, back): - if 'BEND' == mod.deform_method: - if axis in ('X', 'Y'): - return top, bottom - elif axis == 'Z': - return right, left - else: - if axis == 'X': - return right, left - elif axis == 'Y': - return back, front - elif axis == 'Z': - return top, bottom - - @classmethod - def get_limits_pos(cls, mod, data): - top, bottom, left, right, front, back = data - up_limits = mod.limits[1] - down_limits = mod.limits[0] - axis = mod.deform_axis - - if mod.origin: - vector_axis = cls.get_vector_axis(mod) - origin_mat = mod.origin.matrix_world.to_3x3() - axis_ = origin_mat @ vector_axis - point_lit = [[top, bottom], [left, right], [front, back]] - - for f in range(point_lit.__len__()): - i = point_lit[f][0] - j = point_lit[f][1] - angle = cls.point_to_angle(i, j, f, axis_) - if abs(angle - 180) < 0.00001: - up, down = j, i - elif abs(angle) < 0.00001: - up, down = i, j - else: - up, down = cls.get_up_down(mod, axis, top, bottom, - left, right, front, back) - - ex = lambda a: down + ((up - down) * Vector((a, a, a))) - - up_ = ex(up_limits) - down_ = ex(down_limits) - return (up, down), (up_, down_) - @classmethod def get_vector_axis(cls, mod): axis = mod.deform_axis @@ -415,151 +351,44 @@ class GizmoClassMethod(PublicUtils): return vector_axis @classmethod - def generate_co_data(cls): - handler_dit = cls.G_SimpleDeformGizmoHandlerDit - - if 'co' not in handler_dit: - handler_dit['co'] = cls.get_mesh_max_min_co( + def get_bound_co_data(cls): + if 'co' not in cls.G_GizmoData: + cls.G_GizmoData['co'] = cls.get_mesh_max_min_co( bpy.context.object) - return handler_dit['co'] - - -class GizmoUpdate(GizmoClassMethod): + return cls.G_GizmoData['co'] @classmethod - def update_matrix(cls, mod, ob): - if mod.deform_method == 'BEND': - cls.new_empty(ob, mod) - if mod.origin: - empty_object = mod.origin - modifiers_co = cls.G_SimpleDeformGizmoHandlerDit['modifiers_co'] - for index, mod_name in enumerate(modifiers_co): - co_items = list(modifiers_co.items()) - if mod.name == mod_name: - data = co_items[index - 1][1] if ( - index or (index != 1)) else modifiers_co['co'] - (up, down), (up_, down_) = cls.get_limits_pos( - mod, cls.co_to_direction(ob.matrix_world.copy(), data)) - origin_mode = cls.get_origin_property_group( - mod, ob).origin_mode - cls.set_empty_obj_matrix( - origin_mode, empty_object, up_, down_, up, down) + def tow_co_to_coordinate(cls, data): + ((min_x, min_y, min_z), (max_x, max_y, max_z)) = data + return ( + Vector((max_x, min_y, min_z)), + Vector((min_x, min_y, min_z)), + Vector((max_x, max_y, min_z)), + Vector((min_x, max_y, min_z)), + Vector((max_x, min_y, max_z)), + Vector((min_x, min_y, max_z)), + Vector((max_x, max_y, max_z)), + Vector((min_x, max_y, max_z)) + ) - @classmethod - def update_empty_matrix(cls): - ob = bpy.context.object - for mod in ob.modifiers: - if mod.type == 'SIMPLE_DEFORM': - cls.update_matrix(mod, ob) - @classmethod - def update_bound_box(cls, obj: 'bpy.types.Object'): - context = bpy.context - data = bpy.data - matrix = obj.matrix_world.copy() # 物体矩阵 - # add simple_deform mesh - (min_x, min_y, min_z), (max_x, max_y, - max_z) = cls.get_mesh_max_min_co(obj) - vertexes = ((max_x, min_y, min_z), - (min_x, min_y, min_z), - (max_x, max_y, min_z), - (min_x, max_y, min_z), - (max_x, min_y, max_z), - (min_x, min_y, max_z), - (max_x, max_y, max_z), - (min_x, max_y, max_z)) - name = cls.G_NAME - if data.objects.get(name): - data.objects.remove(data.objects.get(name)) +class PublicProperty(GizmoClassMethod): - if data.meshes.get(name): - data.meshes.remove(data.meshes.get(name)) - mesh = data.meshes.new(name) - mesh.from_pydata(vertexes, cls.G_INDICES, []) - mesh.update() + def __from_up_down_point_get_limits_point(self, up_point, down_point): - new_object = data.objects.new(name, mesh) + def ex(a): + return down_point + ((up_point - down_point) * Vector((a, a, a))) - cls.link_obj_to_active_collection(new_object) + up_limits = ex(self.modifier_up_limits) + down_limits = ex(self.modifier_down_limits) + return up_limits, down_limits - if new_object.parent != obj: - new_object.parent = obj - - new_object.modifiers.clear() - subdivision = new_object.modifiers.new('1', 'SUBSURF') - subdivision.levels = 7 - cls.G_SimpleDeformGizmoHandlerDit['modifiers_co'] = {} - cls.G_SimpleDeformGizmoHandlerDit['modifiers_co']['co'] = ( - min_x, min_y, min_z), (max_x, max_y, max_z) - for mo in context.object.modifiers: - if mo.type == 'SIMPLE_DEFORM': - simple_deform = new_object.modifiers.new( - mo.name, 'SIMPLE_DEFORM') - simple_deform.deform_method = mo.deform_method - simple_deform.deform_axis = mo.deform_axis - simple_deform.lock_x = mo.lock_x - simple_deform.lock_y = mo.lock_y - simple_deform.lock_z = mo.lock_z - simple_deform.origin = mo.origin - simple_deform.limits[1] = mo.limits[1] - simple_deform.limits[0] = mo.limits[0] - simple_deform.angle = mo.angle - simple_deform.show_viewport = mo.show_viewport - obj = PublicUtils.get_depsgraph(new_object) - cls.G_SimpleDeformGizmoHandlerDit['modifiers_co'][mo.name] = cls.get_mesh_max_min_co( - obj) - new_object.hide_set(True) - new_object.hide_viewport = False - new_object.hide_select = True - new_object.hide_render = True - new_object.hide_viewport = True - new_object.hide_set(True) - ver_len = obj.data.vertices.__len__() - edge_len = obj.data.edges.__len__() - - if 'numpy_data' not in cls.G_SimpleDeformGizmoHandlerDit: - cls.G_SimpleDeformGizmoHandlerDit['numpy_data'] = {} - - numpy_data = cls.G_SimpleDeformGizmoHandlerDit['numpy_data'] - key = (ver_len, edge_len) - if key in numpy_data: - list_edges, list_vertices = numpy_data[key] - else: - list_edges = np.zeros(edge_len * 2, dtype=np.int32) - list_vertices = np.zeros(ver_len * 3, dtype=np.float32) - numpy_data[key] = (list_edges, list_vertices) - obj.data.vertices.foreach_get('co', list_vertices) - ver = list_vertices.reshape((ver_len, 3)) - ver = np.insert(ver, 3, 1, axis=1).T - ver[:] = np.dot(matrix, ver) - - ver /= ver[3, :] - ver = ver.T - ver = ver[:, :3] - obj.data.edges.foreach_get('vertices', list_edges) - indices = list_edges.reshape((edge_len, 2)) - - limits = context.object.modifiers.active.limits[:] - modifiers = [getattr(context.object.modifiers.active, i) - for i in cls.G_MODIFIERS_PROPERTY] - - cls.G_SimpleDeformGizmoHandlerDit['draw'] = (ver, indices, matrix, modifiers, limits) - - @classmethod - def update_co_data(cls, ob, mod): - handler_dit = cls.G_SimpleDeformGizmoHandlerDit - - if 'modifiers_co' in cls.G_SimpleDeformGizmoHandlerDit and ob.type in ('MESH', 'LATTICE'): - modifiers_co = cls.G_SimpleDeformGizmoHandlerDit['modifiers_co'] - for index, mod_name in enumerate(modifiers_co): - co_items = list(modifiers_co.items()) - if mod.name == mod_name: - cls.G_SimpleDeformGizmoHandlerDit['co'] = co_items[index - 1][1] if (index or (index != 1)) else \ - modifiers_co['co'] - - def update_draw_limits_bound_box(self, data, mod, axis, mat, up_, down_): - top, bottom, left, right, front, back = data - if mod.origin: + @cache + def _get_limits_point_and_bound_box_co(self): + top, bottom, left, right, front, back = self.each_face_pos + mod = self.modifier + g_l = self.__from_up_down_point_get_limits_point + if self.modifier.origin: vector_axis = self.get_vector_axis(mod) origin_mat = mod.origin.matrix_world.to_3x3() axis_ = origin_mat @ vector_axis @@ -569,37 +398,86 @@ class GizmoUpdate(GizmoClassMethod): j = point_lit[f][1] angle = self.point_to_angle(i, j, f, axis_) if abs(angle - 180) < 0.00001: - point_lit[f][1], point_lit[f][0] = up_, down_ + up_point, down_point = j, i + up_limits, down_limits = g_l(j, i) + point_lit[f][1], point_lit[f][0] = up_limits, down_limits elif abs(angle) < 0.00001: - point_lit[f][0], point_lit[f][1] = up_, down_ + up_point, down_point = i, j + up_limits, down_limits = g_l(i, j) + point_lit[f][0], point_lit[f][1] = up_limits, down_limits + [[top, bottom], [left, right], [front, back]] = point_lit else: - top, bottom, left, right, front, back = self.get_up_down_return_list( - mod, axis, up_, down_, data) - data = top, bottom, left, right, front, back - (top, bottom, left, right, front, - back) = self.matrix_calculation(mat.inverted(), data) - self.G_SimpleDeformGizmoHandlerDit['draw_limits_bound_box'] = ( - mat, ((right[0], back[1], top[2]), (left[0], front[1], bottom[2],))) + axis = self.modifier_deform_axis + if 'BEND' == self.modifier.deform_method: + if axis in ('X', 'Y'): + up_point, down_point = top, bottom + top, bottom = up_limits, down_limits = g_l(top, bottom) + elif axis == 'Z': + up_point, down_point = right, left + right, left = up_limits, down_limits = g_l(right, left) + else: + if axis == 'X': + up_point, down_point = right, left + right, left = up_limits, down_limits = g_l(right, left) + elif axis == 'Y': + up_point, down_point = back, front + back, front = up_limits, down_limits = g_l(back, front) - def update_bound_box_wireframe(self): - ... + elif axis == 'Z': + up_point, down_point = top, bottom + top, bottom = up_limits, down_limits = g_l(top, bottom) - def update_up_down_limits_wireframe(self): - ... + (top, bottom, left, + right, front, back) = self.matrix_calculation(self.obj_matrix_world.inverted(), + (top, bottom, left, right, front, back)) - def update_deform_wireframe(self): - ... + points = ((up_point, down_point), (up_limits, down_limits)) + each_point = ((right[0], back[1], top[2]), (left[0], front[1], bottom[2],)) + box_bound_point = self.matrix_calculation(self.obj_matrix_world, self.tow_co_to_coordinate(each_point)) + return points, box_bound_point + # ---------------------- -class PublicProperty(GizmoUpdate): + @cache + def _each_face_pos(self, mat): + return self.co_to_direction(mat, self.get_bound_co_data()) @classmethod - def each_face_pos(cls, mat: 'Matrix' = None): - if mat is None: - mat = Matrix() - return cls.co_to_direction(mat, cls.G_SimpleDeformGizmoHandlerDit['co']) + def clear_cache(cls): + cls._each_face_pos.cache_clear() + cls._get_limits_point_and_bound_box_co.cache_clear() + cls.clear_data() + @classmethod + def clear_data(cls): + cls.G_GizmoData.clear() + + # --------------- Cache Data ---------------------- + + @property + def each_face_pos(self): + return self._each_face_pos(self.obj_matrix_world) + + @property + def modifier_limits_point(self): + points, _ = self._get_limits_point_and_bound_box_co() + return points + + @property + def modifier_limits_bound_box(self): + _, bound = self._get_limits_point_and_bound_box_co() + return bound + + @property + def modifier_origin_angle_is_available(self): + try: + self._get_limits_point_and_bound_box_co() + return True + except UnboundLocalError: + return False + + # --------------- Compute Data ---------------------- @property def obj(self): return bpy.context.object @@ -607,7 +485,12 @@ class PublicProperty(GizmoUpdate): @property def obj_matrix_world(self): if self.obj: - return self.obj.matrix_world + mat = self.obj.matrix_world.copy() + mat.freeze() + return mat + mat = Matrix() + mat.freeze() + return mat @property def modifier(self): @@ -628,64 +511,185 @@ class PublicProperty(GizmoUpdate): if mod: return mod.angle - @property - def active_modifier_is_simple_deform(self): - return self.modifier and self.modifier.type == 'SIMPLE_DEFORM' - @property def modifier_is_use_angle_value(self): if self.active_modifier_is_simple_deform: return self.modifier.deform_method in ('TWIST', 'BEND') + @property + def modifier_up_limits(self): + if self.modifier: + return self.modifier.limits[1] + + @property + def modifier_down_limits(self): + if self.modifier: + return self.modifier.limits[0] + + @property + def active_modifier_is_simple_deform(self): + return self.modifier and self.modifier.type == 'SIMPLE_DEFORM' + + # ----- point @property def point_up(self): - ... + return self.modifier_limits_point[0][0] @property def point_down(self): - ... + return self.modifier_limits_point[0][1] @property def point_limits_up(self): - ... + return self.modifier_limits_point[1][0] @property def point_limits_down(self): - ... + return self.modifier_limits_point[1][1] + + # ------ @property - def point_top(self): - ... + def SimpleDeformGizmo_origin_property_group(self): + mod = self.modifier + if mod.origin: + return mod.origin.SimpleDeformGizmo_PropertyGroup + else: + return self.obj.SimpleDeformGizmo_PropertyGroup @property - def point_bottom(self): - ... + def SimpleDeformGizmo_is_use_empty_as_axis(self): + return self.SimpleDeformGizmo_origin_property_group.origin_mode != 'NOT' - @property - def point_left(self): - ... - @property - def point_right(self): - ... - - @property - def point_front(self): - ... - - @property - def point_back(self): - ... +class GizmoUpdate(PublicProperty): @classmethod - def clear_cache(cls): + def update_matrix(cls, mod, ob): + if mod.deform_method == 'BEND': + cls.new_empty(ob, mod) + if mod.origin: + empty_object = mod.origin + modifiers_co = cls.G_GizmoData['modifiers_co'] + for index, mod_name in enumerate(modifiers_co): + co_items = list(modifiers_co.items()) + if mod.name == mod_name: + data = co_items[index - 1][1] if ( + index or (index != 1)) else modifiers_co['co'] + (up, down), (up_, down_) = cls.get_limits_pos( + mod, cls.co_to_direction(ob.matrix_world.copy(), data)) + origin_mode = cls.SimpleDeformGizmo_origin_property_group( + mod, ob).origin_mode + cls.set_empty_obj_matrix( + origin_mode, empty_object, up_, down_, up, down) + + # @classmethod + # def update_empty_matrix(cls): + # ob = bpy.context.object + # for mod in ob.modifiers: + # if mod.type == 'SIMPLE_DEFORM': + # cls.update_matrix(mod, ob) + # + # @classmethod + # context = bpy.context + # data = bpy.data + # matrix = obj.matrix_world.copy() # 物体矩阵 + # # add simple_deform mesh + # (min_x, min_y, min_z), (max_x, max_y, + # max_z) = cls.get_mesh_max_min_co(obj) + # vertexes = ((max_x, min_y, min_z), + # (min_x, min_y, min_z), + # (max_x, max_y, min_z), + # (min_x, max_y, min_z), + # (max_x, min_y, max_z), + # (min_x, min_y, max_z), + # (max_x, max_y, max_z), + # (min_x, max_y, max_z)) + # name = cls.G_NAME + # if data.objects.get(name): + # data.objects.remove(data.objects.get(name)) + # + # if data.meshes.get(name): + # data.meshes.remove(data.meshes.get(name)) + # mesh = data.meshes.new(name) + # mesh.from_pydata(vertexes, cls.G_INDICES, []) + # mesh.update() + # + # new_object = data.objects.new(name, mesh) + # + # cls.link_obj_to_active_collection(new_object) + # + # if new_object.parent != obj: + # new_object.parent = obj + # + # new_object.modifiers.clear() + # subdivision = new_object.modifiers.new('1', 'SUBSURF') + # subdivision.levels = 7 + # cls.G_GizmoData['modifiers_co'] = {} + # cls.G_GizmoData['modifiers_co']['co'] = ( + # min_x, min_y, min_z), (max_x, max_y, max_z) + # for mo in context.object.modifiers: + # if mo.type == 'SIMPLE_DEFORM': + # simple_deform = new_object.modifiers.new( + # mo.name, 'SIMPLE_DEFORM') + # simple_deform.deform_method = mo.deform_method + # simple_deform.deform_axis = mo.deform_axis + # simple_deform.lock_x = mo.lock_x + # simple_deform.lock_y = mo.lock_y + # simple_deform.lock_z = mo.lock_z + # simple_deform.origin = mo.origin + # simple_deform.limits[1] = mo.limits[1] + # simple_deform.limits[0] = mo.limits[0] + # simple_deform.angle = mo.angle + # simple_deform.show_viewport = mo.show_viewport + # obj = PublicUtils.get_depsgraph(new_object) + # cls.G_GizmoData['modifiers_co'][mo.name] = cls.get_mesh_max_min_co( + # obj) + # new_object.hide_set(True) + # new_object.hide_viewport = False + # new_object.hide_select = True + # new_object.hide_render = True + # new_object.hide_viewport = True + # new_object.hide_set(True) + # ver_len = obj.data.vertices.__len__() + # edge_len = obj.data.edges.__len__() + # + # if 'numpy_data' not in cls.G_GizmoData: + # cls.G_GizmoData['numpy_data'] = {} + # + # numpy_data = cls.G_GizmoData['numpy_data'] + # key = (ver_len, edge_len) + # if key in numpy_data: + # list_edges, list_vertices = numpy_data[key] + # else: + # list_edges = np.zeros(edge_len * 2, dtype=np.int32) + # list_vertices = np.zeros(ver_len * 3, dtype=np.float32) + # numpy_data[key] = (list_edges, list_vertices) + # obj.data.vertices.foreach_get('co', list_vertices) + # ver = list_vertices.reshape((ver_len, 3)) + # ver = np.insert(ver, 3, 1, axis=1).T + # ver[:] = np.dot(matrix, ver) + # + # ver /= ver[3, :] + # ver = ver.T + # ver = ver[:, :3] + # obj.data.edges.foreach_get('vertices', list_edges) + # indices = list_edges.reshape((edge_len, 2)) + # + # limits = context.object.modifiers.active.limits[:] + # modifiers = [getattr(context.object.modifiers.active, i) + # for i in cls.G_MODIFIERS_PROPERTY] + # + # cls.G_GizmoData['draw'] = (ver, indices, matrix, modifiers, limits) + + def update_deform_wireframe(self): ... -class GizmoUtils(PublicProperty): +class GizmoUtils(GizmoUpdate): custom_shape: dict - init_mouse_y: float - init_mouse_x: float + init_mouse_region_y: float + init_mouse_region_x: float mouse_dpi: int matrix_basis: Matrix draw_type: str @@ -710,33 +714,35 @@ class GizmoUtils(PublicProperty): def init_shape(self): if not hasattr(self, 'custom_shape'): self.custom_shape = {} - for i in self.G_GizmoCustomShapeDict: - item = self.G_GizmoCustomShapeDict[i] + for i in self.G_CustomShape: + item = self.G_CustomShape[i] self.custom_shape[i] = self.new_custom_shape('TRIS', item) def init_setup(self): self.init_shape() def init_invoke(self, context, event): - self.init_mouse_y = event.mouse_y - self.init_mouse_x = event.mouse_x + self.init_mouse_region_y = event.mouse_region_y + self.init_mouse_region_x = event.mouse_region_x def _update_matrix(self, context): func = getattr(self, 'update_gizmo_matrix', None) - if func: + if func and self.modifier_origin_angle_is_available: func(context) def draw(self, context): - self.draw_custom_shape(self.custom_shape[self.draw_type]) - self._update_matrix(context) + if self.modifier_origin_angle_is_available: + self.draw_custom_shape(self.custom_shape[self.draw_type]) + self._update_matrix(context) def draw_select(self, context, select_id): - self.draw_custom_shape( - self.custom_shape[self.draw_type], select_id=select_id) - self._update_matrix(context) + if self.modifier_origin_angle_is_available: + self.draw_custom_shape( + self.custom_shape[self.draw_type], select_id=select_id) + self._update_matrix(context) def get_delta(self, event): - delta = (self.init_mouse_x - event.mouse_x) / self.mouse_dpi + delta = (self.init_mouse_region_x - event.mouse_region_x) / self.mouse_dpi return delta def get_snap(self, delta, tweak): @@ -759,6 +765,22 @@ class GizmoUtils(PublicProperty): ... +class GizmoGroupUtils(GizmoUtils): + bl_space_type = 'VIEW_3D' + bl_region_type = 'WINDOW' + bl_options = {'3D', + 'PERSISTENT', + # 'SCALE', + # 'DEPTH_3D', + # 'SELECT', + # 'SHOW_MODAL_ALL', + # 'EXCLUDE_MODAL', + # 'TOOL_INIT', # not show + # 'TOOL_FALLBACK_KEYMAP', + # 'VR_REDRAWS' + } + + class Tmp: @classmethod def get_origin_bounds(cls, obj: 'bpy.types.Object') -> list: -- 2.30.2 From 97c4bf357002d31e317a5c49cc8604d87c8a0cc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=90=8C=E6=96=B0?= <3209970865@qq.com> Date: Fri, 31 Mar 2023 01:04:56 +0800 Subject: [PATCH 11/24] new_origin_empty_object func --- simple_deform_helper/draw.py | 13 +- .../gizmo/up_down_limits_point.py | 176 ++++----- simple_deform_helper/operators.py | 2 +- simple_deform_helper/utils.py | 370 +++++++++--------- 4 files changed, 277 insertions(+), 284 deletions(-) diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index 72dde2f8d..f6d5d3db8 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -105,7 +105,6 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): self.draw_scale_text(obj) if not self.modifier_origin_angle_is_available: self.draw_bound_box() - ... if self.simple_deform_show_gizmo_poll(context): # draw bound box self.draw_bound_box() @@ -136,6 +135,8 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): # draw pos self.draw_3d_shader([line_pos[1]], (), (0, 1, 0, 0.5), shader_name='3D_UNIFORM_COLOR', draw_type='POINTS') + self.draw_3d_shader([line_pos[0]], (), (1, 0, 0, 0.5), + shader_name='3D_UNIFORM_COLOR', draw_type='POINTS') @classmethod def draw_deform_mesh(cls, ob, context): @@ -151,8 +152,10 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): pos, indices, pref.deform_wireframe_color) def draw_scale_text(self, ob): - ob = self.obj - dit = self.G_GizmoData - if (ob.scale != Vector((1, 1, 1))) and ('handler_text' not in dit): - dit['handler_text'] = bpy.types.SpaceView3D.draw_handler_add( + scale_error = (ob.scale != Vector((1, 1, 1))) + if scale_error and ('handler_text' not in self.G_GizmoData): + self.G_GizmoData['handler_text'] = bpy.types.SpaceView3D.draw_handler_add( self.draw_str, (), 'WINDOW', 'POST_PIXEL') + + def draw_origin_error(self): + ... diff --git a/simple_deform_helper/gizmo/up_down_limits_point.py b/simple_deform_helper/gizmo/up_down_limits_point.py index 0c3b0e418..8ded193ef 100644 --- a/simple_deform_helper/gizmo/up_down_limits_point.py +++ b/simple_deform_helper/gizmo/up_down_limits_point.py @@ -1,5 +1,4 @@ import math -from typing import Callable, Any import bpy from bpy.types import Gizmo, GizmoGroup @@ -22,29 +21,13 @@ class GizmoProperty(GizmoUtils): def is_down_limits_mode(self): return self.ctrl_mode == 'down_limits' - @property - def origin_mode(self): - return self.SimpleDeformGizmo_origin_property_group.origin_mode - - @property - def is_middle_mode(self): - return self.origin_mode in ('LIMITS_MIDDLE', 'MIDDLE') - @property def limit_scope(self): return self.pref.modifiers_limits_tolerance - @property - def difference_value(self): - return self.modifier_up_limits - self.modifier_down_limits - - @property - def middle_value(self): - return (self.modifier_up_limits + self.modifier_down_limits) / 2 - @property def limits_min_value(self): - return self.modifier_up_limits + self.limit_scope + return self.modifier_down_limits + self.limit_scope @property def limits_max_value(self): @@ -54,39 +37,22 @@ class GizmoProperty(GizmoUtils): def get_up_limits_value(self, event): delta = self.get_delta(event) - mid = self.middle_value + self.limit_scope + mid = self.middle_limits_value + self.limit_scope min_value = mid if self.is_middle_mode else self.limits_min_value return self.value_limit(delta, min_value=min_value) def get_down_limits_value(self, event): delta = self.get_delta(event) - mid = self.middle_value - self.limit_scope + mid = self.middle_limits_value - self.limit_scope max_value = mid if self.is_middle_mode else self.limits_max_value return self.value_limit(delta, max_value=max_value) - -class GizmoUpdate(GizmoProperty): - - def update_gizmo_matrix(self, context): - self.align_orientation_to_user_perspective(context) - self.align_point_to_limits_point() - - def align_orientation_to_user_perspective(self, context): - rotation = context.space_data.region_3d.view_matrix.inverted().to_quaternion() - matrix = rotation.to_matrix().to_4x4() - self.matrix_basis = matrix - - def align_point_to_limits_point(self): - if self.is_up_limits_mode: - self.matrix_basis.translation = self.point_limits_up - elif self.is_down_limits_mode: - self.matrix_basis.translation = self.point_limits_down - - def delta_update(self, context, event, delta): + def get_delta(self, event): + context = bpy.context x, y = view3d_utils.location_3d_to_region_2d( - context.region, context.space_data.region_3d, self.up) + context.region, context.space_data.region_3d, self.point_up) x2, y2 = view3d_utils.location_3d_to_region_2d( - context.region, context.space_data.region_3d, self.down) + context.region, context.space_data.region_3d, self.point_down) mouse_line_distance = math.sqrt(((event.mouse_region_x - x2) ** 2) + ((event.mouse_region_y - y2) ** 2)) @@ -104,20 +70,43 @@ class GizmoUpdate(GizmoProperty): angle_ = mouse_angle.angle(limits_angle) if angle_ > (math.pi / 2): delta = 0 - return delta + +class GizmoUpdate(GizmoProperty): + # ---update gizmo matrix + def update_gizmo_matrix(self, context): + self.align_orientation_to_user_perspective(context) + self.align_point_to_limits_point() + + def align_orientation_to_user_perspective(self, context): + rotation = context.space_data.region_3d.view_matrix.inverted().to_quaternion() + matrix = rotation.to_matrix().to_4x4() + self.matrix_basis = matrix + + def align_point_to_limits_point(self): + if self.is_up_limits_mode: + self.matrix_basis.translation = self.point_limits_up + elif self.is_down_limits_mode: + self.matrix_basis.translation = self.point_limits_down + + # ---- set prop + def set_prop_value(self, event): + if self.is_up_limits_mode: + self.set_up_value(event) + elif self.is_down_limits_mode: + self.set_down_value(event) + def set_down_value(self, event): value = self.get_down_limits_value(event) self.target_set_value('down_limits', value) if event.ctrl: - self.target_set_value( - 'up_limits', value + self.difference_value) - + self.target_set_value('up_limits', value + self.difference_value) elif self.is_middle_mode: if self.origin_mode == 'LIMITS_MIDDLE': - mu = self.middle_value - self.target_set_value('up_limits', mu - (value - mu)) + mu = self.middle_limits_value + v = mu - (value - mu) + self.target_set_value('up_limits', v) elif self.origin_mode == 'MIDDLE': self.target_set_value('up_limits', 1 - value) else: @@ -129,12 +118,12 @@ class GizmoUpdate(GizmoProperty): value = self.get_up_limits_value(event) self.target_set_value('up_limits', value) if event.ctrl: - self.target_set_value( - 'down_limits', value - self.difference_value) + self.target_set_value('down_limits', value - self.difference_value) elif self.is_middle_mode: if self.origin_mode == 'LIMITS_MIDDLE': - mu = self.middle_value - self.target_set_value('down_limits', mu - (value - mu)) + mu = self.middle_limits_value + value = mu - (value - mu) + self.target_set_value('down_limits', value) elif self.origin_mode == 'MIDDLE': self.target_set_value('down_limits', 1 - value) else: @@ -142,14 +131,9 @@ class GizmoUpdate(GizmoProperty): else: self.target_set_value('down_limits', self.modifier_down_limits) - def set_prop_value(self, event): - if self.is_up_limits_mode: - self.set_up_value(event) - elif self.is_down_limits_mode: - self.set_down_value(event) - + # ------- def update_header_text(self, context): - origin = self.SimpleDeformGizmo_origin_property_group + origin = self.obj_origin_property_group mode = origin.bl_rna.properties['origin_mode'].enum_items[origin.origin_mode].name t = self.translate_header_text @@ -157,30 +141,35 @@ class GizmoUpdate(GizmoProperty): if self.is_up_limits_mode: value = round(self.modifier_up_limits, 3) - text += t('Upper limit', value) + text += t('Up limit', value) elif self.is_down_limits_mode: value = round(self.modifier_down_limits, 3) text += t('Down limit', value) context.area.header_text_set(text) - def event_ops(self, event, ob, origin): - """通过输入键位来更改属性""" - # event ctrl - data_path = ('object.SimpleDeformGizmo_PropertyGroup.origin_mode', - 'object.modifiers.active.origin.SimpleDeformGizmo_PropertyGroup.origin_mode') - - if event.type in ('WHEELUPMOUSE', 'WHEELDOWNMOUSE'): - reverse = (event.type == 'WHEELUPMOUSE') - for path in data_path: - bpy.ops.wm.context_cycle_enum( - data_path=path, reverse=reverse, wrap=True) - elif event.type in ('X', 'Y', 'Z'): - ob.modifiers.active.deform_axis = event.type - elif event.type == 'A': - self.pref.display_bend_axis_switch_gizmo = True - return {'FINISHED'} - - return {'RUNNING_MODAL'} + # def update_modifiers_origin_matrix(self): + # ob = bpy.context.object + # for mod in ob.modifiers: + # if mod.type == 'SIMPLE_DEFORM': + # self.update_matrix(mod, ob) + # + # def update_matrix(self, mod, ob): + # # if mod.deform_method == 'BEND': + # # cls.new_empty(ob, mod) + # origin_object = mod.origin + # if mod.origin: + # modifiers_co = self.G_GizmoData['modifiers_co'] + # for index, mod_name in enumerate(modifiers_co): + # co_items = list(modifiers_co.items()) + # if mod.name == mod_name: + # data = co_items[index - 1][1] if ( + # index or (index != 1)) else modifiers_co['co'] + # (up, down), (up_, down_) = self.get_limits_pos( + # mod, self.co_to_direction(ob.matrix_world.copy(), data)) + # origin_mode = self.obj_origin_property_group( + # mod, ob).origin_mode + # self.set_empty_obj_matrix( + # origin_mode, origin_object, up_, down_, up, down) class UpDownLimitsGizmo(Gizmo, GizmoUpdate): @@ -190,6 +179,7 @@ class UpDownLimitsGizmo(Gizmo, GizmoUpdate): {'id': 'up_limits', 'type': 'FLOAT', 'array_length': 1}, {'id': 'down_limits', 'type': 'FLOAT', 'array_length': 1}, ) + bl_options = {'UNDO', 'GRAB_CURSOR'} __slots__ = ( 'mod', @@ -198,12 +188,16 @@ class UpDownLimitsGizmo(Gizmo, GizmoUpdate): 'draw_type', 'mouse_dpi', 'ctrl_mode', + 'difference_value', + 'middle_limits_value', 'init_mouse_region_y', 'init_mouse_region_x', 'custom_shape', 'int_value_up_limits', 'int_value_down_limits', ) + difference_value: float + middle_limits_value: float def setup(self): self.mouse_dpi = 10 @@ -232,15 +226,17 @@ class UpDownLimitsGizmo(Gizmo, GizmoUpdate): def modal(self, context, event, tweak): self.clear_cache() + if self.modifier_is_use_origin_axis: + self.new_origin_empty_object() + + self.difference_value = self.modifier_up_limits - self.modifier_down_limits + self.middle_limits_value = (self.modifier_up_limits + self.modifier_down_limits) / 2 + self.set_prop_value(event) - if self.SimpleDeformGizmo_is_use_empty_as_axis: - self.new_empty(self.obj, self.modifier) - # self.update_empty_matrix() + self.update_object_origin_matrix() - # self.update_header_text(context, mod, origin, up_limits, down_limits) - - # return self.event_ops(event, ob, origin) - return {'RUNNING_MODAL'} + self.update_header_text(context) + return self.event_handle(event) class UpDownLimitsGizmoGroup(GizmoGroup, GizmoGroupUtils): @@ -286,15 +282,3 @@ class UpDownLimitsGizmoGroup(GizmoGroup, GizmoGroupUtils): for i in (self.down_limits, self.up_limits): for j in ('down_limits', 'up_limits'): i.target_set_prop(j, pro, j) - self.down_limits.target_set_prop('down_limits', - pro, - 'down_limits') - self.down_limits.target_set_prop('up_limits', - pro, - 'up_limits') - self.up_limits.target_set_prop('down_limits', - pro, - 'down_limits') - self.up_limits.target_set_prop('up_limits', - pro, - 'up_limits') diff --git a/simple_deform_helper/operators.py b/simple_deform_helper/operators.py index e4948f2b5..30c02b685 100644 --- a/simple_deform_helper/operators.py +++ b/simple_deform_helper/operators.py @@ -30,7 +30,7 @@ class DeformAxisOperator(Operator, GizmoUtils): mod = context.object.modifiers.active mod.deform_axis = self.Deform_Axis - empty, con_limit_name = GizmoUtils.new_empty(context.object, mod) + empty, con_limit_name = GizmoUtils.new_origin_empty_object(context.object, mod) is_positive = GizmoUtils.is_positive(mod.angle) for limit, value in (('max_x', self.X_Value), diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index ad8812017..540ce1c2e 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -278,65 +278,6 @@ class PublicUtils(PublicPoll): class GizmoClassMethod(PublicUtils): - @classmethod - def new_empty(cls, obj, mod): - origin = mod.origin - if origin is None: - new_name = cls.G_NAME + '_Empty_' + str(uuid.uuid4()) - origin_object = bpy.data.objects.new(new_name, None) - cls.link_obj_to_active_collection(origin_object) - origin_object.hide_set(True) - origin_object.empty_display_size = min(obj.dimensions) - mod.origin = origin_object - else: - origin_object = mod.origin - origin_object.hide_viewport = False - - if origin_object.parent != obj: - origin_object.parent = obj - - # add constraints - con_name = cls.G_CON_LIMIT_NAME - if con_name in origin_object.constraints.keys(): - limit_constraints = origin.constraints.get(con_name) - else: - limit_constraints = origin_object.constraints.new( - 'LIMIT_ROTATION') - limit_constraints.name = con_name - limit_constraints.owner_space = 'WORLD' - limit_constraints.space_object = obj - limit_constraints.use_transform_limit = True - limit_constraints.use_limit_x = True - limit_constraints.use_limit_y = True - limit_constraints.use_limit_z = True - con_copy_name = cls.G_NAME + 'constraints_copy_rotation' - if con_copy_name in origin_object.constraints.keys(): - copy_constraints = origin.constraints.get(con_copy_name) - else: - copy_constraints = origin_object.constraints.new( - 'COPY_ROTATION') - copy_constraints.name = con_copy_name - copy_constraints.target = obj - copy_constraints.mix_mode = 'BEFORE' - copy_constraints.target_space = 'WORLD' - copy_constraints.owner_space = 'WORLD' - origin_object.rotation_euler.zero() - origin_object.scale = 1, 1, 1 - return origin_object, con_name - - @classmethod - def set_empty_obj_matrix(cls, origin_mode, empty_object, up_, down_, up, down): - tow = Vector((2, 2, 2)) - if origin_mode == 'UP_LIMITS': - empty_object.matrix_world.translation = Vector(up_) - elif origin_mode == 'DOWN_LIMITS': - empty_object.matrix_world.translation = Vector( - down_) - elif origin_mode == 'LIMITS_MIDDLE': - empty_object.matrix_world.translation = (up_ + down_) / tow - elif origin_mode == 'MIDDLE': - empty_object.matrix_world.translation = (up + down) / tow - @classmethod def get_vector_axis(cls, mod): axis = mod.deform_axis @@ -550,7 +491,7 @@ class PublicProperty(GizmoClassMethod): # ------ @property - def SimpleDeformGizmo_origin_property_group(self): + def obj_origin_property_group(self): mod = self.modifier if mod.origin: return mod.origin.SimpleDeformGizmo_PropertyGroup @@ -558,132 +499,179 @@ class PublicProperty(GizmoClassMethod): return self.obj.SimpleDeformGizmo_PropertyGroup @property - def SimpleDeformGizmo_is_use_empty_as_axis(self): - return self.SimpleDeformGizmo_origin_property_group.origin_mode != 'NOT' + def origin_mode(self): + return self.obj_origin_property_group.origin_mode + + @property + def is_limits_middle_mode(self): + return self.origin_mode == 'LIMITS_MIDDLE' + + @property + def is_middle_mode(self): + return self.origin_mode in ('LIMITS_MIDDLE', 'MIDDLE') + + @property + def modifier_is_use_origin_axis(self): + return self.obj_origin_property_group.origin_mode != 'NOT' class GizmoUpdate(PublicProperty): - @classmethod - def update_matrix(cls, mod, ob): - if mod.deform_method == 'BEND': - cls.new_empty(ob, mod) - if mod.origin: - empty_object = mod.origin - modifiers_co = cls.G_GizmoData['modifiers_co'] - for index, mod_name in enumerate(modifiers_co): - co_items = list(modifiers_co.items()) - if mod.name == mod_name: - data = co_items[index - 1][1] if ( - index or (index != 1)) else modifiers_co['co'] - (up, down), (up_, down_) = cls.get_limits_pos( - mod, cls.co_to_direction(ob.matrix_world.copy(), data)) - origin_mode = cls.SimpleDeformGizmo_origin_property_group( - mod, ob).origin_mode - cls.set_empty_obj_matrix( - origin_mode, empty_object, up_, down_, up, down) + def new_origin_empty_object(self): + mod = self.modifier + obj = self.obj + origin = mod.origin + if not origin: + new_name = self.G_NAME + '_Empty_' + str(uuid.uuid4()) + origin_object = bpy.data.objects.new(new_name, None) + self.link_obj_to_active_collection(origin_object) + origin_object.hide_set(True) + origin_object.empty_display_size = min(obj.dimensions) + mod.origin = origin_object + else: + origin_object = mod.origin + origin_object.hide_viewport = False - # @classmethod - # def update_empty_matrix(cls): - # ob = bpy.context.object - # for mod in ob.modifiers: - # if mod.type == 'SIMPLE_DEFORM': - # cls.update_matrix(mod, ob) - # - # @classmethod - # context = bpy.context - # data = bpy.data - # matrix = obj.matrix_world.copy() # 物体矩阵 - # # add simple_deform mesh - # (min_x, min_y, min_z), (max_x, max_y, - # max_z) = cls.get_mesh_max_min_co(obj) - # vertexes = ((max_x, min_y, min_z), - # (min_x, min_y, min_z), - # (max_x, max_y, min_z), - # (min_x, max_y, min_z), - # (max_x, min_y, max_z), - # (min_x, min_y, max_z), - # (max_x, max_y, max_z), - # (min_x, max_y, max_z)) - # name = cls.G_NAME - # if data.objects.get(name): - # data.objects.remove(data.objects.get(name)) - # - # if data.meshes.get(name): - # data.meshes.remove(data.meshes.get(name)) - # mesh = data.meshes.new(name) - # mesh.from_pydata(vertexes, cls.G_INDICES, []) - # mesh.update() - # - # new_object = data.objects.new(name, mesh) - # - # cls.link_obj_to_active_collection(new_object) - # - # if new_object.parent != obj: - # new_object.parent = obj - # - # new_object.modifiers.clear() - # subdivision = new_object.modifiers.new('1', 'SUBSURF') - # subdivision.levels = 7 - # cls.G_GizmoData['modifiers_co'] = {} - # cls.G_GizmoData['modifiers_co']['co'] = ( - # min_x, min_y, min_z), (max_x, max_y, max_z) - # for mo in context.object.modifiers: - # if mo.type == 'SIMPLE_DEFORM': - # simple_deform = new_object.modifiers.new( - # mo.name, 'SIMPLE_DEFORM') - # simple_deform.deform_method = mo.deform_method - # simple_deform.deform_axis = mo.deform_axis - # simple_deform.lock_x = mo.lock_x - # simple_deform.lock_y = mo.lock_y - # simple_deform.lock_z = mo.lock_z - # simple_deform.origin = mo.origin - # simple_deform.limits[1] = mo.limits[1] - # simple_deform.limits[0] = mo.limits[0] - # simple_deform.angle = mo.angle - # simple_deform.show_viewport = mo.show_viewport - # obj = PublicUtils.get_depsgraph(new_object) - # cls.G_GizmoData['modifiers_co'][mo.name] = cls.get_mesh_max_min_co( - # obj) - # new_object.hide_set(True) - # new_object.hide_viewport = False - # new_object.hide_select = True - # new_object.hide_render = True - # new_object.hide_viewport = True - # new_object.hide_set(True) - # ver_len = obj.data.vertices.__len__() - # edge_len = obj.data.edges.__len__() - # - # if 'numpy_data' not in cls.G_GizmoData: - # cls.G_GizmoData['numpy_data'] = {} - # - # numpy_data = cls.G_GizmoData['numpy_data'] - # key = (ver_len, edge_len) - # if key in numpy_data: - # list_edges, list_vertices = numpy_data[key] - # else: - # list_edges = np.zeros(edge_len * 2, dtype=np.int32) - # list_vertices = np.zeros(ver_len * 3, dtype=np.float32) - # numpy_data[key] = (list_edges, list_vertices) - # obj.data.vertices.foreach_get('co', list_vertices) - # ver = list_vertices.reshape((ver_len, 3)) - # ver = np.insert(ver, 3, 1, axis=1).T - # ver[:] = np.dot(matrix, ver) - # - # ver /= ver[3, :] - # ver = ver.T - # ver = ver[:, :3] - # obj.data.edges.foreach_get('vertices', list_edges) - # indices = list_edges.reshape((edge_len, 2)) - # - # limits = context.object.modifiers.active.limits[:] - # modifiers = [getattr(context.object.modifiers.active, i) - # for i in cls.G_MODIFIERS_PROPERTY] - # - # cls.G_GizmoData['draw'] = (ver, indices, matrix, modifiers, limits) + if origin_object.parent != obj: + origin_object.parent = obj + + # add constraints + name = self.G_CON_LIMIT_NAME + if origin_object.constraints.keys().__len__() > 1: + origin_object.constraints.clear() + if name in origin_object.constraints.keys(): + limit_constraints = origin.constraints.get(name) + else: + limit_constraints = origin_object.constraints.new( + 'LIMIT_ROTATION') + limit_constraints.name = name + limit_constraints.owner_space = 'WORLD' + limit_constraints.space_object = obj + limit_constraints.use_transform_limit = True + limit_constraints.use_limit_x = True + limit_constraints.use_limit_y = True + limit_constraints.use_limit_z = True + con_copy_name = self.G_NAME + 'constraints_copy_rotation' + if con_copy_name in origin_object.constraints.keys(): + copy_constraints = origin.constraints.get(con_copy_name) + else: + copy_constraints = origin_object.constraints.new( + 'COPY_ROTATION') + copy_constraints.name = con_copy_name + copy_constraints.target = obj + copy_constraints.mix_mode = 'BEFORE' + copy_constraints.target_space = 'WORLD' + copy_constraints.owner_space = 'WORLD' + origin_object.rotation_euler.zero() + origin_object.scale = 1, 1, 1 + + def update_object_origin_matrix(self): + self.clear_data() + origin_mode = self.origin_mode + empty_object = self.modifier.origin + if empty_object and self.modifier_is_use_origin_axis : + if origin_mode == 'UP_LIMITS': + empty_object.matrix_world.translation = Vector(self.point_limits_up) + elif origin_mode == 'DOWN_LIMITS': + empty_object.matrix_world.translation = Vector(self.point_limits_down) + elif origin_mode == 'LIMITS_MIDDLE': + translation = (self.point_limits_up + self.point_limits_down) / 2 + empty_object.matrix_world.translation = translation + elif origin_mode == 'MIDDLE': + translation = (self.point_up + self.point_down) / 2 + empty_object.matrix_world.translation = translation def update_deform_wireframe(self): - ... + context = bpy.context + data = bpy.data + matrix = obj.matrix_world.copy() # 物体矩阵 + # add simple_deform mesh + (min_x, min_y, min_z), (max_x, max_y, + max_z) = cls.get_mesh_max_min_co(obj) + vertexes = ((max_x, min_y, min_z), + (min_x, min_y, min_z), + (max_x, max_y, min_z), + (min_x, max_y, min_z), + (max_x, min_y, max_z), + (min_x, min_y, max_z), + (max_x, max_y, max_z), + (min_x, max_y, max_z)) + name = cls.G_NAME + if data.objects.get(name): + data.objects.remove(data.objects.get(name)) + + if data.meshes.get(name): + data.meshes.remove(data.meshes.get(name)) + mesh = data.meshes.new(name) + mesh.from_pydata(vertexes, cls.G_INDICES, []) + mesh.update() + + new_object = data.objects.new(name, mesh) + + cls.link_obj_to_active_collection(new_object) + + if new_object.parent != obj: + new_object.parent = obj + + new_object.modifiers.clear() + subdivision = new_object.modifiers.new('1', 'SUBSURF') + subdivision.levels = 7 + cls.G_GizmoData['modifiers_co'] = {} + cls.G_GizmoData['modifiers_co']['co'] = ( + min_x, min_y, min_z), (max_x, max_y, max_z) + for mo in context.object.modifiers: + if mo.type == 'SIMPLE_DEFORM': + simple_deform = new_object.modifiers.new( + mo.name, 'SIMPLE_DEFORM') + simple_deform.deform_method = mo.deform_method + simple_deform.deform_axis = mo.deform_axis + simple_deform.lock_x = mo.lock_x + simple_deform.lock_y = mo.lock_y + simple_deform.lock_z = mo.lock_z + simple_deform.origin = mo.origin + simple_deform.limits[1] = mo.limits[1] + simple_deform.limits[0] = mo.limits[0] + simple_deform.angle = mo.angle + simple_deform.show_viewport = mo.show_viewport + obj = PublicUtils.get_depsgraph(new_object) + cls.G_GizmoData['modifiers_co'][mo.name] = cls.get_mesh_max_min_co( + obj) + new_object.hide_set(True) + new_object.hide_viewport = False + new_object.hide_select = True + new_object.hide_render = True + new_object.hide_viewport = True + new_object.hide_set(True) + ver_len = obj.data.vertices.__len__() + edge_len = obj.data.edges.__len__() + + if 'numpy_data' not in cls.G_GizmoData: + cls.G_GizmoData['numpy_data'] = {} + + numpy_data = cls.G_GizmoData['numpy_data'] + key = (ver_len, edge_len) + if key in numpy_data: + list_edges, list_vertices = numpy_data[key] + else: + list_edges = np.zeros(edge_len * 2, dtype=np.int32) + list_vertices = np.zeros(ver_len * 3, dtype=np.float32) + numpy_data[key] = (list_edges, list_vertices) + obj.data.vertices.foreach_get('co', list_vertices) + ver = list_vertices.reshape((ver_len, 3)) + ver = np.insert(ver, 3, 1, axis=1).T + ver[:] = np.dot(matrix, ver) + + ver /= ver[3, :] + ver = ver.T + ver = ver[:, :3] + obj.data.edges.foreach_get('vertices', list_edges) + indices = list_edges.reshape((edge_len, 2)) + + limits = context.object.modifiers.active.limits[:] + modifiers = [getattr(context.object.modifiers.active, i) + for i in cls.G_MODIFIERS_PROPERTY] + + cls.G_GizmoData['draw'] = (ver, indices, matrix, modifiers, limits) class GizmoUtils(GizmoUpdate): @@ -725,7 +713,7 @@ class GizmoUtils(GizmoUpdate): self.init_mouse_region_y = event.mouse_region_y self.init_mouse_region_x = event.mouse_region_x - def _update_matrix(self, context): + def __update_matrix_func(self, context): func = getattr(self, 'update_gizmo_matrix', None) if func and self.modifier_origin_angle_is_available: func(context) @@ -733,13 +721,13 @@ class GizmoUtils(GizmoUpdate): def draw(self, context): if self.modifier_origin_angle_is_available: self.draw_custom_shape(self.custom_shape[self.draw_type]) - self._update_matrix(context) + self.__update_matrix_func(context) def draw_select(self, context, select_id): if self.modifier_origin_angle_is_available: self.draw_custom_shape( self.custom_shape[self.draw_type], select_id=select_id) - self._update_matrix(context) + self.__update_matrix_func(context) def get_delta(self, event): delta = (self.init_mouse_region_x - event.mouse_region_x) / self.mouse_dpi @@ -764,6 +752,24 @@ class GizmoUtils(GizmoUpdate): def update_gizmo_matrix(self): ... + def event_handle(self, event): + """通过输入键位来更改属性""" + # event ctrl + data_path = ('object.SimpleDeformGizmo_PropertyGroup.origin_mode', + 'object.modifiers.active.origin.SimpleDeformGizmo_PropertyGroup.origin_mode') + + if event.type in ('WHEELUPMOUSE', 'WHEELDOWNMOUSE'): + reverse = (event.type == 'WHEELUPMOUSE') + for path in data_path: + bpy.ops.wm.context_cycle_enum( + data_path=path, reverse=reverse, wrap=True) + elif event.type in ('X', 'Y', 'Z'): + self.obj.modifiers.active.deform_axis = event.type + elif event.type == 'A': + self.pref.display_bend_axis_switch_gizmo = True + return {'FINISHED'} + return {'RUNNING_MODAL'} + class GizmoGroupUtils(GizmoUtils): bl_space_type = 'VIEW_3D' -- 2.30.2 From 4ea575bcbf3bf37379534e64d9f3923c2ba95cb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=90=8C=E6=96=B0?= <3209970865@qq.com> Date: Fri, 31 Mar 2023 01:56:19 +0800 Subject: [PATCH 12/24] draw deform wireframe --- simple_deform_helper/draw.py | 17 ++-- .../gizmo/angle_and_factor.py | 3 +- .../gizmo/up_down_limits_point.py | 1 + simple_deform_helper/operators.py | 2 +- simple_deform_helper/panel.py | 6 ++ simple_deform_helper/preferences.py | 5 + simple_deform_helper/update.py | 2 +- simple_deform_helper/utils.py | 92 +++++++++---------- 8 files changed, 68 insertions(+), 60 deletions(-) diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index f6d5d3db8..3a3c710bf 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -108,7 +108,7 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): if self.simple_deform_show_gizmo_poll(context): # draw bound box self.draw_bound_box() - # cls.draw_deform_mesh(obj, context) + self.draw_deform_mesh() self.draw_limits_line() self.draw_limits_bound_box() elif self.simple_deform_show_bend_axis_witch_poll(context): @@ -138,18 +138,17 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): self.draw_3d_shader([line_pos[0]], (), (1, 0, 0, 0.5), shader_name='3D_UNIFORM_COLOR', draw_type='POINTS') - @classmethod - def draw_deform_mesh(cls, ob, context): - pref = cls.pref_() - handler_dit = cls.G_GizmoData - active = context.object.modifiers.active + def draw_deform_mesh(self): + ob = self.obj + handler_dit = self.G_GizmoData + active = self.modifier # draw deform mesh if 'draw' in handler_dit: pos, indices, mat, mod_data, limits = handler_dit['draw'] - if ([getattr(active, i) for i in cls.G_MODIFIERS_PROPERTY] == mod_data) and ( + if ([getattr(active, i) for i in self.G_MODIFIERS_PROPERTY] == mod_data) and ( ob.matrix_world == mat) and limits == active.limits[:]: - cls.draw_3d_shader( - pos, indices, pref.deform_wireframe_color) + self.draw_3d_shader( + pos, indices, self.pref.deform_wireframe_color) def draw_scale_text(self, ob): scale_error = (ob.scale != Vector((1, 1, 1))) diff --git a/simple_deform_helper/gizmo/angle_and_factor.py b/simple_deform_helper/gizmo/angle_and_factor.py index 5aecb93ce..692dd7352 100644 --- a/simple_deform_helper/gizmo/angle_and_factor.py +++ b/simple_deform_helper/gizmo/angle_and_factor.py @@ -70,8 +70,9 @@ class AngleGizmo(Gizmo, AngleUpdate): def modal(self, context, event, tweak): self.clear_cache() - self.update_header_text(context) self.update_prop_value(event, tweak) + self.update_header_text(context) + self.update_deform_wireframe() return {'RUNNING_MODAL'} def exit(self, context, cancel): diff --git a/simple_deform_helper/gizmo/up_down_limits_point.py b/simple_deform_helper/gizmo/up_down_limits_point.py index 8ded193ef..6fc468bc0 100644 --- a/simple_deform_helper/gizmo/up_down_limits_point.py +++ b/simple_deform_helper/gizmo/up_down_limits_point.py @@ -234,6 +234,7 @@ class UpDownLimitsGizmo(Gizmo, GizmoUpdate): self.set_prop_value(event) self.update_object_origin_matrix() + self.update_deform_wireframe() self.update_header_text(context) return self.event_handle(event) diff --git a/simple_deform_helper/operators.py b/simple_deform_helper/operators.py index 30c02b685..35cc5e89a 100644 --- a/simple_deform_helper/operators.py +++ b/simple_deform_helper/operators.py @@ -26,7 +26,7 @@ class DeformAxisOperator(Operator, GizmoUtils): return {'RUNNING_MODAL'} def modal(self, context, event): - from gizmo.angle_and_factor import GizmoUtils + from .gizmo.angle_and_factor import GizmoUtils mod = context.object.modifiers.active mod.deform_axis = self.Deform_Axis diff --git a/simple_deform_helper/panel.py b/simple_deform_helper/panel.py index 3b840b0b2..2d453cd2a 100644 --- a/simple_deform_helper/panel.py +++ b/simple_deform_helper/panel.py @@ -33,6 +33,12 @@ class SimpleDeformHelperToolPanel(Panel, GizmoUtils): layout.prop(ctrl_obj, 'origin_mode', text='') + + layout.prop(pref, + 'update_deform_wireframe', + icon='MOD_WIREFRAME', + text='Deform Wireframe') + layout.prop(pref, 'modifiers_limits_tolerance', text='') diff --git a/simple_deform_helper/preferences.py b/simple_deform_helper/preferences.py index 8656ac8ec..4b23b5738 100644 --- a/simple_deform_helper/preferences.py +++ b/simple_deform_helper/preferences.py @@ -52,6 +52,10 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, GizmoUtils): default=False, options={'SKIP_SAVE'}) + update_deform_wireframe: BoolProperty( + name='Update Deform Wireframe', + default=True) + def draw(self, context): col = self.layout.column() col.prop(self, 'deform_wireframe_color') @@ -59,6 +63,7 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, GizmoUtils): col.prop(self, 'limits_bound_box_color') col.prop(self, 'modifiers_limits_tolerance') col.prop(self, 'display_bend_axis_switch_gizmo') + col.prop(self, 'update_deform_wireframe', icon='MOD_WIREFRAME', ) def draw_header_tool_settings(self, context): if GizmoUtils.simple_deform_public_poll(context): diff --git a/simple_deform_helper/update.py b/simple_deform_helper/update.py index c584669e0..4a101c3a7 100644 --- a/simple_deform_helper/update.py +++ b/simple_deform_helper/update.py @@ -11,7 +11,7 @@ def remove_not_use_empty(scene, dep): """循环场景内的所有物体,找出没用的空物体并删掉 """ GizmoUpdate.clear_cache() - remove_name: str = "ViewSimpleDeformGizmo__Empty_" + remove_name: str = "ViewSimpleDeformGizmo_" context = bpy.context if GizmoUpdate.simple_deform_modifier_is_simple(context): for obj in context.scene.objects: diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index 540ce1c2e..dd987285d 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -15,7 +15,7 @@ class PublicData: """Public data class, all fixed data will be placed here """ G_CustomShape = {} - G_GizmoData = {} + G_GizmoData = {'modifiers_co': {}} G_INDICES = ( (0, 1), (0, 2), (1, 3), (2, 3), (4, 5), (4, 6), (5, 7), (6, 7), @@ -393,6 +393,7 @@ class PublicProperty(GizmoClassMethod): @classmethod def clear_data(cls): cls.G_GizmoData.clear() + cls.G_GizmoData['modifiers_co'] = {} # --------------- Cache Data ---------------------- @@ -566,10 +567,10 @@ class GizmoUpdate(PublicProperty): origin_object.scale = 1, 1, 1 def update_object_origin_matrix(self): - self.clear_data() + self.clear_cache() origin_mode = self.origin_mode empty_object = self.modifier.origin - if empty_object and self.modifier_is_use_origin_axis : + if empty_object and self.modifier_is_use_origin_axis: if origin_mode == 'UP_LIMITS': empty_object.matrix_world.translation = Vector(self.point_limits_up) elif origin_mode == 'DOWN_LIMITS': @@ -582,46 +583,42 @@ class GizmoUpdate(PublicProperty): empty_object.matrix_world.translation = translation def update_deform_wireframe(self): + if not self.pref.update_deform_wireframe: + return context = bpy.context data = bpy.data + obj = self.obj + matrix = obj.matrix_world.copy() # 物体矩阵 # add simple_deform mesh - (min_x, min_y, min_z), (max_x, max_y, - max_z) = cls.get_mesh_max_min_co(obj) - vertexes = ((max_x, min_y, min_z), - (min_x, min_y, min_z), - (max_x, max_y, min_z), - (min_x, max_y, min_z), - (max_x, min_y, max_z), - (min_x, min_y, max_z), - (max_x, max_y, max_z), - (min_x, max_y, max_z)) - name = cls.G_NAME - if data.objects.get(name): - data.objects.remove(data.objects.get(name)) + name = self.G_NAME - if data.meshes.get(name): - data.meshes.remove(data.meshes.get(name)) - mesh = data.meshes.new(name) - mesh.from_pydata(vertexes, cls.G_INDICES, []) - mesh.update() + vertices = self.matrix_calculation(self.obj_matrix_world.inverted(), self.modifier_limits_bound_box) + new_mesh = data.meshes.new(name) + new_mesh.from_pydata(vertices, self.G_INDICES, []) + new_mesh.update() - new_object = data.objects.new(name, mesh) + deform_obj = data.objects.get(name, None) + if deform_obj and deform_obj.type == 'MESH': + deform_obj.data = new_mesh + else: + if deform_obj: + data.objects.remove(deform_obj) + deform_obj = data.objects.new(name, new_mesh) - cls.link_obj_to_active_collection(new_object) + self.link_obj_to_active_collection(deform_obj) + if deform_obj == obj: + return + if deform_obj.parent != obj: + deform_obj.parent = obj - if new_object.parent != obj: - new_object.parent = obj - - new_object.modifiers.clear() - subdivision = new_object.modifiers.new('1', 'SUBSURF') + deform_obj.modifiers.clear() + subdivision = deform_obj.modifiers.new('1', 'SUBSURF') subdivision.levels = 7 - cls.G_GizmoData['modifiers_co'] = {} - cls.G_GizmoData['modifiers_co']['co'] = ( - min_x, min_y, min_z), (max_x, max_y, max_z) + self.G_GizmoData['modifiers_co']['co'] = self.get_bound_co_data() for mo in context.object.modifiers: if mo.type == 'SIMPLE_DEFORM': - simple_deform = new_object.modifiers.new( + simple_deform = deform_obj.modifiers.new( mo.name, 'SIMPLE_DEFORM') simple_deform.deform_method = mo.deform_method simple_deform.deform_axis = mo.deform_axis @@ -629,26 +626,26 @@ class GizmoUpdate(PublicProperty): simple_deform.lock_y = mo.lock_y simple_deform.lock_z = mo.lock_z simple_deform.origin = mo.origin - simple_deform.limits[1] = mo.limits[1] - simple_deform.limits[0] = mo.limits[0] + # simple_deform.limits[1] = mo.limits[1] + # simple_deform.limits[0] = mo.limits[0] simple_deform.angle = mo.angle simple_deform.show_viewport = mo.show_viewport - obj = PublicUtils.get_depsgraph(new_object) - cls.G_GizmoData['modifiers_co'][mo.name] = cls.get_mesh_max_min_co( + obj = PublicUtils.get_depsgraph(deform_obj) + self.G_GizmoData['modifiers_co'][mo.name] = self.get_mesh_max_min_co( obj) - new_object.hide_set(True) - new_object.hide_viewport = False - new_object.hide_select = True - new_object.hide_render = True - new_object.hide_viewport = True - new_object.hide_set(True) + # deform_obj.hide_set(True) + # deform_obj.hide_viewport = False + # deform_obj.hide_select = True + # deform_obj.hide_render = True + # deform_obj.hide_viewport = True + # deform_obj.hide_set(True) ver_len = obj.data.vertices.__len__() edge_len = obj.data.edges.__len__() - if 'numpy_data' not in cls.G_GizmoData: - cls.G_GizmoData['numpy_data'] = {} + if 'numpy_data' not in self.G_GizmoData: + self.G_GizmoData['numpy_data'] = {} - numpy_data = cls.G_GizmoData['numpy_data'] + numpy_data = self.G_GizmoData['numpy_data'] key = (ver_len, edge_len) if key in numpy_data: list_edges, list_vertices = numpy_data[key] @@ -669,9 +666,8 @@ class GizmoUpdate(PublicProperty): limits = context.object.modifiers.active.limits[:] modifiers = [getattr(context.object.modifiers.active, i) - for i in cls.G_MODIFIERS_PROPERTY] - - cls.G_GizmoData['draw'] = (ver, indices, matrix, modifiers, limits) + for i in self.G_MODIFIERS_PROPERTY] + self.G_GizmoData['draw'] = (ver, indices, matrix, modifiers, limits) class GizmoUtils(GizmoUpdate): -- 2.30.2 From 9c5a8ebaf349fef52a66c1d149daef5b8ba8a0db Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Fri, 31 Mar 2023 12:04:08 +0800 Subject: [PATCH 13/24] draw_deform_mesh update_multiple_modifiers_data --- simple_deform_helper/draw.py | 21 ++--- .../gizmo/angle_and_factor.py | 5 +- simple_deform_helper/gizmo/bend_axis.py | 4 +- simple_deform_helper/gizmo/set_deform_axis.py | 9 +- .../gizmo/up_down_limits_point.py | 26 +----- simple_deform_helper/operators.py | 10 +-- simple_deform_helper/panel.py | 13 +-- simple_deform_helper/preferences.py | 9 +- simple_deform_helper/update.py | 2 +- simple_deform_helper/utils.py | 89 +++++++++++-------- 10 files changed, 93 insertions(+), 95 deletions(-) diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index 3a3c710bf..321ef4046 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -17,10 +17,10 @@ class Handler: @classmethod def del_handler_text(cls): - if 'handler_text' in cls.G_GizmoData: + if 'scale_text' in cls.G_GizmoData: bpy.types.SpaceView3D.draw_handler_remove( - cls.G_GizmoData['handler_text'], 'WINDOW') - cls.G_GizmoData.pop('handler_text') + cls.G_GizmoData['scale_text'], 'WINDOW') + cls.G_GizmoData.pop('scale_text') @classmethod def del_handler(cls): @@ -75,8 +75,6 @@ class DrawText: f'The scaling value of the object {obj.name_full} is not 1,' f' which will cause the deformation of the simple deformation modifier.' f' Please apply the scaling before deformation') - if obj.scale == Vector((1, 1, 1)): - cls.del_handler_text() @classmethod def draw_text(cls, x, y, text='Hello Word', font_id=0, size=10, *, color=(0.5, 0.5, 0.5, 1), dpi=72, column=0): @@ -105,7 +103,7 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): self.draw_scale_text(obj) if not self.modifier_origin_angle_is_available: self.draw_bound_box() - if self.simple_deform_show_gizmo_poll(context): + elif self.simple_deform_show_gizmo_poll(context): # draw bound box self.draw_bound_box() self.draw_deform_mesh() @@ -113,11 +111,10 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): self.draw_limits_bound_box() elif self.simple_deform_show_bend_axis_witch_poll(context): self.draw_bound_box() - # self.new_empty(obj, modifier) def draw_bound_box(self): coords = self.matrix_calculation(self.obj_matrix_world, - self.tow_co_to_coordinate(self.get_bound_co_data())) + self.tow_co_to_coordinate(self.modifier_bound_co)) self.draw_3d_shader(coords, self.G_INDICES, self.pref.bound_box_color) def draw_limits_bound_box(self): @@ -143,8 +140,8 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): handler_dit = self.G_GizmoData active = self.modifier # draw deform mesh - if 'draw' in handler_dit: - pos, indices, mat, mod_data, limits = handler_dit['draw'] + if 'simple_deform_box_data' in handler_dit and self.pref.update_deform_wireframe: + pos, indices, mat, mod_data, limits = handler_dit['simple_deform_box_data'] if ([getattr(active, i) for i in self.G_MODIFIERS_PROPERTY] == mod_data) and ( ob.matrix_world == mat) and limits == active.limits[:]: self.draw_3d_shader( @@ -152,8 +149,8 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): def draw_scale_text(self, ob): scale_error = (ob.scale != Vector((1, 1, 1))) - if scale_error and ('handler_text' not in self.G_GizmoData): - self.G_GizmoData['handler_text'] = bpy.types.SpaceView3D.draw_handler_add( + if scale_error and ('scale_text' not in self.G_GizmoData): + self.G_GizmoData['scale_text'] = bpy.types.SpaceView3D.draw_handler_add( self.draw_str, (), 'WINDOW', 'POST_PIXEL') def draw_origin_error(self): diff --git a/simple_deform_helper/gizmo/angle_and_factor.py b/simple_deform_helper/gizmo/angle_and_factor.py index 692dd7352..b565a58e9 100644 --- a/simple_deform_helper/gizmo/angle_and_factor.py +++ b/simple_deform_helper/gizmo/angle_and_factor.py @@ -19,12 +19,11 @@ class AngleUpdate(GizmoUtils): new_value = (self.get_snap(value, tweak)) old_value = math.degrees(self.target_get_value('angle')) - print(new_value, old_value) self.target_set_value('angle', math.radians(new_value)) def update_gizmo_matrix(self, context): matrix = context.object.matrix_world - point = self.get_bound_co_data()[1] + point = self.modifier_bound_co[1] self.matrix_basis = self.obj_matrix_world self.matrix_basis.translation = matrix @ point @@ -72,7 +71,7 @@ class AngleGizmo(Gizmo, AngleUpdate): self.update_prop_value(event, tweak) self.update_header_text(context) - self.update_deform_wireframe() + self.update_multiple_modifiers_data() return {'RUNNING_MODAL'} def exit(self, context, cancel): diff --git a/simple_deform_helper/gizmo/bend_axis.py b/simple_deform_helper/gizmo/bend_axis.py index 0c91505fd..0ff66599b 100644 --- a/simple_deform_helper/gizmo/bend_axis.py +++ b/simple_deform_helper/gizmo/bend_axis.py @@ -53,7 +53,7 @@ class BendAxiSwitchGizmoGroup(GizmoGroup, GizmoGroupUtils): _color_b = 0, 1, 0 for na, axis, rot, positive in ( - ('top_a', 'X', (math.radians(90), 0, math.radians(9 - 0)), True), + ('top_a', 'X', (math.radians(90), 0, math.radians(90)), True), ('top_b', 'X', (math.radians(90), 0, 0), True), ('bottom_a', 'X', (math.radians(90), 0, math.radians(90)), False), @@ -93,7 +93,7 @@ class BendAxiSwitchGizmoGroup(GizmoGroup, GizmoGroupUtils): def draw_prepare(self, context): ob = context.object mat = ob.matrix_world - top, bottom, left, right, front, back = self.each_face_pos + top, bottom, left, right, front, back = self.modifier_bound_box_pos rad = math.radians for_list = ( diff --git a/simple_deform_helper/gizmo/set_deform_axis.py b/simple_deform_helper/gizmo/set_deform_axis.py index fc780b8d2..3865e9f75 100644 --- a/simple_deform_helper/gizmo/set_deform_axis.py +++ b/simple_deform_helper/gizmo/set_deform_axis.py @@ -10,7 +10,7 @@ class SetDeformGizmoGroup(GizmoGroup, GizmoGroupUtils): @classmethod def poll(cls, context): - return cls.simple_deform_show_gizmo_poll(context) + return cls.simple_deform_show_gizmo_poll(context) and cls.pref_().show_set_axis_button def setup(self, context): data_path = 'object.modifiers.active.deform_axis' @@ -36,10 +36,13 @@ class SetDeformGizmoGroup(GizmoGroup, GizmoGroupUtils): def draw_prepare(self, context): if 'co' in self.G_GizmoData: + obj = self.get_depsgraph(self.obj) + dimensions = obj.dimensions + def _mat(f): co = self.G_GizmoData['co'][0] - co = (co[0] + (max(self.obj.dimensions) * f), co[1], - co[2] - (min(self.obj.dimensions) * 0.3)) + co = (co[0] + (max(dimensions) * f), co[1], + co[2] - (min(dimensions) * 0.3)) return self.obj_matrix_world @ Vector(co) self.deform_axis_x.matrix_basis.translation = _mat(0) diff --git a/simple_deform_helper/gizmo/up_down_limits_point.py b/simple_deform_helper/gizmo/up_down_limits_point.py index 6fc468bc0..1dc332c94 100644 --- a/simple_deform_helper/gizmo/up_down_limits_point.py +++ b/simple_deform_helper/gizmo/up_down_limits_point.py @@ -147,30 +147,6 @@ class GizmoUpdate(GizmoProperty): text += t('Down limit', value) context.area.header_text_set(text) - # def update_modifiers_origin_matrix(self): - # ob = bpy.context.object - # for mod in ob.modifiers: - # if mod.type == 'SIMPLE_DEFORM': - # self.update_matrix(mod, ob) - # - # def update_matrix(self, mod, ob): - # # if mod.deform_method == 'BEND': - # # cls.new_empty(ob, mod) - # origin_object = mod.origin - # if mod.origin: - # modifiers_co = self.G_GizmoData['modifiers_co'] - # for index, mod_name in enumerate(modifiers_co): - # co_items = list(modifiers_co.items()) - # if mod.name == mod_name: - # data = co_items[index - 1][1] if ( - # index or (index != 1)) else modifiers_co['co'] - # (up, down), (up_, down_) = self.get_limits_pos( - # mod, self.co_to_direction(ob.matrix_world.copy(), data)) - # origin_mode = self.obj_origin_property_group( - # mod, ob).origin_mode - # self.set_empty_obj_matrix( - # origin_mode, origin_object, up_, down_, up, down) - class UpDownLimitsGizmo(Gizmo, GizmoUpdate): bl_idname = 'UpDownLimitsGizmo' @@ -234,7 +210,7 @@ class UpDownLimitsGizmo(Gizmo, GizmoUpdate): self.set_prop_value(event) self.update_object_origin_matrix() - self.update_deform_wireframe() + self.update_multiple_modifiers_data() self.update_header_text(context) return self.event_handle(event) diff --git a/simple_deform_helper/operators.py b/simple_deform_helper/operators.py index 35cc5e89a..3f7fe2411 100644 --- a/simple_deform_helper/operators.py +++ b/simple_deform_helper/operators.py @@ -26,12 +26,11 @@ class DeformAxisOperator(Operator, GizmoUtils): return {'RUNNING_MODAL'} def modal(self, context, event): - from .gizmo.angle_and_factor import GizmoUtils - + self.clear_cache() mod = context.object.modifiers.active mod.deform_axis = self.Deform_Axis - empty, con_limit_name = GizmoUtils.new_origin_empty_object(context.object, mod) - is_positive = GizmoUtils.is_positive(mod.angle) + empty = self.new_origin_empty_object() + is_positive = self.is_positive(mod.angle) for limit, value in (('max_x', self.X_Value), ('min_x', self.X_Value), @@ -40,13 +39,14 @@ class DeformAxisOperator(Operator, GizmoUtils): ('max_z', self.Z_Value), ('min_z', self.Z_Value), ): - setattr(empty.constraints[con_limit_name], limit, value) + setattr(empty.constraints[self.G_CON_LIMIT_NAME], limit, value) if ((not is_positive) and self.Is_Positive) or (is_positive and (not self.Is_Positive)): mod.angle = mod.angle * -1 if not event.ctrl: self.pref.display_bend_axis_switch_gizmo = False + # self.new_origin_empty_object() return {'FINISHED'} diff --git a/simple_deform_helper/panel.py b/simple_deform_helper/panel.py index 2d453cd2a..c4f8e38bb 100644 --- a/simple_deform_helper/panel.py +++ b/simple_deform_helper/panel.py @@ -33,20 +33,21 @@ class SimpleDeformHelperToolPanel(Panel, GizmoUtils): layout.prop(ctrl_obj, 'origin_mode', text='') - layout.prop(pref, 'update_deform_wireframe', icon='MOD_WIREFRAME', - text='Deform Wireframe') - - layout.prop(pref, - 'modifiers_limits_tolerance', text='') - + layout.prop(pref, + 'show_set_axis_button', + icon='EMPTY_AXIS', + text='') if mod.deform_method == 'BEND': layout.prop(pref, 'display_bend_axis_switch_gizmo', toggle=1) + layout.prop(pref, + 'modifiers_limits_tolerance', + text='') class_list = ( diff --git a/simple_deform_helper/preferences.py b/simple_deform_helper/preferences.py index 4b23b5738..02b8c9b55 100644 --- a/simple_deform_helper/preferences.py +++ b/simple_deform_helper/preferences.py @@ -53,8 +53,12 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, GizmoUtils): options={'SKIP_SAVE'}) update_deform_wireframe: BoolProperty( - name='Update Deform Wireframe', - default=True) + name='Show Deform Wireframe', + default=False) + + show_set_axis_button: BoolProperty( + name='Show Set Axis Button', + default=False) def draw(self, context): col = self.layout.column() @@ -64,6 +68,7 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, GizmoUtils): col.prop(self, 'modifiers_limits_tolerance') col.prop(self, 'display_bend_axis_switch_gizmo') col.prop(self, 'update_deform_wireframe', icon='MOD_WIREFRAME', ) + col.prop(self, 'show_set_axis_button', icon='EMPTY_AXIS', ) def draw_header_tool_settings(self, context): if GizmoUtils.simple_deform_public_poll(context): diff --git a/simple_deform_helper/update.py b/simple_deform_helper/update.py index 4a101c3a7..98d5edea0 100644 --- a/simple_deform_helper/update.py +++ b/simple_deform_helper/update.py @@ -10,10 +10,10 @@ from .utils import GizmoUpdate def remove_not_use_empty(scene, dep): """循环场景内的所有物体,找出没用的空物体并删掉 """ - GizmoUpdate.clear_cache() remove_name: str = "ViewSimpleDeformGizmo_" context = bpy.context if GizmoUpdate.simple_deform_modifier_is_simple(context): + GizmoUpdate.clear_cache() for obj in context.scene.objects: is_empty = obj.type == "EMPTY" not_parent = not obj.parent diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index dd987285d..b4eee09f5 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -115,7 +115,8 @@ class PublicPoll(PublicClass): is_available_obj = available_modifiers_type and available_obj_type is_obj_mode = context.mode == 'OBJECT' show_mod = mod.show_viewport - return is_available_obj and is_obj_mode and show_mod + not_is_self_mesh = obj.name != cls.G_NAME + return is_available_obj and is_obj_mode and show_mod and not_is_self_mesh @classmethod def simple_deform_public_poll(cls, context: 'bpy.types.context') -> bool: @@ -228,7 +229,7 @@ class PublicUtils(PublicPoll): list_vertices = np.zeros(ver_len * 3, dtype=np.float32) obj.data.points.foreach_get('co', list_vertices) list_vertices = list_vertices.reshape(ver_len, 3) - return Vector(list_vertices.min(axis=0)), Vector(list_vertices.max(axis=0)) + return Vector(list_vertices.min(axis=0)).freeze(), Vector(list_vertices.max(axis=0)).freeze() @classmethod def matrix_calculation(cls, mat: 'Matrix', calculation_list: 'list') -> list: @@ -326,7 +327,7 @@ class PublicProperty(GizmoClassMethod): @cache def _get_limits_point_and_bound_box_co(self): - top, bottom, left, right, front, back = self.each_face_pos + top, bottom, left, right, front, back = self.modifier_bound_box_pos mod = self.modifier g_l = self.__from_up_down_point_get_limits_point if self.modifier.origin: @@ -381,14 +382,13 @@ class PublicProperty(GizmoClassMethod): # ---------------------- @cache - def _each_face_pos(self, mat): - return self.co_to_direction(mat, self.get_bound_co_data()) + def _each_face_pos(self, mat, co): + return self.co_to_direction(mat, co) @classmethod def clear_cache(cls): cls._each_face_pos.cache_clear() cls._get_limits_point_and_bound_box_co.cache_clear() - cls.clear_data() @classmethod def clear_data(cls): @@ -399,7 +399,15 @@ class PublicProperty(GizmoClassMethod): @property def each_face_pos(self): - return self._each_face_pos(self.obj_matrix_world) + return self._each_face_pos(self.obj_matrix_world, self.get_bound_co_data()) + + @property + def modifier_bound_co(self): + return self.G_GizmoData['modifiers_co'].get(self.modifier.name, self.get_bound_co_data()) + + @property + def modifier_bound_box_pos(self): + return self._each_face_pos(self.obj_matrix_world, self.modifier_bound_co) @property def modifier_limits_point(self): @@ -417,6 +425,7 @@ class PublicProperty(GizmoClassMethod): self._get_limits_point_and_bound_box_co() return True except UnboundLocalError: + self.clear_cache() return False # --------------- Compute Data ---------------------- @@ -532,13 +541,14 @@ class GizmoUpdate(PublicProperty): else: origin_object = mod.origin origin_object.hide_viewport = False - + if origin_object == obj: + return if origin_object.parent != obj: origin_object.parent = obj # add constraints name = self.G_CON_LIMIT_NAME - if origin_object.constraints.keys().__len__() > 1: + if origin_object.constraints.keys().__len__() > 2: origin_object.constraints.clear() if name in origin_object.constraints.keys(): limit_constraints = origin.constraints.get(name) @@ -566,6 +576,8 @@ class GizmoUpdate(PublicProperty): origin_object.rotation_euler.zero() origin_object.scale = 1, 1, 1 + return origin_object + def update_object_origin_matrix(self): self.clear_cache() origin_mode = self.origin_mode @@ -582,29 +594,26 @@ class GizmoUpdate(PublicProperty): translation = (self.point_up + self.point_down) / 2 empty_object.matrix_world.translation = translation - def update_deform_wireframe(self): - if not self.pref.update_deform_wireframe: - return - context = bpy.context - data = bpy.data + def update_multiple_modifiers_data(self): + self.clear_data() obj = self.obj + data = bpy.data + context = bpy.context - matrix = obj.matrix_world.copy() # 物体矩阵 # add simple_deform mesh name = self.G_NAME - vertices = self.matrix_calculation(self.obj_matrix_world.inverted(), self.modifier_limits_bound_box) + if data.objects.get(name): + data.objects.remove(data.objects.get(name)) + + if data.meshes.get(name): + data.meshes.remove(data.meshes.get(name)) + + vertices = self.tow_co_to_coordinate(self.get_bound_co_data()) new_mesh = data.meshes.new(name) new_mesh.from_pydata(vertices, self.G_INDICES, []) new_mesh.update() - - deform_obj = data.objects.get(name, None) - if deform_obj and deform_obj.type == 'MESH': - deform_obj.data = new_mesh - else: - if deform_obj: - data.objects.remove(deform_obj) - deform_obj = data.objects.new(name, new_mesh) + deform_obj = data.objects.new(name, new_mesh) self.link_obj_to_active_collection(deform_obj) if deform_obj == obj: @@ -616,8 +625,12 @@ class GizmoUpdate(PublicProperty): subdivision = deform_obj.modifiers.new('1', 'SUBSURF') subdivision.levels = 7 self.G_GizmoData['modifiers_co']['co'] = self.get_bound_co_data() + for mo in context.object.modifiers: if mo.type == 'SIMPLE_DEFORM': + obj = self.get_depsgraph(deform_obj) + self.G_GizmoData['modifiers_co'][mo.name] = self.get_mesh_max_min_co( + obj) simple_deform = deform_obj.modifiers.new( mo.name, 'SIMPLE_DEFORM') simple_deform.deform_method = mo.deform_method @@ -626,19 +639,23 @@ class GizmoUpdate(PublicProperty): simple_deform.lock_y = mo.lock_y simple_deform.lock_z = mo.lock_z simple_deform.origin = mo.origin - # simple_deform.limits[1] = mo.limits[1] - # simple_deform.limits[0] = mo.limits[0] + simple_deform.limits[1] = mo.limits[1] + simple_deform.limits[0] = mo.limits[0] simple_deform.angle = mo.angle simple_deform.show_viewport = mo.show_viewport - obj = PublicUtils.get_depsgraph(deform_obj) - self.G_GizmoData['modifiers_co'][mo.name] = self.get_mesh_max_min_co( - obj) - # deform_obj.hide_set(True) - # deform_obj.hide_viewport = False - # deform_obj.hide_select = True - # deform_obj.hide_render = True - # deform_obj.hide_viewport = True - # deform_obj.hide_set(True) + deform_obj.hide_select = True + deform_obj.hide_set(True) + deform_obj.hide_viewport = False + self.update_deform_wireframe(self.get_depsgraph(deform_obj)) + deform_obj.hide_render = True + deform_obj.hide_viewport = True + deform_obj.hide_set(True) + + def update_deform_wireframe(self, obj): + if not self.pref.update_deform_wireframe: + return + context = bpy.context + matrix = self.obj_matrix_world.copy() ver_len = obj.data.vertices.__len__() edge_len = obj.data.edges.__len__() @@ -667,7 +684,7 @@ class GizmoUpdate(PublicProperty): limits = context.object.modifiers.active.limits[:] modifiers = [getattr(context.object.modifiers.active, i) for i in self.G_MODIFIERS_PROPERTY] - self.G_GizmoData['draw'] = (ver, indices, matrix, modifiers, limits) + self.G_GizmoData['simple_deform_box_data'] = (ver, indices, matrix, modifiers, limits[:]) class GizmoUtils(GizmoUpdate): -- 2.30.2 From df890375c982b6cc50f9243f99ed8f232531d658 Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Fri, 31 Mar 2023 19:10:12 +0800 Subject: [PATCH 14/24] snap angle value fix assign a custom origin object update translate update gizmo.json --- simple_deform_helper/draw.py | 6 +- simple_deform_helper/gizmo.json | 2 +- .../gizmo/angle_and_factor.py | 82 ++++++++++++++----- simple_deform_helper/gizmo/bend_axis.py | 5 +- .../gizmo/up_down_limits_point.py | 6 +- simple_deform_helper/preferences.py | 2 +- simple_deform_helper/translate.py | 6 +- simple_deform_helper/update.py | 8 +- simple_deform_helper/utils.py | 73 ++++++++--------- 9 files changed, 116 insertions(+), 74 deletions(-) diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index 321ef4046..af9d7cf7e 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -98,9 +98,7 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): self.draw_3d(context) def draw_3d(self, context): - obj = context.object # 活动物体 - - self.draw_scale_text(obj) + self.draw_scale_text(self.obj) if not self.modifier_origin_angle_is_available: self.draw_bound_box() elif self.simple_deform_show_gizmo_poll(context): @@ -152,6 +150,8 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): if scale_error and ('scale_text' not in self.G_GizmoData): self.G_GizmoData['scale_text'] = bpy.types.SpaceView3D.draw_handler_add( self.draw_str, (), 'WINDOW', 'POST_PIXEL') + elif not scale_error: + self.del_handler_text() def draw_origin_error(self): ... diff --git a/simple_deform_helper/gizmo.json b/simple_deform_helper/gizmo.json index 5c5387d83..7f0694103 100644 --- a/simple_deform_helper/gizmo.json +++ b/simple_deform_helper/gizmo.json @@ -1 +1 @@ -{"SimpleDeform_GizmoGroup_": [[-0.5, 0.1, -1.0], [-0.5, -0.8, -0.2], [-0.5, 0.2, -0.6], [0.5, 0.4, -0.4], [-0.5, 1.0, -0.1], [0.5, 1.0, -0.1], [0.3, -0.3, 0.5], [0.5, -0.4, 0.4], [0.5, 1.0, 1.0], [0.5, -1.0, -1.0], [-0.5, 0.1, -1.0], [0.5, 0.1, -1.0], [0.5, 1.0, -0.1], [-0.5, 1.0, 1.0], [0.5, 1.0, 1.0], [-0.5, 0.2, -0.6], [-0.5, -0.4, 0.4], [-0.5, 0.4, -0.4], [0.5, 0.2, -0.6], [-0.5, 0.4, -0.4], [0.5, 0.4, -0.4], [0.3, -0.9, -0.7], [-0.3, -0.9, -0.7], [-0.5, -1.0, -1.0], [0.5, 0.1, -1.0], [-0.5, 0.2, -0.6], [0.5, 0.2, -0.6], [0.3, -0.9, 1.0], [0.3, -0.9, -0.7], [0.3, -0.8, -0.2], [0.3, -0.9, -0.7], [0.3, -0.9, 1.0], [-0.3, -0.9, -0.7], [-0.3, -0.3, 0.5], [0.3, -0.3, 1.0], [0.3, -0.3, 0.5], [0.5, -0.4, 0.4], [0.5, -0.8, -0.2], [0.5, 0.4, -0.4], [0.3, -0.8, -0.2], [0.5, -0.4, 0.4], [0.3, -0.3, 0.5], [-0.5, -0.4, 0.4], [-0.3, -0.8, -0.2], [-0.3, -0.3, 0.5], [-0.5, -0.4, 0.4], [-0.5, 1.0, -0.1], [-0.5, 0.4, -0.4], [0.3, -0.9, 1.0], [-0.3, -0.3, 0.5], [-0.3, -0.8, -0.2], [-0.5, 0.1, -1.0], [-0.5, -1.0, -1.0], [-0.5, -0.8, -0.2], [0.5, 0.4, -0.4], [-0.5, 0.4, -0.4], [-0.5, 1.0, -0.1], [0.5, 1.0, 1.0], [-0.5, 1.0, 1.0], [0.3, -0.3, 0.5], [-0.5, 1.0, 1.0], [-0.5, -0.4, 0.4], [-0.3, -0.3, 0.5], [-0.5, 1.0, 1.0], [-0.3, -0.3, 0.5], [0.3, -0.3, 0.5], [0.5, -1.0, -1.0], [-0.5, -1.0, -1.0], [-0.5, 0.1, -1.0], [0.5, 1.0, -0.1], [-0.5, 1.0, -0.1], [-0.5, 1.0, 1.0], [-0.5, 0.2, -0.6], [-0.5, -0.8, -0.2], [-0.5, -0.4, 0.4], [0.5, 0.2, -0.6], [-0.5, 0.2, -0.6], [-0.5, 0.4, -0.4], [0.5, -1.0, -1.0], [0.5, -0.8, -0.2], [0.3, -0.9, -0.7], [0.5, -0.8, -0.2], [0.3, -0.8, -0.2], [0.3, -0.9, -0.7], [-0.3, -0.8, -0.2], [-0.5, -0.8, -0.2], [-0.3, -0.9, -0.7], [-0.5, -0.8, -0.2], [-0.5, -1.0, -1.0], [-0.3, -0.9, -0.7], [0.5, -1.0, -1.0], [0.3, -0.9, -0.7], [-0.5, -1.0, -1.0], [0.5, 0.1, -1.0], [-0.5, 0.1, -1.0], [-0.5, 0.2, -0.6], [0.3, -0.8, -0.2], [0.3, -0.3, 0.5], [0.3, -0.9, 1.0], [0.3, -0.3, 0.5], [0.3, -0.3, 1.0], [0.3, -0.9, 1.0], [0.5, -1.0, -1.0], [0.5, 0.1, -1.0], [0.5, 0.2, -0.6], [0.5, 0.4, -0.4], [0.5, 1.0, -0.1], [0.5, -0.4, 0.4], [0.5, 1.0, -0.1], [0.5, 1.0, 1.0], [0.5, -0.4, 0.4], [0.5, -1.0, -1.0], [0.5, 0.2, -0.6], [0.5, -0.8, -0.2], [0.5, 0.2, -0.6], [0.5, 0.4, -0.4], [0.5, -0.8, -0.2], [0.3, -0.8, -0.2], [0.5, -0.8, -0.2], [0.5, -0.4, 0.4], [-0.5, -0.4, 0.4], [-0.5, -0.8, -0.2], [-0.3, -0.8, -0.2], [-0.5, -0.4, 0.4], [-0.5, 1.0, 1.0], [-0.5, 1.0, -0.1], [-0.3, -0.8, -0.2], [-0.3, -0.9, -0.7], [0.3, -0.9, 1.0], [0.3, -0.9, 1.0], [0.3, -0.3, 1.0], [-0.3, -0.3, 0.5]], "None_GizmoGroup_": [[1.0, -0.0, 0.2], [1.0, -0.0, -0.2], [1.0, -0.0, -0.0], [0.5, -0.0, 0.2], [0.2, -0.0, 0.2], [0.2, -0.0, -0.2], [-0.6, -0.0, 0.2], [-1.0, -0.0, 0.2], [-0.9, -0.0, -0.2], [-0.2, -0.0, 0.3], [-0.1, -0.0, 0.2], [-0.1, -0.0, 0.2], [-0.4, -0.0, 0.1], [-0.3, -0.0, 0.2], [-0.3, -0.0, 0.2], [0.1, -0.0, -0.0], [-0.0, -0.0, -0.1], [0.0, -0.0, -0.1], [-0.2, -0.0, -0.3], [-0.3, 0.0, -0.2], [-0.3, 0.0, -0.2], [-0.4, -0.0, 0.1], [-0.4, -0.0, -0.0], [-0.4, -0.0, 0.1], [0.1, -0.0, -0.0], [-0.0, -0.0, 0.1], [0.0, -0.0, -0.0], [-0.1, 0.0, -0.2], [-0.2, -0.0, -0.2], [-0.2, -0.0, -0.3], [-0.4, -0.0, -0.1], [-0.4, -0.0, -0.0], [-0.4, -0.0, -0.0], [-0.1, -0.0, 0.2], [-0.0, -0.0, 0.1], [0.0, -0.0, 0.1], [-0.3, -0.0, 0.2], [-0.2, -0.0, 0.2], [-0.2, -0.0, 0.3], [0.0, -0.0, -0.1], [-0.1, 0.0, -0.2], [-0.1, 0.0, -0.2], [-0.4, -0.0, -0.1], [-0.3, 0.0, -0.2], [-0.4, -0.0, -0.1], [-0.2, -0.0, 0.3], [-0.2, -0.0, 0.2], [-0.1, -0.0, 0.2], [-0.4, -0.0, 0.1], [-0.4, -0.0, 0.1], [-0.3, -0.0, 0.2], [0.1, -0.0, -0.0], [0.0, -0.0, -0.0], [-0.0, -0.0, -0.1], [-0.2, -0.0, -0.3], [-0.2, -0.0, -0.2], [-0.3, 0.0, -0.2], [-0.4, -0.0, 0.1], [-0.4, -0.0, -0.0], [-0.4, -0.0, -0.0], [0.1, -0.0, -0.0], [0.0, -0.0, 0.1], [-0.0, -0.0, 0.1], [-0.1, 0.0, -0.2], [-0.1, 0.0, -0.2], [-0.2, -0.0, -0.2], [-0.4, -0.0, -0.1], [-0.4, -0.0, -0.1], [-0.4, -0.0, -0.0], [-0.1, -0.0, 0.2], [-0.1, -0.0, 0.2], [-0.0, -0.0, 0.1], [-0.3, -0.0, 0.2], [-0.3, -0.0, 0.2], [-0.2, -0.0, 0.2], [0.0, -0.0, -0.1], [-0.0, -0.0, -0.1], [-0.1, 0.0, -0.2], [-0.4, -0.0, -0.1], [-0.3, 0.0, -0.2], [-0.3, 0.0, -0.2]], "SimpleDeform_Bend_Direction_": [[-2.5, 0.4, 1.0], [-3.0, -0.0, 1.7], [-2.5, -0.4, 1.0], [2.5, 0.4, 1.0], [2.5, -0.4, 1.0], [3.0, -0.0, 1.7], [1.3, 0.1, 0.4], [1.9, -0.1, 0.7], [1.9, 0.1, 0.7], [-2.5, -0.4, 1.0], [-1.3, 0.1, 0.4], [-2.5, 0.4, 1.0], [1.9, -0.1, 0.7], [2.5, 0.4, 1.0], [1.9, 0.1, 0.7], [0.0, 0.1, 0.3], [-1.3, -0.1, 0.4], [0.0, -0.1, 0.3], [1.3, -0.1, 0.4], [0.0, 0.1, 0.3], [0.0, -0.1, 0.3], [1.3, 0.1, 0.4], [1.3, -0.1, 0.4], [1.9, -0.1, 0.7], [-2.5, -0.4, 1.0], [-1.3, -0.1, 0.4], [-1.3, 0.1, 0.4], [1.9, -0.1, 0.7], [2.5, -0.4, 1.0], [2.5, 0.4, 1.0], [0.0, 0.1, 0.3], [-1.3, 0.1, 0.4], [-1.3, -0.1, 0.4], [1.3, -0.1, 0.4], [1.3, 0.1, 0.4], [0.0, 0.1, 0.3]], "Sphere_GizmoGroup_": [[0.7, -0.7, 0.0], [-0.7, 0.7, 0.0], [-0.7, -0.7, 0.0], [0.7, -0.7, 0.0], [0.7, 0.7, 0.0], [-0.7, 0.7, 0.0]]} \ No newline at end of file +{"SimpleDeform_GizmoGroup_": [[-0.54, 0.12, -0.96], [-0.54, -0.82, -0.23], [-0.54, 0.19, -0.64], [0.54, 0.37, -0.37], [-0.54, 0.96, -0.12], [0.54, 0.96, -0.12], [0.32, -0.29, 0.5], [0.54, -0.4, 0.4], [0.55, 0.96, 0.96], [0.54, -0.96, -0.96], [-0.54, 0.12, -0.96], [0.54, 0.12, -0.96], [0.54, 0.96, -0.12], [-0.54, 0.96, 0.96], [0.55, 0.96, 0.96], [-0.54, 0.19, -0.64], [-0.54, -0.4, 0.4], [-0.54, 0.37, -0.37], [0.54, 0.19, -0.64], [-0.54, 0.37, -0.37], [0.54, 0.37, -0.37], [0.32, -0.94, -0.69], [-0.33, -0.94, -0.69], [-0.54, -0.96, -0.96], [0.54, 0.12, -0.96], [-0.54, 0.19, -0.64], [0.54, 0.19, -0.64], [0.32, -0.94, 0.95], [0.32, -0.94, -0.69], [0.32, -0.81, -0.23], [0.32, -0.94, -0.69], [0.32, -0.94, 0.95], [-0.33, -0.94, -0.69], [-0.33, -0.29, 0.5], [0.32, -0.29, 0.95], [0.32, -0.29, 0.5], [0.54, -0.4, 0.4], [0.54, -0.81, -0.23], [0.54, 0.37, -0.37], [0.32, -0.81, -0.23], [0.54, -0.4, 0.4], [0.32, -0.29, 0.5], [-0.54, -0.4, 0.4], [-0.33, -0.81, -0.23], [-0.33, -0.29, 0.5], [-0.54, -0.4, 0.4], [-0.54, 0.96, -0.12], [-0.54, 0.37, -0.37], [0.32, -0.94, 0.95], [-0.33, -0.29, 0.5], [-0.33, -0.81, -0.23], [-0.54, 0.12, -0.96], [-0.54, -0.96, -0.96], [-0.54, -0.82, -0.23], [0.54, 0.37, -0.37], [-0.54, 0.37, -0.37], [-0.54, 0.96, -0.12], [0.55, 0.96, 0.96], [-0.54, 0.96, 0.96], [0.32, -0.29, 0.5], [-0.54, 0.96, 0.96], [-0.54, -0.4, 0.4], [-0.33, -0.29, 0.5], [-0.54, 0.96, 0.96], [-0.33, -0.29, 0.5], [0.32, -0.29, 0.5], [0.54, -0.96, -0.96], [-0.54, -0.96, -0.96], [-0.54, 0.12, -0.96], [0.54, 0.96, -0.12], [-0.54, 0.96, -0.12], [-0.54, 0.96, 0.96], [-0.54, 0.19, -0.64], [-0.54, -0.82, -0.23], [-0.54, -0.4, 0.4], [0.54, 0.19, -0.64], [-0.54, 0.19, -0.64], [-0.54, 0.37, -0.37], [0.54, -0.96, -0.96], [0.54, -0.81, -0.23], [0.32, -0.94, -0.69], [0.54, -0.81, -0.23], [0.32, -0.81, -0.23], [0.32, -0.94, -0.69], [-0.33, -0.81, -0.23], [-0.54, -0.82, -0.23], [-0.33, -0.94, -0.69], [-0.54, -0.82, -0.23], [-0.54, -0.96, -0.96], [-0.33, -0.94, -0.69], [0.54, -0.96, -0.96], [0.32, -0.94, -0.69], [-0.54, -0.96, -0.96], [0.54, 0.12, -0.96], [-0.54, 0.12, -0.96], [-0.54, 0.19, -0.64], [0.32, -0.81, -0.23], [0.32, -0.29, 0.5], [0.32, -0.94, 0.95], [0.32, -0.29, 0.5], [0.32, -0.29, 0.95], [0.32, -0.94, 0.95], [0.54, -0.96, -0.96], [0.54, 0.12, -0.96], [0.54, 0.19, -0.64], [0.54, 0.37, -0.37], [0.54, 0.96, -0.12], [0.54, -0.4, 0.4], [0.54, 0.96, -0.12], [0.55, 0.96, 0.96], [0.54, -0.4, 0.4], [0.54, -0.96, -0.96], [0.54, 0.19, -0.64], [0.54, -0.81, -0.23], [0.54, 0.19, -0.64], [0.54, 0.37, -0.37], [0.54, -0.81, -0.23], [0.32, -0.81, -0.23], [0.54, -0.81, -0.23], [0.54, -0.4, 0.4], [-0.54, -0.4, 0.4], [-0.54, -0.82, -0.23], [-0.33, -0.81, -0.23], [-0.54, -0.4, 0.4], [-0.54, 0.96, 0.96], [-0.54, 0.96, -0.12], [-0.33, -0.81, -0.23], [-0.33, -0.94, -0.69], [0.32, -0.94, 0.95], [0.32, -0.94, 0.95], [0.32, -0.29, 0.95], [-0.33, -0.29, 0.5]], "None_GizmoGroup_": [[0.97, -0.01, 0.18], [0.98, -0.01, -0.24], [0.96, -0.01, -0.03], [0.53, -0.01, 0.24], [0.15, -0.01, 0.24], [0.22, -0.01, -0.24], [-0.59, -0.01, 0.24], [-0.97, -0.01, 0.24], [-0.9, -0.01, -0.24], [-0.19, -0.0, 0.25], [-0.09, -0.0, 0.17], [-0.06, -0.0, 0.22], [-0.4, -0.0, 0.13], [-0.28, -0.0, 0.17], [-0.31, -0.0, 0.22], [0.07, -0.0, -0.0], [-0.02, -0.0, -0.1], [0.03, -0.0, -0.13], [-0.19, -0.0, -0.25], [-0.28, 0.0, -0.17], [-0.31, 0.0, -0.22], [-0.4, -0.0, 0.13], [-0.38, -0.0, -0.0], [-0.35, -0.0, 0.1], [0.07, -0.0, -0.0], [-0.02, -0.0, 0.1], [0.01, -0.0, -0.0], [-0.06, 0.0, -0.22], [-0.19, -0.0, -0.19], [-0.19, -0.0, -0.25], [-0.4, -0.0, -0.13], [-0.38, -0.0, -0.0], [-0.44, -0.0, -0.0], [-0.06, -0.0, 0.22], [-0.02, -0.0, 0.1], [0.03, -0.0, 0.13], [-0.31, -0.0, 0.22], [-0.19, -0.0, 0.19], [-0.19, -0.0, 0.25], [0.03, -0.0, -0.13], [-0.09, 0.0, -0.17], [-0.06, 0.0, -0.22], [-0.4, -0.0, -0.13], [-0.28, 0.0, -0.17], [-0.35, -0.0, -0.1], [-0.19, -0.0, 0.25], [-0.19, -0.0, 0.19], [-0.09, -0.0, 0.17], [-0.4, -0.0, 0.13], [-0.35, -0.0, 0.1], [-0.28, -0.0, 0.17], [0.07, -0.0, -0.0], [0.01, -0.0, -0.0], [-0.02, -0.0, -0.1], [-0.19, -0.0, -0.25], [-0.19, -0.0, -0.19], [-0.28, 0.0, -0.17], [-0.4, -0.0, 0.13], [-0.44, -0.0, -0.0], [-0.38, -0.0, -0.0], [0.07, -0.0, -0.0], [0.03, -0.0, 0.13], [-0.02, -0.0, 0.1], [-0.06, 0.0, -0.22], [-0.09, 0.0, -0.17], [-0.19, -0.0, -0.19], [-0.4, -0.0, -0.13], [-0.35, -0.0, -0.1], [-0.38, -0.0, -0.0], [-0.06, -0.0, 0.22], [-0.09, -0.0, 0.17], [-0.02, -0.0, 0.1], [-0.31, -0.0, 0.22], [-0.28, -0.0, 0.17], [-0.19, -0.0, 0.19], [0.03, -0.0, -0.13], [-0.02, -0.0, -0.1], [-0.09, 0.0, -0.17], [-0.4, -0.0, -0.13], [-0.31, 0.0, -0.22], [-0.28, 0.0, -0.17]], "SimpleDeform_Bend_Direction_": [[-3.04, -0.0, 1.68], [-2.79, -0.0, 1.35], [-2.79, 0.1, 1.35], [0.0, 0.0, 0.28], [-0.36, -0.03, 0.31], [0.0, -0.03, 0.28], [-2.22, 0.0, 0.87], [-1.9, 0.04, 0.71], [-2.22, 0.12, 0.87], [-2.22, 0.0, 0.87], [-1.9, -0.04, 0.71], [-1.9, 0.0, 0.71], [-3.04, -0.0, 1.68], [-2.79, -0.1, 1.35], [-2.79, -0.0, 1.35], [-2.79, 0.1, 1.35], [-2.51, 0.0, 1.06], [-2.51, 0.13, 1.06], [0.0, 0.03, 0.28], [-0.36, 0.0, 0.31], [0.0, 0.0, 0.28], [-1.9, 0.0, 0.71], [-1.43, -0.04, 0.53], [-1.43, 0.0, 0.53], [-1.43, 0.0, 0.53], [-0.86, -0.04, 0.38], [-0.86, 0.0, 0.38], [-0.86, 0.0, 0.38], [-0.36, -0.03, 0.31], [-0.36, 0.0, 0.31], [-1.9, 0.0, 0.71], [-1.43, 0.04, 0.53], [-1.9, 0.04, 0.71], [-1.43, 0.0, 0.53], [-0.86, 0.04, 0.38], [-1.43, 0.04, 0.53], [-0.86, 0.0, 0.38], [-0.36, 0.03, 0.31], [-0.86, 0.04, 0.38], [-2.22, 0.12, 0.87], [-2.51, 0.0, 1.06], [-2.22, 0.0, 0.87], [-2.79, -0.1, 1.35], [-2.51, 0.0, 1.06], [-2.79, -0.0, 1.35], [-2.22, -0.12, 0.87], [-2.51, 0.0, 1.06], [-2.51, -0.13, 1.06], [3.04, -0.0, 1.68], [2.79, 0.1, 1.35], [2.79, -0.0, 1.35], [0.36, -0.03, 0.31], [0.0, 0.0, 0.28], [0.0, -0.03, 0.28], [1.9, 0.04, 0.71], [2.22, 0.0, 0.87], [2.22, 0.12, 0.87], [2.22, 0.0, 0.87], [1.9, -0.04, 0.71], [2.22, -0.12, 0.87], [3.04, -0.0, 1.68], [2.79, -0.0, 1.35], [2.79, -0.1, 1.35], [2.79, 0.1, 1.35], [2.51, 0.0, 1.06], [2.79, -0.0, 1.35], [0.36, 0.0, 0.31], [0.0, 0.03, 0.28], [0.0, 0.0, 0.28], [1.9, 0.0, 0.71], [1.43, -0.04, 0.53], [1.9, -0.04, 0.71], [1.43, 0.0, 0.53], [0.86, -0.04, 0.38], [1.43, -0.04, 0.53], [0.86, 0.0, 0.38], [0.36, -0.03, 0.31], [0.86, -0.04, 0.38], [1.43, 0.04, 0.53], [1.9, 0.0, 0.71], [1.9, 0.04, 0.71], [0.86, 0.04, 0.38], [1.43, 0.0, 0.53], [1.43, 0.04, 0.53], [0.36, 0.03, 0.31], [0.86, 0.0, 0.38], [0.86, 0.04, 0.38], [2.51, 0.0, 1.06], [2.22, 0.12, 0.87], [2.22, 0.0, 0.87], [2.51, 0.0, 1.06], [2.79, -0.1, 1.35], [2.79, -0.0, 1.35], [2.22, -0.12, 0.87], [2.51, 0.0, 1.06], [2.22, 0.0, 0.87], [0.0, 0.0, 0.28], [-0.36, 0.0, 0.31], [-0.36, -0.03, 0.31], [-2.22, 0.0, 0.87], [-1.9, 0.0, 0.71], [-1.9, 0.04, 0.71], [-2.22, 0.0, 0.87], [-2.22, -0.12, 0.87], [-1.9, -0.04, 0.71], [-2.79, 0.1, 1.35], [-2.79, -0.0, 1.35], [-2.51, 0.0, 1.06], [0.0, 0.03, 0.28], [-0.36, 0.03, 0.31], [-0.36, 0.0, 0.31], [-1.9, 0.0, 0.71], [-1.9, -0.04, 0.71], [-1.43, -0.04, 0.53], [-1.43, 0.0, 0.53], [-1.43, -0.04, 0.53], [-0.86, -0.04, 0.38], [-0.86, 0.0, 0.38], [-0.86, -0.04, 0.38], [-0.36, -0.03, 0.31], [-1.9, 0.0, 0.71], [-1.43, 0.0, 0.53], [-1.43, 0.04, 0.53], [-1.43, 0.0, 0.53], [-0.86, 0.0, 0.38], [-0.86, 0.04, 0.38], [-0.86, 0.0, 0.38], [-0.36, 0.0, 0.31], [-0.36, 0.03, 0.31], [-2.22, 0.12, 0.87], [-2.51, 0.13, 1.06], [-2.51, 0.0, 1.06], [-2.79, -0.1, 1.35], [-2.51, -0.13, 1.06], [-2.51, 0.0, 1.06], [-2.22, -0.12, 0.87], [-2.22, 0.0, 0.87], [-2.51, 0.0, 1.06], [0.36, -0.03, 0.31], [0.36, 0.0, 0.31], [0.0, 0.0, 0.28], [1.9, 0.04, 0.71], [1.9, 0.0, 0.71], [2.22, 0.0, 0.87], [2.22, 0.0, 0.87], [1.9, 0.0, 0.71], [1.9, -0.04, 0.71], [2.79, 0.1, 1.35], [2.51, 0.13, 1.06], [2.51, 0.0, 1.06], [0.36, 0.0, 0.31], [0.36, 0.03, 0.31], [0.0, 0.03, 0.28], [1.9, 0.0, 0.71], [1.43, 0.0, 0.53], [1.43, -0.04, 0.53], [1.43, 0.0, 0.53], [0.86, 0.0, 0.38], [0.86, -0.04, 0.38], [0.86, 0.0, 0.38], [0.36, 0.0, 0.31], [0.36, -0.03, 0.31], [1.43, 0.04, 0.53], [1.43, 0.0, 0.53], [1.9, 0.0, 0.71], [0.86, 0.04, 0.38], [0.86, 0.0, 0.38], [1.43, 0.0, 0.53], [0.36, 0.03, 0.31], [0.36, 0.0, 0.31], [0.86, 0.0, 0.38], [2.51, 0.0, 1.06], [2.51, 0.13, 1.06], [2.22, 0.12, 0.87], [2.51, 0.0, 1.06], [2.51, -0.13, 1.06], [2.79, -0.1, 1.35], [2.22, -0.12, 0.87], [2.51, -0.13, 1.06], [2.51, 0.0, 1.06]], "Sphere_GizmoGroup_": [[-0.0, -0.71, 0.0], [0.61, 0.35, 0.0], [-0.61, 0.35, 0.0], [-0.61, 0.35, 0.0], [-0.71, -0.0, 0.0], [-0.0, -0.71, 0.0], [-0.71, -0.0, 0.0], [-0.61, -0.35, 0.0], [-0.0, -0.71, 0.0], [-0.61, -0.35, 0.0], [-0.35, -0.61, 0.0], [-0.0, -0.71, 0.0], [-0.0, -0.71, 0.0], [0.35, -0.61, 0.0], [0.61, -0.35, 0.0], [0.61, -0.35, 0.0], [0.71, -0.0, 0.0], [0.61, 0.35, 0.0], [0.61, 0.35, 0.0], [0.35, 0.61, 0.0], [-0.0, 0.71, 0.0], [-0.0, 0.71, 0.0], [-0.35, 0.61, 0.0], [-0.61, 0.35, 0.0], [-0.0, -0.71, 0.0], [0.61, -0.35, 0.0], [0.61, 0.35, 0.0], [0.61, 0.35, 0.0], [-0.0, 0.71, 0.0], [-0.61, 0.35, 0.0]]} \ No newline at end of file diff --git a/simple_deform_helper/gizmo/angle_and_factor.py b/simple_deform_helper/gizmo/angle_and_factor.py index b565a58e9..e5bb4810e 100644 --- a/simple_deform_helper/gizmo/angle_and_factor.py +++ b/simple_deform_helper/gizmo/angle_and_factor.py @@ -10,16 +10,54 @@ from ..utils import GizmoUtils, GizmoGroupUtils class AngleUpdate(GizmoUtils): + int_value_degrees: float + tmp_value_angle: float + + def get_snap(self, delta, tweak): + is_snap = 'SNAP' in tweak + is_precise = 'PRECISE' in tweak + if is_snap and is_precise: + delta = round(delta) + elif is_snap: + delta //= 5 + delta *= 5 + elif is_precise: + delta /= self.mouse_dpi + delta //= 0.01 + delta *= 0.01 + return delta def update_prop_value(self, event, tweak): - # radians 弧度 - # degrees 角度 - delta = self.get_delta(event) - value = math.degrees(self.int_value_angle - delta) - new_value = (self.get_snap(value, tweak)) - old_value = math.degrees(self.target_get_value('angle')) + def v(va): + self.target_set_value('angle', math.radians(va)) - self.target_set_value('angle', math.radians(new_value)) + not_c_l = not event.alt and not event.ctrl + is_only_shift = event.shift and not_c_l + + change_angle = self.get_delta(event) + if is_only_shift: + change_angle /= 50 + new_value = self.tmp_value_angle - change_angle + old_value = self.target_get_value('angle') + snap_value = self.get_snap(new_value, tweak) + + is_shift = event.type == 'LEFT_SHIFT' + if is_only_shift: + if event.value == 'PRESS': + self.init_mouse_region_x = event.mouse_region_x + self.tmp_value_angle = int(math.degrees(old_value)) + v(self.tmp_value_angle) + return + + value = (self.tmp_value_angle - change_angle) // 0.01 * 0.01 + v(value) + return + + elif not_c_l and not event.shift and is_shift and event.value == 'RELEASE': + self.init_mouse_region_x = event.mouse_region_x + new_value = self.tmp_value_angle = math.degrees(old_value) + return + v(snap_value) def update_gizmo_matrix(self, context): matrix = context.object.matrix_world @@ -28,11 +66,15 @@ class AngleUpdate(GizmoUtils): self.matrix_basis.translation = matrix @ point def update_header_text(self, context): - if self.modifier_origin_angle_is_available: + te = self.translate_text + text = te(self.modifier.deform_method.title()) + ' ' + + if self.modifier_is_use_angle_value: value = round(math.degrees(self.modifier_angle), 3) - text = self.translate_header_text('Angle', value) + text += self.translate_header_text('Angle', value) else: - text = self.translate_header_text('Coefficient', self.modifier.factor) + value = round(self.modifier.factor, 3) + text += self.translate_header_text('Coefficient', value) context.area.header_text_set(text) @@ -49,21 +91,21 @@ class AngleGizmo(Gizmo, AngleUpdate): 'draw_type', 'mouse_dpi', 'empty_object', + 'custom_shape', + 'tmp_value_angle', + 'int_value_degrees', 'init_mouse_region_y', 'init_mouse_region_x', - 'custom_shape', - 'int_value_angle', ) - int_value_angle: float - def setup(self): - self.mouse_dpi = 10 self.init_setup() def invoke(self, context, event): self.init_invoke(context, event) - self.int_value_angle = self.target_get_value('angle') + self.int_value_degrees = self.target_get_value('angle') + angle = math.degrees(self.int_value_degrees) + self.tmp_value_angle = angle return {'RUNNING_MODAL'} def modal(self, context, event, tweak): @@ -72,12 +114,12 @@ class AngleGizmo(Gizmo, AngleUpdate): self.update_prop_value(event, tweak) self.update_header_text(context) self.update_multiple_modifiers_data() - return {'RUNNING_MODAL'} + return self.event_handle(event) def exit(self, context, cancel): context.area.header_text_set(None) if cancel: - self.target_set_value('angle', self.int_value_angle) + self.target_set_value('angle', self.int_value_degrees) class AngleGizmoGroup(GizmoGroup, GizmoGroupUtils): @@ -104,11 +146,11 @@ class AngleGizmoGroup(GizmoGroup, GizmoGroupUtils): 'use_draw_modal': True, 'scale_basis': 0.1, 'use_draw_value': True, - 'mouse_dpi': 100, + 'mouse_dpi': 5, }), ] - self.generate_gizmo_mode(add_data) + self.generate_gizmo(add_data) def refresh(self, context): self.angle.target_set_prop('angle', diff --git a/simple_deform_helper/gizmo/bend_axis.py b/simple_deform_helper/gizmo/bend_axis.py index 0ff66599b..78a5ea5ff 100644 --- a/simple_deform_helper/gizmo/bend_axis.py +++ b/simple_deform_helper/gizmo/bend_axis.py @@ -8,7 +8,7 @@ from ..utils import GizmoUtils, GizmoGroupUtils class CustomGizmo(Gizmo, GizmoUtils): - """绘制自定义Gizmo""" + """Draw Custom Gizmo""" bl_idname = '_Custom_Gizmo' draw_type: str custom_shape: dict @@ -37,9 +37,6 @@ class CustomGizmo(Gizmo, GizmoUtils): class BendAxiSwitchGizmoGroup(GizmoGroup, GizmoGroupUtils): - """绘制切换变型轴的 - 变换方向 - """ bl_idname = 'OBJECT_GGT_SimpleDeformGizmoGroup_display_bend_axis_switch_gizmo' bl_label = 'SimpleDeformGizmoGroup_display_bend_axis_switch_gizmo' diff --git a/simple_deform_helper/gizmo/up_down_limits_point.py b/simple_deform_helper/gizmo/up_down_limits_point.py index 1dc332c94..3290fd9d4 100644 --- a/simple_deform_helper/gizmo/up_down_limits_point.py +++ b/simple_deform_helper/gizmo/up_down_limits_point.py @@ -136,9 +136,9 @@ class GizmoUpdate(GizmoProperty): origin = self.obj_origin_property_group mode = origin.bl_rna.properties['origin_mode'].enum_items[origin.origin_mode].name + te = self.translate_text t = self.translate_header_text - text = self.translate_text(mode) + ' ' - + text = te(self.modifier.deform_method.title()) + ' ' + te(mode) + ' ' if self.is_up_limits_mode: value = round(self.modifier_up_limits, 3) text += t('Up limit', value) @@ -252,7 +252,7 @@ class UpDownLimitsGizmoGroup(GizmoGroup, GizmoGroupUtils): 'scale_basis': 0.1, 'use_draw_value': True, }), ] - self.generate_gizmo_mode(gizmo_data) + self.generate_gizmo(gizmo_data) def refresh(self, context): pro = context.object.SimpleDeformGizmo_PropertyGroup diff --git a/simple_deform_helper/preferences.py b/simple_deform_helper/preferences.py index 02b8c9b55..51fb58daa 100644 --- a/simple_deform_helper/preferences.py +++ b/simple_deform_helper/preferences.py @@ -48,7 +48,7 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, GizmoUtils): min=0.0001 ) display_bend_axis_switch_gizmo: BoolProperty( - name='Show Toggle Axis Gizmo', + name='Show Toggle Bend Axis Gizmo', default=False, options={'SKIP_SAVE'}) diff --git a/simple_deform_helper/translate.py b/simple_deform_helper/translate.py index 72e94e2a5..151d07a12 100644 --- a/simple_deform_helper/translate.py +++ b/simple_deform_helper/translate.py @@ -11,12 +11,16 @@ def origin_text(a, b): translations_dict = { "zh_CN": { ("上下文", "原文"): "翻译文字", - ("*", "Show Toggle Axis Gizmo"): "显示切换轴向Gizmo", + ("*", "Show Toggle Bend Axis Gizmo"): "显示切换弯曲轴向Gizmo", + ("*", "Show Set Axis Button"): "显示设置轴向Gizmo", ("*", "Follow Upper Limit(Red)"): "跟随上限(红色)", ("*", "Follow Lower Limit(Green)"): "跟随下限(绿色)", ("*", "Lower limit(Green)"): "下限(绿色)", ("*", "UP Limits(Red)"): "上限(红色)", + ("*", "Down limit"): "下限", + ("*", "Up limit"): "上限", + ("*", "Show Deform Wireframe"): "显示形变线框", ("*", "Minimum value between upper and lower limits"): "上限与下限之间的最小值", ("*", "Upper and lower limit tolerance"): "上下限容差", ("*", "Draw Upper and lower limit Bound Box Color"): "绘制网格上限下限边界线框的颜色", diff --git a/simple_deform_helper/update.py b/simple_deform_helper/update.py index 98d5edea0..b1ffbd729 100644 --- a/simple_deform_helper/update.py +++ b/simple_deform_helper/update.py @@ -8,12 +8,14 @@ from .utils import GizmoUpdate @persistent def remove_not_use_empty(scene, dep): - """循环场景内的所有物体,找出没用的空物体并删掉 + """Remove unused Empty Object """ remove_name: str = "ViewSimpleDeformGizmo_" context = bpy.context - if GizmoUpdate.simple_deform_modifier_is_simple(context): - GizmoUpdate.clear_cache() + gizmo = GizmoUpdate() + gizmo.clear_cache() + gizmo.fix_origin_parent_and_angle() + if gizmo.simple_deform_modifier_is_simple(context): for obj in context.scene.objects: is_empty = obj.type == "EMPTY" not_parent = not obj.parent diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index b4eee09f5..21b3ee99a 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -15,7 +15,8 @@ class PublicData: """Public data class, all fixed data will be placed here """ G_CustomShape = {} - G_GizmoData = {'modifiers_co': {}} + G_GizmoData = {} + G_Modifiers_Data = {} G_INDICES = ( (0, 1), (0, 2), (1, 3), (2, 3), (4, 5), (4, 6), (5, 7), (6, 7), @@ -393,7 +394,7 @@ class PublicProperty(GizmoClassMethod): @classmethod def clear_data(cls): cls.G_GizmoData.clear() - cls.G_GizmoData['modifiers_co'] = {} + cls.G_Modifiers_Data.clear() # --------------- Cache Data ---------------------- @@ -403,7 +404,7 @@ class PublicProperty(GizmoClassMethod): @property def modifier_bound_co(self): - return self.G_GizmoData['modifiers_co'].get(self.modifier.name, self.get_bound_co_data()) + return self.G_Modifiers_Data.get(self.modifier.name, self.get_bound_co_data()) @property def modifier_bound_box_pos(self): @@ -526,6 +527,22 @@ class PublicProperty(GizmoClassMethod): class GizmoUpdate(PublicProperty): + def fix_origin_parent_and_angle(self): + obj = self.obj + mod = self.modifier + if not obj or not mod: + return + + origin = mod.origin + if not origin: + return + + if origin.parent != obj: + origin.parent = obj + origin.rotation_euler.zero() + if not self.modifier_origin_angle_is_available: + origin.location.zero() + origin.scale = 1, 1, 1 def new_origin_empty_object(self): mod = self.modifier @@ -543,9 +560,6 @@ class GizmoUpdate(PublicProperty): origin_object.hide_viewport = False if origin_object == obj: return - if origin_object.parent != obj: - origin_object.parent = obj - # add constraints name = self.G_CON_LIMIT_NAME if origin_object.constraints.keys().__len__() > 2: @@ -573,26 +587,24 @@ class GizmoUpdate(PublicProperty): copy_constraints.mix_mode = 'BEFORE' copy_constraints.target_space = 'WORLD' copy_constraints.owner_space = 'WORLD' - origin_object.rotation_euler.zero() - origin_object.scale = 1, 1, 1 - + self.fix_origin_parent_and_angle() return origin_object def update_object_origin_matrix(self): self.clear_cache() origin_mode = self.origin_mode - empty_object = self.modifier.origin - if empty_object and self.modifier_is_use_origin_axis: + origin_object = self.modifier.origin + if origin_object and self.modifier_is_use_origin_axis: if origin_mode == 'UP_LIMITS': - empty_object.matrix_world.translation = Vector(self.point_limits_up) + origin_object.matrix_world.translation = Vector(self.point_limits_up) elif origin_mode == 'DOWN_LIMITS': - empty_object.matrix_world.translation = Vector(self.point_limits_down) + origin_object.matrix_world.translation = Vector(self.point_limits_down) elif origin_mode == 'LIMITS_MIDDLE': translation = (self.point_limits_up + self.point_limits_down) / 2 - empty_object.matrix_world.translation = translation + origin_object.matrix_world.translation = translation elif origin_mode == 'MIDDLE': translation = (self.point_up + self.point_down) / 2 - empty_object.matrix_world.translation = translation + origin_object.matrix_world.translation = translation def update_multiple_modifiers_data(self): self.clear_data() @@ -624,12 +636,12 @@ class GizmoUpdate(PublicProperty): deform_obj.modifiers.clear() subdivision = deform_obj.modifiers.new('1', 'SUBSURF') subdivision.levels = 7 - self.G_GizmoData['modifiers_co']['co'] = self.get_bound_co_data() + self.G_GizmoData['co'] = self.get_bound_co_data() for mo in context.object.modifiers: if mo.type == 'SIMPLE_DEFORM': obj = self.get_depsgraph(deform_obj) - self.G_GizmoData['modifiers_co'][mo.name] = self.get_mesh_max_min_co( + self.G_GizmoData[mo.name] = self.get_mesh_max_min_co( obj) simple_deform = deform_obj.modifiers.new( mo.name, 'SIMPLE_DEFORM') @@ -695,9 +707,8 @@ class GizmoUtils(GizmoUpdate): matrix_basis: Matrix draw_type: str - def generate_gizmo_mode(self, gizmo_data): - """生成gizmo的上限下限及角度设置 - + def generate_gizmo(self, gizmo_data): + """Generate Gizmo From Input Data Args: gizmo_data (_type_): _description_ """ @@ -746,27 +757,11 @@ class GizmoUtils(GizmoUpdate): delta = (self.init_mouse_region_x - event.mouse_region_x) / self.mouse_dpi return delta - def get_snap(self, delta, tweak): - # TODO ctrl SNAP - # TODO shift PRECISE - is_snap = 'SNAP' in tweak - is_precise = 'PRECISE' in tweak - if is_snap and is_precise: - delta = round(delta) - elif is_snap: - delta //= 5 - delta *= 5 - elif is_precise: - delta /= self.mouse_dpi - delta //= 0.01 - delta *= 0.01 - return delta - def update_gizmo_matrix(self): ... def event_handle(self, event): - """通过输入键位来更改属性""" + """General event triggeringXXX""" # event ctrl data_path = ('object.SimpleDeformGizmo_PropertyGroup.origin_mode', 'object.modifiers.active.origin.SimpleDeformGizmo_PropertyGroup.origin_mode') @@ -778,9 +773,11 @@ class GizmoUtils(GizmoUpdate): data_path=path, reverse=reverse, wrap=True) elif event.type in ('X', 'Y', 'Z'): self.obj.modifiers.active.deform_axis = event.type - elif event.type == 'A': + elif event.type == 'A' and 'BEND' == self.modifier.deform_method: self.pref.display_bend_axis_switch_gizmo = True return {'FINISHED'} + elif event.type == 'W' and event.value == 'RELEASE': + self.pref.update_deform_wireframe = self.pref.update_deform_wireframe ^ True return {'RUNNING_MODAL'} -- 2.30.2 From b9c7dcdc34309445d8faf91cad887f880e7d404d Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Fri, 31 Mar 2023 19:57:01 +0800 Subject: [PATCH 15/24] snap angle value fix assign a custom origin object update translate update gizmo.json --- simple_deform_helper/__init__.py | 49 +++++++++++++++++++++++++++++ simple_deform_helper/operators.py | 1 - simple_deform_helper/preferences.py | 8 +++++ simple_deform_helper/translate.py | 12 +++++++ simple_deform_helper/update.py | 9 +++++- simple_deform_helper/utils.py | 3 +- 6 files changed, 78 insertions(+), 4 deletions(-) diff --git a/simple_deform_helper/__init__.py b/simple_deform_helper/__init__.py index 9a9052c8d..ce0ca4cf9 100644 --- a/simple_deform_helper/__init__.py +++ b/simple_deform_helper/__init__.py @@ -20,6 +20,55 @@ bl_info = { "category": "3D View" } +""" +# ------------------------- +__init__.py: + Register All Module + +gizmo/__init__.py: + Register All Gizmo + + /angle_and_factor.py: + Ctrl Modifier Angle + + /bend_axis.py: + Bend Method Switch Direction Gizmo + + /set_deform_axis.py: + Three Switch Deform Axis Operator Gizmo + + /up_down_limits_point.py: + Main control part + use utils.py PublicProperty._get_limits_point_and_bound_box_co + Obtain and calculate boundary box and limit point data + + +draw.py: + Draw 3D Bound And Line + +gizmo.json: + Draw Custom Shape Vertex Data + +operator.py: + Set Deform Axis Operator + +panel.py: + Draw Gizmo Tool Property in Options and Tool Settings Right + +preferences.py: + Addon Preferences + +translate.py: + temporary only Cn translate + +update.py: + In Change Depsgraph When Update Addon Data And Del Redundant Empty + +utils.py: + Main documents used + Most computing operations are placed in classes GizmoUtils +# ------------------------- +""" module_tuple = ( panel, gizmo, diff --git a/simple_deform_helper/operators.py b/simple_deform_helper/operators.py index 3f7fe2411..9d35d5ce5 100644 --- a/simple_deform_helper/operators.py +++ b/simple_deform_helper/operators.py @@ -46,7 +46,6 @@ class DeformAxisOperator(Operator, GizmoUtils): if not event.ctrl: self.pref.display_bend_axis_switch_gizmo = False - # self.new_origin_empty_object() return {'FINISHED'} diff --git a/simple_deform_helper/preferences.py b/simple_deform_helper/preferences.py index 51fb58daa..36b6a76f7 100644 --- a/simple_deform_helper/preferences.py +++ b/simple_deform_helper/preferences.py @@ -62,6 +62,14 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, GizmoUtils): def draw(self, context): col = self.layout.column() + box = col.box() + for text in ("You can press the following shortcut keys when dragging values", + " Wheel: Switch Origin Ctrl Mode", + " X、Y、Z: Switch Modifier Deform Axis", + " W: Switch Deform Wireframe Show", + " A: Switch To Select Bend Axis Mode(deform_method=='BEND')",): + box.label(text=self.translate_text(text)) + col.prop(self, 'deform_wireframe_color') col.prop(self, 'bound_box_color') col.prop(self, 'limits_bound_box_color') diff --git a/simple_deform_helper/translate.py b/simple_deform_helper/translate.py index 151d07a12..d2701d272 100644 --- a/simple_deform_helper/translate.py +++ b/simple_deform_helper/translate.py @@ -12,6 +12,18 @@ translations_dict = { "zh_CN": { ("上下文", "原文"): "翻译文字", ("*", "Show Toggle Bend Axis Gizmo"): "显示切换弯曲轴向Gizmo", + + ("*", "You can press the following shortcut keys when dragging values"): + "拖动值时可以按以下快捷键", + ("*", " Wheel: Switch Origin Ctrl Mode"): + " 滚轮: 切换原点控制模式", + ("*", " X、Y、Z: Switch Modifier Deform Axis"): + " X、Y、Z: 切换修改器型变轴", + ("*", " W: Switch Deform Wireframe Show"): + " W: 切换形变线框显示", + ("*", + " A: Switch To Select Bend Axis Mode(deform_method=='BEND')"): + " A: 切换到选择弯曲轴模式(形变方法='弯曲')", ("*", "Show Set Axis Button"): "显示设置轴向Gizmo", ("*", "Follow Upper Limit(Red)"): "跟随上限(红色)", diff --git a/simple_deform_helper/update.py b/simple_deform_helper/update.py index b1ffbd729..502afd34e 100644 --- a/simple_deform_helper/update.py +++ b/simple_deform_helper/update.py @@ -15,12 +15,19 @@ def remove_not_use_empty(scene, dep): gizmo = GizmoUpdate() gizmo.clear_cache() gizmo.fix_origin_parent_and_angle() + # remove redundant empty object if gizmo.simple_deform_modifier_is_simple(context): for obj in context.scene.objects: is_empty = obj.type == "EMPTY" not_parent = not obj.parent if remove_name in obj.name and not_parent and is_empty: - bpy.data.objects.remove(obj) # remove object + bpy.data.objects.remove(obj) + + # simple update data if change active object on update + update_data = gizmo.obj not in gizmo.G_GizmoData or gizmo.obj != gizmo.G_GizmoData[gizmo.obj] + if update_data: + gizmo.clear_data() + gizmo.G_GizmoData[gizmo.obj] = 'Emm' def register(): diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index 21b3ee99a..2ac23ad81 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -761,8 +761,7 @@ class GizmoUtils(GizmoUpdate): ... def event_handle(self, event): - """General event triggeringXXX""" - # event ctrl + """General event triggering""" data_path = ('object.SimpleDeformGizmo_PropertyGroup.origin_mode', 'object.modifiers.active.origin.SimpleDeformGizmo_PropertyGroup.origin_mode') -- 2.30.2 From f9ac35fdb04b26bb2d4ac57e437ccd71af157314 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=90=8C=E6=96=B0?= <3209970865@qq.com> Date: Fri, 31 Mar 2023 23:38:43 +0800 Subject: [PATCH 16/24] optimize performance --- .../gizmo/up_down_limits_point.py | 8 +++-- simple_deform_helper/update.py | 22 +++++++------ simple_deform_helper/utils.py | 31 ++++++++++++++----- 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/simple_deform_helper/gizmo/up_down_limits_point.py b/simple_deform_helper/gizmo/up_down_limits_point.py index 3290fd9d4..4c41f9128 100644 --- a/simple_deform_helper/gizmo/up_down_limits_point.py +++ b/simple_deform_helper/gizmo/up_down_limits_point.py @@ -209,11 +209,13 @@ class UpDownLimitsGizmo(Gizmo, GizmoUpdate): self.middle_limits_value = (self.modifier_up_limits + self.modifier_down_limits) / 2 self.set_prop_value(event) - self.update_object_origin_matrix() + self.clear_data() + self.clear_cache() self.update_multiple_modifiers_data() - + self.update_object_origin_matrix() self.update_header_text(context) - return self.event_handle(event) + return_handle = self.event_handle(event) + return return_handle class UpDownLimitsGizmoGroup(GizmoGroup, GizmoGroupUtils): diff --git a/simple_deform_helper/update.py b/simple_deform_helper/update.py index 502afd34e..dbe32b2f5 100644 --- a/simple_deform_helper/update.py +++ b/simple_deform_helper/update.py @@ -1,4 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-or-later +from time import time import bpy from bpy.app.handlers import depsgraph_update_post, persistent @@ -13,21 +14,24 @@ def remove_not_use_empty(scene, dep): remove_name: str = "ViewSimpleDeformGizmo_" context = bpy.context gizmo = GizmoUpdate() - gizmo.clear_cache() gizmo.fix_origin_parent_and_angle() # remove redundant empty object - if gizmo.simple_deform_modifier_is_simple(context): - for obj in context.scene.objects: - is_empty = obj.type == "EMPTY" - not_parent = not obj.parent - if remove_name in obj.name and not_parent and is_empty: - bpy.data.objects.remove(obj) # simple update data if change active object on update - update_data = gizmo.obj not in gizmo.G_GizmoData or gizmo.obj != gizmo.G_GizmoData[gizmo.obj] + name = gizmo.obj.name + update_data = name not in gizmo.G_GizmoData or name != gizmo.G_GizmoData['active_object'] if update_data: gizmo.clear_data() - gizmo.G_GizmoData[gizmo.obj] = 'Emm' + gizmo.G_GizmoData[name] = name + gizmo.G_GizmoData['active_object'] = name + gizmo.G_Modifiers_TMP_Save_Data.clear() + if gizmo.simple_deform_modifier_is_simple(context): + for obj in context.scene.objects: + is_empty = obj.type == "EMPTY" + not_parent = not obj.parent + if remove_name in obj.name and not_parent and is_empty: + bpy.data.objects.remove(obj) + def register(): diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index 2ac23ad81..593ce0ee2 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -17,6 +17,7 @@ class PublicData: G_CustomShape = {} G_GizmoData = {} G_Modifiers_Data = {} + G_Modifiers_TMP_Save_Data = {} G_INDICES = ( (0, 1), (0, 2), (1, 3), (2, 3), (4, 5), (4, 6), (5, 7), (6, 7), @@ -314,6 +315,12 @@ class GizmoClassMethod(PublicUtils): Vector((min_x, max_y, max_z)) ) + @classmethod + def get_modifiers_data(cls, obj): + return {'obj': obj.name, + 'active_modifier': obj.modifiers.active.name, + 'modifiers': list(i.name for i in obj.modifiers)} + class PublicProperty(GizmoClassMethod): @@ -530,7 +537,7 @@ class GizmoUpdate(PublicProperty): def fix_origin_parent_and_angle(self): obj = self.obj mod = self.modifier - if not obj or not mod: + if not obj or not mod or not getattr(mod, 'origin', False): return origin = mod.origin @@ -591,10 +598,11 @@ class GizmoUpdate(PublicProperty): return origin_object def update_object_origin_matrix(self): - self.clear_cache() origin_mode = self.origin_mode origin_object = self.modifier.origin - if origin_object and self.modifier_is_use_origin_axis: + is_use = self.modifier_is_use_origin_axis + + if origin_object and is_use: if origin_mode == 'UP_LIMITS': origin_object.matrix_world.translation = Vector(self.point_limits_up) elif origin_mode == 'DOWN_LIMITS': @@ -607,16 +615,23 @@ class GizmoUpdate(PublicProperty): origin_object.matrix_world.translation = translation def update_multiple_modifiers_data(self): - self.clear_data() obj = self.obj data = bpy.data context = bpy.context + name = self.G_NAME + origin_object = data.objects.get(name) + + modifiers = self.G_Modifiers_TMP_Save_Data + mods_data = self.get_modifiers_data(obj) + if 114514 in modifiers and modifiers[114514] == mods_data: + if origin_object: + self.update_deform_wireframe(self.get_depsgraph(origin_object)) + return # add simple_deform mesh - name = self.G_NAME - if data.objects.get(name): - data.objects.remove(data.objects.get(name)) + if origin_object: + data.objects.remove(origin_object) if data.meshes.get(name): data.meshes.remove(data.meshes.get(name)) @@ -658,10 +673,10 @@ class GizmoUpdate(PublicProperty): deform_obj.hide_select = True deform_obj.hide_set(True) deform_obj.hide_viewport = False - self.update_deform_wireframe(self.get_depsgraph(deform_obj)) deform_obj.hide_render = True deform_obj.hide_viewport = True deform_obj.hide_set(True) + self.G_Modifiers_TMP_Save_Data[114514] = mods_data def update_deform_wireframe(self, obj): if not self.pref.update_deform_wireframe: -- 2.30.2 From 1a284b677bbdf0a4507205102f82a7921bcb809b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=90=8C=E6=96=B0?= <3209970865@qq.com> Date: Sun, 2 Apr 2023 11:59:23 +0800 Subject: [PATCH 17/24] optimize performance G_Modifiers_TMP_Save_Data --- simple_deform_helper/draw.py | 11 +- .../gizmo/angle_and_factor.py | 3 +- simple_deform_helper/gizmo/bend_axis.py | 2 +- .../gizmo/up_down_limits_point.py | 6 +- simple_deform_helper/update.py | 118 +++++++++++++----- simple_deform_helper/utils.py | 70 +++++------ 6 files changed, 132 insertions(+), 78 deletions(-) diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index af9d7cf7e..4a42e7cb1 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -122,15 +122,16 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): ) def draw_limits_line(self): - line_pos, limits_pos, = self.modifier_limits_point + up_point, down_point, up_limits, down_limits = self.modifier_limits_point # draw limits line - self.draw_3d_shader(limits_pos, ((1, 0),), (1, 1, 0, 0.5)) + self.draw_3d_shader((up_limits, down_limits), ((1, 0),), (1, 1, 0, 0.5)) # draw line - self.draw_3d_shader(line_pos, ((1, 0),), (1, 1, 0, 0.3)) + self.draw_3d_shader((up_point, down_point), ((1, 0),), (1, 1, 0, 0.3)) + # draw pos - self.draw_3d_shader([line_pos[1]], (), (0, 1, 0, 0.5), + self.draw_3d_shader([down_point], (), (0, 1, 0, 0.5), shader_name='3D_UNIFORM_COLOR', draw_type='POINTS') - self.draw_3d_shader([line_pos[0]], (), (1, 0, 0, 0.5), + self.draw_3d_shader([up_point], (), (1, 0, 0, 0.5), shader_name='3D_UNIFORM_COLOR', draw_type='POINTS') def draw_deform_mesh(self): diff --git a/simple_deform_helper/gizmo/angle_and_factor.py b/simple_deform_helper/gizmo/angle_and_factor.py index e5bb4810e..b8b8752f7 100644 --- a/simple_deform_helper/gizmo/angle_and_factor.py +++ b/simple_deform_helper/gizmo/angle_and_factor.py @@ -55,7 +55,7 @@ class AngleUpdate(GizmoUtils): elif not_c_l and not event.shift and is_shift and event.value == 'RELEASE': self.init_mouse_region_x = event.mouse_region_x - new_value = self.tmp_value_angle = math.degrees(old_value) + # new_value = self.tmp_value_angle = math.degrees(old_value) return v(snap_value) @@ -113,7 +113,6 @@ class AngleGizmo(Gizmo, AngleUpdate): self.update_prop_value(event, tweak) self.update_header_text(context) - self.update_multiple_modifiers_data() return self.event_handle(event) def exit(self, context, cancel): diff --git a/simple_deform_helper/gizmo/bend_axis.py b/simple_deform_helper/gizmo/bend_axis.py index 78a5ea5ff..94fcd85b1 100644 --- a/simple_deform_helper/gizmo/bend_axis.py +++ b/simple_deform_helper/gizmo/bend_axis.py @@ -116,4 +116,4 @@ class BendAxiSwitchGizmoGroup(GizmoGroup, GizmoGroupUtils): gizmo = getattr(self, i, False) rot = Euler(w, 'XYZ').to_matrix().to_4x4() gizmo.matrix_basis = mat.to_euler().to_matrix().to_4x4() @ rot - gizmo.matrix_basis.translation = Vector(j) + gizmo.matrix_basis.translation = self.obj_matrix_world @ Vector(j) diff --git a/simple_deform_helper/gizmo/up_down_limits_point.py b/simple_deform_helper/gizmo/up_down_limits_point.py index 4c41f9128..eae73419c 100644 --- a/simple_deform_helper/gizmo/up_down_limits_point.py +++ b/simple_deform_helper/gizmo/up_down_limits_point.py @@ -1,4 +1,5 @@ import math +from time import time import bpy from bpy.types import Gizmo, GizmoGroup @@ -200,6 +201,7 @@ class UpDownLimitsGizmo(Gizmo, GizmoUpdate): 'down_limits', self.int_value_down_limits) def modal(self, context, event, tweak): + st = time() self.clear_cache() if self.modifier_is_use_origin_axis: @@ -209,12 +211,12 @@ class UpDownLimitsGizmo(Gizmo, GizmoUpdate): self.middle_limits_value = (self.modifier_up_limits + self.modifier_down_limits) / 2 self.set_prop_value(event) - self.clear_data() self.clear_cache() - self.update_multiple_modifiers_data() self.update_object_origin_matrix() + # self.update_deform_wireframe(self.get_depsgraph(origin_object)) self.update_header_text(context) return_handle = self.event_handle(event) + print('modal time sum ', time() - st) return return_handle diff --git a/simple_deform_helper/update.py b/simple_deform_helper/update.py index dbe32b2f5..e5732512a 100644 --- a/simple_deform_helper/update.py +++ b/simple_deform_helper/update.py @@ -1,42 +1,100 @@ # SPDX-License-Identifier: GPL-2.0-or-later -from time import time - -import bpy -from bpy.app.handlers import depsgraph_update_post, persistent - from .utils import GizmoUpdate -@persistent -def remove_not_use_empty(scene, dep): - """Remove unused Empty Object - """ - remove_name: str = "ViewSimpleDeformGizmo_" - context = bpy.context - gizmo = GizmoUpdate() - gizmo.fix_origin_parent_and_angle() - # remove redundant empty object +class update_public: + _event_func_list = {} + update_func: 'function' + tmp_save_data = {} + run_time = 0.2 - # simple update data if change active object on update - name = gizmo.obj.name - update_data = name not in gizmo.G_GizmoData or name != gizmo.G_GizmoData['active_object'] - if update_data: - gizmo.clear_data() - gizmo.G_GizmoData[name] = name - gizmo.G_GizmoData['active_object'] = name - gizmo.G_Modifiers_TMP_Save_Data.clear() - if gizmo.simple_deform_modifier_is_simple(context): - for obj in context.scene.objects: - is_empty = obj.type == "EMPTY" - not_parent = not obj.parent - if remove_name in obj.name and not_parent and is_empty: - bpy.data.objects.remove(obj) + @classmethod + def register(cls): + import bpy + bpy.app.timers.register(cls.update_func, persistent=True) + @classmethod + def unregister(cls): + from bpy.app import timers + func = cls.update_func + if timers.is_registered(func): + timers.unregister(func) + + @classmethod + def _update_call(cls): + for i in cls._event_func_list[cls]: + i() + + @classmethod + def append(cls, item): + if cls not in cls._event_func_list: + cls._event_func_list[cls] = [] + cls._event_func_list[cls].append(item) + + @classmethod + def remove(cls, item): + if item in cls._event_func_list[cls]: + cls._event_func_list[cls].remove(item) + + +class change_active_object(update_public): + tmp_save_data = {} + from bpy.app.handlers import depsgraph_update_post, persistent + handler_type = depsgraph_update_post + + @classmethod + def update_func(cls): + import bpy + name = bpy.context.object.name + key = 'active_object' + if key not in cls.tmp_save_data or cls.tmp_save_data[key] != name: + cls._update_call() + cls.tmp_save_data[key] = name + return cls.run_time + + +class change_active_simple_deform_modifier(update_public): + + @classmethod + def update_func(cls): + import bpy + obj = bpy.context.object + if not obj or obj.type != 'MESH': + return cls.run_time + + name = obj.name + key = 'active_object' + modifiers = cls.get_modifiers_data(obj) + change_modifiers = 'modifiers' not in cls.tmp_save_data or cls.tmp_save_data['modifiers'] != modifiers + if key not in cls.tmp_save_data or cls.tmp_save_data[key] != name: + cls.tmp_save_data['modifiers'] = modifiers + cls.tmp_save_data[key] = name + elif change_modifiers: + cls.tmp_save_data['modifiers'] = modifiers + cls._update_call() + return cls.run_time + + @classmethod + def get_modifiers_data(cls, obj): + return {'obj': obj.name, + 'active_modifier': getattr(obj.modifiers.active, 'name', None), + 'modifiers': list(i.name for i in obj.modifiers)} + + +gizmo = GizmoUpdate() def register(): - depsgraph_update_post.append(remove_not_use_empty) + change_active_object.register() + change_active_simple_deform_modifier.register() + + change_active_object.append(gizmo.update_multiple_modifiers_data) + change_active_simple_deform_modifier.append(gizmo.update_multiple_modifiers_data) def unregister(): - depsgraph_update_post.remove(remove_not_use_empty) + change_active_object.remove(gizmo.update_multiple_modifiers_data) + change_active_simple_deform_modifier.remove(gizmo.update_multiple_modifiers_data) + + change_active_object.unregister() + change_active_simple_deform_modifier.unregister() diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index 593ce0ee2..259a0b468 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -4,6 +4,7 @@ import math import uuid from functools import cache from os.path import dirname, basename, realpath +from time import time import bpy import numpy as np @@ -17,7 +18,6 @@ class PublicData: G_CustomShape = {} G_GizmoData = {} G_Modifiers_Data = {} - G_Modifiers_TMP_Save_Data = {} G_INDICES = ( (0, 1), (0, 2), (1, 3), (2, 3), (4, 5), (4, 6), (5, 7), (6, 7), @@ -315,12 +315,6 @@ class GizmoClassMethod(PublicUtils): Vector((min_x, max_y, max_z)) ) - @classmethod - def get_modifiers_data(cls, obj): - return {'obj': obj.name, - 'active_modifier': obj.modifiers.active.name, - 'modifiers': list(i.name for i in obj.modifiers)} - class PublicProperty(GizmoClassMethod): @@ -340,7 +334,7 @@ class PublicProperty(GizmoClassMethod): g_l = self.__from_up_down_point_get_limits_point if self.modifier.origin: vector_axis = self.get_vector_axis(mod) - origin_mat = mod.origin.matrix_world.to_3x3() + origin_mat = mod.origin.matrix_basis.to_3x3() axis_ = origin_mat @ vector_axis point_lit = [[top, bottom], [left, right], [front, back]] for f in range(point_lit.__len__()): @@ -378,17 +372,11 @@ class PublicProperty(GizmoClassMethod): up_point, down_point = top, bottom top, bottom = up_limits, down_limits = g_l(top, bottom) - (top, bottom, left, - right, front, back) = self.matrix_calculation(self.obj_matrix_world.inverted(), - (top, bottom, left, right, front, back)) - - points = ((up_point, down_point), (up_limits, down_limits)) + points = (up_point, down_point, up_limits, down_limits) each_point = ((right[0], back[1], top[2]), (left[0], front[1], bottom[2],)) - box_bound_point = self.matrix_calculation(self.obj_matrix_world, self.tow_co_to_coordinate(each_point)) - return points, box_bound_point + return points, self.tow_co_to_coordinate(each_point) # ---------------------- - @cache def _each_face_pos(self, mat, co): return self.co_to_direction(mat, co) @@ -401,13 +389,18 @@ class PublicProperty(GizmoClassMethod): @classmethod def clear_data(cls): cls.G_GizmoData.clear() + + @classmethod + def clear_modifiers_data(cls): cls.G_Modifiers_Data.clear() # --------------- Cache Data ---------------------- @property def each_face_pos(self): - return self._each_face_pos(self.obj_matrix_world, self.get_bound_co_data()) + matrix = Matrix() + matrix.freeze() + return self._each_face_pos(matrix, self.get_bound_co_data()) @property def modifier_bound_co(self): @@ -415,17 +408,19 @@ class PublicProperty(GizmoClassMethod): @property def modifier_bound_box_pos(self): - return self._each_face_pos(self.obj_matrix_world, self.modifier_bound_co) + matrix = Matrix() + matrix.freeze() + return self.co_to_direction(matrix, self.modifier_bound_co) @property def modifier_limits_point(self): points, _ = self._get_limits_point_and_bound_box_co() - return points + return self.matrix_calculation(self.obj_matrix_world, points) @property def modifier_limits_bound_box(self): _, bound = self._get_limits_point_and_bound_box_co() - return bound + return self.matrix_calculation(self.obj_matrix_world, bound) @property def modifier_origin_angle_is_available(self): @@ -433,6 +428,7 @@ class PublicProperty(GizmoClassMethod): self._get_limits_point_and_bound_box_co() return True except UnboundLocalError: + print('modifier_origin_angle_is_available') self.clear_cache() return False @@ -492,19 +488,19 @@ class PublicProperty(GizmoClassMethod): # ----- point @property def point_up(self): - return self.modifier_limits_point[0][0] + return self.modifier_limits_point[0] @property def point_down(self): - return self.modifier_limits_point[0][1] + return self.modifier_limits_point[1] @property def point_limits_up(self): - return self.modifier_limits_point[1][0] + return self.modifier_limits_point[2] @property def point_limits_down(self): - return self.modifier_limits_point[1][1] + return self.modifier_limits_point[3] # ------ @@ -530,7 +526,7 @@ class PublicProperty(GizmoClassMethod): @property def modifier_is_use_origin_axis(self): - return self.obj_origin_property_group.origin_mode != 'NOT' + return self.obj_origin_property_group.origin_mode != 'NOT' and not self.modifier.origin class GizmoUpdate(PublicProperty): @@ -598,6 +594,7 @@ class GizmoUpdate(PublicProperty): return origin_object def update_object_origin_matrix(self): + st = time() origin_mode = self.origin_mode origin_object = self.modifier.origin is_use = self.modifier_is_use_origin_axis @@ -613,23 +610,21 @@ class GizmoUpdate(PublicProperty): elif origin_mode == 'MIDDLE': translation = (self.point_up + self.point_down) / 2 origin_object.matrix_world.translation = translation + print('update_object_origin_matrix', time() - st) def update_multiple_modifiers_data(self): + print('update_multiple_modifiers_data', self) + st = time() obj = self.obj - data = bpy.data context = bpy.context + if obj.type not in ('MESH', 'LATTICE') or not self.simple_deform_public_poll(context): + return + self.clear_cache() + data = bpy.data name = self.G_NAME origin_object = data.objects.get(name) - modifiers = self.G_Modifiers_TMP_Save_Data - mods_data = self.get_modifiers_data(obj) - if 114514 in modifiers and modifiers[114514] == mods_data: - if origin_object: - self.update_deform_wireframe(self.get_depsgraph(origin_object)) - return - - # add simple_deform mesh - + # update multiple simple_deform bound data if origin_object: data.objects.remove(origin_object) @@ -656,8 +651,7 @@ class GizmoUpdate(PublicProperty): for mo in context.object.modifiers: if mo.type == 'SIMPLE_DEFORM': obj = self.get_depsgraph(deform_obj) - self.G_GizmoData[mo.name] = self.get_mesh_max_min_co( - obj) + self.G_Modifiers_Data[mo.name] = self.get_mesh_max_min_co(obj) simple_deform = deform_obj.modifiers.new( mo.name, 'SIMPLE_DEFORM') simple_deform.deform_method = mo.deform_method @@ -676,7 +670,7 @@ class GizmoUpdate(PublicProperty): deform_obj.hide_render = True deform_obj.hide_viewport = True deform_obj.hide_set(True) - self.G_Modifiers_TMP_Save_Data[114514] = mods_data + print('multiple_modifiers', time() - st) def update_deform_wireframe(self, obj): if not self.pref.update_deform_wireframe: -- 2.30.2 From 7cedf3a1599bf0d993b489d924bb1e61318e82ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=90=8C=E6=96=B0?= <3209970865@qq.com> Date: Mon, 3 Apr 2023 03:35:15 +0800 Subject: [PATCH 18/24] Optimize Performance Cache Calculation results Draw Deform Mesh Del print TODO fix set_prop_value prop --- simple_deform_helper/draw.py | 44 +- .../gizmo/angle_and_factor.py | 6 +- simple_deform_helper/gizmo/bend_axis.py | 8 +- simple_deform_helper/gizmo/set_deform_axis.py | 19 +- .../gizmo/up_down_limits_point.py | 19 +- simple_deform_helper/operators.py | 4 +- simple_deform_helper/panel.py | 2 +- simple_deform_helper/preferences.py | 14 +- simple_deform_helper/update.py | 211 ++++++--- simple_deform_helper/utils.py | 420 +++++++++++------- 10 files changed, 469 insertions(+), 278 deletions(-) diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index 4a42e7cb1..d8b9c5b88 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -5,22 +5,23 @@ import gpu from gpu_extras.batch import batch_for_shader from mathutils import Vector +from .update import change_active_object, simple_update from .utils import GizmoUtils class Handler: @classmethod def add_handler(cls): - if 'handler' not in cls.G_GizmoData: - cls.G_GizmoData['handler'] = bpy.types.SpaceView3D.draw_handler_add( + if 'handler' not in cls.G_HandleData: + cls.G_HandleData['handler'] = bpy.types.SpaceView3D.draw_handler_add( Draw3D().draw, (), 'WINDOW', 'POST_VIEW') @classmethod def del_handler_text(cls): - if 'scale_text' in cls.G_GizmoData: + if 'scale_text' in cls.G_HandleData: bpy.types.SpaceView3D.draw_handler_remove( - cls.G_GizmoData['scale_text'], 'WINDOW') - cls.G_GizmoData.pop('scale_text') + cls.G_HandleData['scale_text'], 'WINDOW') + cls.G_HandleData.pop('scale_text') @classmethod def del_handler(cls): @@ -33,10 +34,10 @@ class Handler: cls.del_handler_text() - if 'handler' in cls.G_GizmoData: + if 'handler' in cls.G_HandleData: bpy.types.SpaceView3D.draw_handler_remove( - cls.G_GizmoData['handler'], 'WINDOW') - cls.G_GizmoData.clear() + cls.G_HandleData['handler'], 'WINDOW') + cls.G_HandleData.clear() class DrawPublic: @@ -94,12 +95,14 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): gpu.state.depth_test_set('ALWAYS') context = bpy.context - if self.simple_deform_public_poll(context): - self.draw_3d(context) + if simple_update.timers_update_poll(): + is_switch_obj = change_active_object.is_change_active_object(False) + if self.simple_deform_public_poll(context) and not is_switch_obj: + self.draw_3d(context) def draw_3d(self, context): self.draw_scale_text(self.obj) - if not self.modifier_origin_angle_is_available: + if not self.modifier_origin_is_available: self.draw_bound_box() elif self.simple_deform_show_gizmo_poll(context): # draw bound box @@ -136,20 +139,21 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): def draw_deform_mesh(self): ob = self.obj - handler_dit = self.G_GizmoData + deform_data = self.G_DeformDrawData active = self.modifier # draw deform mesh - if 'simple_deform_box_data' in handler_dit and self.pref.update_deform_wireframe: - pos, indices, mat, mod_data, limits = handler_dit['simple_deform_box_data'] - if ([getattr(active, i) for i in self.G_MODIFIERS_PROPERTY] == mod_data) and ( - ob.matrix_world == mat) and limits == active.limits[:]: - self.draw_3d_shader( - pos, indices, self.pref.deform_wireframe_color) + if 'simple_deform_bound_data' in deform_data and self.pref.update_deform_wireframe: + modifiers = self.get_modifiers_parameter(self.modifier) + pos, indices, mat, mod_data, limits = deform_data['simple_deform_bound_data'] + is_limits = limits == active.limits[:] + is_mat = (ob.matrix_world == mat) + if modifiers == mod_data and is_mat and is_limits: + self.draw_3d_shader(pos, indices, self.pref.deform_wireframe_color) def draw_scale_text(self, ob): scale_error = (ob.scale != Vector((1, 1, 1))) - if scale_error and ('scale_text' not in self.G_GizmoData): - self.G_GizmoData['scale_text'] = bpy.types.SpaceView3D.draw_handler_add( + if scale_error and ('scale_text' not in self.G_HandleData): + self.G_HandleData['scale_text'] = bpy.types.SpaceView3D.draw_handler_add( self.draw_str, (), 'WINDOW', 'POST_PIXEL') elif not scale_error: self.del_handler_text() diff --git a/simple_deform_helper/gizmo/angle_and_factor.py b/simple_deform_helper/gizmo/angle_and_factor.py index b8b8752f7..56493fee0 100644 --- a/simple_deform_helper/gizmo/angle_and_factor.py +++ b/simple_deform_helper/gizmo/angle_and_factor.py @@ -6,6 +6,7 @@ from bpy.types import ( GizmoGroup, ) +from ..update import change_active_modifier_parameter from ..utils import GizmoUtils, GizmoGroupUtils @@ -109,10 +110,13 @@ class AngleGizmo(Gizmo, AngleUpdate): return {'RUNNING_MODAL'} def modal(self, context, event, tweak): - self.clear_cache() + self.clear_point_cache() self.update_prop_value(event, tweak) + self.update_deform_wireframe() self.update_header_text(context) + change_active_modifier_parameter.update_modifier_parameter() + self.tag_redraw(context) return self.event_handle(event) def exit(self, context, cancel): diff --git a/simple_deform_helper/gizmo/bend_axis.py b/simple_deform_helper/gizmo/bend_axis.py index 94fcd85b1..a6ee0bd40 100644 --- a/simple_deform_helper/gizmo/bend_axis.py +++ b/simple_deform_helper/gizmo/bend_axis.py @@ -14,12 +14,7 @@ class CustomGizmo(Gizmo, GizmoUtils): custom_shape: dict def setup(self): - self.draw_type = 'None_GizmoGroup_' - if not hasattr(self, 'custom_shape'): - self.custom_shape = {} - for i in self.G_CustomShape: - self.custom_shape[i] = self.new_custom_shape( - 'TRIS', self.G_CustomShape[i]) + self.init_setup() def draw(self, context): self.draw_custom_shape(self.custom_shape[self.draw_type]) @@ -29,6 +24,7 @@ class CustomGizmo(Gizmo, GizmoUtils): self.custom_shape[self.draw_type], select_id=select_id) def invoke(self, context, event): + self.init_invoke(context, event) return {'RUNNING_MODAL'} def modal(self, context, event, tweak): diff --git a/simple_deform_helper/gizmo/set_deform_axis.py b/simple_deform_helper/gizmo/set_deform_axis.py index 3865e9f75..34671b0b8 100644 --- a/simple_deform_helper/gizmo/set_deform_axis.py +++ b/simple_deform_helper/gizmo/set_deform_axis.py @@ -34,17 +34,18 @@ class SetDeformGizmoGroup(GizmoGroup, GizmoGroupUtils): setattr(self, f'deform_axis_{axis.lower()}', gizmo) def draw_prepare(self, context): - - if 'co' in self.G_GizmoData: + bound = self.modifier_bound_co + if bound: obj = self.get_depsgraph(self.obj) dimensions = obj.dimensions - def _mat(f): - co = self.G_GizmoData['co'][0] - co = (co[0] + (max(dimensions) * f), co[1], - co[2] - (min(dimensions) * 0.3)) + def mat(f): + b = bound[0] + co = (b[0] + (max(dimensions) * f), + b[1], + b[2] - (min(dimensions) * 0.3)) return self.obj_matrix_world @ Vector(co) - self.deform_axis_x.matrix_basis.translation = _mat(0) - self.deform_axis_y.matrix_basis.translation = _mat(0.3) - self.deform_axis_z.matrix_basis.translation = _mat(0.6) + self.deform_axis_x.matrix_basis.translation = mat(0) + self.deform_axis_y.matrix_basis.translation = mat(0.3) + self.deform_axis_z.matrix_basis.translation = mat(0.6) diff --git a/simple_deform_helper/gizmo/up_down_limits_point.py b/simple_deform_helper/gizmo/up_down_limits_point.py index eae73419c..c472bf7ef 100644 --- a/simple_deform_helper/gizmo/up_down_limits_point.py +++ b/simple_deform_helper/gizmo/up_down_limits_point.py @@ -6,6 +6,7 @@ from bpy.types import Gizmo, GizmoGroup from bpy_extras import view3d_utils from mathutils import Vector +from ..update import change_active_modifier_parameter from ..utils import GizmoUtils, GizmoGroupUtils @@ -201,22 +202,26 @@ class UpDownLimitsGizmo(Gizmo, GizmoUpdate): 'down_limits', self.int_value_down_limits) def modal(self, context, event, tweak): - st = time() - self.clear_cache() + self.clear_point_cache() if self.modifier_is_use_origin_axis: self.new_origin_empty_object() + # return {'RUNNING_MODAL'} self.difference_value = self.modifier_up_limits - self.modifier_down_limits self.middle_limits_value = (self.modifier_up_limits + self.modifier_down_limits) / 2 - self.set_prop_value(event) - self.clear_cache() - self.update_object_origin_matrix() - # self.update_deform_wireframe(self.get_depsgraph(origin_object)) + try: + self.set_prop_value(event) + self.clear_point_cache() + self.update_object_origin_matrix() + except Exception: + ... + # return {'FINISHED'} self.update_header_text(context) return_handle = self.event_handle(event) - print('modal time sum ', time() - st) + change_active_modifier_parameter.update_modifier_parameter() + self.update_deform_wireframe() return return_handle diff --git a/simple_deform_helper/operators.py b/simple_deform_helper/operators.py index 9d35d5ce5..0601f9882 100644 --- a/simple_deform_helper/operators.py +++ b/simple_deform_helper/operators.py @@ -26,7 +26,7 @@ class DeformAxisOperator(Operator, GizmoUtils): return {'RUNNING_MODAL'} def modal(self, context, event): - self.clear_cache() + self.clear_point_cache() mod = context.object.modifiers.active mod.deform_axis = self.Deform_Axis empty = self.new_origin_empty_object() @@ -39,7 +39,7 @@ class DeformAxisOperator(Operator, GizmoUtils): ('max_z', self.Z_Value), ('min_z', self.Z_Value), ): - setattr(empty.constraints[self.G_CON_LIMIT_NAME], limit, value) + setattr(empty.constraints[self.G_NAME_CON_LIMIT], limit, value) if ((not is_positive) and self.Is_Positive) or (is_positive and (not self.Is_Positive)): mod.angle = mod.angle * -1 diff --git a/simple_deform_helper/panel.py b/simple_deform_helper/panel.py index c4f8e38bb..2d86f08c3 100644 --- a/simple_deform_helper/panel.py +++ b/simple_deform_helper/panel.py @@ -41,7 +41,7 @@ class SimpleDeformHelperToolPanel(Panel, GizmoUtils): 'show_set_axis_button', icon='EMPTY_AXIS', text='') - if mod.deform_method == 'BEND': + if pref.modifier_deform_method_is_bend: layout.prop(pref, 'display_bend_axis_switch_gizmo', toggle=1) diff --git a/simple_deform_helper/preferences.py b/simple_deform_helper/preferences.py index 36b6a76f7..473566b50 100644 --- a/simple_deform_helper/preferences.py +++ b/simple_deform_helper/preferences.py @@ -96,12 +96,10 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, GizmoUtils): row.prop(mod, show_type) -class SimpleDeformGizmoObjectPropertyGroup(PropertyGroup): +class SimpleDeformGizmoObjectPropertyGroup(PropertyGroup, GizmoUtils): def _limits_up(self, context): - mod = context.object.modifiers - if mod and (mod.active.type == 'SIMPLE_DEFORM'): - mod = mod.active - mod.limits[1] = self.up_limits + if self.active_modifier_is_simple_deform: + self.modifier.limits[1] = self.up_limits up_limits: FloatProperty(name='up', description='UP Limits(Red)', @@ -111,10 +109,8 @@ class SimpleDeformGizmoObjectPropertyGroup(PropertyGroup): min=0) def _limits_down(self, context): - mod = context.object.modifiers - if mod and (mod.active.type == 'SIMPLE_DEFORM'): - mod = mod.active - mod.limits[0] = self.down_limits + if self.active_modifier_is_simple_deform: + self.modifier.limits[0] = self.down_limits down_limits: FloatProperty(name='down', description='Lower limit(Green)', diff --git a/simple_deform_helper/update.py b/simple_deform_helper/update.py index e5732512a..d6fb78fca 100644 --- a/simple_deform_helper/update.py +++ b/simple_deform_helper/update.py @@ -1,78 +1,147 @@ # SPDX-License-Identifier: GPL-2.0-or-later +from functools import cache + +import bpy + from .utils import GizmoUpdate +gizmo = GizmoUpdate() + +"""depsgraph_update_post cannot listen to users modifying modifier parameters +Use timers to watch and use cache +""" + class update_public: - _event_func_list = {} - update_func: 'function' - tmp_save_data = {} + _events_func_list = {} run_time = 0.2 + @classmethod + def timers_update_poll(cls) -> bool: + return True + + @classmethod + @cache + def update_poll(cls) -> bool: + return True + + @classmethod + def _update_func_call_timer(cls): + if cls.timers_update_poll(): + for c, func_list in cls._events_func_list.items(): + if func_list and c.update_poll(): + for func in func_list: + func() + cls.clear_cache_events() + return cls.run_time + + @classmethod + def clear_cache_events(cls): + for cl in cls._events_func_list.keys(): + if getattr(cl, 'clear_cache', False): + cl.clear_cache() + + @classmethod + def clear_cache(cls): + cls.update_poll.cache_clear() + + @classmethod + def append(cls, item): + if cls not in cls._events_func_list: + cls._events_func_list[cls] = [] + cls._events_func_list[cls].append(item) + + @classmethod + def remove(cls, item): + if item in cls._events_func_list[cls]: + cls._events_func_list[cls].remove(item) + + # --------------- reg and unreg @classmethod def register(cls): - import bpy - bpy.app.timers.register(cls.update_func, persistent=True) + from bpy.app import timers + func = cls._update_func_call_timer + if not timers.is_registered(func): + timers.register(func, persistent=True) + else: + print('cls timers is registered', cls) @classmethod def unregister(cls): from bpy.app import timers - func = cls.update_func + func = cls._update_func_call_timer if timers.is_registered(func): timers.unregister(func) - - @classmethod - def _update_call(cls): - for i in cls._event_func_list[cls]: - i() - - @classmethod - def append(cls, item): - if cls not in cls._event_func_list: - cls._event_func_list[cls] = [] - cls._event_func_list[cls].append(item) - - @classmethod - def remove(cls, item): - if item in cls._event_func_list[cls]: - cls._event_func_list[cls].remove(item) + else: + print('cls timers is not registered', cls) + cls._events_func_list.clear() -class change_active_object(update_public): +class simple_update(update_public, GizmoUpdate): tmp_save_data = {} - from bpy.app.handlers import depsgraph_update_post, persistent - handler_type = depsgraph_update_post @classmethod - def update_func(cls): - import bpy - name = bpy.context.object.name - key = 'active_object' - if key not in cls.tmp_save_data or cls.tmp_save_data[key] != name: - cls._update_call() - cls.tmp_save_data[key] = name - return cls.run_time + def timers_update_poll(cls): + obj = bpy.context.object + if not cls.context_mode_is_object(): + ... + elif not obj: + ... + elif not cls.obj_type_is_mesh_or_lattice(obj): + ... + elif cls.mod_is_simple_deform_type(obj.modifiers.active): + return True + return False -class change_active_simple_deform_modifier(update_public): +class change_active_object(simple_update): + @classmethod + @cache + def update_poll(cls): + return cls.is_change_active_object() @classmethod - def update_func(cls): + def is_change_active_object(cls, change_data=True): import bpy obj = bpy.context.object - if not obj or obj.type != 'MESH': - return cls.run_time - name = obj.name key = 'active_object' + if key not in cls.tmp_save_data: + if change_data: + cls.tmp_save_data[key] = name + return True + + elif cls.tmp_save_data[key] != name: + if change_data: + cls.tmp_save_data[key] = name + return True + return False + + +class change_active_simple_deform_modifier(simple_update): + + @classmethod + @cache + def update_poll(cls): + return cls.is_change_active_simple_deform() + + @classmethod + def is_change_active_simple_deform(cls) -> bool: + import bpy + obj = bpy.context.object modifiers = cls.get_modifiers_data(obj) - change_modifiers = 'modifiers' not in cls.tmp_save_data or cls.tmp_save_data['modifiers'] != modifiers - if key not in cls.tmp_save_data or cls.tmp_save_data[key] != name: + + def update(): cls.tmp_save_data['modifiers'] = modifiers - cls.tmp_save_data[key] = name - elif change_modifiers: - cls.tmp_save_data['modifiers'] = modifiers - cls._update_call() - return cls.run_time + + if change_active_object.update_poll(): + update() + elif 'modifiers' not in cls.tmp_save_data: + update() + elif cls.tmp_save_data['modifiers'] != modifiers: + update() + return True + return False @classmethod def get_modifiers_data(cls, obj): @@ -81,20 +150,52 @@ class change_active_simple_deform_modifier(update_public): 'modifiers': list(i.name for i in obj.modifiers)} -gizmo = GizmoUpdate() +class change_active_modifier_parameter(simple_update): + key = 'active_modifier_parameter' + + @classmethod + @cache + def update_poll(cls): + return gizmo.active_modifier_is_simple_deform and cls.is_change_active_simple_parameter() + + @classmethod + def update_modifier_parameter(cls, modifier_parameter=None): + """Run this function when the gizmo is updated to avoid duplicate updates + """ + if not modifier_parameter: + modifier_parameter = cls.get_modifiers_parameter(gizmo.modifier) + cls.tmp_save_data[cls.key] = modifier_parameter + + @classmethod + def change_modifier_parameter(cls) -> bool: + mod_data = cls.get_modifiers_parameter(gizmo.modifier) + return cls.key in cls.tmp_save_data and cls.tmp_save_data[cls.key] == mod_data + + @classmethod + def is_change_active_simple_parameter(cls): + parameter = cls.get_modifiers_parameter(gizmo.modifier) + if change_active_object.update_poll(): + cls.update_modifier_parameter(parameter) + elif change_active_simple_deform_modifier.update_poll(): + cls.update_modifier_parameter(parameter) + elif cls.key not in cls.tmp_save_data: + cls.update_modifier_parameter(parameter) + elif cls.tmp_save_data[cls.key] != parameter: + cls.update_modifier_parameter(parameter) + return True + return False def register(): - change_active_object.register() - change_active_simple_deform_modifier.register() + simple_update.register() - change_active_object.append(gizmo.update_multiple_modifiers_data) - change_active_simple_deform_modifier.append(gizmo.update_multiple_modifiers_data) + def p(): + gizmo.update_multiple_modifiers_data() + + change_active_object.append(p) + change_active_modifier_parameter.append(p) + change_active_simple_deform_modifier.append(p) def unregister(): - change_active_object.remove(gizmo.update_multiple_modifiers_data) - change_active_simple_deform_modifier.remove(gizmo.update_multiple_modifiers_data) - - change_active_object.unregister() - change_active_simple_deform_modifier.unregister() + simple_update.unregister() diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index 259a0b468..f7f9092ff 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -4,7 +4,6 @@ import math import uuid from functools import cache from os.path import dirname, basename, realpath -from time import time import bpy import numpy as np @@ -13,27 +12,38 @@ from mathutils import Vector, Matrix, Euler class PublicData: - """Public data class, all fixed data will be placed here + """Public data class, where all fixed data will be placed +Classify each different type of data separately and cache it to avoid getting stuck due to excessive update frequency """ - G_CustomShape = {} - G_GizmoData = {} - G_Modifiers_Data = {} + G_CustomShape = {} # + G_HandleData = {} # Save draw Handle + + G_DeformDrawData = {} # Save Deform Vertex And Indices,Update data only when updating deformation boxes + + G_MultipleModifiersBoundData = {} + G_INDICES = ( (0, 1), (0, 2), (1, 3), (2, 3), (4, 5), (4, 6), (5, 7), (6, 7), - (0, 4), (1, 5), (2, 6), (3, 7)) - + (0, 4), (1, 5), (2, 6), (3, 7)) # The order in which the 8 points of the bounding box are drawn G_NAME = 'ViewSimpleDeformGizmo_' # Temporary use files prefix - G_ADDON_NAME = basename(dirname(realpath(__file__))) # "simple_deform_helper" - G_CON_LIMIT_NAME = G_NAME + 'constraints_limit_rotation' # constraints name - G_MODIFIERS_PROPERTY = [ # copy modifier data + G_DEFORM_MESH_NAME = G_NAME + 'DeformMesh' + G_TMP_MULTIPLE_MODIFIERS_MESH = 'TMP_' + G_NAME + 'MultipleModifiersMesh' + G_SUB_LEVELS = 7 + + G_NAME_EMPTY_AXIS = G_NAME + '_Empty_' + G_NAME_CON_LIMIT = G_NAME + 'ConstraintsLimitRotation' # constraints name + G_NAME_CON_COPY_ROTATION = G_NAME + 'ConstraintsCopyRotation' + G_ADDON_NAME = basename(dirname(realpath(__file__))) # "simple_deform_helper" + + G_MODIFIERS_PROPERTY = [ # Copy modifier data 'angle', 'deform_axis', 'deform_method', 'factor', 'invert_vertex_group', - 'limits', + 'limits', # bpy.types.bpy_prop_array 'lock_x', 'lock_y', 'lock_z', @@ -72,10 +82,11 @@ class PublicData: def from_selected_obj_generate_json(cls): """Export selected object vertex data as gizmo custom paint data The output file should be in the blender folder + gizmo.json """ import json data = {} - for obj in bpy.context.selected_object: + for obj in bpy.context.selected_objects: data[obj.name] = cls.from_mesh_get_triangle_face_co(obj.data) print(data) with open('gizmo.json', 'w+') as f: @@ -96,10 +107,14 @@ class PublicClass(PublicData): class PublicPoll(PublicClass): + @classmethod + def context_mode_is_object(cls) -> bool: + return bpy.context.mode == 'OBJECT' + @classmethod def simple_deform_modifier_is_simple(cls, context): """ - Active Object in ('MESH', 'LATTICE') + Active Object in ('MESH', 'LATTICE') Active Modifier Type Is 'SIMPLE_DEFORM' and show_viewport :param context:bpy.types.Object :return: @@ -112,10 +127,9 @@ class PublicPoll(PublicClass): if not mod: return False - available_obj_type = obj and (obj.type in ('MESH', 'LATTICE')) - available_modifiers_type = mod and (mod.type == 'SIMPLE_DEFORM') - is_available_obj = available_modifiers_type and available_obj_type - is_obj_mode = context.mode == 'OBJECT' + available_obj_type = cls.obj_type_is_mesh_or_lattice(obj) + is_available_obj = cls.mod_is_simple_deform_type(mod) and available_obj_type + is_obj_mode = cls.context_mode_is_object() show_mod = mod.show_viewport not_is_self_mesh = obj.name != cls.G_NAME return is_available_obj and is_obj_mode and show_mod and not_is_self_mesh @@ -159,7 +173,51 @@ class PublicPoll(PublicClass): return poll and not_switch -class PublicUtils(PublicPoll): +class PublicTranslate(PublicPoll): + @classmethod + def translate_text(cls, text): + return bpy.app.translations.pgettext(text) + + @classmethod + def translate_header_text(cls, mode, value): + return cls.translate_text(mode) + ':{}'.format(value) + + +class GizmoClassMethod(PublicTranslate): + + @classmethod + def get_depsgraph(cls, obj: 'bpy.types.Object'): + """ + @param obj: dep obj + @return: If there is no input obj, reverse the active object evaluated + """ + context = bpy.context + if obj is None: + obj = context.object + dep = context.evaluated_depsgraph_get() + return obj.evaluated_get(dep) + + @classmethod + def get_vector_axis(cls, mod): + axis = mod.deform_axis + if 'BEND' == mod.deform_method: + vector_axis = Vector((0, 0, 1)) if axis in ( + 'Y', 'X') else Vector((1, 0, 0)) + else: + vector = (Vector((1, 0, 0)) if ( + axis == 'X') else Vector((0, 1, 0))) + vector_axis = Vector((0, 0, 1)) if ( + axis == 'Z') else vector + return vector_axis + + @classmethod + def get_modifiers_parameter(cls, modifier): + prop = bpy.types.bpy_prop_array + return list( + getattr(modifier, i)[:] if type(getattr(modifier, i)) == prop else getattr(modifier, i) + for i in cls.G_MODIFIERS_PROPERTY + ) + @classmethod def value_limit(cls, value, max_value=1, min_value=0): """ @@ -183,18 +241,6 @@ class PublicUtils(PublicPoll): """ return number == abs(number) - @classmethod - def get_depsgraph(cls, obj: 'bpy.types.Object'): - """ - @param obj: dep obj - @return: If there is no input obj, reverse the active object evaluated - """ - context = bpy.context - if obj is None: - obj = context.object - dep = context.evaluated_depsgraph_get() - return obj.evaluated_get(dep) - @classmethod def link_obj_to_active_collection(cls, obj: 'bpy.types.Object'): context = bpy.context @@ -203,22 +249,6 @@ class PublicUtils(PublicPoll): objects.link( obj) - @classmethod - def properties_is_modifier(cls) -> bool: - """Returns whether there is a modifier property panel open in the active window. - If it is open, it returns to True else False - """ - for area in bpy.context.screen.areas: - if area.type == 'PROPERTIES': - for space in area.spaces: - if space.type == 'PROPERTIES' and space.context == 'MODIFIER': - return True - return False - - @classmethod - def bound_box_to_list(cls, obj: 'bpy.types.Object'): - return tuple(i[:] for i in obj.bound_box) - @classmethod def get_mesh_max_min_co(cls, obj: 'bpy.context.object') -> '[Vector,Vector]': if obj.type == 'MESH': @@ -271,36 +301,6 @@ class PublicUtils(PublicPoll): return list((aa + bb) / 2 for (aa, bb) in point_list) - @classmethod - def translate_text(cls, text): - return bpy.app.translations.pgettext(text) - - @classmethod - def translate_header_text(cls, mode, value): - return cls.translate_text(mode) + ':{}'.format(value) - - -class GizmoClassMethod(PublicUtils): - @classmethod - def get_vector_axis(cls, mod): - axis = mod.deform_axis - if 'BEND' == mod.deform_method: - vector_axis = Vector((0, 0, 1)) if axis in ( - 'Y', 'X') else Vector((1, 0, 0)) - else: - vector = (Vector((1, 0, 0)) if ( - axis == 'X') else Vector((0, 1, 0))) - vector_axis = Vector((0, 0, 1)) if ( - axis == 'Z') else vector - return vector_axis - - @classmethod - def get_bound_co_data(cls): - if 'co' not in cls.G_GizmoData: - cls.G_GizmoData['co'] = cls.get_mesh_max_min_co( - bpy.context.object) - return cls.G_GizmoData['co'] - @classmethod def tow_co_to_coordinate(cls, data): ((min_x, min_y, min_z), (max_x, max_y, max_z)) = data @@ -315,6 +315,29 @@ class GizmoClassMethod(PublicUtils): Vector((min_x, max_y, max_z)) ) + @classmethod + def mod_is_simple_deform_type(cls, mod): + return mod and mod.type == 'SIMPLE_DEFORM' + + @classmethod + def obj_type_is_mesh_or_lattice(cls, obj: 'bpy.types.Object'): + return obj and (obj.type in ('MESH', 'LATTICE')) + + @classmethod + def from_vertices_new_mesh(cls, name, vertices): + new_mesh = bpy.data.meshes.new(name) + new_mesh.from_pydata(vertices, cls.G_INDICES, []) + new_mesh.update() + return new_mesh + + @classmethod + def copy_modifier_parameter(cls, old_mod, new_mod): + for prop_name in cls.G_MODIFIERS_PROPERTY: + origin_value = getattr(old_mod, prop_name, None) + is_array_prop = type(origin_value) == bpy.types.bpy_prop_array + value = origin_value[:] if is_array_prop else origin_value + setattr(new_mod, prop_name, value) + class PublicProperty(GizmoClassMethod): @@ -332,15 +355,17 @@ class PublicProperty(GizmoClassMethod): top, bottom, left, right, front, back = self.modifier_bound_box_pos mod = self.modifier g_l = self.__from_up_down_point_get_limits_point - if self.modifier.origin: + origin = self.modifier.origin + if origin: vector_axis = self.get_vector_axis(mod) - origin_mat = mod.origin.matrix_basis.to_3x3() - axis_ = origin_mat @ vector_axis + matrix = self.modifier.origin.matrix_local + origin_mat = matrix.to_3x3() + axis = origin_mat @ vector_axis point_lit = [[top, bottom], [left, right], [front, back]] for f in range(point_lit.__len__()): i = point_lit[f][0] j = point_lit[f][1] - angle = self.point_to_angle(i, j, f, axis_) + angle = self.point_to_angle(i, j, f, axis) if abs(angle - 180) < 0.00001: up_point, down_point = j, i up_limits, down_limits = g_l(j, i) @@ -349,7 +374,6 @@ class PublicProperty(GizmoClassMethod): up_point, down_point = i, j up_limits, down_limits = g_l(i, j) point_lit[f][0], point_lit[f][1] = up_limits, down_limits - [[top, bottom], [left, right], [front, back]] = point_lit else: axis = self.modifier_deform_axis @@ -383,28 +407,31 @@ class PublicProperty(GizmoClassMethod): @classmethod def clear_cache(cls): - cls._each_face_pos.cache_clear() + cls.clear_point_cache() + cls.clear_modifiers_data() + + @classmethod + def clear_point_cache(cls): cls._get_limits_point_and_bound_box_co.cache_clear() @classmethod - def clear_data(cls): - cls.G_GizmoData.clear() + def clear_modifiers_data(cls): + cls.G_MultipleModifiersBoundData.clear() @classmethod - def clear_modifiers_data(cls): - cls.G_Modifiers_Data.clear() + def clear_deform_data(cls): + cls.G_DeformDrawData.clear() # --------------- Cache Data ---------------------- - - @property - def each_face_pos(self): - matrix = Matrix() - matrix.freeze() - return self._each_face_pos(matrix, self.get_bound_co_data()) - @property def modifier_bound_co(self): - return self.G_Modifiers_Data.get(self.modifier.name, self.get_bound_co_data()) + def get_bound_co_data(): + key = 'self.modifier.name' + if key not in self.G_MultipleModifiersBoundData: + self.G_MultipleModifiersBoundData[key] = self.get_mesh_max_min_co(self.obj) + return self.G_MultipleModifiersBoundData[key] + + return self.G_MultipleModifiersBoundData.get(self.modifier.name, get_bound_co_data()) @property def modifier_bound_box_pos(self): @@ -423,13 +450,12 @@ class PublicProperty(GizmoClassMethod): return self.matrix_calculation(self.obj_matrix_world, bound) @property - def modifier_origin_angle_is_available(self): + def modifier_origin_is_available(self): try: self._get_limits_point_and_bound_box_co() return True except UnboundLocalError: - print('modifier_origin_angle_is_available') - self.clear_cache() + self.clear_point_cache() return False # --------------- Compute Data ---------------------- @@ -471,6 +497,11 @@ class PublicProperty(GizmoClassMethod): if self.active_modifier_is_simple_deform: return self.modifier.deform_method in ('TWIST', 'BEND') + @property + def modifier_deform_method_is_bend(self): + if self.active_modifier_is_simple_deform: + return self.modifier.deform_method == 'BEND' + @property def modifier_up_limits(self): if self.modifier: @@ -483,7 +514,7 @@ class PublicProperty(GizmoClassMethod): @property def active_modifier_is_simple_deform(self): - return self.modifier and self.modifier.type == 'SIMPLE_DEFORM' + return self.mod_is_simple_deform_type(self.modifier) # ----- point @property @@ -526,7 +557,11 @@ class PublicProperty(GizmoClassMethod): @property def modifier_is_use_origin_axis(self): - return self.obj_origin_property_group.origin_mode != 'NOT' and not self.modifier.origin + return self.obj_origin_property_group.origin_mode != 'NOT' + + @property + def modifier_is_have_origin(self): + return self.modifier_is_use_origin_axis and self.modifier.origin class GizmoUpdate(PublicProperty): @@ -543,7 +578,7 @@ class GizmoUpdate(PublicProperty): if origin.parent != obj: origin.parent = obj origin.rotation_euler.zero() - if not self.modifier_origin_angle_is_available: + if not self.modifier_origin_is_available: origin.location.zero() origin.scale = 1, 1, 1 @@ -552,7 +587,7 @@ class GizmoUpdate(PublicProperty): obj = self.obj origin = mod.origin if not origin: - new_name = self.G_NAME + '_Empty_' + str(uuid.uuid4()) + new_name = self.G_NAME_EMPTY_AXIS + str(uuid.uuid4()) origin_object = bpy.data.objects.new(new_name, None) self.link_obj_to_active_collection(origin_object) origin_object.hide_set(True) @@ -564,7 +599,7 @@ class GizmoUpdate(PublicProperty): if origin_object == obj: return # add constraints - name = self.G_CON_LIMIT_NAME + name = self.G_NAME_CON_LIMIT if origin_object.constraints.keys().__len__() > 2: origin_object.constraints.clear() if name in origin_object.constraints.keys(): @@ -579,7 +614,7 @@ class GizmoUpdate(PublicProperty): limit_constraints.use_limit_x = True limit_constraints.use_limit_y = True limit_constraints.use_limit_z = True - con_copy_name = self.G_NAME + 'constraints_copy_rotation' + con_copy_name = self.G_NAME_CON_COPY_ROTATION if con_copy_name in origin_object.constraints.keys(): copy_constraints = origin.constraints.get(con_copy_name) else: @@ -590,16 +625,15 @@ class GizmoUpdate(PublicProperty): copy_constraints.mix_mode = 'BEFORE' copy_constraints.target_space = 'WORLD' copy_constraints.owner_space = 'WORLD' + origin_mode = self.obj.SimpleDeformGizmo_PropertyGroup.origin_mode + origin_object.SimpleDeformGizmo_PropertyGroup.origin_mode = origin_mode self.fix_origin_parent_and_angle() return origin_object def update_object_origin_matrix(self): - st = time() - origin_mode = self.origin_mode - origin_object = self.modifier.origin - is_use = self.modifier_is_use_origin_axis - - if origin_object and is_use: + if self.modifier_is_have_origin: + origin_mode = self.origin_mode + origin_object = self.modifier.origin if origin_mode == 'UP_LIMITS': origin_object.matrix_world.translation = Vector(self.point_limits_up) elif origin_mode == 'DOWN_LIMITS': @@ -610,80 +644,106 @@ class GizmoUpdate(PublicProperty): elif origin_mode == 'MIDDLE': translation = (self.point_up + self.point_down) / 2 origin_object.matrix_world.translation = translation - print('update_object_origin_matrix', time() - st) def update_multiple_modifiers_data(self): - print('update_multiple_modifiers_data', self) - st = time() obj = self.obj context = bpy.context - if obj.type not in ('MESH', 'LATTICE') or not self.simple_deform_public_poll(context): + if not self.obj_type_is_mesh_or_lattice(obj) or not self.simple_deform_modifier_is_simple(context): return - self.clear_cache() + self.clear_point_cache() + self.clear_modifiers_data() data = bpy.data - name = self.G_NAME - origin_object = data.objects.get(name) + name = self.G_TMP_MULTIPLE_MODIFIERS_MESH - # update multiple simple_deform bound data - if origin_object: - data.objects.remove(origin_object) + # del old tmp object + old_object = data.objects.get(name) + if old_object: + data.objects.remove(old_object) if data.meshes.get(name): data.meshes.remove(data.meshes.get(name)) - vertices = self.tow_co_to_coordinate(self.get_bound_co_data()) - new_mesh = data.meshes.new(name) - new_mesh.from_pydata(vertices, self.G_INDICES, []) - new_mesh.update() - deform_obj = data.objects.new(name, new_mesh) + """get origin mesh bound box as multiple basic mesh + add multiple modifiers and get depsgraph obj bound box + """ + vertices = self.tow_co_to_coordinate(self.get_mesh_max_min_co(self.obj)) + new_mesh = self.from_vertices_new_mesh(name, vertices) + modifiers_obj = data.objects.new(name, new_mesh) - self.link_obj_to_active_collection(deform_obj) - if deform_obj == obj: + self.link_obj_to_active_collection(modifiers_obj) + if modifiers_obj == obj: # is cycles return - if deform_obj.parent != obj: - deform_obj.parent = obj + if modifiers_obj.parent != obj: + modifiers_obj.parent = obj - deform_obj.modifiers.clear() - subdivision = deform_obj.modifiers.new('1', 'SUBSURF') - subdivision.levels = 7 - self.G_GizmoData['co'] = self.get_bound_co_data() + modifiers_obj.modifiers.clear() + subdivision = modifiers_obj.modifiers.new('1', 'SUBSURF') + subdivision.levels = self.G_SUB_LEVELS - for mo in context.object.modifiers: - if mo.type == 'SIMPLE_DEFORM': - obj = self.get_depsgraph(deform_obj) - self.G_Modifiers_Data[mo.name] = self.get_mesh_max_min_co(obj) - simple_deform = deform_obj.modifiers.new( - mo.name, 'SIMPLE_DEFORM') - simple_deform.deform_method = mo.deform_method - simple_deform.deform_axis = mo.deform_axis - simple_deform.lock_x = mo.lock_x - simple_deform.lock_y = mo.lock_y - simple_deform.lock_z = mo.lock_z - simple_deform.origin = mo.origin - simple_deform.limits[1] = mo.limits[1] - simple_deform.limits[0] = mo.limits[0] - simple_deform.angle = mo.angle - simple_deform.show_viewport = mo.show_viewport - deform_obj.hide_select = True - deform_obj.hide_set(True) - deform_obj.hide_viewport = False - deform_obj.hide_render = True - deform_obj.hide_viewport = True - deform_obj.hide_set(True) - print('multiple_modifiers', time() - st) + for mod in context.object.modifiers: + if self.mod_is_simple_deform_type(mod): + dep_bound_tow_co = self.get_mesh_max_min_co(self.get_depsgraph(modifiers_obj)) + self.G_MultipleModifiersBoundData[mod.name] = dep_bound_tow_co + new_mod = modifiers_obj.modifiers.new(mod.name, 'SIMPLE_DEFORM') + self.copy_modifier_parameter(mod, new_mod) + data.objects.remove(modifiers_obj) - def update_deform_wireframe(self, obj): + def update_deform_wireframe(self): if not self.pref.update_deform_wireframe: return + # obj = self.obj + name = self.modifier.name + deform_name = self.G_DEFORM_MESH_NAME + + co = self.G_MultipleModifiersBoundData[name] + + deform_obj = bpy.data.objects.get(deform_name, None) + + if not deform_obj: + a, b = 0.5, -0.5 + vertices = self.tow_co_to_coordinate(((b, b, b), (a, a, a))) + new_mesh = self.from_vertices_new_mesh(name, vertices) + deform_obj = bpy.data.objects.new(deform_name, new_mesh) + deform_obj.hide_select = True + # deform_obj.hide_set(True) + deform_obj.hide_render = True + deform_obj.hide_viewport = True + + self.link_obj_to_active_collection(deform_obj) + + deform_obj.parent = self.obj + + tmv = deform_obj.hide_viewport + tmh = deform_obj.hide_get() + deform_obj.hide_viewport = False + deform_obj.hide_set(False) + + # Update Matrix + deform_obj.matrix_world = Matrix() + center = (co[0] + co[1]) / 2 + scale = co[1] - co[0] + deform_obj.matrix_world = self.obj_matrix_world @ deform_obj.matrix_world + deform_obj.location = center + deform_obj.scale = scale + + # Update Modifier data + mods = deform_obj.modifiers + mods.clear() + subdivision = mods.new('1', 'SUBSURF') + subdivision.levels = self.G_SUB_LEVELS + + new_mod = mods.new(name, 'SIMPLE_DEFORM') + self.copy_modifier_parameter(self.modifier, new_mod) + + # Get vertices data context = bpy.context - matrix = self.obj_matrix_world.copy() + obj = self.get_depsgraph(deform_obj) + matrix = deform_obj.matrix_world.copy() ver_len = obj.data.vertices.__len__() edge_len = obj.data.edges.__len__() - - if 'numpy_data' not in self.G_GizmoData: - self.G_GizmoData['numpy_data'] = {} - - numpy_data = self.G_GizmoData['numpy_data'] + if 'numpy_data' not in self.G_DeformDrawData: + self.G_DeformDrawData['numpy_data'] = {} + numpy_data = self.G_DeformDrawData['numpy_data'] key = (ver_len, edge_len) if key in numpy_data: list_edges, list_vertices = numpy_data[key] @@ -702,10 +762,13 @@ class GizmoUpdate(PublicProperty): obj.data.edges.foreach_get('vertices', list_edges) indices = list_edges.reshape((edge_len, 2)) + modifiers = self.get_modifiers_parameter(self.modifier) limits = context.object.modifiers.active.limits[:] - modifiers = [getattr(context.object.modifiers.active, i) - for i in self.G_MODIFIERS_PROPERTY] - self.G_GizmoData['simple_deform_box_data'] = (ver, indices, matrix, modifiers, limits[:]) + + deform_obj.hide_viewport = tmv + deform_obj.hide_set(tmh) + + self.G_DeformDrawData['simple_deform_bound_data'] = (ver, indices, self.obj_matrix_world, modifiers, limits[:]) class GizmoUtils(GizmoUpdate): @@ -748,16 +811,16 @@ class GizmoUtils(GizmoUpdate): def __update_matrix_func(self, context): func = getattr(self, 'update_gizmo_matrix', None) - if func and self.modifier_origin_angle_is_available: + if func and self.modifier_origin_is_available: func(context) def draw(self, context): - if self.modifier_origin_angle_is_available: + if self.modifier_origin_is_available: self.draw_custom_shape(self.custom_shape[self.draw_type]) self.__update_matrix_func(context) def draw_select(self, context, select_id): - if self.modifier_origin_angle_is_available: + if self.modifier_origin_is_available: self.draw_custom_shape( self.custom_shape[self.draw_type], select_id=select_id) self.__update_matrix_func(context) @@ -788,6 +851,11 @@ class GizmoUtils(GizmoUpdate): self.pref.update_deform_wireframe = self.pref.update_deform_wireframe ^ True return {'RUNNING_MODAL'} + @staticmethod + def tag_redraw(context): + if context.area: + context.area.tag_redraw() + class GizmoGroupUtils(GizmoUtils): bl_space_type = 'VIEW_3D' @@ -848,6 +916,22 @@ class Tmp: rot = rot.to_matrix() self.matrix_basis = self.matrix_basis @ rot.to_4x4() + @classmethod + def bound_box_to_list(cls, obj: 'bpy.types.Object'): + return tuple(i[:] for i in obj.bound_box) + + @classmethod + def properties_is_modifier(cls) -> bool: + """Returns whether there is a modifier property panel open in the active window. + If it is open, it returns to True else False + """ + for area in bpy.context.screen.areas: + if area.type == 'PROPERTIES': + for space in area.spaces: + if space.type == 'PROPERTIES' and space.context == 'MODIFIER': + return True + return False + def register(): PublicData.load_gizmo_data() -- 2.30.2 From 412f2d2d894e50b94968940814c58c6f716a0b37 Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Mon, 3 Apr 2023 09:39:17 +0800 Subject: [PATCH 19/24] fix Lattice SimpleDeform get Bound Box error obj.data.points.foreach_get('co_deform', list_vertices) --- simple_deform_helper/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index f7f9092ff..852027baf 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -259,7 +259,7 @@ class GizmoClassMethod(PublicTranslate): elif obj.type == 'LATTICE': ver_len = obj.data.points.__len__() list_vertices = np.zeros(ver_len * 3, dtype=np.float32) - obj.data.points.foreach_get('co', list_vertices) + obj.data.points.foreach_get('co_deform', list_vertices) list_vertices = list_vertices.reshape(ver_len, 3) return Vector(list_vertices.min(axis=0)).freeze(), Vector(list_vertices.max(axis=0)).freeze() -- 2.30.2 From 801faa0304a8c68d8502534bdbdc82fb95029ea1 Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Mon, 3 Apr 2023 11:03:18 +0800 Subject: [PATCH 20/24] draw text add poll only scale obj and simple poll show --- simple_deform_helper/draw.py | 119 ++++++++++++++++++++-------------- simple_deform_helper/utils.py | 23 +++++-- 2 files changed, 86 insertions(+), 56 deletions(-) diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index d8b9c5b88..62cc7a54b 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -9,38 +9,9 @@ from .update import change_active_object, simple_update from .utils import GizmoUtils -class Handler: - @classmethod - def add_handler(cls): - if 'handler' not in cls.G_HandleData: - cls.G_HandleData['handler'] = bpy.types.SpaceView3D.draw_handler_add( - Draw3D().draw, (), 'WINDOW', 'POST_VIEW') +class DrawPublic(GizmoUtils): + G_HandleData = {} # Save draw Handle - @classmethod - def del_handler_text(cls): - if 'scale_text' in cls.G_HandleData: - bpy.types.SpaceView3D.draw_handler_remove( - cls.G_HandleData['scale_text'], 'WINDOW') - cls.G_HandleData.pop('scale_text') - - @classmethod - def del_handler(cls): - data = bpy.data - if data.meshes.get(cls.G_NAME): - data.meshes.remove(data.meshes.get(cls.G_NAME)) - - if data.objects.get(cls.G_NAME): - data.objects.remove(data.objects.get(cls.G_NAME)) - - cls.del_handler_text() - - if 'handler' in cls.G_HandleData: - bpy.types.SpaceView3D.draw_handler_remove( - cls.G_HandleData['handler'], 'WINDOW') - cls.G_HandleData.clear() - - -class DrawPublic: @classmethod def draw_3d_shader(cls, pos, indices, color=None, *, shader_name='3D_UNIFORM_COLOR', draw_type='LINES'): shader = gpu.shader.from_builtin(shader_name) @@ -56,18 +27,50 @@ class DrawPublic: batch.draw(shader) + @property + def draw_poll(self) -> bool: + if simple_update.timers_update_poll(): + is_switch_obj = change_active_object.is_change_active_object(False) + if self.simple_deform_public_poll(bpy.context) and not is_switch_obj: + return True + return False -class DrawText: + +class DrawText(DrawPublic): font_info = { 'font_id': 0, 'handler': None, } + text_key = 'handler_text' @classmethod - def draw_str(cls): - obj = bpy.context.object - font_id = cls.font_info['font_id'] + def add_text_handler(cls): + key = cls.text_key + if key not in cls.G_HandleData: + cls.G_HandleData[key] = bpy.types.SpaceView3D.draw_handler_add( + DrawText().draw_text_handler, (), 'WINDOW', 'POST_PIXEL') + @classmethod + def del_text_handler(cls): + key = cls.text_key + if key in cls.G_HandleData: + bpy.types.SpaceView3D.draw_handler_remove( + cls.G_HandleData[key], 'WINDOW') + cls.G_HandleData.pop(key) + + @classmethod + def obj_is_scale(cls) -> bool: + ob = bpy.context.object + scale_error = ob and (ob.scale != Vector((1, 1, 1))) + return scale_error + + def draw_text_handler(self): + if self.draw_poll and self.obj_is_scale(): + self.draw_scale_text() + + def draw_scale_text(self): + obj = bpy.context.object + font_id = self.font_info['font_id'] blf.position(font_id, 200, 80, 0) blf.size(font_id, 15, 72) blf.color(font_id, 1, 1, 1, 1) @@ -85,7 +88,33 @@ class DrawText: blf.color(font_id, *color) -class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): +class DrawHandler(DrawText): + @classmethod + def add_handler(cls): + if 'handler' not in cls.G_HandleData: + cls.G_HandleData['handler'] = bpy.types.SpaceView3D.draw_handler_add( + Draw3D().draw, (), 'WINDOW', 'POST_VIEW') + + cls.add_text_handler() + + @classmethod + def del_handler(cls): + data = bpy.data + if data.meshes.get(cls.G_NAME): + data.meshes.remove(data.meshes.get(cls.G_NAME)) + + if data.objects.get(cls.G_NAME): + data.objects.remove(data.objects.get(cls.G_NAME)) + + if 'handler' in cls.G_HandleData: + bpy.types.SpaceView3D.draw_handler_remove( + cls.G_HandleData['handler'], 'WINDOW') + cls.G_HandleData.clear() + + cls.del_text_handler() + + +class Draw3D(DrawHandler): def draw(self): gpu.state.blend_set('ALPHA') @@ -94,14 +123,10 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): gpu.state.blend_set('ALPHA') gpu.state.depth_test_set('ALWAYS') - context = bpy.context - if simple_update.timers_update_poll(): - is_switch_obj = change_active_object.is_change_active_object(False) - if self.simple_deform_public_poll(context) and not is_switch_obj: - self.draw_3d(context) + if self.draw_poll: + self.draw_3d(bpy.context) def draw_3d(self, context): - self.draw_scale_text(self.obj) if not self.modifier_origin_is_available: self.draw_bound_box() elif self.simple_deform_show_gizmo_poll(context): @@ -110,6 +135,8 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): self.draw_deform_mesh() self.draw_limits_line() self.draw_limits_bound_box() + + self.draw_text_handler() elif self.simple_deform_show_bend_axis_witch_poll(context): self.draw_bound_box() @@ -150,13 +177,5 @@ class Draw3D(GizmoUtils, DrawPublic, DrawText, Handler): if modifiers == mod_data and is_mat and is_limits: self.draw_3d_shader(pos, indices, self.pref.deform_wireframe_color) - def draw_scale_text(self, ob): - scale_error = (ob.scale != Vector((1, 1, 1))) - if scale_error and ('scale_text' not in self.G_HandleData): - self.G_HandleData['scale_text'] = bpy.types.SpaceView3D.draw_handler_add( - self.draw_str, (), 'WINDOW', 'POST_PIXEL') - elif not scale_error: - self.del_handler_text() - def draw_origin_error(self): ... diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index 852027baf..feb23a2e9 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -16,7 +16,6 @@ class PublicData: Classify each different type of data separately and cache it to avoid getting stuck due to excessive update frequency """ G_CustomShape = {} # - G_HandleData = {} # Save draw Handle G_DeformDrawData = {} # Save Deform Vertex And Indices,Update data only when updating deformation boxes @@ -48,8 +47,8 @@ Classify each different type of data separately and cache it to avoid getting st 'lock_y', 'lock_z', 'origin', - 'show_expanded', - 'show_in_editmode', + # 'show_expanded', + # 'show_in_editmode', 'vertex_group', ] @@ -242,12 +241,24 @@ class GizmoClassMethod(PublicTranslate): return number == abs(number) @classmethod - def link_obj_to_active_collection(cls, obj: 'bpy.types.Object'): + def _link_obj(cls, obj, link): context = bpy.context objects = context.view_layer.active_layer_collection.collection.objects if obj.name not in objects: - objects.link( - obj) + if link: + objects.link( + obj) + else: + objects.unlink( + obj) + + @classmethod + def link_obj_to_active_collection(cls, obj: 'bpy.types.Object'): + cls._link_obj(obj, True) + + @classmethod + def unlink_obj_to_active_collection(cls, obj: 'bpy.types.Object'): + cls._link_obj(obj, False) @classmethod def get_mesh_max_min_co(cls, obj: 'bpy.context.object') -> '[Vector,Vector]': -- 2.30.2 From 83cda544924070c0f0061f63ff81bc28975e0689 Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Wed, 26 Apr 2023 11:51:13 +0800 Subject: [PATCH 21/24] =?UTF-8?q?Refactor:=20changed=20string=20=20'?= =?UTF-8?q?=E3=80=81'=20->=20','=20'SimpleDeformHelper'=20->=20'Simple=20D?= =?UTF-8?q?eform=20Helper'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple_deform_helper/__init__.py | 2 +- simple_deform_helper/panel.py | 2 +- simple_deform_helper/preferences.py | 2 +- simple_deform_helper/translate.py | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/simple_deform_helper/__init__.py b/simple_deform_helper/__init__.py index ce0ca4cf9..7b3f9a9b8 100644 --- a/simple_deform_helper/__init__.py +++ b/simple_deform_helper/__init__.py @@ -10,7 +10,7 @@ from . import ( ) bl_info = { - "name": "SimpleDeformHelper", + "name": "Simple Deform Helper", "author": "AIGODLIKE Community(BlenderCN辣椒,小萌新)", "version": (0, 1, 1), "blender": (3, 0, 0), diff --git a/simple_deform_helper/panel.py b/simple_deform_helper/panel.py index 2d86f08c3..1f84be64f 100644 --- a/simple_deform_helper/panel.py +++ b/simple_deform_helper/panel.py @@ -10,7 +10,7 @@ class SimpleDeformHelperToolPanel(Panel, GizmoUtils): bl_region_type = 'UI' bl_category = 'Tool' bl_context = '.objectmode' - bl_label = 'SimpleDeformHelper' + bl_label = 'Simple Deform Helper' bl_idname = 'VIEW3D_PT_simple_deform_helper' bl_parent_id = 'VIEW3D_PT_tools_object_options' diff --git a/simple_deform_helper/preferences.py b/simple_deform_helper/preferences.py index 473566b50..1494ea936 100644 --- a/simple_deform_helper/preferences.py +++ b/simple_deform_helper/preferences.py @@ -65,7 +65,7 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, GizmoUtils): box = col.box() for text in ("You can press the following shortcut keys when dragging values", " Wheel: Switch Origin Ctrl Mode", - " X、Y、Z: Switch Modifier Deform Axis", + " X,Y,Z: Switch Modifier Deform Axis", " W: Switch Deform Wireframe Show", " A: Switch To Select Bend Axis Mode(deform_method=='BEND')",): box.label(text=self.translate_text(text)) diff --git a/simple_deform_helper/translate.py b/simple_deform_helper/translate.py index d2701d272..908c31909 100644 --- a/simple_deform_helper/translate.py +++ b/simple_deform_helper/translate.py @@ -17,8 +17,8 @@ translations_dict = { "拖动值时可以按以下快捷键", ("*", " Wheel: Switch Origin Ctrl Mode"): " 滚轮: 切换原点控制模式", - ("*", " X、Y、Z: Switch Modifier Deform Axis"): - " X、Y、Z: 切换修改器型变轴", + ("*", " X,Y,Z: Switch Modifier Deform Axis"): + " X,Y,Z: 切换修改器型变轴", ("*", " W: Switch Deform Wireframe Show"): " W: 切换形变线框显示", ("*", @@ -59,7 +59,7 @@ translations_dict = { ("*", "Upper limit"): "上限", ("*", "3D View -> Select an object and the active modifier is simple deformation"): "3D视图 -> 选择一个物体," "并且活动修改器为简易形修改器", - ("*", "3D View: SimpleDeformHelper"): "3D 视图: SimpleDeformHelper 简易形变助手", + ("*", "3D View: Simple Deform Helper"): "3D 视图: Simple Deform Helper 简易形变助手", ("*", ""): "", } } -- 2.30.2 From b471e648d520bafca5605e621917605ec5671ad5 Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Wed, 26 Apr 2023 15:45:24 +0800 Subject: [PATCH 22/24] Fixed: object hide not show Gizmo preferences add show_gizmo_property_location prop --- simple_deform_helper/draw.py | 8 +-- .../gizmo/angle_and_factor.py | 4 +- simple_deform_helper/gizmo/bend_axis.py | 2 +- .../gizmo/up_down_limits_point.py | 12 ++-- simple_deform_helper/panel.py | 63 +++++++++++-------- simple_deform_helper/preferences.py | 17 +++-- simple_deform_helper/translate.py | 4 +- simple_deform_helper/update.py | 20 +++--- simple_deform_helper/utils.py | 40 +++++++----- 9 files changed, 101 insertions(+), 69 deletions(-) diff --git a/simple_deform_helper/draw.py b/simple_deform_helper/draw.py index 62cc7a54b..f04160e82 100644 --- a/simple_deform_helper/draw.py +++ b/simple_deform_helper/draw.py @@ -5,7 +5,7 @@ import gpu from gpu_extras.batch import batch_for_shader from mathutils import Vector -from .update import change_active_object, simple_update +from .update import ChangeActiveObject, simple_update from .utils import GizmoUtils @@ -30,8 +30,8 @@ class DrawPublic(GizmoUtils): @property def draw_poll(self) -> bool: if simple_update.timers_update_poll(): - is_switch_obj = change_active_object.is_change_active_object(False) - if self.simple_deform_public_poll(bpy.context) and not is_switch_obj: + is_switch_obj = ChangeActiveObject.is_change_active_object(False) + if self.poll_simple_deform_public(bpy.context) and not is_switch_obj: return True return False @@ -137,7 +137,7 @@ class Draw3D(DrawHandler): self.draw_limits_bound_box() self.draw_text_handler() - elif self.simple_deform_show_bend_axis_witch_poll(context): + elif self.poll_simple_deform_show_bend_axis_witch(context): self.draw_bound_box() def draw_bound_box(self): diff --git a/simple_deform_helper/gizmo/angle_and_factor.py b/simple_deform_helper/gizmo/angle_and_factor.py index 56493fee0..c0c69ed3b 100644 --- a/simple_deform_helper/gizmo/angle_and_factor.py +++ b/simple_deform_helper/gizmo/angle_and_factor.py @@ -6,7 +6,7 @@ from bpy.types import ( GizmoGroup, ) -from ..update import change_active_modifier_parameter +from ..update import ChangeActiveModifierParameter from ..utils import GizmoUtils, GizmoGroupUtils @@ -115,7 +115,7 @@ class AngleGizmo(Gizmo, AngleUpdate): self.update_prop_value(event, tweak) self.update_deform_wireframe() self.update_header_text(context) - change_active_modifier_parameter.update_modifier_parameter() + ChangeActiveModifierParameter.update_modifier_parameter() self.tag_redraw(context) return self.event_handle(event) diff --git a/simple_deform_helper/gizmo/bend_axis.py b/simple_deform_helper/gizmo/bend_axis.py index a6ee0bd40..b9d7a5909 100644 --- a/simple_deform_helper/gizmo/bend_axis.py +++ b/simple_deform_helper/gizmo/bend_axis.py @@ -38,7 +38,7 @@ class BendAxiSwitchGizmoGroup(GizmoGroup, GizmoGroupUtils): @classmethod def poll(cls, context): - return cls.simple_deform_show_bend_axis_witch_poll(context) + return cls.poll_simple_deform_show_bend_axis_witch(context) def setup(self, context): _draw_type = 'SimpleDeform_Bend_Direction_' diff --git a/simple_deform_helper/gizmo/up_down_limits_point.py b/simple_deform_helper/gizmo/up_down_limits_point.py index c472bf7ef..eec8a813a 100644 --- a/simple_deform_helper/gizmo/up_down_limits_point.py +++ b/simple_deform_helper/gizmo/up_down_limits_point.py @@ -6,7 +6,7 @@ from bpy.types import Gizmo, GizmoGroup from bpy_extras import view3d_utils from mathutils import Vector -from ..update import change_active_modifier_parameter +from ..update import ChangeActiveModifierParameter from ..utils import GizmoUtils, GizmoGroupUtils @@ -202,6 +202,7 @@ class UpDownLimitsGizmo(Gizmo, GizmoUpdate): 'down_limits', self.int_value_down_limits) def modal(self, context, event, tweak): + st = time() self.clear_point_cache() if self.modifier_is_use_origin_axis: @@ -215,13 +216,15 @@ class UpDownLimitsGizmo(Gizmo, GizmoUpdate): self.set_prop_value(event) self.clear_point_cache() self.update_object_origin_matrix() - except Exception: - ... + except Exception as e: + print(e.args) + # ... # return {'FINISHED'} self.update_header_text(context) return_handle = self.event_handle(event) - change_active_modifier_parameter.update_modifier_parameter() + ChangeActiveModifierParameter.update_modifier_parameter() self.update_deform_wireframe() + print('run modal time:', time() - st) return return_handle @@ -231,6 +234,7 @@ class UpDownLimitsGizmoGroup(GizmoGroup, GizmoGroupUtils): @classmethod def poll(cls, context): + return cls.simple_deform_show_gizmo_poll(context) def setup(self, context): diff --git a/simple_deform_helper/panel.py b/simple_deform_helper/panel.py index 1f84be64f..1b4cb2dd7 100644 --- a/simple_deform_helper/panel.py +++ b/simple_deform_helper/panel.py @@ -16,38 +16,47 @@ class SimpleDeformHelperToolPanel(Panel, GizmoUtils): @classmethod def poll(cls, context): - return cls.simple_deform_public_poll(context) + show_in_tool_options = GizmoUtils.pref_().show_gizmo_property_location == 'ToolOptions' + return cls.poll_simple_deform_public(context) and show_in_tool_options def draw(self, context): + if self.poll(context): + self.draw_property(self.layout, context) + + @staticmethod + def draw_property(layout, context): cls = SimpleDeformHelperToolPanel - if cls.poll(context): - pref = cls.pref_() - layout = self.layout + pref = cls.pref_() - obj = context.object - mod = obj.modifiers.active - prop = obj.SimpleDeformGizmo_PropertyGroup + obj = context.object + mod = obj.modifiers.active + prop = obj.SimpleDeformGizmo_PropertyGroup - ctrl_obj = mod.origin.SimpleDeformGizmo_PropertyGroup if mod.origin else prop + ctrl_obj = mod.origin.SimpleDeformGizmo_PropertyGroup if mod.origin else prop - layout.prop(ctrl_obj, - 'origin_mode', - text='') + layout.prop(ctrl_obj, + 'origin_mode', + text='') + layout.prop(pref, + 'update_deform_wireframe', + icon='MOD_WIREFRAME', + text='') + layout.prop(pref, + 'show_set_axis_button', + icon='EMPTY_AXIS', + text='') + if pref.modifier_deform_method_is_bend: layout.prop(pref, - 'update_deform_wireframe', - icon='MOD_WIREFRAME', - text='') - layout.prop(pref, - 'show_set_axis_button', - icon='EMPTY_AXIS', - text='') - if pref.modifier_deform_method_is_bend: - layout.prop(pref, - 'display_bend_axis_switch_gizmo', - toggle=1) - layout.prop(pref, - 'modifiers_limits_tolerance', - text='') + 'display_bend_axis_switch_gizmo', + toggle=1) + layout.prop(pref, + 'modifiers_limits_tolerance', + text='') + + def draw_settings(self, context): + show_in_settings = GizmoUtils.pref_().show_gizmo_property_location == 'ToolSettings' + if show_in_settings: + SimpleDeformHelperToolPanel.draw_property(self.layout, context) class_list = ( @@ -59,9 +68,9 @@ register_class, unregister_class = bpy.utils.register_classes_factory(class_list def register(): register_class() - VIEW3D_HT_tool_header.append(SimpleDeformHelperToolPanel.draw) + VIEW3D_HT_tool_header.append(SimpleDeformHelperToolPanel.draw_settings) def unregister(): unregister_class() - VIEW3D_HT_tool_header.remove(SimpleDeformHelperToolPanel.draw) + VIEW3D_HT_tool_header.remove(SimpleDeformHelperToolPanel.draw_settings) diff --git a/simple_deform_helper/preferences.py b/simple_deform_helper/preferences.py index 1494ea936..5870ac675 100644 --- a/simple_deform_helper/preferences.py +++ b/simple_deform_helper/preferences.py @@ -60,6 +60,14 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, GizmoUtils): name='Show Set Axis Button', default=False) + show_gizmo_property_location: EnumProperty( + name='Gizmo Property Show Location', + items=[('ToolSettings', 'Tool Settings', ''), + ('ToolOptions', 'Tool Options', ''), + ], + default='ToolSettings' + ) + def draw(self, context): col = self.layout.column() box = col.box() @@ -73,13 +81,12 @@ class SimpleDeformGizmoAddonPreferences(AddonPreferences, GizmoUtils): col.prop(self, 'deform_wireframe_color') col.prop(self, 'bound_box_color') col.prop(self, 'limits_bound_box_color') - col.prop(self, 'modifiers_limits_tolerance') - col.prop(self, 'display_bend_axis_switch_gizmo') - col.prop(self, 'update_deform_wireframe', icon='MOD_WIREFRAME', ) - col.prop(self, 'show_set_axis_button', icon='EMPTY_AXIS', ) + + col.label(text='Gizmo Property Show Location') + col.prop(self, 'show_gizmo_property_location', expand=True) def draw_header_tool_settings(self, context): - if GizmoUtils.simple_deform_public_poll(context): + if GizmoUtils.poll_simple_deform_public(context): row = self.layout.row() obj = context.object mod = obj.modifiers.active diff --git a/simple_deform_helper/translate.py b/simple_deform_helper/translate.py index 908c31909..1ba80e92b 100644 --- a/simple_deform_helper/translate.py +++ b/simple_deform_helper/translate.py @@ -12,7 +12,7 @@ translations_dict = { "zh_CN": { ("上下文", "原文"): "翻译文字", ("*", "Show Toggle Bend Axis Gizmo"): "显示切换弯曲轴向Gizmo", - + ("*", "Gizmo Property Show Location"): "Gizmo属性显示位置", ("*", "You can press the following shortcut keys when dragging values"): "拖动值时可以按以下快捷键", ("*", " Wheel: Switch Origin Ctrl Mode"): @@ -25,7 +25,6 @@ translations_dict = { " A: Switch To Select Bend Axis Mode(deform_method=='BEND')"): " A: 切换到选择弯曲轴模式(形变方法='弯曲')", ("*", "Show Set Axis Button"): "显示设置轴向Gizmo", - ("*", "Follow Upper Limit(Red)"): "跟随上限(红色)", ("*", "Follow Lower Limit(Green)"): "跟随下限(绿色)", ("*", "Lower limit(Green)"): "下限(绿色)", @@ -60,6 +59,7 @@ translations_dict = { ("*", "3D View -> Select an object and the active modifier is simple deformation"): "3D视图 -> 选择一个物体," "并且活动修改器为简易形修改器", ("*", "3D View: Simple Deform Helper"): "3D 视图: Simple Deform Helper 简易形变助手", + ("*", "Simple Deform Helper"): "简易形变助手", ("*", ""): "", } } diff --git a/simple_deform_helper/update.py b/simple_deform_helper/update.py index d6fb78fca..19418878f 100644 --- a/simple_deform_helper/update.py +++ b/simple_deform_helper/update.py @@ -83,7 +83,7 @@ class simple_update(update_public, GizmoUpdate): @classmethod def timers_update_poll(cls): obj = bpy.context.object - if not cls.context_mode_is_object(): + if not cls.poll_context_mode_is_object(): ... elif not obj: ... @@ -94,7 +94,7 @@ class simple_update(update_public, GizmoUpdate): return False -class change_active_object(simple_update): +class ChangeActiveObject(simple_update): @classmethod @cache def update_poll(cls): @@ -118,7 +118,7 @@ class change_active_object(simple_update): return False -class change_active_simple_deform_modifier(simple_update): +class ChangeActiveSimpleDeformModifier(simple_update): @classmethod @cache @@ -134,7 +134,7 @@ class change_active_simple_deform_modifier(simple_update): def update(): cls.tmp_save_data['modifiers'] = modifiers - if change_active_object.update_poll(): + if ChangeActiveObject.update_poll(): update() elif 'modifiers' not in cls.tmp_save_data: update() @@ -150,7 +150,7 @@ class change_active_simple_deform_modifier(simple_update): 'modifiers': list(i.name for i in obj.modifiers)} -class change_active_modifier_parameter(simple_update): +class ChangeActiveModifierParameter(simple_update): key = 'active_modifier_parameter' @classmethod @@ -174,9 +174,9 @@ class change_active_modifier_parameter(simple_update): @classmethod def is_change_active_simple_parameter(cls): parameter = cls.get_modifiers_parameter(gizmo.modifier) - if change_active_object.update_poll(): + if ChangeActiveObject.update_poll(): cls.update_modifier_parameter(parameter) - elif change_active_simple_deform_modifier.update_poll(): + elif ChangeActiveSimpleDeformModifier.update_poll(): cls.update_modifier_parameter(parameter) elif cls.key not in cls.tmp_save_data: cls.update_modifier_parameter(parameter) @@ -192,9 +192,9 @@ def register(): def p(): gizmo.update_multiple_modifiers_data() - change_active_object.append(p) - change_active_modifier_parameter.append(p) - change_active_simple_deform_modifier.append(p) + ChangeActiveObject.append(p) + ChangeActiveModifierParameter.append(p) + ChangeActiveSimpleDeformModifier.append(p) def unregister(): diff --git a/simple_deform_helper/utils.py b/simple_deform_helper/utils.py index feb23a2e9..0b64a115c 100644 --- a/simple_deform_helper/utils.py +++ b/simple_deform_helper/utils.py @@ -107,11 +107,11 @@ class PublicClass(PublicData): class PublicPoll(PublicClass): @classmethod - def context_mode_is_object(cls) -> bool: + def poll_context_mode_is_object(cls) -> bool: return bpy.context.mode == 'OBJECT' @classmethod - def simple_deform_modifier_is_simple(cls, context): + def poll_modifier_type_is_simple(cls, context): """ Active Object in ('MESH', 'LATTICE') Active Modifier Type Is 'SIMPLE_DEFORM' and show_viewport @@ -128,13 +128,23 @@ class PublicPoll(PublicClass): available_obj_type = cls.obj_type_is_mesh_or_lattice(obj) is_available_obj = cls.mod_is_simple_deform_type(mod) and available_obj_type - is_obj_mode = cls.context_mode_is_object() + is_obj_mode = cls.poll_context_mode_is_object() show_mod = mod.show_viewport not_is_self_mesh = obj.name != cls.G_NAME return is_available_obj and is_obj_mode and show_mod and not_is_self_mesh @classmethod - def simple_deform_public_poll(cls, context: 'bpy.types.context') -> bool: + def poll_object_is_show(cls, context: 'bpy.types.Context') -> bool: + """ + hava active object and object is show + :param context: + :return: + """ + obj = context.object + return obj and (not obj.hide_viewport) and (not obj.hide_get()) + + @classmethod + def poll_simple_deform_public(cls, context: 'bpy.types.context') -> bool: """Public poll In 3D View return True @@ -143,32 +153,33 @@ class PublicPoll(PublicClass): if not space: return False show_gizmo = space.show_gizmo if space.type == 'VIEW_3D' else True - obj = cls.simple_deform_modifier_is_simple(context) - return obj and show_gizmo + is_simple = cls.poll_modifier_type_is_simple(context) + is_show = cls.poll_object_is_show(context) + return is_simple and show_gizmo and is_show @classmethod - def _simple_deform_modifier_is_bend_poll(cls, context): + def poll_simple_deform_modifier_is_bend(cls, context): """ Public poll active modifier deform_method =='BEND' """ - simple = cls.simple_deform_public_poll(context) + simple = cls.poll_simple_deform_public(context) is_bend = simple and (context.object.modifiers.active.deform_method == 'BEND') return simple and is_bend @classmethod - def simple_deform_show_bend_axis_witch_poll(cls, context): + def poll_simple_deform_show_bend_axis_witch(cls, context): """ Show D """ switch_axis = cls.pref_().display_bend_axis_switch_gizmo - bend = cls._simple_deform_modifier_is_bend_poll(context) + bend = cls.poll_simple_deform_modifier_is_bend(context) return switch_axis and bend @classmethod def simple_deform_show_gizmo_poll(cls, context): - poll = cls.simple_deform_public_poll(context) - not_switch = (not cls.simple_deform_show_bend_axis_witch_poll(context)) + poll = cls.poll_simple_deform_public(context) + not_switch = (not cls.poll_simple_deform_show_bend_axis_witch(context)) return poll and not_switch @@ -272,6 +283,8 @@ class GizmoClassMethod(PublicTranslate): list_vertices = np.zeros(ver_len * 3, dtype=np.float32) obj.data.points.foreach_get('co_deform', list_vertices) list_vertices = list_vertices.reshape(ver_len, 3) + else: + list_vertices = np.zeros((3, 3), dtype=np.float32) return Vector(list_vertices.min(axis=0)).freeze(), Vector(list_vertices.max(axis=0)).freeze() @classmethod @@ -287,7 +300,6 @@ class GizmoClassMethod(PublicTranslate): elif f == 1: i[1] -= 0.1 j[1] += 0.1 - else: i[2] -= 0.1 j[2] += 0.1 @@ -659,7 +671,7 @@ class GizmoUpdate(PublicProperty): def update_multiple_modifiers_data(self): obj = self.obj context = bpy.context - if not self.obj_type_is_mesh_or_lattice(obj) or not self.simple_deform_modifier_is_simple(context): + if not self.obj_type_is_mesh_or_lattice(obj) or not self.poll_modifier_type_is_simple(context): return self.clear_point_cache() self.clear_modifiers_data() -- 2.30.2 From 79308887c9e12b4e93691d749fc23a7653551a12 Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Wed, 26 Apr 2023 17:42:14 +0800 Subject: [PATCH 23/24] Fixed: show obj not property SimpleDeformGizmo_PropertyGroup --- simple_deform_helper/panel.py | 47 ++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/simple_deform_helper/panel.py b/simple_deform_helper/panel.py index 1b4cb2dd7..e45e244c4 100644 --- a/simple_deform_helper/panel.py +++ b/simple_deform_helper/panel.py @@ -25,33 +25,34 @@ class SimpleDeformHelperToolPanel(Panel, GizmoUtils): @staticmethod def draw_property(layout, context): - cls = SimpleDeformHelperToolPanel - pref = cls.pref_() + if GizmoUtils.poll_simple_deform_public(context): + cls = SimpleDeformHelperToolPanel + pref = cls.pref_() - obj = context.object - mod = obj.modifiers.active - prop = obj.SimpleDeformGizmo_PropertyGroup + obj = context.object + mod = obj.modifiers.active + prop = obj.SimpleDeformGizmo_PropertyGroup - ctrl_obj = mod.origin.SimpleDeformGizmo_PropertyGroup if mod.origin else prop + ctrl_obj = mod.origin.SimpleDeformGizmo_PropertyGroup if mod.origin else prop - layout.prop(ctrl_obj, - 'origin_mode', - text='') - layout.prop(pref, - 'update_deform_wireframe', - icon='MOD_WIREFRAME', - text='') - layout.prop(pref, - 'show_set_axis_button', - icon='EMPTY_AXIS', - text='') - if pref.modifier_deform_method_is_bend: + layout.prop(ctrl_obj, + 'origin_mode', + text='') layout.prop(pref, - 'display_bend_axis_switch_gizmo', - toggle=1) - layout.prop(pref, - 'modifiers_limits_tolerance', - text='') + 'update_deform_wireframe', + icon='MOD_WIREFRAME', + text='') + layout.prop(pref, + 'show_set_axis_button', + icon='EMPTY_AXIS', + text='') + if pref.modifier_deform_method_is_bend: + layout.prop(pref, + 'display_bend_axis_switch_gizmo', + toggle=1) + layout.prop(pref, + 'modifiers_limits_tolerance', + text='') def draw_settings(self, context): show_in_settings = GizmoUtils.pref_().show_gizmo_property_location == 'ToolSettings' -- 2.30.2 From f3b79daaca4ac4065a5c67923800ba6bf47084fe Mon Sep 17 00:00:00 2001 From: EMM <3209970865@qq.com> Date: Wed, 31 May 2023 10:09:22 +0800 Subject: [PATCH 24/24] Refactor: update version --- simple_deform_helper/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simple_deform_helper/__init__.py b/simple_deform_helper/__init__.py index 7b3f9a9b8..58b44ad5c 100644 --- a/simple_deform_helper/__init__.py +++ b/simple_deform_helper/__init__.py @@ -12,7 +12,7 @@ from . import ( bl_info = { "name": "Simple Deform Helper", "author": "AIGODLIKE Community(BlenderCN辣椒,小萌新)", - "version": (0, 1, 1), + "version": (0, 2, 0), "blender": (3, 0, 0), "location": "3D View -> Select an object and the active modifier is simple deformation", "description": "Simple Deform visualization adjustment tool", -- 2.30.2