public static re.Element WallByProfile(List <dg.PolyCurve> closedProfiles, re.WallType wallType, re.Level level) { rdb.Document doc = DocumentManager.Instance.CurrentDBDocument; // Try to get a wall from trace var wallElem = ElementBinder.GetElementFromTrace <rdb.Wall>(doc); dg.PolyCurve closedProfile = closedProfiles[0]; if (!closedProfile.IsClosed || !closedProfile.IsPlanar) { DeleteWall(wallElem, true); return(null); } // Verify the wall profile is vertical dg.Plane basePlane = closedProfile.BasePlane(); if (Math.Abs(basePlane.Normal.Z) > 0.0001) { DeleteWall(wallElem, true); return(null); } // Convert Polycurve segments to a list of Revit curves; List <rdb.Curve> rCrvs = new List <rdb.Curve>(); foreach (dg.PolyCurve pCrv in closedProfiles) { List <dg.Curve> dCrvs = pCrv.Curves().ToList(); foreach (dg.Curve dCrv in dCrvs) { rdb.Curve rCrv = dCrv.ToRevitType(); rCrvs.Add(rCrv); } } TransactionManager.Instance.EnsureInTransaction(doc); DeleteWall(wallElem, false); // Build a wall try { rdb.Wall w = rdb.Wall.Create(doc, rCrvs, new rdb.ElementId(wallType.Id), new rdb.ElementId(level.Id), false); re.Wall rWall = re.ElementWrapper.ToDSType(w, true) as re.Wall; TransactionManager.Instance.TransactionTaskDone(); ElementBinder.CleanupAndSetElementForTrace(doc, w); return(rWall); } catch (Exception ex) { TransactionManager.Instance.TransactionTaskDone(); ElementBinder.CleanupAndSetElementForTrace(doc, null); } return(null); }