<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Precision of getSplitCurves in ObjectARX Forum</title>
    <link>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5484071#M11544</link>
    <description>&lt;P&gt;Excellent! This value was 5E-05 as default, that's why it considered a line of a little less than that as uninteresting.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;After setting it&amp;nbsp;to 1E-10 it worked like a charm.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you very much, this was an extremely quick and precise answer and something that wasn't easy to find when you don't know where to look!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Knut&lt;/P&gt;</description>
    <pubDate>Tue, 27 Jan 2015 14:34:46 GMT</pubDate>
    <dc:creator>Anonymous</dc:creator>
    <dc:date>2015-01-27T14:34:46Z</dc:date>
    <item>
      <title>Precision of getSplitCurves</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5483744#M11542</link>
      <description>&lt;P&gt;Hi!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am using getSplitCurves on a small arc (0.00021807) with a splitpoint very close to the start point (distance is 0.0000084). It returns Acad::eOK, but the length of the returned array is only 1, so the arc isn't really split.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If I run mapclean from Autocad Map on this, it is able to split the arc properly.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is there some global presicision setting in&amp;nbsp;ObjectArx? Or does&amp;nbsp;Autodesk&amp;nbsp;have their own internal routines with more precision, which are not exposed through ObjectArx?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I hate the idea of rewriting getSplitCurves...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for any help!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 27 Jan 2015 09:22:51 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5483744#M11542</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2015-01-27T09:22:51Z</dc:date>
    </item>
    <item>
      <title>Re: Precision of getSplitCurves</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5484050#M11543</link>
      <description>&lt;P&gt;You may try setting&amp;nbsp;AcGeContext::gTol.setEqualPoint(...) to a higher than the default&amp;nbsp;value, which is 1e-10 I think.&lt;/P&gt;&lt;P&gt;Don't forget to save and&amp;nbsp;restore the original value before and after your operations &lt;span class="lia-unicode-emoji" title=":winking_face:"&gt;😉&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 27 Jan 2015 14:19:02 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5484050#M11543</guid>
      <dc:creator>kubitTilo</dc:creator>
      <dc:date>2015-01-27T14:19:02Z</dc:date>
    </item>
    <item>
      <title>Re: Precision of getSplitCurves</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5484071#M11544</link>
      <description>&lt;P&gt;Excellent! This value was 5E-05 as default, that's why it considered a line of a little less than that as uninteresting.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;After setting it&amp;nbsp;to 1E-10 it worked like a charm.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you very much, this was an extremely quick and precise answer and something that wasn't easy to find when you don't know where to look!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Knut&lt;/P&gt;</description>
      <pubDate>Tue, 27 Jan 2015 14:34:46 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5484071#M11544</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2015-01-27T14:34:46Z</dc:date>
    </item>
    <item>
      <title>Re: Precision of getSplitCurves</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5484099#M11545</link>
      <description>&lt;P&gt;I recall getting something similar with small length entities, what i did was to use the boundingbox or extents of the entities and then do a crossing selection, get the intersection points, sort these points, on polylines i always checked the type if not were&amp;nbsp;AcDb::k2dSimplePoly, i converted to a temp light weight poly in order (in my case as far i remember) to make my SplitCurves command to work.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is some partial code from my function - hth:&lt;/P&gt;&lt;PRE&gt;	for (UINT i = 0; i &amp;lt; length1; i++) 
	{
		AcDbObjectId oid;
		ads_name ename;
		acedSSName(ss1, i, ename);
		if (acdbGetObjectId(oid, ename) != Acad::eOk) return;
		AcDbObjectPointer&amp;lt;AcDbCurve&amp;gt; pPoly(oid, AcDb::kForWrite);
		if (pPoly.openStatus() == Acad::eOk) 
		{
			ids.append(oid); // for erase

			AcDbExtents ebox;
			pPoly-&amp;gt;getGeomExtents(ebox);

			AcGePoint3d ll, ur;
			ll = ebox.minPoint();
			ur = ebox.maxPoint();

			acdbWcs2Ucs(asDblArray(ll), asDblArray(ll), false);
			acdbWcs2Ucs(asDblArray(ur), asDblArray(ur), false);

			ads_point ptres, a, b;
			AcGePoint3d m;

			double d = (sqrt(2.0) * acutDistance(asDblArray(ll), asDblArray(ur)) / 2.0);

			acutPolar(asDblArray(ll), acutAngle(asDblArray(ll), asDblArray(ur)), acutDistance(asDblArray(ll), asDblArray(ur)), asDblArray(m));

			acutPolar(asDblArray(m), ((3 * kPi) / 4), d, ptres);
			acdbWcs2Ucs(ptres, a, false);
			acutPolar(asDblArray(m), ((7 * kPi) / 4), d, ptres);
			acdbWcs2Ucs(ptres, b, false);

			ads_name ss2;
			resbuf *rbFilter = acutBuildList(RTDXF0, _T("LINE,ARC,LWPOLYLINE,POLYLINE,CIRCLE,SPLINE,ELLIPSE"), RTNONE);
			if (acedSSGet(_T("_C"), asDblArray(ll), asDblArray(ur), rbFilter, ss2) != RTNORM) 
			//if (acedSSGet(_T("_C"), a, b, rbFilter, ss2) != RTNORM) 
			{
				acutRelRb(rbFilter); 
				return; 
			}
			acutRelRb(rbFilter);

			acedSSDel(ename, ss2);&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;I tested with a arc of the same length and the same split distance, and works here.&lt;/P&gt;</description>
      <pubDate>Tue, 27 Jan 2015 14:49:06 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5484099#M11545</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2015-01-27T14:49:06Z</dc:date>
    </item>
    <item>
      <title>Re: Precision of getSplitCurves</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5485722#M11546</link>
      <description>&lt;P&gt;Thanks for trying, but I don't really see what you do here. There is nothing created, only a lot of calculation?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Anyway, I got a great solution already!&lt;/P&gt;</description>
      <pubDate>Wed, 28 Jan 2015 12:55:54 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5485722#M11546</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2015-01-28T12:55:54Z</dc:date>
    </item>
    <item>
      <title>Re: Precision of getSplitCurves</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5485835#M11547</link>
      <description>&lt;P&gt;Glad you got a solution and yes i realize that, here is my old code, in case someone finds it useful.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;typedef std::vector&amp;lt;AcGePoint3d&amp;gt; PointList;
const double kPi = 3.14159265358979323846;

Acad::ErrorStatus MakeTempLWPoly (AcDb2dPolyline* tmp2dPoly, AcGePoint3dArray &amp;amp;pts, AcDbVoidPtrArray &amp;amp;curveSegments)
{
	Acad::ErrorStatus es;
	AcDbObjectId curSpaceId = acdbCurDwg()-&amp;gt;currentSpaceId();
	AcDbBlockTableRecord *pBlkRec = NULL;
	AcDbCurve* tmpCurve;
	AcGePoint3dArray vertices;
	AcGeDoubleArray bulges;
	AcDb2dVertex* vert = NULL;
	AcDbObjectId vId;
	double c = 0;
	AcDbObjectIterator *vIter;
	double parametro;
	vIter = tmp2dPoly-&amp;gt;vertexIterator();
	for (; !vIter-&amp;gt;done(); vIter-&amp;gt;step()) 
	{
		vId = vIter-&amp;gt;objectId();
		if (tmp2dPoly-&amp;gt;openVertex(vert, vId, AcDb::kForRead) == Acad::eOk)
		{
			if (tmp2dPoly-&amp;gt;getParamAtPoint(vert-&amp;gt;position(), parametro) == Acad::eOk)
			{
				c = vert-&amp;gt;bulge();
				if ((tmp2dPoly-&amp;gt;normal()-AcGeVector3d::kZAxis).length() &amp;gt; 1E-6) c *= -1.0;
				vertices.append(tmp2dPoly-&amp;gt;vertexPosition(*vert));
				bulges.append(c);
			}
			vert-&amp;gt;close();
		}
	}
	if (tmp2dPoly-&amp;gt;isClosed()) 
	{
		if (vertices.first() != vertices.last()) 
		{
			vertices.append(vertices.first());
			bulges.append(bulges.first());
		}
	}
	delete vIter;

	Adesk::Boolean closed;
	if (tmp2dPoly-&amp;gt;isClosed()) 
	{
		closed = Adesk::kTrue;
	}
	else
	{
		closed = Adesk::kFalse;
	}

	AcCmColor col = tmp2dPoly-&amp;gt;color();
	ACHAR* ltype = tmp2dPoly-&amp;gt;linetype();

	AcDbPolyline* pBreakLine = new AcDbPolyline(vertices.length());
	for (int i=0; i &amp;lt; vertices.length(); i++)
	{
		AcGePoint2d pt;
		pt.set(vertices.at(i).x,vertices.at(i).y);
		pBreakLine-&amp;gt;addVertexAt(i,pt,bulges.at(i));
	}

	pBreakLine-&amp;gt;setClosed(closed);
	pBreakLine-&amp;gt;setColor(col);
	pBreakLine-&amp;gt;setLinetype(ltype);
	acutDelString(ltype);
	vertices.removeAll();
	bulges.removeAll();

	es = pBreakLine-&amp;gt;getSplitCurves(pts,curveSegments);
	if (es == Acad::eOk)
	{
		for (int i=0; i &amp;lt; curveSegments.length(); i++) 
		{
			tmpCurve = static_cast&amp;lt;AcDbCurve*&amp;gt;(curveSegments[i]);
			if (tmpCurve) 
			{
				if (acdbOpenObject(pBlkRec,curSpaceId,AcDb::kForWrite) == Acad::eOk) 
				{
					pBlkRec-&amp;gt;appendAcDbEntity(tmpCurve);
					pBlkRec-&amp;gt;close();
					tmpCurve-&amp;gt;close();
				}
			}
		}
		curveSegments.removeAll();
	} 
	else 
	{
		for (int i = 0; i &amp;lt; curveSegments.length(); i++) 
		{
			tmpCurve = static_cast&amp;lt;AcDbCurve*&amp;gt;(curveSegments[i]);
			delete tmpCurve;
		}
		curveSegments.removeAll();
	}
	
	pBreakLine-&amp;gt;close();
	delete pBreakLine;

	return es;
}

static void SplitCurves (void) 
{
	AcDbObjectId curSpaceId = acdbCurDwg()-&amp;gt;currentSpaceId();
	AcDbBlockTableRecord *pBlkRec = NULL;
	AcDbCurve* tmpCurve;
	AcGePoint3dArray pts;
	AcDbVoidPtrArray curveSegments;
	AcGePoint3dArray ints; 
	AcGePoint3dArray duplicates;
	PointList points;
	Acad::ErrorStatus es;
	ads_name ss1;
	AcDbObjectIdArray ids;

	resbuf *rbFilter = acutBuildList(RTDXF0, _T("LINE,ARC,LWPOLYLINE,POLYLINE,CIRCLE,SPLINE,ELLIPSE"), RTNONE);

	if (acedSSGet(NULL, NULL, NULL, rbFilter, ss1) != RTNORM) 
	{
		acutRelRb(rbFilter); 
		return; 
	}

	acutRelRb(rbFilter);

	long length1 = 0;
	if ((acedSSLength(ss1, &amp;amp;length1) != RTNORM) || (length1 == 0)) 
	{
		acedSSFree(ss1);
		return;
	}

	for (UINT i = 0; i &amp;lt; length1; i++) 
	{
		AcDbObjectId oid;
		ads_name ename;
		acedSSName(ss1, i, ename);
		if (acdbGetObjectId(oid, ename) != Acad::eOk) return;
		AcDbObjectPointer&amp;lt;AcDbCurve&amp;gt; pPoly(oid, AcDb::kForWrite);
		if (pPoly.openStatus() == Acad::eOk) 
		{
			ids.append(oid);

			AcDbExtents ebox;
			pPoly-&amp;gt;getGeomExtents(ebox);

			AcGePoint3d ll, ur;
			ll = ebox.minPoint();
			ur = ebox.maxPoint();

			acdbWcs2Ucs(asDblArray(ll), asDblArray(ll), false);
			acdbWcs2Ucs(asDblArray(ur), asDblArray(ur), false);

			ads_point ptres, a, b;
			AcGePoint3d m;

			double d = (sqrt(2.0) * acutDistance(asDblArray(ll), asDblArray(ur)) / 2.0);

			acutPolar(asDblArray(ll), acutAngle(asDblArray(ll), asDblArray(ur)), 
				acutDistance(asDblArray(ll), asDblArray(ur)), asDblArray(m));

			acutPolar(asDblArray(m), ((3 * kPi) / 4), d, ptres);
			acdbWcs2Ucs(ptres, a, false);
			acutPolar(asDblArray(m), ((7 * kPi) / 4), d, ptres);
			acdbWcs2Ucs(ptres, b, false);

			ads_name ss2;
			resbuf *rbFilter = acutBuildList(RTDXF0, _T("LINE,ARC,LWPOLYLINE,POLYLINE,CIRCLE,SPLINE,ELLIPSE"), RTNONE);
			if (acedSSGet(_T("_C"), asDblArray(ll), asDblArray(ur), rbFilter, ss2) != RTNORM) 
			//if (acedSSGet(_T("_C"), a, b, rbFilter, ss2) != RTNORM) 
			{
				acutRelRb(rbFilter); 
				return; 
			}
			acutRelRb(rbFilter);

			acedSSDel(ename, ss2);

			long length2 = 0;
			if ((acedSSLength(ss2, &amp;amp;length2) != RTNORM) || (length2 == 0)) 
			{
				acedSSFree(ss2);
				return;
			}

			for (UINT i = 0; i &amp;lt; length2; i++) 
			{
				AcDbObjectId oid;
				ads_name ename;
				acedSSName(ss2, i, ename);
				if (acdbGetObjectId(oid, ename) != Acad::eOk) return;

				AcDbObjectPointer&amp;lt;AcDbCurve&amp;gt; pEnt(oid, AcDb::kForRead);
				if (pEnt.openStatus() == Acad::eOk) 
				{
					if (pPoly-&amp;gt;intersectWith(pEnt.object(), AcDb::kOnBothOperands, ints) == Acad::eOk) 
					{
						if (!ints.isEmpty()) 
						{
							for (UINT i = 0; i &amp;lt; ints.length(); i++) 
							{
								if (!duplicates.contains(ints.at(i))) 
								{
									duplicates.append(ints.at(i));
									points.push_back(ints.at(i));
								} 
								else 
									continue; 
							}
						}
					}
				}
			}
			acedSSFree(ss2);

			if (!points.empty()) 
			{
				vector&amp;lt;double&amp;gt; distances;
				map&amp;lt;double, AcGePoint3d&amp;gt; m;
				double dist;
				for (UINT i = 0; i &amp;lt; points.size(); i++) 
				{
					AcGePoint3d pt = points.at(i);
					if (pPoly-&amp;gt;getDistAtPoint(pt, dist) == Acad::eOk) 
					{
						m.insert(make_pair(dist, pt));
						distances.push_back(dist);
					}
				}

				map&amp;lt;double, AcGePoint3d&amp;gt;::const_iterator it;
				int cnt = 0;

				std::sort(distances.begin(), distances.end());
				std::vector&amp;lt;AcGePoint3d&amp;gt; _points;

				for (it = m.begin(); it != m.end(); ++it) 
				{
					AcGePoint3d pt;
					it = m.find(distances.at(cnt));
					pt = (*it).second;
					_points.push_back(pt);
					cnt = (1 + cnt);
				}

				m.clear();
				distances.clear();

				for (UINT i = 0; i &amp;lt; _points.size(); i++) 
				{
					AcGePoint3d pt;
					pt = _points.at(i);
					acdbWcs2Ucs(asDblArray(pt), asDblArray(pt), false);
					pts.append(pt);
				}

				if (pPoly-&amp;gt;isKindOf(AcDb2dPolyline::desc()))
				{
					AcDb2dPolyline *tmp2dPoly = AcDb2dPolyline::cast((AcRxObject*)pPoly.object());

					switch (tmp2dPoly-&amp;gt;polyType()) 
					{
					case AcDb::k2dSimplePoly:
						if (pPoly-&amp;gt;getSplitCurves(pts, curveSegments) == Acad::eOk)
						{
							for (UINT i = 0; i &amp;lt; curveSegments.length(); i++) 
							{
								tmpCurve = static_cast&amp;lt;AcDbCurve*&amp;gt;(curveSegments[i]);
								if (tmpCurve) 
								{
									if (acdbOpenObject(pBlkRec, curSpaceId, AcDb::kForWrite) == Acad::eOk) 
									{
										pBlkRec-&amp;gt;appendAcDbEntity(tmpCurve);
										pBlkRec-&amp;gt;close();
										tmpCurve-&amp;gt;close();
									}
								}
							}
							curveSegments.removeAll();
						} 
						else 
						{
							for (UINT i = 0; i &amp;lt; curveSegments.length(); i++) 
							{
								tmpCurve = static_cast&amp;lt;AcDbCurve*&amp;gt;(curveSegments[i]);
								delete tmpCurve;
							}
							curveSegments.removeAll();
						}

						break;
					case AcDb::k2dFitCurvePoly:
						MakeTempLWPoly(tmp2dPoly, pts, curveSegments);
						break;
					case AcDb::k2dQuadSplinePoly:
						MakeTempLWPoly(tmp2dPoly, pts, curveSegments);
						break;
					case AcDb::k2dCubicSplinePoly:
						MakeTempLWPoly(tmp2dPoly, pts, curveSegments);
						break;
					}
				}
				else
				{					
					if (pPoly-&amp;gt;getSplitCurves(pts, curveSegments) == Acad::eOk)
					{
						for (UINT i = 0; i &amp;lt; curveSegments.length(); i++) 
						{
							tmpCurve = static_cast&amp;lt;AcDbCurve*&amp;gt;(curveSegments[i]);
							if (tmpCurve) 
							{
								if (acdbOpenObject(pBlkRec, curSpaceId, AcDb::kForWrite) == Acad::eOk) 
								{
									pBlkRec-&amp;gt;appendAcDbEntity(tmpCurve);
									pBlkRec-&amp;gt;close();
									tmpCurve-&amp;gt;close();
								}
							}
						}
						curveSegments.removeAll();
					} 
					else 
					{
						for (UINT i = 0; i &amp;lt; curveSegments.length(); i++) 
						{
							tmpCurve = static_cast&amp;lt;AcDbCurve*&amp;gt;(curveSegments[i]);
							delete tmpCurve;
						}
						curveSegments.removeAll();
					}
				}

				_points.clear();
				points.clear();
			}
			if (!ints.isEmpty())
				ints.removeAll();

			if (!duplicates.isEmpty())
				duplicates.removeAll();

			if (!curveSegments.isEmpty())
				curveSegments.removeAll();

			if (!pts.isEmpty())
				pts.removeAll();
		}
	}
	acedSSFree(ss1);

	if (!ids.isEmpty())
	{
		for (UINT i = 0; i &amp;lt; ids.length(); i++)
		{
			AcDbObjectPointer&amp;lt;AcDbEntity&amp;gt; pEnt(ids[i], AcDb::kForWrite);
			if (pEnt.openStatus() == Acad::eOk)
			{
				pEnt-&amp;gt;erase();
			}
		}
		ids.removeAll();
	}
}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;Also, a simple version in C#:&lt;/P&gt;&lt;PRE&gt;#region Split Curves
[CommandMethod("SPLITCURVES")]
public void cmd_splitCurves()
{
    var editor = AcadApp.DocumentManager.MdiActiveDocument.Editor;
    var tv = new[] { new TypedValue((int)DxfCode.Start, "LINE,ARC,LWPOLYLINE,POLYLINE,CIRCLE,SPLINE,ELLIPSE") };
    var filter = new SelectionFilter(tv);
    const string curveObjects = "curve objects";
    var options = new PromptSelectionOptions
    {
        MessageForAdding = string.Format("\nAdd {0} to selection", curveObjects),
        MessageForRemoval = string.Format("\nRemove {0} from selection", curveObjects),
        AllowDuplicates = false,
        RejectObjectsFromNonCurrentSpace = true
    };
    var mainSelection = editor.GetSelection(options, filter);
    if (mainSelection.Status != PromptStatus.OK) return;

    using (var transaction = editor.Document.Database.TransactionManager.StartTransaction())
    {
        var blockTableRecord = transaction.GetObject(editor.Document.Database.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
        if (blockTableRecord != null)
        {
            foreach (var mainObjectId in mainSelection.Value.GetObjectIds())
            {
                var points = new Point3dCollection();
                var dictionary = new SortedDictionary&amp;lt;double, Point3d&amp;gt;();

                var mainCurve = transaction.GetObject(mainObjectId, OpenMode.ForWrite) as Curve;
                if (mainCurve == null) continue;

                var extents = mainCurve.GeometricExtents;
                var minPoint = extents.MinPoint;
                var maxPoint = extents.MaxPoint;

                var subSelection = editor.SelectCrossingWindow(minPoint, maxPoint, filter);
                if (subSelection.Status != PromptStatus.OK) continue;

                foreach (var subObjectId in subSelection.Value.GetObjectIds())
                {
                    var subCurve = transaction.GetObject(subObjectId, OpenMode.ForRead) as Curve;
                    if (subCurve == null) continue;
                    var intersections = new Point3dCollection();
                    mainCurve.IntersectWith(subCurve, Intersect.OnBothOperands, intersections, IntPtr.Zero, IntPtr.Zero);
                    if (intersections.Count &amp;lt;= 0) continue;

                    foreach (Point3d intersection in intersections)
                    {
                        if (points.Contains(intersection)) continue;

                        points.Add(intersection);
                    }
                }
                subSelection.Value.Dispose();

                if (points.Count &amp;lt;= 0) continue;

                foreach (Point3d point in points)
                {
                    var distance = mainCurve.GetDistAtPoint(point);
                    if (dictionary.ContainsKey(distance)) continue;

                    dictionary.Add(distance, point);
                }

                if (!dictionary.Any()) continue;

                var splitPoints = new Point3dCollection(dictionary.Values.ToArray());
                var splitCurves = mainCurve.GetSplitCurves(splitPoints);
                foreach (DBObject splitCurve in splitCurves)
                {
                    var curve = splitCurve as Curve;
                    if (curve == null) continue;

                    blockTableRecord.AppendEntity(curve);
                    transaction.AddNewlyCreatedDBObject(curve, true);
                }
            }
        }
        transaction.Commit();
    }
}
#endregion&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;HTH.&lt;/P&gt;</description>
      <pubDate>Wed, 28 Jan 2015 13:53:45 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5485835#M11547</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2015-01-28T13:53:45Z</dc:date>
    </item>
    <item>
      <title>Re: Precision of getSplitCurves</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5485856#M11548</link>
      <description>&lt;P&gt;On any of my possible replies with code on these customization forums, i need to figure out how the insert-code works, so far what i see as a result is not good, is this how it works or displayed on this site?&lt;/P&gt;</description>
      <pubDate>Wed, 28 Jan 2015 14:01:17 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5485856#M11548</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2015-01-28T14:01:17Z</dc:date>
    </item>
    <item>
      <title>Re: Precision of getSplitCurves</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5485906#M11549</link>
      <description>&lt;P&gt;Seems like all your code was included this time. I'll look at it in 4-5 hours.&lt;/P&gt;</description>
      <pubDate>Wed, 28 Jan 2015 14:25:32 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5485906#M11549</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2015-01-28T14:25:32Z</dc:date>
    </item>
    <item>
      <title>Re: Precision of getSplitCurves</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5491738#M11550</link>
      <description>&lt;P&gt;Sorry, but I didnt' really see what you achieve with this code, LE3. And the gtol trick worked for now, so I'll let it be like that.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you anyway!&lt;/P&gt;</description>
      <pubDate>Mon, 02 Feb 2015 15:17:30 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/precision-of-getsplitcurves/m-p/5491738#M11550</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2015-02-02T15:17:30Z</dc:date>
    </item>
  </channel>
</rss>

