I tried what you suggested and it works fine, also, using the CPlane or translating the World Plane seems to create no difference (as expected).

Unfortunately the problem seems to be more complicated than I originally thought. Since I’m dealing with multiple clipping planes the approach “translate the middle an see if middle.Z is positive” doesn’t exactly work (though is definitely the best solution I have for now).

Imagine a line clipping multiple planes more than once (think a circle with r>distance between opposite facing clipPlanes), By taking the positive portion against each of the clipping planes I effectively end up having two “half circles”. For some reason I’m not able to calculate the boolean intersection between the two breps, and when displaying them I end up “recreating” the whole shape, at least visually, which extends beyond the clipping planes.

I attach some code that uses your good idea of the translation (using the CPlane as domain basis, as suggested by @Helvetosaur)

```
private void GetBrepFromVisibleCurve(Curve crv, out Brep curveBrep)
{
var tmp1 = new Brep();//all the segments
var tmp2 = new Brep();//only the visible segments
for (int i = 0; i < clipIDList.Count; i++)
{
var clipping = new ObjRef(clipIDList[i]); //each of the clipping planes
var intersections = Intersection.CurvePlane(crv, clipping.ClippingPlaneSurface().Plane, 1e-5);
if (intersections != null)
{
var splitList = new List<Double>();
foreach (var inters in intersections)
{
if (inters.IsPoint)
{
splitList.Add(inters.ParameterA);//Because I can have more than 1 inters. with one plane
}
}
var pieces = crv.Split(splitList);
foreach (var segment in pieces)
{
tmp1.AddEdgeCurve(segment);
var mid = segment.PointAt(segment.Domain.Mid);
//determine the right side to add to the list by translating an internal point
//of the segment (mid) on the clipping plane ref frame
var trs = Transform.ChangeBasis(doc.Views.ActiveView.ActiveViewport.ConstructionPlane(), clipping.ClippingPlaneSurface().Plane);
mid.Transform(trs);
if (mid.Z > 0)
{
tmp2.AddEdgeCurve(segment);
}
}
}
}
var intersection = Brep.CreateBooleanIntersection(tmp1, tmp2, 1);//<---EMPTY SET
//....standardize,compact the brep[], display....
```