Revit API Forum
Welcome to Autodesk’s Revit API Forums. Share your knowledge, ask questions, and explore popular Revit API topics.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

FilledRegion.Create returning Boundaries are self-intersecting.

2 REPLIES 2
Reply
Message 1 of 3
ivo.zagar
961 Views, 2 Replies

FilledRegion.Create returning Boundaries are self-intersecting.

Hi,

 

I have simple code where I want to create FilledRegion. Whatever I do I get back: Boundaries are self-intersecting.

 

Here's my code:

IList<RDB.CurveLoop> boundaries = new List<RDB.CurveLoop>();
RDB.CurveLoop curve = CreateCurve(doc, new RDB.XYZ(0, 0, 0), new RDB.XYZ(0, 10, 0));
boundaries.Add(curve);
 
RDB.CurveLoop curve2 = CreateCurve(doc, new RDB.XYZ(0, 10, 0), new RDB.XYZ(10, 10, 0));
boundaries.Add(curve2);
 
RDB.CurveLoop curve3 = CreateCurve(doc, new RDB.XYZ(10, 10, 0), new RDB.XYZ(0, 0, 0));
boundaries.Add(curve3);
 
CreateFilledRegion(doc, boundaries);

And here are two external functions:

private RDB.CurveLoop CreateCurve(RDB.Document doc, RDB.XYZ start, RDB.XYZ end)
{
    RDB.Line line = doc.Application.Create.NewLine(start, end, true);
    RDB.CurveLoop curve = new RDB.CurveLoop();
    curve.Append(line);
 
    XLIB.Geometry.CreateDetailLine(doc, start, end);
    return curve;
}
 
private void CreateFilledRegion(RDB.Document doc, IList<RDB.CurveLoop> boundaries)
{
    RDB.Element t = XLIB.Selection.GetTypes(doc, typeof(RDB.FilledRegionType)).FirstOrDefault();
    RDB.FilledRegion.Create(doc, t.Id, doc.ActiveView.Id, boundaries);
}

 

Any thaugts?

 

Cheers,

Ivo

2 REPLIES 2
Message 2 of 3
enonrick
in reply to: ivo.zagar

this is my working code snippet:

 

 

newCurveLoop = new List<CurveLoop>();
curveLoop = new CurveLoop();
for (int i = 0; i < LineCount; i++)
{
..........
.......... if ((LINE_TYPE)lineType == LINE_TYPE.LINEAR) curveLoop.Append(_document.Application.Create.NewLine(new XYZ(x1, y1, 0), new XYZ(x2, y2, 0), true)); else if ((LINE_TYPE)lineType == LINE_TYPE.ARC) curveLoop.Append(_document.Application.Create.NewArc(new XYZ(x1, y1, 0), radius, startRadian, endRadian, new XYZ(1, 0, 0), new XYZ(0, 1, 0))); } newCurveLoop.Add(curveLoop); FilledRegion.Create(_document, materialId, view.Id, newCurveLoop);

 

I'm just wondering, why are you recreated curveloop in each CreateCurve funtion,link this

RDB.CurveLoop curve = new RDB.CurveLoop();

just try it.

Message 3 of 3
ivo.zagar
in reply to: ivo.zagar

Thanks, that was it: only one CurveLoop.

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk DevCon in Munich May 28-29th


Rail Community