{"id":490,"date":"2020-07-23T08:44:23","date_gmt":"2020-07-23T12:44:23","guid":{"rendered":"https:\/\/blogs.sw.siemens.com\/plm-components\/?p=490"},"modified":"2026-03-26T08:02:52","modified_gmt":"2026-03-26T12:02:52","slug":"flexible-spline-curve-control-in-the-d-cubed-dimensional-constraint-manager-dcm-part-2","status":"publish","type":"post","link":"https:\/\/blogs.sw.siemens.com\/plm-components\/flexible-spline-curve-control-in-the-d-cubed-dimensional-constraint-manager-dcm-part-2\/","title":{"rendered":"Flexible spline curve control in the D-Cubed Dimensional Constraint Manager (DCM) \u2013 part 2"},"content":{"rendered":"\n<p>This post forms part two of the article which examines spline curve shaping functionality in the D-Cubed Dimensional Constraint Manager components (<a aria-label=\"undefined (opens in a new tab)\" href=\"https:\/\/www.plm.automation.siemens.com\/global\/en\/products\/plm-components\/2d-dcm.html\" target=\"_blank\" rel=\"noreferrer noopener\">2D DCM<\/a> and <a aria-label=\"undefined (opens in a new tab)\" href=\"https:\/\/www.plm.automation.siemens.com\/global\/en\/products\/plm-components\/3d-dcm.html\" target=\"_blank\" rel=\"noreferrer noopener\">3D DCM<\/a>). You can find <a href=\"https:\/\/blogs.sw.siemens.com\/plm-components\/flexible-spline-curve-control-in-the-d-cubed-dimensional-constraint-manager-dcm-part-1\/\" target=\"_blank\" aria-label=\"undefined (opens in a new tab)\" rel=\"noreferrer noopener\">part one of the article here<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><font color=\"1A5276\">Introduction and recap<\/font><\/h3>\n\n\n\n<p>Part one of this article focused on the creation of flexible spline curves in a geometric constraint manager such as the DCM. The article discussed the questions that may be encountered when defining the shape of a spline curve using a set of user-defined points. The article also explored how adding spline interpolation conditions enabled additional constraints to be added between the spline and other geometry, without over-defining the spline curve.<\/p>\n\n\n\n<p>Part two of this article focuses on the use of DCM variables for linking spline shape to other control geometry via interpolation conditions. The article also discusses the choice of curve parameterisation, which affects solved curve shape when reshaping flexible spline curves.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><font color=\"1A5276\">Controlling spline shape using variables<\/font><\/h3>\n\n\n\n<p>There are times when it is useful to add extra geometry to allow a user to control the shape of a spline curve. For example, consider Figure 1, where a linear segment might be added tangent to the left-hand side of the spline in order to control both the direction and magnitude of the tangent vector. The DCM works with unbounded geometries, so we will represent the linear segment using an infinite line passing through the left-most interpolation point, with a new point to determine the other end of the line segment (constrained coincident to the line).<\/p>\n\n\n\n<p>The tangent direction of the spline curve can be controlled by adding an ordinary tangent constraint between the spline and the control geometry (line segment). As discussed in part one of this article, the internal freedoms of the spline will need to be increased by adding DERIV1 interpolation conditions to the left-hand end of the spline.<\/p>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/10\/2020\/07\/D-cubed-splines-article-2-figure-1.jpg\" alt=\"Adding a line segment to act as a control geometry\" class=\"wp-image-492\" width=\"500\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/10\/2020\/07\/D-cubed-splines-article-2-figure-1.jpg 911w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/10\/2020\/07\/D-cubed-splines-article-2-figure-1-600x336.jpg 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/10\/2020\/07\/D-cubed-splines-article-2-figure-1-768x430.jpg 768w\" sizes=\"(max-width: 911px) 100vw, 911px\" \/><\/figure><\/div>\n\n\n\n<p class=\"has-text-align-center\"><em>Figure 1: Adding a line segment to act as a control geometry<\/em><\/p>\n\n\n\n<p>The magnitude of the tangent vector can be linked to the segment length using a DCM variable. The 2D DCM supports two types of variable \u2013 a&nbsp;<em>variable dimension<\/em>, which is associated with an existing dimension&#8217;s measured value, and a&nbsp;<em>simple variable<\/em>, which is a free variable and is not associated with any geometry positions by default. After a simple variable is created, it can be linked to the value of an interpolation condition. This is achieved by specifying the variable (v_node) as part of the spline data structure that is passed to the DCM whenever a spline is added or modified.<\/p>\n\n\n\n<p>To connect the length of the line segment with the variable value, a separate variable distance dimension which measures the length of the segment will be added. The value of the variable dimension will be linked to the simple variable by adding a linear equation to the DCM.<\/p>\n\n\n\n<p>Table 1 shows the set of interpolation conditions that are passed to the DCM when creating the spline curve. The simple variable <strong><span style=\"color:#365f91\" class=\"has-inline-color\">vnVar1<\/span><\/strong> is specified in the interp_v_nodes array for the first DERIV1_LEN condition. When assigning a variable to an interpolation condition, it is necessary to use a duration of IDURATION_CREATION_ONLY for the condition. This ensures that the corresponding internal spline freedom will not be fixed &#8211; it will be associated with the value of the variable, which remains a freedom until it is constrained by an equation. The numerical value provided by the application in the interp_vectors array will determine the initial value of the condition before the DCM attempts to satisfy the constraints during an evaluation.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>interp_ parameters<\/strong><\/td><td><strong>interp_ types<\/strong><\/td><td><strong>interp_ vectors<\/strong><\/td><td><strong>interp_ g_nodes<\/strong><\/td><td><strong>interp_ v_nodes<\/strong><\/td><td><strong>interp_ durations<\/strong><\/td><\/tr><tr><td>0<\/td><td>DERIV1_DIR<\/td><td>11.4, 32.9<\/td><td>NULL<\/td><td>NULL, NULL<\/td><td>CREATION_ONLY<\/td><\/tr><tr><td>0<\/td><td>DERIV1_LEN<\/td><td>278.4, 0<\/td><td>NULL<\/td><td><font color=\"365f91\"><strong>vnVar1<\/strong><\/font>, NULL<\/td><td>CREATION_ONLY<\/td><\/tr><tr><td>0<\/td><td>G_COI<\/td><td>-2, -2<\/td><td>Point1<\/td><td>NULL, NULL<\/td><td>ALWAYS<\/td><\/tr><tr><td>0.176<\/td><td>G_COI<\/td><td>-2, -2<\/td><td>Point2<\/td><td>NULL, NULL<\/td><td>ALWAYS<\/td><\/tr><tr><td>0.4797<\/td><td>G_COI<\/td><td>-2, -2<\/td><td>Point3<\/td><td>NULL, NULL<\/td><td>ALWAYS<\/td><\/tr><tr><td>0.6613<\/td><td>G_COI<\/td><td>-2, -2<\/td><td>Point4<\/td><td>NULL, NULL<\/td><td>ALWAYS<\/td><\/tr><tr><td>1<\/td><td>G_COI<\/td><td>-2, -2<\/td><td>Point5<\/td><td>NULL, NULL<\/td><td>ALWAYS<\/td><\/tr><tr><td>1<\/td><td>DERIV1_DIR<\/td><td>10.3, -35.7<\/td><td>NULL<\/td><td>NULL, NULL<\/td><td>CREATION_ONLY<\/td><\/tr><tr><td>1<\/td><td>DERIV1_LEN<\/td><td>297.6, 0<\/td><td>NULL<\/td><td>NULL, NULL<\/td><td>ALWAYS<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Table 1: The set of interpolation conditions for the spline, as specified to DCM<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><font color=\"1A5276\">g_nodes or vectors?<\/font><\/h3>\n\n\n\n<p>When using vectors to specify interpolation conditions, the use of IDURATION_ALWAYS can be restrictive, since use of this setting will result in no movement of the interpolation point, effectively preventing rigid transformations of the spline. However, for interpolation positions, adding the positions to the DCM as points overcomes this restriction and it is typical to specify IDURATION_ALWAYS, as in the table above. The points may then be fixed, as in this example, or may be left under-defined allowing rigid transformations of the spline in addition to spline reshaping (for flexible splines). In the latter case, the creation of extra interpolation conditions to increase spline freedoms may also be useful, since it facilitates spline reshaping without forcing the DCM to move the interpolation points.<\/p>\n\n\n\n<p>For directional conditions such as first derivative conditions, there is no analogous condition type to reference DCM geometry, so vectors must be used. If preserving rigid transformational freedoms is necessary then a DCM constraint with a help parameter, such as a tangent constraint, should be used rather than a spline condition.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><font color=\"1A5276\">Choice of parameterisation<\/font><\/h3>\n\n\n\n<p>When specifying interpolation conditions on a spline, the choice of parameterisation method for the spline curve is an important consideration. For each condition specified, the chosen parameter value influences the shape of the spline solution. For example, in Figure 2 below, the effect on spline shape of varying an interpolation parameter value can be clearly seen.<\/p>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/10\/2020\/07\/D-cubed-splines-article-2-figure-2.jpg\" alt=\"spline shape for differing interpolation parameter values\" class=\"wp-image-493\" width=\"500\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/10\/2020\/07\/D-cubed-splines-article-2-figure-2.jpg 638w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/10\/2020\/07\/D-cubed-splines-article-2-figure-2-600x578.jpg 600w\" sizes=\"(max-width: 638px) 100vw, 638px\" \/><\/figure><\/div>\n\n\n\n<p class=\"has-text-align-center\"><em>Figure 2: Comparison of spline shape for differing interpolation parameter values<\/em><\/p>\n\n\n\n<p>It may be necessary for an application to update the parameter value for an interpolation condition, if the position of the condition has moved since the spline was created. The new parameter value is calculated using a&nbsp;<em>curve parameterisation<\/em>&nbsp;method, such as chord length or centripetal parameterisation. The 2D DCM supports curve re-parameterisation, allowing an application to implement its preferred parameterisation method. The 2D DCM also provides its own internal implementation of the chord length and centripetal parameterisations \u2013 for integrators working with this parameterisation, the DCM&#8217;s internal method should be used, to benefit from improved performance. Note that curve re-parameterisation is only supported for splines with interpolation point dependence.<\/p>\n\n\n\n<p>The following example application code extends the code provided in part one of this article. It demonstrates the creation of a line segment with variable distance dimension linked to first derivative conditions on the spline end using a DCM variable:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Example code showing the creation of a user-controllable interpolating spline \n\t\/\/ passing through a given set of interpolation positions.\n\t\n\t\/\/ The following code excerpt assumes that the calling application has \n\t\/\/ implemented and registered a set of DCM Frustum functions to provide\n\t\/\/ the necessary geometric data to the DCM\n\t\/\/ See the 2D DCM ex2 example program for an example Frustum implementation\n\n\tconst int np = 5;\t\t\t\t\/\/ Number of interpolating G_COI conditions defining the spline\n\tconst int degree = 3;\n\tconst int n_interps = np + 4;\t\/\/ Total number of interpolation conditions (including DERIV1 end conditions)\n\tconst double t_lower = 0;\n\tconst double t_upper = 1;\n\tconst double LIN_RES = 1e-8;\n\tconst double ANG_RES = 1e-11;\n\n\tpoint*  anp&#091;np];\n\tg_node* gnp&#091;np];\n\tdouble g_coi_params&#091;np];\n\tg_node* gninterps&#091;n_interps];\n\tdouble params&#091;n_interps];\n\tDCM_bs_itype itypes&#091;n_interps];\n\tDCM_bs_iduration idurations&#091;n_interps];\n\tv_node* vninterps&#091;(n_interps) * 2];\t\/\/ v_node array for linking DCM variables to interpolation conditions\n\tdouble vectors&#091;(n_interps) * 2];\n\tunsigned int interp_index = 0;\n\n\tdimension_system* dsp;\n\tdsp = new dimension_system(LIN_RES, LIN_RES \/ ANG_RES);\t\n\n\t\/\/ Create the defining points for the bounded spline\n\t\/\/ These will be added as g_nodes to DCM later on\n\tanp&#091;0] = new point(-62.3, 31.8);\n\tanp&#091;1] = new point(-44.4, 49.6);\n\tanp&#091;2] = new point(-6.2, 28.7);\n\tanp&#091;3] = new point(19.5, 32.9);\n\tanp&#091;4] = new point(59.4, 5.2);\n\tg_coi_params&#091;0] = t_lower;\n\tg_coi_params&#091;1] = t_lower + 0.176*(t_upper - t_lower);\n\tg_coi_params&#091;2] = t_lower + 0.4797*(t_upper - t_lower);\n\tg_coi_params&#091;3] = t_lower + 0.6613*(t_upper - t_lower);\n\tg_coi_params&#091;4] = t_upper;\n\n\tfor (int ii = 0; ii&lt;np; ii++)\n\t\t{\n\t\tgnp&#091;ii] = dsp-&gt;add_g(anp&#091;ii]);\n\t\tdsp-&gt;fix(gnp&#091;ii]);\n\t\t}\n\n\t\/\/ Set the DERIV1 conditions on the left-hand end of the spline\n\tparams&#091;interp_index] = t_lower;\n\titypes&#091;interp_index] = DCM_BS_ITYPE_DERIV1_DIR;\n\tidurations&#091;interp_index] = DCM_BS_IDURATION_CREATION_ONLY;\n\tvectors&#091;2*interp_index] = 11.4;\n\tvectors&#091;2*interp_index + 1] = 32.9;\n\tgninterps&#091;interp_index] = NULL;\n\tvninterps&#091;2*interp_index] = NULL;\n\tvninterps&#091;2*interp_index + 1] = NULL;\n\tinterp_index++;\n\t\n\tparams&#091;interp_index] = t_lower;\n\titypes&#091;interp_index] = DCM_BS_ITYPE_DERIV1_LEN;\n\tidurations&#091;interp_index] = DCM_BS_IDURATION_CREATION_ONLY;\n\tvectors&#091;2*interp_index] = 278.4\/(t_upper-t_lower); \/\/ Scale DERIV1_LEN condition based on parameter range\n\tvectors&#091;2*interp_index + 1] = 0.0;\n\tgninterps&#091;interp_index] = NULL;\n\tvninterps&#091;2*interp_index] = NULL;\n\tvninterps&#091;2*interp_index + 1] = NULL;\n\tinterp_index++;\n\n\t\/\/ Set the G_COI conditions\n\tfor(int ii = 0; ii&lt;np; ii++)\n\t\t{\n\t\tgninterps&#091;interp_index] = gnp&#091;ii];\n\t\tparams&#091;interp_index] = g_coi_params&#091;ii];\n\t\titypes&#091;interp_index] = DCM_BS_ITYPE_G_COI;\n\t\tidurations&#091;interp_index] = DCM_BS_IDURATION_ALWAYS;\n\n\t\tvectors&#091;2*interp_index] = -2;\n\t\tvectors&#091;2*interp_index + 1] = -2;\n\t\tvninterps&#091;2*interp_index] = NULL;\n\t\tvninterps&#091;2*interp_index + 1] = NULL;\n\t\tinterp_index++;\n\t\t}\n\n\t\/\/ Set the DERIV1 conditions on the right-hand end of the spline\n\tparams&#091;interp_index] = t_upper;\n\titypes&#091;interp_index] = DCM_BS_ITYPE_DERIV1_DIR;\n\tidurations&#091;interp_index] = DCM_BS_IDURATION_CREATION_ONLY;\n\tvectors&#091;2*interp_index] = 10.3;\n\tvectors&#091;2*interp_index + 1] = -35.7;\n\tgninterps&#091;interp_index] = NULL;\n\tvninterps&#091;2*interp_index] = NULL;\n\tvninterps&#091;2*interp_index + 1] = NULL;\n\tinterp_index++;\n\n\tparams&#091;interp_index] = t_upper;\n\titypes&#091;interp_index] = DCM_BS_ITYPE_DERIV1_LEN;\n\tidurations&#091;interp_index] = DCM_BS_IDURATION_ALWAYS;\n\tvectors&#091;2*interp_index] = 297.6\/(t_upper - t_lower);\n\tvectors&#091;2*interp_index + 1] = 0.0;\n\tgninterps&#091;interp_index] = NULL;\n\tvninterps&#091;2*interp_index] = NULL;\n\tvninterps&#091;2*interp_index + 1] = NULL;\n\tinterp_index++;\n\n\t\/\/ Create a fixed vertical line - later we will constrain this to be tangent to the right-hand end of the spline\n\tEX_vec_2d dir1(0, 1);\n\tline line1(anp&#091;np-1]-&gt;value(), dir1);\n\tg_node* gnLine1 = dsp-&gt;add_g(&amp;line1);\n\tdsp-&gt;fix(gnLine1);\n\n\t\/\/ Create a line segment to use as a control geometry for the left-hand end of the spline\n\tEX_vec_2d dir2(10.91, 32.94);\n\tline line2(anp&#091;0]-&gt;value(), dir2);\n\tg_node* gnLine2 = dsp-&gt;add_g(&amp;line2);\n\t\n\t\/\/ Create end-point for line segment\n\tpoint ptSegment(-51.39, 64.74);\n\tg_node* gnPtSegment = dsp-&gt;add_g(&amp;ptSegment);\n\n\t\/\/ Constrain end-points coincident to the line\n\tdimension coiSegment1(DCM_COINCIDENT);\n\td_node* dnCoiSegment1 = dsp-&gt;add_d(&amp;coiSegment1, gnLine2, gnp&#091;0]);\n\tdimension coiSegment2(DCM_COINCIDENT);\n\td_node* dnCoiSegment2 = dsp-&gt;add_d(&amp;coiSegment2, gnLine2, gnPtSegment);\n\n\t\/\/ Create a simple variable that will be linked to the first DERIV1_LEN condition\n\tvariable av1(34.7);\n\tv_node* vnVar1 = dsp-&gt;add_v(&amp;av1);\n\n\t\/\/ Create a variable distance dimension to measure the line segment length\n\tdimension dist1(DCM_DISTANCE, 34.7);\n\td_node* dnDist1 = dsp-&gt;add_d(&amp;dist1, gnp&#091;0], gnPtSegment);\n\n\tvariable av2(34.7);\n\tv_node* vnVar2 = dsp-&gt;add_v(&amp;av2, dnDist1);\n\n\t\/\/ Set the simple variable in the interp_v_nodes array\n\tvninterps&#091;2] = vnVar1;\n\n\t\/\/ Create a linear equation which equates the simple variable with the variable distance\n\tlinear_equation linearEq1;\n\n\t\/\/ Add the equation to DCM\n\te_node* enLinearEq1 = dsp-&gt;add_e(&amp;linearEq1, 0.0);\n\n\t\/\/ Add variables and coefficients to the linear equation (var1 - 10*var2 = 0)\n\tdsp-&gt;add_v_to_e(1, enLinearEq1, vnVar1);\n\tdsp-&gt;add_v_to_e(-10, enLinearEq1, vnVar2);\n\n\t\/\/ Make the spline\n\tspline sp(np, gnp);\n\n\t\/\/ Initial DCM_bs_data\n\tDCM_bs_data spdata;\n\tspdata.data_mask = DCM_BS_RIGIDITY | DCM_BS_PERIODICITY | \n\t\tDCM_BS_RATIONALITY | DCM_BS_DEPENDENCE | \n\t\tDCM_BS_PARAMETERISATION | DCM_BS_DEGREE | \n\t\tDCM_BS_INTERP_N | DCM_BS_INTERP_G_NODES | \n\t\tDCM_BS_INTERP_PARAMETERS | DCM_BS_INTERP_TYPES | \n\t\tDCM_BS_INTERP_VECTORS | DCM_BS_INTERP_DURATIONS | \n\t\tDCM_BS_INTERP_V_NODES;\n\n\tspdata.rigidity = DCM_BS_RIGIDITY_FLEXIBLE;\n\tspdata.periodicity = DCM_BS_PERIODICITY_NON_PER;\n\tspdata.rationality = DCM_BS_RATIONALITY_NON_RAT;\n\tspdata.dependence = DCM_BS_DEPENDENCE_INTERP;\n\tspdata.parameterisation = DCM_BS_PARAMETERISATION_CHORD_LENGTH;\n\tspdata.degree = degree;\n\tspdata.interp_n = n_interps;\n\tspdata.interp_g_nodes = (void**)gninterps;\n\tspdata.interp_parameters = params;\n\tspdata.interp_types = itypes;\n\tspdata.interp_vectors = vectors;\n\tspdata.interp_durations = idurations;\n\tspdata.interp_v_nodes = (void**)vninterps;\n\n\tDCM_bs_status spstat;\n\tg_node* gnSpline = dsp-&gt;add_spline_g(&amp;sp, &amp;spdata, &amp;spstat);\n\n\t\/\/ Check return\n\tif(spstat == DCM_BS_STATUS_BAD_DATA)\n\t\t{\n\t\tcout &lt;&lt; \"Bad data: \" &lt;&lt; hex &lt;&lt; spdata.bad_data_mask &lt;&lt; endl;\n\t\t}\n\t\n\t\/\/ Constrain the fixed line to be tangent to the right-hand end of the spline\n\tdimension tan1(DCM_TANGENT);\n\ttan1.set_ends(&amp;sp, &amp;line1);\n\ttan1.set_help_parameter(&amp;sp, t_upper);\n\td_node* dnTan1 = dsp-&gt;add_d(&amp;tan1, gnLine1, gnSpline);\n\n\tp_node* pnTan1 = dsp-&gt;parameter_node(&amp;tan1, gnSpline, dnTan1);\n\tdsp-&gt;fix(pnTan1);\n\n\t\/\/ Constrain the line segment to be tangent to the left-hand end of the spline\n\tdimension tan2(DCM_TANGENT);\n\ttan2.set_ends(&amp;sp, &amp;line2);\n\ttan2.set_help_parameter(&amp;sp, t_lower);\n\td_node* dnTan2 = dsp-&gt;add_d(&amp;tan2, gnLine2, gnSpline);\n\n\tp_node* pnTan2 = dsp-&gt;parameter_node(&amp;tan2, gnSpline, dnTan2);\n\tdsp-&gt;fix(pnTan2);\n\n\t\/\/ Evaluate the model to find a spline solution for the given constraints\n\tdsp-&gt;evaluate();\n\n\tdsp-&gt;erase(pnTan1);\n\tdsp-&gt;erase(pnTan2);\n\tdsp-&gt;erase(dnTan1);\n\tdsp-&gt;erase(dnTan2);\n\tdsp-&gt;erase(gnSpline);\n\tdsp-&gt;erase(vnVar1);\n\tdsp-&gt;erase(vnVar2);\n\tdsp-&gt;erase(enLinearEq1);\n\tdsp-&gt;erase(dnDist1);\n\tdsp-&gt;erase(dnCoiSegment1);\n\tdsp-&gt;erase(dnCoiSegment2);\n\tdsp-&gt;erase(gnLine1);\n\tdsp-&gt;erase(gnLine2);\n\tdsp-&gt;erase(gnPtSegment);\n\t\n\tfor (int ii = 0; ii&lt;np; ii++)\n\t\t{\n\t\tdsp-&gt;erase(gnp&#091;ii]);\n\t\tdelete anp&#091;ii];\n\t\t}\n\n\tdelete dsp;\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>This post forms part two of the article which examines spline curve shaping functionality in the D-Cubed Dimensional Constraint Manager&#8230;<\/p>\n","protected":false},"author":49853,"featured_media":492,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spanish_translation":"","french_translation":"","german_translation":"","italian_translation":"","polish_translation":"","japanese_translation":"","chinese_translation":"","footnotes":""},"categories":[94],"tags":[3],"industry":[83],"product":[],"coauthors":[],"class_list":["post-490","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tips-tricks","tag-d-cubed","industry-software-development"],"featured_image_url":"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/10\/2020\/07\/D-cubed-splines-article-2-figure-1.jpg","_links":{"self":[{"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/posts\/490","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/users\/49853"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/comments?post=490"}],"version-history":[{"count":4,"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/posts\/490\/revisions"}],"predecessor-version":[{"id":514,"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/posts\/490\/revisions\/514"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/media\/492"}],"wp:attachment":[{"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/media?parent=490"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/categories?post=490"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/tags?post=490"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/industry?post=490"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/product?post=490"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/plm-components\/wp-json\/wp\/v2\/coauthors?post=490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}