Files
pylib/docs/build/html/_modules/pylib/data_step.html
Daniel Weschke 4fc4903dc2 change data, mathematics, function, geometry and geometry_plot_pylab. add data_step, data_step_std and helper. add an example and more documentation.
inside the data module rename read to read_columns add add new read function to read the whole file as string. add print_list function to print one element per line. add unique_list and unique_list_hashable to reduce the list into a unique list with same order. add find_last, str_between, str_to_list functions.

inside the mathematics module for vector add normalized creating a new object (normalize will change the object), isclose and iscloseto, change ang to round internal number. for matrix improve slicing and add transposed creating a new object (transpose will change object).

inside the function module add b_spline_basis, b_spline_curve_with_knots and b_spline_knots functions. add sample_hal_open and sample_half_open_seq. add circle and ellipse.

inside the geometry module change CS init from using lists to Directions and add new constructor CS.init_xzy using lists. rename Wireframe to Polyline. add classes B_spline_curve_with_knots, Ellipse, ArcCircle, ArcEllipse, ArcBSplineCurveWithKnots. add function sample_half_open to create a list of Points.

inside the geometry_plot_pylab module change the help text.

add step_and data data_step_std module to read a step file to list and draw the content.

add helper module with context manager and decorator timeit to meassure the time for a section or function.

add example for b_spline function.
2020-01-08 21:59:53 +01:00

785 lines
111 KiB
HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.data_step &#8212; pylib 2019.12.21 documentation</title>
<link rel="stylesheet" href="../../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for pylib.data_step</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;STEP reader.</span>
<span class="sd">:Date: 2020-01-03</span>
<span class="sd">.. module:: data_step</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: STEP reader.</span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">.data</span> <span class="kn">import</span> <span class="n">read</span><span class="p">,</span> <span class="n">find_last</span><span class="p">,</span> <span class="n">str_between</span><span class="p">,</span> <span class="n">str_to_list</span>
<span class="kn">from</span> <span class="nn">.data_step_std</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">CARTESIAN_POINT</span><span class="p">,</span> <span class="n">VERTEX_POINT</span><span class="p">,</span> <span class="n">DIRECTION</span><span class="p">,</span> <span class="n">VECTOR</span><span class="p">,</span> <span class="n">LINE</span><span class="p">,</span>
<span class="n">AXIS2_PLACEMENT_2D</span><span class="p">,</span> <span class="n">AXIS2_PLACEMENT_3D</span><span class="p">,</span> <span class="n">CIRCLE</span><span class="p">,</span> <span class="n">SURFACE_CURVE</span><span class="p">,</span>
<span class="n">SEAM_CURVE</span><span class="p">,</span> <span class="n">EDGE_CURVE</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">,</span>
<span class="n">ORIENTED_EDGE</span><span class="p">,</span> <span class="n">EDGE_LOOP</span><span class="p">,</span> <span class="n">ELLIPSE</span>
<span class="p">)</span>
<span class="kn">from</span> <span class="nn">.mathematics</span> <span class="kn">import</span> <span class="n">vector</span>
<span class="kn">from</span> <span class="nn">.geometry</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">World</span><span class="p">,</span> <span class="n">Line</span><span class="p">,</span> <span class="n">Point</span><span class="p">,</span> <span class="n">Circle</span><span class="p">,</span> <span class="n">CS</span><span class="p">,</span> <span class="n">ArcCircle</span><span class="p">,</span> <span class="n">ArcEllipse</span><span class="p">,</span> <span class="n">Direction</span><span class="p">,</span>
<span class="n">Polyline</span><span class="p">,</span> <span class="n">Ellipse</span><span class="p">,</span> <span class="n">B_spline_curve_with_knots</span><span class="p">,</span> <span class="n">ArcBSplineCurveWithKnots</span>
<span class="p">)</span>
<div class="viewcode-block" id="step"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.step">[docs]</a><span class="k">class</span> <span class="nc">step</span><span class="p">:</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;STEP reader class.</span>
<span class="sd"> 1st read a STEP file.</span>
<span class="sd"> 2nd convert header and data section string to list of commands.</span>
<span class="sd"> The STEP file string can have commands distributed over several</span>
<span class="sd"> lines, the commands are seperated by ``;\n``. This class un-wraps</span>
<span class="sd"> each command into one line (remove ``\n``) and removes empty lines.</span>
<span class="sd"> :Example:</span>
<span class="sd"> ::</span>
<span class="sd"> header part of a step file (between HEADER; and ENDSEC;):</span>
<span class="sd"> FILE_DESCRIPTION((&#39;Open CASCADE Model&#39;),&#39;2;1&#39;);</span>
<span class="sd"> FILE_NAME(&#39;Open CASCADE Shape Model&#39;,&#39;2019-10-14T14:32:20&#39;,(&#39;Author&#39;),(</span>
<span class="sd"> &#39;Open CASCADE&#39;),&#39;Open CASCADE STEP processor 7.1&#39;,&#39;Open CASCADE 7.1&#39;</span>
<span class="sd"> ,&#39;Unknown&#39;);</span>
<span class="sd"> FILE_SCHEMA((&#39;AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }&#39;));</span>
<span class="sd"> will result in (but as a list):</span>
<span class="sd"> FILE_DESCRIPTION((&#39;Open CASCADE Model&#39;),&#39;2;1&#39;)</span>
<span class="sd"> FILE_NAME(&#39;Open CASCADE Shape Model&#39;,&#39;2019-10-14T14:32:20&#39;,(&#39;Author&#39;),(&#39;Open CASCADE&#39;),&#39;Open CASCADE STEP processor 7.1&#39;,&#39;Open CASCADE 7.1&#39;,&#39;Unknown&#39;)</span>
<span class="sd"> FILE_SCHEMA((&#39;AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }&#39;))</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_name</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">file_str</span> <span class="o">=</span> <span class="n">read</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span>
<span class="n">step_str</span> <span class="o">=</span> <span class="n">str_between</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file_str</span><span class="p">,</span> <span class="s1">&#39;ISO-10303-21;&#39;</span><span class="p">,</span>
<span class="s1">&#39;END-ISO-10303-21;&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">step_str</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;File is not a step file&#39;</span><span class="p">)</span>
<span class="n">header_str</span> <span class="o">=</span> <span class="n">str_between</span><span class="p">(</span><span class="n">step_str</span><span class="p">,</span> <span class="s1">&#39;HEADER;&#39;</span><span class="p">,</span> <span class="s1">&#39;ENDSEC;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">str_to_list</span><span class="p">(</span><span class="n">string</span><span class="o">=</span><span class="n">header_str</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="s1">&#39;;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="n">newline_replacement</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="n">data_str</span> <span class="o">=</span> <span class="n">str_between</span><span class="p">(</span><span class="n">step_str</span><span class="p">,</span> <span class="s1">&#39;DATA;&#39;</span><span class="p">,</span> <span class="s1">&#39;ENDSEC;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">str_to_list</span><span class="p">(</span><span class="n">string</span><span class="o">=</span><span class="n">data_str</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="s1">&#39;;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="n">newline_replacement</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span></div>
<div class="viewcode-block" id="str_to_cmd_args"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.str_to_cmd_args">[docs]</a><span class="k">def</span> <span class="nf">str_to_cmd_args</span><span class="p">(</span><span class="n">cmd_str</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Using negative lookahead to match all the commas which are not</span>
<span class="sd"> inside a parenthesis and then split the string at the commas.</span>
<span class="sd"> :Example:</span>
<span class="sd"> ::</span>
<span class="sd"> CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000))</span>
<span class="sd"> will become</span>
<span class="sd"> command = &#39;CARTESIAN_POINT&#39;</span>
<span class="sd"> arguments = [&#39;&#39;, &#39;(0.E+000,0.E+000,0.E+000)&#39;]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="n">command</span> <span class="o">=</span> <span class="n">cmd_str</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">cmd_str</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">&#39;(&#39;</span><span class="p">)]</span>
<span class="n">inside_parenthesis</span> <span class="o">=</span> <span class="n">cmd_str</span><span class="p">[(</span><span class="n">cmd_str</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">&#39;(&#39;</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span><span class="n">find_last</span><span class="p">(</span><span class="n">cmd_str</span><span class="p">,</span> <span class="s1">&#39;)&#39;</span><span class="p">)]</span>
<span class="n">arguments</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;,\s*(?![^()]*\))&#39;</span><span class="p">,</span> <span class="n">inside_parenthesis</span><span class="p">)</span>
<span class="c1"># arguments = [i.strip() for i in inside_parenthesis.split(&#39;,&#39;)] # does not work for arguments with commas inside the parenthsis</span>
<span class="k">return</span> <span class="n">command</span><span class="p">,</span> <span class="n">arguments</span></div>
<div class="viewcode-block" id="data_cmds_to_data_dict"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_cmds_to_data_dict">[docs]</a><span class="k">def</span> <span class="nf">data_cmds_to_data_dict</span><span class="p">(</span><span class="n">data_cmds</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Create dict with step objects</span>
<span class="sd"> 1st it creats keys equal to the number id string and values with</span>
<span class="sd"> the command string.</span>
<span class="sd"> 2nd it creats keys for different step object types to dict all</span>
<span class="sd"> commands as new created objects of that type.</span>
<span class="sd"> :Example:</span>
<span class="sd"> ::</span>
<span class="sd"> from:</span>
<span class="sd"> [&quot;#12 = CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000))&quot;,</span>
<span class="sd"> &quot;#22 = VERTEX_POINT(&#39;&#39;,#23)&quot;]</span>
<span class="sd"> to:</span>
<span class="sd"> {&#39;#12&#39;: &#39;CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000))&#39;,</span>
<span class="sd"> &#39;#22&#39;: &#39;VERTEX_POINT(&#39;&#39;,#23)&#39;}</span>
<span class="sd"> additional</span>
<span class="sd"> {</span>
<span class="sd"> &#39;cartesian_points&#39;: {</span>
<span class="sd"> &#39;#12&#39;: pointer_to_new_created_point_object,</span>
<span class="sd"> ...</span>
<span class="sd"> },</span>
<span class="sd"> &#39;vertex_points&#39;: {</span>
<span class="sd"> &#39;#22&#39;: pointer_to_new_created_vertex_object,</span>
<span class="sd"> ...</span>
<span class="sd"> },</span>
<span class="sd"> ...</span>
<span class="sd"> }</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data_dict</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vertex_point&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vector&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;line&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;circle&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;ellipse&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_2d&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_3d&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;surface_curve&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;seam_curve&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;b_spline_curve_with_knots&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;oriented_edge&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_loop&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">processed_cmds</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">ignored_cmds</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">data_cmd</span> <span class="ow">in</span> <span class="n">data_cmds</span><span class="p">:</span>
<span class="c1">#print(data_cmd)</span>
<span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="n">data_cmd</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;=&#39;</span><span class="p">)</span>
<span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span> <span class="n">value</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">str_to_cmd_args</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">arguments</span><span class="p">)</span>
<span class="c1"># command can be empty (empty string: &#39;&#39;)</span>
<span class="c1"># #2052 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) )</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># do if command.lower() is in data_dict else do nothing</span>
<span class="n">data_dict</span><span class="p">[</span><span class="n">command</span><span class="o">.</span><span class="n">lower</span><span class="p">()][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">processed_cmds</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">ignored_cmds</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;processed_cmds&#39;</span><span class="p">,</span> <span class="n">processed_cmds</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;ignored_cmds&#39;</span><span class="p">,</span> <span class="n">ignored_cmds</span><span class="p">)</span>
<span class="c1">#</span>
<span class="c1"># Order is important!</span>
<span class="c1">#</span>
<span class="c1">#</span>
<span class="c1"># POINT objects</span>
<span class="c1">#</span>
<span class="c1"># create point objects, these will be referenced by vertex_points</span>
<span class="c1"># #12 = CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000));</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">CARTESIAN_POINT</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="c1"># tuple of floats # TODO: not use eval!</span>
<span class="c1"># vertex_points references to cartesian_points</span>
<span class="c1"># #22 = VERTEX_POINT(&#39;&#39;,#23);</span>
<span class="c1"># #23 = CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000));</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vertex_point&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vertex_point&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">VERTEX_POINT</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]])</span>
<span class="c1">#</span>
<span class="c1"># EDGE objects</span>
<span class="c1">#</span>
<span class="c1"># DIRECTIONs</span>
<span class="c1"># #30 = DIRECTION(&#39;&#39;,(0.E+000,0.E+000,1.));</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">DIRECTION</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="c1"># tuple of floats # TODO: not use eval!</span>
<span class="c1"># VECTORs references to DIRECTIONs</span>
<span class="c1"># #29 = VECTOR(&#39;&#39;,#30,1.);</span>
<span class="c1"># #30 = DIRECTION(&#39;&#39;,(0.E+000,0.E+000,1.));</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vector&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vector&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">VECTOR</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> <span class="c1"># TODO: not use eval!</span>
<span class="c1"># LINEs references to cartesian_point and vector</span>
<span class="c1"># #27 = LINE(&#39;&#39;,#28,#29);</span>
<span class="c1"># #28 = CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000));</span>
<span class="c1"># #29 = VECTOR(&#39;&#39;,#30,1.);</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;line&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;line&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">LINE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vector&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]])</span>
<span class="c1"># AXIS2_PLACEMENT_2Ds references to location (CARTESIAN_POINT) and ref_direction (DIRECTION)</span>
<span class="c1"># #50 = AXIS2_PLACEMENT_2D(&#39;&#39;,#51,#52);</span>
<span class="c1"># #51 = CARTESIAN_POINT(&#39;&#39;,(0.,0.));</span>
<span class="c1"># #52 = DIRECTION(&#39;&#39;,(1.,0.));</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_2d&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_2d&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">AXIS2_PLACEMENT_2D</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]])</span>
<span class="c1"># AXIS2_PLACEMENT_3Ds references to location (CARTESIAN_POINT), axis (DIRECTION) and ref_direction (DIRECTION)</span>
<span class="c1"># #26 = AXIS2_PLACEMENT_3D(&#39;&#39;,#27,#28,#29);</span>
<span class="c1"># #27 = CARTESIAN_POINT(&#39;&#39;,(0.,0.,10.));</span>
<span class="c1"># #28 = DIRECTION(&#39;&#39;,(0.,0.,1.));</span>
<span class="c1"># #29 = DIRECTION(&#39;&#39;,(1.,0.,-0.));</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_3d&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_3d&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">AXIS2_PLACEMENT_3D</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]])</span>
<span class="c1"># CIRCLE references to AXIS2_PLACEMENT_3D and radius</span>
<span class="c1"># #25 = CIRCLE(&#39;&#39;,#26,5.);</span>
<span class="c1"># #26 = AXIS2_PLACEMENT_3D(&#39;&#39;,#27,#28,#29);</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;circle&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">axis2_placement_cmd</span><span class="p">,</span> <span class="n">axis2_placement_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">axis2_placement_cmd</span> <span class="o">==</span> <span class="s1">&#39;AXIS2_PLACEMENT_3D&#39;</span><span class="p">:</span>
<span class="n">axis2_placement</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_3d&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">axis2_placement_cmd</span> <span class="o">==</span> <span class="s1">&#39;AXIS2_PLACEMENT_2D&#39;</span><span class="p">:</span>
<span class="n">axis2_placement</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_2d&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;circle&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">CIRCLE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">axis2_placement</span><span class="p">,</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> <span class="c1"># TODO: not use eval!</span>
<span class="c1"># ELLIPSE references to AXIS2_PLACEMENT_3D and both semi axes</span>
<span class="c1"># #1049 = ELLIPSE(&#39;&#39;,#1050,176.13914953808,100.);</span>
<span class="c1"># #1050 = AXIS2_PLACEMENT_3D(&#39;&#39;,#1051,#1052,#1053);</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;ellipse&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">axis2_placement_cmd</span><span class="p">,</span> <span class="n">axis2_placement_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">axis2_placement_cmd</span> <span class="o">==</span> <span class="s1">&#39;AXIS2_PLACEMENT_3D&#39;</span><span class="p">:</span>
<span class="n">axis2_placement</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_3d&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">axis2_placement_cmd</span> <span class="o">==</span> <span class="s1">&#39;AXIS2_PLACEMENT_2D&#39;</span><span class="p">:</span>
<span class="n">axis2_placement</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_2d&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;ellipse&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">ELLIPSE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">axis2_placement</span><span class="p">,</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="c1"># TODO: not use eval!</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]))</span> <span class="c1"># TODO: not use eval!</span>
<span class="c1"># B_SPLINE_CURVE_WITH_KNOTS references to list of CARTESIAN_POINTs</span>
<span class="c1"># #2195=B_SPLINE_CURVE_WITH_KNOTS(&#39;&#39;,3,(#43614,#43615,#43616,#43617,#43618,</span>
<span class="c1"># #43619,#43620,#43621,#43622,#43623,#43624,#43625,#43626,#43627,#43628,#43629,</span>
<span class="c1"># #43630,#43631,#43632,#43633),.UNSPECIFIED.,.F.,.F.,(4,2,2,2,2,2,2,2,2,4),</span>
<span class="c1"># (-0.540362356556626,-0.521155983847334,-0.45632355837375,-0.391167894616668,</span>
<span class="c1"># -0.32606569132423,-0.260898117378603,-0.19567917747905,-0.130414239126491,</span>
<span class="c1"># -0.0649893846296135,-0.0228378692889149),.UNSPECIFIED.);</span>
<span class="c1"># #43614=CARTESIAN_POINT(&#39;Ctrl Pts&#39;,(-0.852590969048745,68.3094592905054,1.00613961606655E-15));</span>
<span class="c1"># #43615=CARTESIAN_POINT(&#39;Ctrl Pts&#39;,(-0.879956199816603,68.2515804555212,8.67420237522527E-16));</span>
<span class="c1"># ...</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;b_spline_curve_with_knots&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;b_spline_curve_with_knots&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="nb">int</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span>
<span class="nb">tuple</span><span class="p">(</span><span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">][</span><span class="n">i</span><span class="p">]</span> <span class="k">for</span>
<span class="n">i</span> <span class="ow">in</span> <span class="n">str_to_cmd_args</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">])[</span><span class="mi">1</span><span class="p">]),</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">5</span><span class="p">],</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">6</span><span class="p">]),</span> <span class="c1"># TODO: not use eval!</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">7</span><span class="p">]),</span> <span class="c1"># TODO: not use eval!</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">8</span><span class="p">]</span>
<span class="p">)</span>
<span class="c1"># SURFACE_CURVE references to a LINE and a list of (two) PCURVEs and a ?</span>
<span class="c1"># #26 = SURFACE_CURVE(&#39;&#39;,#27,(#31,#43),.PCURVE_S1.);</span>
<span class="c1"># #27 = LINE(&#39;&#39;,#28,#29);</span>
<span class="c1"># #31 = PCURVE(&#39;&#39;,#32,#37);</span>
<span class="c1"># #32 = PLANE(&#39;&#39;,#33);</span>
<span class="c1"># #33 = AXIS2_PLACEMENT_3D(&#39;&#39;,#34,#35,#36);</span>
<span class="c1"># #37 = DEFINITIONAL_REPRESENTATION(&#39;&#39;,(#38),#42);</span>
<span class="c1"># #38 = LINE(&#39;&#39;,#39,#40);</span>
<span class="c1"># #42 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) );</span>
<span class="c1"># #43 = PCURVE(&#39;&#39;,#44,#49);</span>
<span class="c1"># #44 = PLANE(&#39;&#39;,#45);</span>
<span class="c1"># #45 = AXIS2_PLACEMENT_3D(&#39;&#39;,#46,#47,#48);</span>
<span class="c1"># #49 = DEFINITIONAL_REPRESENTATION(&#39;&#39;,(#50),#54);</span>
<span class="c1"># #50 = LINE(&#39;&#39;,#51,#52);</span>
<span class="c1"># #54 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) );</span>
<span class="c1"># #24 = SURFACE_CURVE(&#39;&#39;,#25,(#30,#42),.PCURVE_S1.);</span>
<span class="c1"># #25 = CIRCLE(&#39;&#39;,#26,5.);</span>
<span class="c1"># #30 = PCURVE(&#39;&#39;,#31,#36);</span>
<span class="c1"># #31 = CONICAL_SURFACE(&#39;&#39;,#32,10.,0.463647609001);</span>
<span class="c1"># #32 = AXIS2_PLACEMENT_3D(&#39;&#39;,#33,#34,#35);</span>
<span class="c1"># #36 = DEFINITIONAL_REPRESENTATION(&#39;&#39;,(#37),#41);</span>
<span class="c1"># #37 = LINE(&#39;&#39;,#38,#39);</span>
<span class="c1"># #41 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) );</span>
<span class="c1"># #42 = PCURVE(&#39;&#39;,#43,#48);</span>
<span class="c1"># #43 = PLANE(&#39;&#39;,#44);</span>
<span class="c1"># #44 = AXIS2_PLACEMENT_3D(&#39;&#39;,#45,#46,#47);</span>
<span class="c1"># #48 = DEFINITIONAL_REPRESENTATION(&#39;&#39;,(#49),#53);</span>
<span class="c1"># #49 = CIRCLE(&#39;&#39;,#50,5.);</span>
<span class="c1"># #50 = AXIS2_PLACEMENT_2D(&#39;&#39;,#51,#52);</span>
<span class="c1"># #51 = CARTESIAN_POINT(&#39;&#39;,(0.,0.));</span>
<span class="c1"># #52 = DIRECTION(&#39;&#39;,(1.,0.));</span>
<span class="c1"># #53 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) );</span>
<span class="c1"># #243 = SURFACE_CURVE(&#39;&#39;,#244,(#319,#415),.PCURVE_S1.);</span>
<span class="c1"># #244 = B_SPLINE_CURVE_WITH_KNOTS();</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;surface_curve&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">curve_3d_cmd</span><span class="p">,</span> <span class="n">curve3d_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">&#39;LINE&#39;</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;line&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">&#39;CIRCLE&#39;</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;circle&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">&#39;ELLIPSE&#39;</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;ellipse&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">&#39;B_SPLINE_CURVE_WITH_KNOTS&#39;</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;b_spline_curve_with_knots&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;surface_curve&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">&#39;unknown curve_3d&#39;</span><span class="p">,</span> <span class="n">curve_3d</span><span class="p">)</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;surface_curve&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">SURFACE_CURVE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">curve_3d</span><span class="p">,</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
<span class="c1"># SEAM_CURVE references to a Line and a list of (two) PCURVEs and a ?</span>
<span class="c1"># #58 = SEAM_CURVE(&#39;&#39;,#59,(#63,#70),.PCURVE_S1.);</span>
<span class="c1"># #59 = LINE(&#39;&#39;,#60,#61);</span>
<span class="c1"># #63 = PCURVE(&#39;&#39;,#31,#64);</span>
<span class="c1"># #31 = CONICAL_SURFACE(&#39;&#39;,#32,10.,0.463647609001);</span>
<span class="c1"># #32 = AXIS2_PLACEMENT_3D(&#39;&#39;,#33,#34,#35);</span>
<span class="c1"># #33 = CARTESIAN_POINT(&#39;&#39;,(0.,0.,0.));</span>
<span class="c1"># #34 = DIRECTION(&#39;&#39;,(-0.,-0.,-1.));</span>
<span class="c1"># #35 = DIRECTION(&#39;&#39;,(1.,0.,-0.));</span>
<span class="c1"># #64 = DEFINITIONAL_REPRESENTATION(&#39;&#39;,(#65),#69);</span>
<span class="c1"># #65 = LINE(&#39;&#39;,#66,#67);</span>
<span class="c1"># #69 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) );</span>
<span class="c1"># #70 = PCURVE(&#39;&#39;,#31,#71);</span>
<span class="c1"># #31 = CONICAL_SURFACE(&#39;&#39;,#32,10.,0.463647609001);</span>
<span class="c1"># #32 = AXIS2_PLACEMENT_3D(&#39;&#39;,#33,#34,#35);</span>
<span class="c1"># #33 = CARTESIAN_POINT(&#39;&#39;,(0.,0.,0.));</span>
<span class="c1"># #34 = DIRECTION(&#39;&#39;,(-0.,-0.,-1.));</span>
<span class="c1"># #35 = DIRECTION(&#39;&#39;,(1.,0.,-0.));</span>
<span class="c1"># #71 = DEFINITIONAL_REPRESENTATION(&#39;&#39;,(#72),#76);</span>
<span class="c1"># #72 = LINE(&#39;&#39;,#73,#74);</span>
<span class="c1"># #76 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) );</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;seam_curve&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">curve_3d_cmd</span><span class="p">,</span> <span class="n">curve3d_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">&#39;LINE&#39;</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;line&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">&#39;CIRCLE&#39;</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;circle&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;seam_curve&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">&#39;unknown curve_3d&#39;</span><span class="p">,</span> <span class="n">curve_3d</span><span class="p">)</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;seam_curve&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">SEAM_CURVE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">curve_3d</span><span class="p">,</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
<span class="c1"># EDGE_CURVE references to two VERTEX_POINTs, a CURVE and a BOOLEAN</span>
<span class="c1"># #21 = EDGE_CURVE(&#39;&#39;,#22,#24,#26,.T.);</span>
<span class="c1"># #22 = VERTEX_POINT(&#39;&#39;,#23);</span>
<span class="c1"># #24 = VERTEX_POINT(&#39;&#39;,#25);</span>
<span class="c1"># #26 = SURFACE_CURVE(&#39;&#39;,#27,(#31,#43),.PCURVE_S1.);</span>
<span class="c1"># #55 = EDGE_CURVE(&#39;&#39;,#56,#22,#58,.T.);</span>
<span class="c1"># #56 = VERTEX_POINT(&#39;&#39;,#57);</span>
<span class="c1"># #22 = VERTEX_POINT(&#39;&#39;,#23);</span>
<span class="c1"># #58 = SEAM_CURVE(&#39;&#39;,#59,(#63,#70),.PCURVE_S1.);</span>
<span class="c1"># #21187=EDGE_CURVE(&#39;&#39;,#15685,#15685,#12509,.T.);</span>
<span class="c1"># #15685=VERTEX_POINT(&#39;&#39;,#230114);</span>
<span class="c1"># #15685=VERTEX_POINT(&#39;&#39;,#230114);</span>
<span class="c1"># #12509=CIRCLE(&#39;&#39;,#37712,11.1464466094067);</span>
<span class="c1"># #15689=EDGE_CURVE(&#39;&#39;,#12514,#12512,#2195,.T.);</span>
<span class="c1"># #12514=VERTEX_POINT(&#39;&#39;,#43613);</span>
<span class="c1"># #12512=VERTEX_POINT(&#39;&#39;,#43610);</span>
<span class="c1"># #2195=B_SPLINE_CURVE_WITH_KNOTS(...)</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">geometry_cmd</span><span class="p">,</span> <span class="n">geometry_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">&#39;SURFACE_CURVE&#39;</span><span class="p">:</span>
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;surface_curve&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">&#39;SEAM_CURVE&#39;</span><span class="p">:</span>
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;seam_curve&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">&#39;LINE&#39;</span><span class="p">:</span>
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;line&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">&#39;CIRCLE&#39;</span><span class="p">:</span>
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;circle&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">&#39;B_SPLINE_CURVE_WITH_KNOTS&#39;</span><span class="p">:</span>
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;b_spline_curve_with_knots&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">&#39;unknown edge_geometry&#39;</span><span class="p">,</span> <span class="n">geometry_cmd</span><span class="p">)</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">EDGE_CURVE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vertex_point&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vertex_point&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="n">edge_geometry</span><span class="p">,</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
<span class="p">)</span>
<span class="c1">#</span>
<span class="c1"># poly-curve objects</span>
<span class="c1"># to speed things up use EDGE_LOOP to create wireframes instead</span>
<span class="c1"># of plotting every single EDGE_CURVE in it&#39;s own plot cmd</span>
<span class="c1">#</span>
<span class="c1"># ORIENTED_EDGE references to two re-declared attributes from a CURVE, a CURVE and a BOOLEAN</span>
<span class="c1"># 83 = ORIENTED_EDGE(&#39;&#39;,*,*,#84,.F.);</span>
<span class="c1"># #84 = EDGE_CURVE(&#39;&#39;,#85,#87,#89,.T.);</span>
<span class="c1"># ORIENTED_EDGE will have multiple same edges, because connected faces</span>
<span class="c1"># use the same curve (about double as EDGE_CURVE)</span>
<span class="c1"># BUT combined with EDGE_LOOP the number of concatenated curves decrease.</span>
<span class="c1"># (about half to 2/3 of EDGE_CURVE)</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;oriented_edge&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">edge_element_cmd</span><span class="p">,</span> <span class="n">edge_element_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">edge_element_cmd</span> <span class="o">==</span> <span class="s1">&#39;EDGE_CURVE&#39;</span><span class="p">:</span>
<span class="n">edge_element</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">edge_element</span> <span class="o">=</span> <span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;oriented_edge&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">&#39;unknown edge_element&#39;</span><span class="p">,</span> <span class="n">edge_element_cmd</span><span class="p">)</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;oriented_edge&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">ORIENTED_EDGE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
<span class="n">edge_element</span><span class="p">,</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
<span class="p">)</span>
<span class="c1"># EDGE_LOOP</span>
<span class="c1"># #82 = EDGE_LOOP(&#39;&#39;,(#83,#118,#146,#174));</span>
<span class="c1"># #83 = ORIENTED_EDGE(&#39;&#39;,*,*,#84,.F.);</span>
<span class="c1"># #118 = ORIENTED_EDGE(&#39;&#39;,*,*,#119,.T.);</span>
<span class="c1"># #146 = ORIENTED_EDGE(&#39;&#39;,*,*,#147,.T.);</span>
<span class="c1"># #174 = ORIENTED_EDGE(&#39;&#39;,*,*,#175,.F.);</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_loop&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_loop&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">EDGE_LOOP</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="nb">tuple</span><span class="p">(</span><span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;oriented_edge&#39;</span><span class="p">][</span><span class="n">i</span><span class="p">]</span> <span class="k">for</span>
<span class="n">i</span> <span class="ow">in</span> <span class="n">str_to_cmd_args</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">])[</span><span class="mi">1</span><span class="p">]),</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">data_dict</span></div>
<div class="viewcode-block" id="data_section_dict"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_section_dict">[docs]</a><span class="k">def</span> <span class="nf">data_section_dict</span><span class="p">(</span><span class="n">step</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="k">return</span> <span class="n">data_cmds_to_data_dict</span><span class="p">(</span><span class="n">step</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="n">verbose</span><span class="p">)</span></div>
<div class="viewcode-block" id="line_geometry"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.line_geometry">[docs]</a><span class="k">def</span> <span class="nf">line_geometry</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">):</span>
<span class="c1"># (normally)</span>
<span class="c1"># edge_curve.edge_geometry.curve_3d.pnt.coordinates is</span>
<span class="c1"># equal to p1 (see above) this is</span>
<span class="c1"># edge_curve.edge_start.vertex_geometry.coordinates</span>
<span class="c1"># p2 could be calculated from</span>
<span class="c1"># edge_curve.edge_geometry.curve_3d.dir.orientation.direction_ratios</span>
<span class="c1"># and edge_curve.edge_geometry.curve_3d.dir.magnitude</span>
<span class="c1"># vector = [i*edge_curve.edge_geometry.curve_3d.dir.magnitude for</span>
<span class="c1"># i in edge_curve.edge_geometry.curve_3d.dir.orientation.direction_ratios]</span>
<span class="k">return</span> <span class="n">Line</span><span class="p">(</span><span class="n">point1</span><span class="o">=</span><span class="n">p1</span><span class="p">,</span> <span class="n">point2</span><span class="o">=</span><span class="n">p2</span><span class="p">)</span></div>
<span class="kn">import</span> <span class="nn">math</span>
<div class="viewcode-block" id="arc_circle_geometry"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.arc_circle_geometry">[docs]</a><span class="k">def</span> <span class="nf">arc_circle_geometry</span><span class="p">(</span><span class="n">conic</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">,</span> <span class="n">ellipse</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="n">z</span> <span class="o">=</span> <span class="n">Direction</span><span class="p">(</span><span class="o">*</span><span class="n">conic</span><span class="o">.</span><span class="n">position</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">direction_ratios</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">Direction</span><span class="p">(</span><span class="o">*</span><span class="n">conic</span><span class="o">.</span><span class="n">position</span><span class="o">.</span><span class="n">ref_direction</span><span class="o">.</span><span class="n">direction_ratios</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">Direction</span><span class="o">.</span><span class="n">cross</span><span class="p">(</span><span class="n">z</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
<span class="n">cs_gl</span> <span class="o">=</span> <span class="n">CS</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">)</span> <span class="c1"># transform from global to local</span>
<span class="n">cs_lg</span> <span class="o">=</span> <span class="n">CS</span><span class="o">.</span><span class="n">transposed</span><span class="p">(</span><span class="n">cs_gl</span><span class="p">)</span> <span class="c1"># transform from local to global</span>
<span class="n">location</span> <span class="o">=</span> <span class="n">vector</span><span class="p">(</span><span class="n">conic</span><span class="o">.</span><span class="n">position</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="k">if</span> <span class="n">p1</span> <span class="o">==</span> <span class="n">p2</span><span class="p">:</span> <span class="c1"># Full Circle or Ellipse</span>
<span class="k">if</span> <span class="n">ellipse</span><span class="p">:</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">semi_axis_1</span>
<span class="n">b</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">semi_axis_2</span>
<span class="k">return</span> <span class="n">Ellipse</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_lg</span><span class="p">)</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="o">*</span><span class="n">location</span><span class="p">)</span>
<span class="c1"># else Circle</span>
<span class="n">radius</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">radius</span>
<span class="k">return</span> <span class="n">Circle</span><span class="p">(</span><span class="n">radius</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_lg</span><span class="p">)</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="o">*</span><span class="n">location</span><span class="p">)</span>
<span class="c1"># else Arc</span>
<span class="c1"># points relative to the location</span>
<span class="n">v1</span><span class="p">,</span> <span class="n">v2</span> <span class="o">=</span> <span class="n">p1</span> <span class="o">-</span> <span class="n">location</span><span class="p">,</span> <span class="n">p2</span> <span class="o">-</span> <span class="n">location</span>
<span class="c1">#ang1, ang2 = vector.ang(x, v1), vector.ang(x, v2)</span>
<span class="c1"># relative points transformed into circle coordinate system</span>
<span class="c1"># relative point lay in local xy-plane</span>
<span class="n">vl1</span><span class="p">,</span> <span class="n">vl2</span> <span class="o">=</span> <span class="n">vector</span><span class="p">(</span><span class="n">v1</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_gl</span><span class="p">),</span> <span class="n">vector</span><span class="p">(</span><span class="n">v2</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_gl</span><span class="p">)</span>
<span class="n">ang1</span><span class="p">,</span> <span class="n">ang2</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="o">*</span><span class="n">vl1</span><span class="p">[:</span><span class="mi">2</span><span class="p">][::</span><span class="o">-</span><span class="mi">1</span><span class="p">]),</span> <span class="n">math</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="o">*</span><span class="n">vl2</span><span class="p">[:</span><span class="mi">2</span><span class="p">][::</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="k">if</span> <span class="n">ellipse</span><span class="p">:</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">semi_axis_1</span>
<span class="n">b</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">semi_axis_2</span>
<span class="k">return</span> <span class="n">ArcEllipse</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">ang1</span><span class="p">,</span> <span class="n">ang2</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_lg</span><span class="p">)</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="o">*</span><span class="n">location</span><span class="p">)</span>
<span class="n">radius</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">radius</span>
<span class="k">return</span> <span class="n">ArcCircle</span><span class="p">(</span><span class="n">radius</span><span class="p">,</span> <span class="n">ang1</span><span class="p">,</span> <span class="n">ang2</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_lg</span><span class="p">)</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="o">*</span><span class="n">location</span><span class="p">)</span></div>
<span class="kn">import</span> <span class="nn">copy</span>
<div class="viewcode-block" id="b_spline_curve_with_knots_geometry"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.b_spline_curve_with_knots_geometry">[docs]</a><span class="k">def</span> <span class="nf">b_spline_curve_with_knots_geometry</span><span class="p">(</span><span class="n">b_spline</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Currently only clamped b_spline curves and assumed, i. e. closed</span>
<span class="sd"> = False.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">control_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span><span class="o">.</span><span class="n">coordinates</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">control_points</span><span class="p">]</span>
<span class="c1"># es_near = [vector.isclose(p1, i.coordinates, abs_tol=2.1) for i in b_spline.control_points].index(True)</span>
<span class="n">es_near</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">b_spline</span><span class="o">.</span><span class="n">control_points</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span> <span class="o">-</span> <span class="p">[</span><span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">2.1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">control_points</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="c1"># ee_near = len(b_spline.control_points) - 1 - [vector.isclose(p2, i.coordinates, abs_tol=2.1) for i in b_spline.control_points[::-1]].index(True)</span>
<span class="n">ee_near</span> <span class="o">=</span> <span class="p">[</span><span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">p2</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">2.1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">control_points</span><span class="p">]</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">knots</span> <span class="o">=</span> <span class="p">[</span><span class="n">b_spline</span><span class="o">.</span><span class="n">knots</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">b_spline</span><span class="o">.</span><span class="n">knots</span><span class="p">))</span> <span class="k">for</span>
<span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">b_spline</span><span class="o">.</span><span class="n">knot_multiplicities</span><span class="p">[</span><span class="n">i</span><span class="p">])]</span>
<span class="c1"># print(&#39;bs es, ee in:&#39;, es_near, ee_near,</span>
<span class="c1"># knots[es_near], knots[ee_near+b_spline.degree])</span>
<span class="c1"># print(&#39; knots, knote:&#39;, knots[0], knots[-1], len(knots))</span>
<span class="k">if</span> <span class="n">es_near</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">ee_near</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1">#print(&#39;yes&#39;)</span>
<span class="n">bs</span> <span class="o">=</span> <span class="n">ArcBSplineCurveWithKnots</span><span class="p">(</span>
<span class="n">b_spline</span><span class="o">.</span><span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">knot_multiplicities</span><span class="p">,</span>
<span class="n">b_spline</span><span class="o">.</span><span class="n">knots</span><span class="p">,</span> <span class="n">knots</span><span class="p">[</span><span class="n">es_near</span><span class="o">+</span><span class="mi">1</span><span class="p">],</span> <span class="n">knots</span><span class="p">[</span><span class="n">ee_near</span><span class="o">+</span><span class="n">b_spline</span><span class="o">.</span><span class="n">degree</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="n">bs</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">p1</span><span class="p">)]</span> <span class="o">+</span> <span class="n">bs</span><span class="o">.</span><span class="n">_points</span> <span class="o">+</span> <span class="p">[</span><span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">p2</span><span class="p">)]</span>
<span class="k">return</span> <span class="n">bs</span>
<span class="c1"># +1 so not the last near point but the following, also -1</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;error&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">B_spline_curve_with_knots</span><span class="p">(</span>
<span class="n">b_spline</span><span class="o">.</span><span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">knot_multiplicities</span><span class="p">,</span>
<span class="n">b_spline</span><span class="o">.</span><span class="n">knots</span><span class="p">)</span></div>
<span class="c1"># TODO: backup solution to draw each edge_curve,</span>
<span class="c1"># new is to put edge_curves to edge_loops and draw these loops</span>
<span class="c1"># see data_dict_to_geometry_world</span>
<div class="viewcode-block" id="data_dict_to_geometry_world_edge_curve"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_dict_to_geometry_world_edge_curve">[docs]</a><span class="k">def</span> <span class="nf">data_dict_to_geometry_world_edge_curve</span><span class="p">(</span><span class="n">data_dict</span><span class="p">):</span>
<span class="n">w</span> <span class="o">=</span> <span class="n">World</span><span class="p">()</span>
<span class="n">data_dict_edge_curve_to_geometry</span><span class="p">(</span><span class="n">data_dict</span><span class="p">)</span>
<span class="n">edges</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;geometry_edge_curves&#39;</span><span class="p">]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">edges</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
<span class="n">w</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="k">return</span> <span class="n">w</span></div>
<div class="viewcode-block" id="data_dict_edge_curve_to_geometry"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_dict_edge_curve_to_geometry">[docs]</a><span class="k">def</span> <span class="nf">data_dict_edge_curve_to_geometry</span><span class="p">(</span><span class="n">data_dict</span><span class="p">):</span>
<span class="n">edges</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">edge_curve</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">p1</span> <span class="o">=</span> <span class="n">Point</span><span class="p">(</span><span class="o">*</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="n">p2</span> <span class="o">=</span> <span class="n">Point</span><span class="p">(</span><span class="o">*</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="n">idn</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">idn</span>
<span class="c1"># if SURFACE_CURVE or SEAM_CURVE, b/c SEAM_CURVE(SURFACE_CURVE)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="p">,</span> <span class="n">SURFACE_CURVE</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">LINE</span><span class="p">):</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">line_geometry</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">CIRCLE</span><span class="p">):</span>
<span class="n">circle</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">arc_circle_geometry</span><span class="p">(</span><span class="n">circle</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">ELLIPSE</span><span class="p">):</span>
<span class="n">ellipse</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">arc_circle_geometry</span><span class="p">(</span><span class="n">ellipse</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">):</span>
<span class="n">b_spline</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">b_spline_curve_with_knots_geometry</span><span class="p">(</span><span class="n">b_spline</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">&#39;unknown SURFACE_CURVE&#39;</span><span class="p">,</span>
<span class="nb">type</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">))</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="p">,</span> <span class="n">LINE</span><span class="p">):</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">line_geometry</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="p">,</span> <span class="n">CIRCLE</span><span class="p">):</span>
<span class="n">circle</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">arc_circle_geometry</span><span class="p">(</span><span class="n">circle</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">):</span>
<span class="n">b_spline</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">b_spline_curve_with_knots_geometry</span><span class="p">(</span><span class="n">b_spline</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span> <span class="c1"># fallback to straight line</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">line_geometry</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">&#39;unknown type&#39;</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">edge_curve</span><span class="p">))</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;geometry_edge_curves&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">edges</span></div>
<div class="viewcode-block" id="data_dict_to_geometry_world"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_dict_to_geometry_world">[docs]</a><span class="k">def</span> <span class="nf">data_dict_to_geometry_world</span><span class="p">(</span><span class="n">data_dict</span><span class="p">):</span>
<span class="n">w</span> <span class="o">=</span> <span class="n">World</span><span class="p">()</span>
<span class="n">data_dict_edge_curve_to_geometry</span><span class="p">(</span><span class="n">data_dict</span><span class="p">)</span>
<span class="n">edges</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;geometry_edge_curves&#39;</span><span class="p">]</span>
<span class="c1"># add all but the last point, it is a path.</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="nb">iter</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">edge_loop</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_loop&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">last_end_point</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">oriented_edge</span> <span class="ow">in</span> <span class="n">edge_loop</span><span class="o">.</span><span class="n">edge_list</span><span class="p">:</span>
<span class="n">edge_curve</span> <span class="o">=</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">edge_element</span>
<span class="n">idn</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">idn</span>
<span class="k">if</span> <span class="n">idn</span> <span class="ow">in</span> <span class="n">edges</span><span class="p">:</span>
<span class="n">pts</span> <span class="o">=</span> <span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span><span class="o">.</span><span class="n">points</span><span class="p">()</span>
<span class="k">if</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">orientation</span><span class="p">:</span>
<span class="c1">#[points.append(i) for i in pts[:-1]]</span>
<span class="p">[</span><span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">pts</span><span class="p">]</span>
<span class="n">start_point</span> <span class="o">=</span> <span class="n">pts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">end_point</span> <span class="o">=</span> <span class="n">pts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1">#[points.append(i) for i in pts[:0:-1]]</span>
<span class="p">[</span><span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">pts</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span>
<span class="n">start_point</span> <span class="o">=</span> <span class="n">pts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">end_point</span> <span class="o">=</span> <span class="n">pts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">last_end_point</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># TODO: some points are only near because of the current</span>
<span class="c1"># b-spline cut in b_spline_curve_with_knots_geometry</span>
<span class="n">isclose</span> <span class="o">=</span> <span class="nb">all</span><span class="p">([</span><span class="n">math</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">1e-3</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">start_point</span><span class="p">,</span> <span class="n">last_end_point</span><span class="p">)])</span>
<span class="k">if</span> <span class="n">isclose</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">pass</span>
<span class="nb">print</span><span class="p">(</span><span class="n">isclose</span><span class="p">,</span> <span class="n">start_point</span><span class="p">,</span> <span class="n">last_end_point</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">pass</span>
<span class="c1">#print(&#39;start of loop&#39;)</span>
<span class="n">last_end_point</span> <span class="o">=</span> <span class="n">end_point</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">pass</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;error&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">points</span><span class="p">:</span>
<span class="c1"># add last end point of path</span>
<span class="c1"># if oriented_edge.orientation:</span>
<span class="c1"># points.append(Point(*edge_curve.edge_end.vertex_geometry.coordinates))</span>
<span class="c1"># else:</span>
<span class="c1"># points.append(Point(*edge_curve.edge_start.vertex_geometry.coordinates))</span>
<span class="c1">#points.append(Point(*oriented_edge.edge_end.vertex_geometry.coordinates))</span>
<span class="n">w</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">Polyline</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">))</span>
<span class="c1"># if iter == 4:</span>
<span class="c1"># print()</span>
<span class="c1"># print(key)</span>
<span class="c1"># break</span>
<span class="c1"># iter += 1</span>
<span class="k">return</span> <span class="n">w</span></div>
<span class="c1"># TODO: delete this testing def</span>
<div class="viewcode-block" id="print_edge_loop"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.print_edge_loop">[docs]</a><span class="k">def</span> <span class="nf">print_edge_loop</span><span class="p">(</span><span class="n">data_dict</span><span class="p">,</span> <span class="n">instance_name</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">pylib.mathematics</span> <span class="kn">import</span> <span class="n">vector</span>
<span class="kn">from</span> <span class="nn">pylib.data_step_std</span> <span class="kn">import</span> <span class="n">LINE</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;edge_loop:&#39;</span><span class="p">,</span> <span class="n">instance_name</span><span class="p">,</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_loop&#39;</span><span class="p">][</span><span class="n">instance_name</span><span class="p">]</span><span class="o">.</span><span class="n">idn</span><span class="p">)</span>
<span class="k">for</span> <span class="n">oriented_edge</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_loop&#39;</span><span class="p">][</span><span class="n">instance_name</span><span class="p">]</span><span class="o">.</span><span class="n">edge_list</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; orientation: &#39;</span><span class="p">,</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">orientation</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; edge_start: &#39;</span><span class="p">,</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; edge_end: &#39;</span><span class="p">,</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="n">edge_element</span> <span class="o">=</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">edge_element</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; edge_element&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; same_sense: &#39;</span><span class="p">,</span> <span class="n">edge_element</span><span class="o">.</span><span class="n">same_sense</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; edge_start: &#39;</span><span class="p">,</span> <span class="n">edge_element</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; edge_end: &#39;</span><span class="p">,</span> <span class="n">edge_element</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">edge_element</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; edge_geometry.curve_3d&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; type: &#39;</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">curve_3d</span><span class="p">))</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">LINE</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; es in: &#39;</span><span class="p">,</span>
<span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">edge_element</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">pnt</span><span class="o">.</span><span class="n">coordinates</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; ee in: &#39;</span><span class="p">,</span>
<span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">edge_element</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">pnt</span><span class="o">.</span><span class="n">coordinates</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; pnt: &#39;</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">pnt</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; pnt2: &#39;</span><span class="p">,</span> <span class="p">[</span><span class="n">curve_3d</span><span class="o">.</span><span class="n">dir</span><span class="o">.</span><span class="n">magnitude</span><span class="o">*</span><span class="n">i</span><span class="o">+</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">curve_3d</span><span class="o">.</span><span class="n">dir</span><span class="o">.</span><span class="n">orientation</span><span class="o">.</span><span class="n">direction_ratios</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">pnt</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)])</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; es in: &#39;</span><span class="p">,</span>
<span class="nb">any</span><span class="p">([</span><span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">edge_element</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">2.1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">control_points</span><span class="p">]))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; ee in: &#39;</span><span class="p">,</span>
<span class="nb">any</span><span class="p">([</span><span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">edge_element</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">2.1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">control_points</span><span class="p">]))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; control_points&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">control_points</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="s1">&#39;...&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">control_points</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span></div>
<span class="c1"># print()</span>
<span class="c1"># print_edge_loop(data_dict, &#39;#1306&#39;)</span>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../../index.html">pylib</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">pylib</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../../index.html">Documentation overview</a><ul>
<li><a href="../index.html">Module code</a><ul>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>