ModelCurve CreateModelCurve( Curve curve, XYZ origin, XYZ normal) { Plane plane = _creapp.NewPlane(normal, origin); SketchPlane sketchPlane = SketchPlane.Create( _doc, plane); return(_credoc.NewModelCurve( curve, sketchPlane)); }
SketchPlane CreateSketchPlane( Document doc, XYZ normal, XYZ origin) { //Plane geometryPlane = doc.Application.Create.NewPlane( normal, origin ); // 2016 Plane geometryPlane = Plane.CreateByNormalAndOrigin( normal, origin); // 2017 //return doc.Create.NewSketchPlane( geometryPlane ); // 2013 return(SketchPlane.Create(doc, geometryPlane)); // 2014 }
public static void NewLine_withoutTransaction(this Document doc, Line line) { var dir = line.Direction; var origin = line.Origin; var norm = default(XYZ); norm = dir.getRandomNorm(); var plan = Plane.CreateByNormalAndOrigin(norm, origin); var sketchplane = SketchPlane.Create(doc, plan); doc.Create.NewModelCurve(line, sketchplane); }
/// <summary> /// Credits: Grevit /// Creates a new Sketch Plane from a Curve /// https://github.com/grevit-dev/Grevit/blob/3c7a5cc198e00dfa4cc1e892edba7c7afd1a3f84/Grevit.Revit/Utilities.cs#L402 /// </summary> /// <param name="document">Active Document</param> /// <param name="curve">Curve to get plane from</param> /// <returns>Plane of the curve</returns> public static SketchPlane NewSketchPlaneFromCurve(Document document, Autodesk.Revit.DB.Curve curve) { XYZ startPoint = curve.GetEndPoint(0); XYZ endPoint = curve.GetEndPoint(1); // If Start end Endpoint are the same check further points. int i = 2; while (startPoint == endPoint && endPoint != null) { endPoint = curve.GetEndPoint(i); i++; } // Plane to return Plane plane; // If Z Values are equal the Plane is XY if (startPoint.Z == endPoint.Z) { plane = CreatePlane(document, XYZ.BasisZ, startPoint); } // If X Values are equal the Plane is YZ else if (startPoint.X == endPoint.X) { plane = CreatePlane(document, XYZ.BasisX, startPoint); } // If Y Values are equal the Plane is XZ else if (startPoint.Y == endPoint.Y) { plane = CreatePlane(document, XYZ.BasisY, startPoint); } // Otherwise the Planes Normal Vector is not X,Y or Z. // We draw lines from the Origin to each Point and use the Plane this one spans up. else { CurveArray curves = new CurveArray(); curves.Append(curve); curves.Append(Autodesk.Revit.DB.Line.CreateBound(new XYZ(0, 0, 0), startPoint)); curves.Append(Autodesk.Revit.DB.Line.CreateBound(endPoint, new XYZ(0, 0, 0))); #if (Revit2015 || Revit2016 || Revit2017) plane = document.Application.Create.NewPlane(curves); #else plane = Plane.CreateByThreePoints(startPoint, new XYZ(0, 0, 0), endPoint); #endif } // return new Sketchplane return(SketchPlane.Create(document, plane)); }
ModelCurve CreateModelCurve( Curve curve, XYZ origin, XYZ normal) { //Plane plane = _creapp.NewPlane( normal, origin ); // 2016 Plane plane = Plane.CreateByNormalAndOrigin(normal, origin); // 2020 SketchPlane sketchPlane = SketchPlane.Create( _doc, plane); return(_credoc.NewModelCurve( curve, sketchPlane)); }
public static IList <Solid> CreateSolid(Document doc, FamilyInstance familyInstance, Transform transform) { IList <Solid> solids = new List <Solid>(); try { Curve curve = GetCurvemaxfamily(familyInstance); Element ele = doc.GetElement(familyInstance.Id); string[] parameters = new string[] { "DIM_WWF_YY", "DIM_LENGTH" }; Parameter pa = LookupElementParameter(ele, parameters); double lengthcurve = pa.AsDouble(); XYZ starpointfa = new XYZ(lengthcurve / 2, 0, 0); XYZ endpointfa = new XYZ(-lengthcurve / 2, 0, 0); XYZ startpoint = transform.OfPoint(starpointfa); XYZ endpoint = transform.OfPoint(endpointfa); XYZ norm = new XYZ((startpoint.X - endpoint.X), (startpoint.Y - endpoint.Y), (startpoint.Z - endpoint.Z)); Plane plane = Plane.CreateByNormalAndOrigin(norm, startpoint); Transaction newtran = new Transaction(doc, "ss"); newtran.Start(); SketchPlane stk = SketchPlane.Create(doc, plane); XYZ pt1 = startpoint.Add(0.01 * plane.XVec).Add(0.01 * plane.YVec); XYZ pt2 = startpoint.Add(0.01 * plane.YVec); XYZ pt3 = startpoint.Add(-0.01 * plane.YVec); XYZ pt4 = startpoint.Add(0.01 * plane.XVec).Add(-0.01 * plane.YVec); XYZ pt5 = (-1) * norm; Line lineleft = Line.CreateBound(pt1, pt2); Line linetop = Line.CreateBound(pt2, pt3); Line lineright = Line.CreateBound(pt3, pt4); Line linebot = Line.CreateBound(pt4, pt1); CurveLoop profile = new CurveLoop(); profile.Append(lineleft); profile.Append(linetop); profile.Append(lineright); profile.Append(linebot); IList <CurveLoop> listloop1 = new List <CurveLoop>(); listloop1.Add(profile); Solid solid = GeometryCreationUtilities.CreateExtrusionGeometry(listloop1, pt5, lengthcurve); newtran.Commit(); solids.Add(solid); } catch { solids = null; } return(solids); }
/// <summary> /// Creates a new sketch plane. /// </summary> /// <param name="doc"></param> /// <param name="line"></param> /// <returns></returns> public static SketchPlane CreateSketchPlane(this Document doc, Line line) { if (doc is null) { throw new ArgumentNullException(nameof(doc)); } if (line is null) { throw new ArgumentNullException(nameof(line)); } return(SketchPlane.Create(doc, line.CreatePlane())); }
/// <summary> /// Creates a new sketch plane. /// </summary> /// <param name="doc"></param> /// <param name="pt"></param> /// <returns></returns> public static SketchPlane CreateSketchPlane(this Document doc, XYZ pt) { if (doc == null) { throw new ArgumentNullException(nameof(doc)); } if (pt == null) { throw new ArgumentNullException(nameof(pt)); } return(SketchPlane.Create(doc, pt.CreatePlane())); }
/// <summary> /// Creates a new sketch plane. /// </summary> /// <param name="doc"></param> /// <param name="plane"></param> /// <returns></returns> public static SketchPlane CreateSketchPlane(this Document doc, Plane plane) { if (doc == null) { throw new ArgumentNullException(nameof(doc)); } if (plane == null) { throw new ArgumentNullException(nameof(plane)); } return(SketchPlane.Create(doc, plane)); }
private static ElementId createModelCurve(Document document, Curve curve, SketchPlane sp = null) { Line line = curve as Line; Arc arc = curve as Arc; Ellipse ellipse = curve as Ellipse; HermiteSpline spline = curve as HermiteSpline; NurbSpline nbSpline = curve as NurbSpline; if (line != null && null == sp) { XYZ normal = getVertVec(line.Direction).Normalize(); XYZ origin = line.GetEndPoint(0); sp = SketchPlane.Create(document, Plane.CreateByNormalAndOrigin(normal, origin)); } else if (arc != null && null == sp) { XYZ normal = arc.Normal; sp = SketchPlane.Create(document, Plane.CreateByNormalAndOrigin(normal, arc.Center)); } else if (ellipse != null && null == sp) { XYZ normal = ellipse.Normal; sp = SketchPlane.Create(document, Plane.CreateByNormalAndOrigin(normal, ellipse.Center)); } else if (spline != null && null == sp) { Transform tran = spline.ComputeDerivatives(0, false); XYZ normal = getVertVec(tran.BasisX).Normalize(); XYZ origin = spline.GetEndPoint(0); sp = SketchPlane.Create(document, Plane.CreateByNormalAndOrigin(normal, origin)); } else if (nbSpline != null && null == sp) { Transform tran = nbSpline.ComputeDerivatives(0, false); XYZ normal = getVertVec(tran.BasisX).Normalize(); XYZ origin = nbSpline.GetEndPoint(0); sp = SketchPlane.Create(document, Plane.CreateByNormalAndOrigin(normal, origin)); } if (sp == null) { throw new ArgumentException("Not valid sketchplane to create curve:" + curve.GetType().Name); } // // create model line with curve and the specified sketch plane. ModelCurve mCurve = document.Create.NewModelCurve(curve, sp); return((null != mCurve) ? mCurve.Id : ElementId.InvalidElementId); }
/// <summary> /// Create a sketch plane via given normal and origin points. /// </summary> /// <param name="normal">The vector for normal of sketch plane.</param> /// <param name="origin">The vector for origin of sketch plane.</param> /// <returns>The new sketch plane created by specific normal and origin.</returns> internal SketchPlane CreateSketchPlane(Autodesk.Revit.DB.XYZ normal, Autodesk.Revit.DB.XYZ origin) { // First create a Geometry.Plane which need in NewSketchPlane() method Plane geometryPlane = Plane.CreateByNormalAndOrigin(normal, origin); // Then create a sketch plane using the Geometry Plane Transaction createSketchPlane = new Transaction(m_document.Document, "Create a sketch plane."); createSketchPlane.Start(); SketchPlane plane = SketchPlane.Create(m_document.Document, geometryPlane); createSketchPlane.Commit(); return(plane); }
public static void NewLine(this Document doc, Line line) { var dir = line.Direction; var origin = line.Origin; var norm = default(XYZ); norm = dir.getRandomNorm(); #region oldFun //if (dir.IsParallel(XYZ.BasisX)) //{ // norm = dir.CrossProduct(XYZ.BasisY).Normalize(); // //MessageBox.Show("X"); //} //else if (dir.IsParallel(XYZ.BasisY)) //{ // norm = dir.CrossProduct(XYZ.BasisX).Normalize(); // //MessageBox.Show("Y"); //} //else if (dir.IsParallel(XYZ.BasisZ)) //{ // norm = dir.CrossProduct(XYZ.BasisX); // //MessageBox.Show("Z"); //} //else //{ // norm = dir.CrossProduct(XYZ.BasisX); //} #endregion var plan = default(Plane); // Plane.CreateByNormalAndOrigin(norm, origin); #if Revit2016 plan = new Plane(norm, origin); #endif #if Revit2019 plan = Plane.CreateByNormalAndOrigin(norm, origin); #endif doc.Invoke(m => { var sketchplane = SketchPlane.Create(doc, plan); doc.Create.NewModelCurve(line, sketchplane); }, "aa"); }
public void PickPoint(UIDocument uidoc, Application app) { View activeView = uidoc.ActiveView; SketchPlane sketch = activeView.SketchPlane; ObjectSnapTypes snapTypes = ObjectSnapTypes.Points | ObjectSnapTypes.Nearest | ObjectSnapTypes.Perpendicular; XYZ startPoint; XYZ endPoint; Plane geometryPlane = Plane.CreateByNormalAndOrigin(XYZ.BasisZ, XYZ.Zero); sketch = SketchPlane.Create(uidoc.Document, geometryPlane); uidoc.Document.ActiveView.SketchPlane = sketch; uidoc.Document.ActiveView.ShowActiveWorkPlane(); try //Выбор точек { startPoint = uidoc.Selection.PickPoint(snapTypes, "Select start point"); endPoint = uidoc.Selection.PickPoint(snapTypes, "Select end point"); } catch (Autodesk.Revit.Exceptions.OperationCanceledException oc) { Console.WriteLine(oc.Message); return; } catch (Autodesk.Revit.Exceptions.InvalidOperationException oe) { Console.WriteLine(oe.Message); TaskDialog.Show("Revit", "No work plane set in current view."); return; } catch (Autodesk.Revit.Exceptions.ArgumentNullException n) { Console.WriteLine(n.Message); return; } double dist = startPoint.DistanceTo(endPoint); string distance = "Distance is " + dist.ToString(); string strCoords = "Selected start point is " + startPoint.ToString() + "\nSelected end point is " + endPoint.ToString() + distance; Line line = Line.CreateBound(startPoint, endPoint); CreateLinearDimension1(uidoc.Document, startPoint, endPoint, sketch, app); // TaskDialog.Show("Revit", strCoords); }
private Result SetWorkPlaneFromAnyFace(UIDocument uiDoc, Document doc) { // 先在界面中选择一个平面 Element elem; Face fc; var refe = Selector.SelectFace(uiDoc, out elem, out fc); // if (refe != null) { using (Transaction transDoc = new Transaction(doc, "设置工作平面")) { try { transDoc.Start(); View v = uiDoc.ActiveView; // 将原工作平面删除 SketchPlane sp = v.SketchPlane; if (sp != null && sp.IsValidObject) { // doc.Delete(sp.Id); // 不能删除上面的工作平面,因为有一些模型线是依附于工作平面对象绘制出来的, // 当将工作平面删除后,那些依附在其上的模型线等对象也会被删除。 } // 构造一个平面 Plane plane = new Plane(norm: fc.ComputeNormal(refe.UVPoint), origin: refe.GlobalPoint); // 将得到的平面定义为新的工作平面 sp = SketchPlane.Create(doc, plane); v.SketchPlane = sp; // 显示工作平面 v.ShowActiveWorkPlane(); transDoc.Commit(); return(Result.Succeeded); } catch (Exception ex) { transDoc.RollBack(); return(Result.Failed); } } } return(Result.Succeeded); }
/// <summary> /// Draw the trapezoid wire-frame with Revit Model curves. /// It's for debug use, to help developer see the exact location. /// </summary> /// <param name="revitDoc">Revit DB Document</param> public void Draw(Document revitDoc) { XYZ topDir = (Top.GetEndPoint(1) - Top.GetEndPoint(0)).Normalize(); XYZ verticalDir = (Vertical.GetEndPoint(0) - Vertical.GetEndPoint(1)).Normalize(); XYZ normal = topDir.CrossProduct(verticalDir); SketchPlane sketchplane = SketchPlane.Create(revitDoc, new Plane(normal, Vertical.GetEndPoint(0))); CurveArray curves = new CurveArray(); curves.Append(Top.Clone()); curves.Append(Vertical.Clone()); curves.Append(Bottom.Clone()); curves.Append(Slanted.Clone()); revitDoc.Create.NewModelCurveArray(curves, sketchplane); }
private static void CreateRevitElementInRevit(Autodesk.Revit.DB.Curve geomLine) { // var OriginShit = geomLine.ComputeDerivatives(0, true); //var normal = OriginShit.BasisZ; // var origin = OriginShit.Origin; // XYZ origin = new XYZ(0, 0, 0); // XYZ normal = new XYZ(0, 1, 0); var Origin = geomLine.GetEndPoint(0); Plane geomPlane = Plane.CreateByNormalAndOrigin(XYZ.BasisZ, Origin); // Create a sketch plane in current document SketchPlane sketch = SketchPlane.Create(Command.uidoc.Document, geomPlane); // Create a ModelLine element using the created geometry line and sketch plane var line = Command.uidoc.Document.Create.NewModelCurve(geomLine, sketch); }
private void drawLines(Document doc, List <Line> lines) { var defaultNoteTypeId = doc.GetDefaultElementTypeId(ElementTypeGroup.TextNoteType); bool isReset = false; var counter = 0; for (int i = 0; i < lines.Count; i++) { var line = lines[i]; var plane = new Plane(XYZ.BasisY.Negate(), line.GetEndPoint(0)); var sketchPlane = SketchPlane.Create(doc, plane); var noteOptions = new TextNoteOptions() { HorizontalAlignment = HorizontalTextAlignment.Center, TypeId = defaultNoteTypeId }; var no = TextNote.Create(doc, doc.ActiveView.Id, line.GetEndPoint(0) + line.Direction * line.Length / 2, counter.ToString(), noteOptions); no.Width = no.Width / 2; var direction = TextNote.Create(doc, doc.ActiveView.Id, line.GetEndPoint(1) - line.Direction * line.Length * 0.05, "X", noteOptions); doc.Create.NewModelCurve(line, sketchPlane); if (counter == 3 && !isReset) { counter = 0; isReset = true; } else { counter++; } } }
/// <summary> /// Return a sketch plane through the given origin /// point with the given normal, either by creating /// a new one or reusing an existing one. /// </summary> static SketchPlane GetSketchPlane( Document doc, XYZ origin, XYZ normal) { string s = "reusing"; // If we could reliably set the sketch plane Name // property or find some other relaible marker // that is reflected in a parameter, we could // replace the sketchPlane.Name.Equals check in // SketchPlaneMatches by a parameter filter in // the filtered element collector framework // to move the test into native Revit code // instead of post-processing in .NET, which // would give a 50% performance enhancement. SketchPlane sketchPlane = new FilteredElementCollector(doc) .OfClass(typeof(SketchPlane)) .Cast <SketchPlane>() .FirstOrDefault <SketchPlane>(x => SketchPlaneMatches(x, origin, normal)); if (null == sketchPlane) { //Plane plane = new Plane( normal, origin ); // 2016 Plane plane = Plane.CreateByNormalAndOrigin( normal, origin); // 2018 sketchPlane = SketchPlane.Create(doc, plane); //sketchPlane.Name = string.Format( // "{0} {1}", _sketch_plane_name_prefix, // _sketch_plane_creation_counter++ ); ++_sketch_plane_creation_counter; s = "created"; } Debug.Print("GetSketchPlane: {0} '{1}' ({2})", s, sketchPlane.Name, _sketch_plane_creation_counter); return(sketchPlane); }
public Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Application app = uiapp.Application; Document doc = uidoc.Document; List <RG.Point3d> pts = new List <RG.Point3d> { new RG.Point3d(0, 0, 0), new RG.Point3d(5, 10, 0), new RG.Point3d(15, 0, 0), new RG.Point3d(20, 0, 0) }; RG.PolylineCurve pc = new RG.PolylineCurve(pts); RG.NurbsCurve nurb = pc.ToNurbsCurve(); nurb.IncreaseDegree(3); var knots = ToDoubleArray(nurb.Knots, nurb.Degree); var controlPoints = ToXYZArray(nurb.Points, 1); var weights = nurb.Points.ConvertAll(x => x.Weight); XYZ normal = new XYZ(0, 0, 1); XYZ origin = new XYZ(0, 0, 0); Plane rvtPlane = Plane.CreateByNormalAndOrigin(normal, origin); //var plane = sketchPlane.GetPlane().ToPlane(); Curve rvtN = NurbSpline.CreateCurve(nurb.Degree, knots, controlPoints); using (Transaction t = new Transaction(doc, "a")) { t.Start(); SketchPlane sketchPlane = SketchPlane.Create(doc, rvtPlane); ModelCurve mc = doc.Create.NewModelCurve(rvtN, sketchPlane); TaskDialog.Show("r", mc.Id.ToString()); t.Commit(); } return(Result.Succeeded); }
/// <summary> /// Метод исполнения команды /// </summary> /// <param name="listElements">Лист с элементами элементов</param> public void DoWork(List <ElementModel> listElements) { var curveRefDict = GetEdges(listElements).Where(t => t != default).ToList(); var trName = Language.GetFunctionLocalName(ModPlusConnector.Instance); if (string.IsNullOrEmpty(trName)) { trName = "CreateElevations"; } using (var tr = new Transaction(_doc, trName)) { tr.Start(); _activeView.SketchPlane = SketchPlane.Create( _doc, Plane.CreateByNormalAndOrigin(_activeView.ViewDirection, _activeView.Origin)); // Выберите точку конца var endPoint = _uiDoc.Selection.PickPoint( ObjectSnapTypes.WorkPlaneGrid | ObjectSnapTypes.Centers | ObjectSnapTypes.Endpoints | ObjectSnapTypes.Midpoints | ObjectSnapTypes.Points | ObjectSnapTypes.Perpendicular, Language.GetItem("h3")); var zList = new List <double>(); foreach (var(curve, reference) in curveRefDict) { if (!zList.Contains(Math.Round(curve.GetEndPoint(0).Z, 4))) { zList.Add(Math.Round(curve.GetEndPoint(0).Z, 4)); var startPoint = curve.GetEndPoint(1); var bendPoint = curve.GetEndPoint(1); _doc.Create.NewSpotElevation( _doc.ActiveView, reference, startPoint, bendPoint, endPoint, endPoint, true); } } tr.Commit(); } }
/// <summary> /// Credits: Grevit /// Creates a new Sketch Plane from a Curve /// https://github.com/grevit-dev/Grevit/blob/3c7a5cc198e00dfa4cc1e892edba7c7afd1a3f84/Grevit.Revit/Utilities.cs#L402 /// </summary> /// <param name="curve">Curve to get plane from</param> /// <returns>Plane of the curve</returns> private SketchPlane NewSketchPlaneFromCurve(DB.Curve curve, Document doc) { XYZ startPoint = curve.GetEndPoint(0); XYZ endPoint = curve.GetEndPoint(1); // If Start end Endpoint are the same check further points. int i = 2; while (startPoint == endPoint && endPoint != null) { endPoint = curve.GetEndPoint(i); i++; } // Plane to return DB.Plane plane; // If Z Values are equal the Plane is XY if (startPoint.Z == endPoint.Z) { plane = CreatePlane(XYZ.BasisZ, startPoint); } // If X Values are equal the Plane is YZ else if (startPoint.X == endPoint.X) { plane = CreatePlane(XYZ.BasisX, startPoint); } // If Y Values are equal the Plane is XZ else if (startPoint.Y == endPoint.Y) { plane = CreatePlane(XYZ.BasisY, startPoint); } // Otherwise the Planes Normal Vector is not X,Y or Z. // We draw lines from the Origin to each Point and use the Plane this one spans up. else { CurveArray curves = new CurveArray(); curves.Append(curve); curves.Append(DB.Line.CreateBound(new XYZ(0, 0, 0), startPoint)); curves.Append(DB.Line.CreateBound(endPoint, new XYZ(0, 0, 0))); plane = DB.Plane.CreateByThreePoints(startPoint, new XYZ(0, 0, 0), endPoint); } return(SketchPlane.Create(doc, plane)); }
private void CreateModelLine(Document doc, XYZ p1, XYZ p2) { using (var line = Line.CreateBound(p1, p2)) { using (var skPlane = SketchPlane.Create(doc, this.ToPlane(p1, p2))) { if (doc.IsFamilyDocument) { doc.FamilyCreate.NewModelCurve(line, skPlane); } else { doc.Create.NewModelCurve(line, skPlane); } } } }
public static List <ModelLine> DrawLines(Document doc, IEnumerable <Line> lines) { List <ModelLine> modelLines = new List <ModelLine>(); SubTransaction st = new SubTransaction(doc); st.Start(); XYZ lastNormal = new XYZ(999, 992, 200); // random Plane p = null; SketchPlane sp = null; foreach (Line ln in lines) { if (ln.Length < (1.0 / 24.0 / 12.0)) { continue; // too short for Revit! } // see what the plane is XYZ vector = ln.Direction; XYZ normal = null; if (vector.Normalize().IsAlmostEqualTo(XYZ.BasisZ) == false) { normal = vector.CrossProduct(XYZ.BasisZ); } else { normal = vector.CrossProduct(XYZ.BasisX); } if (lastNormal.IsAlmostEqualTo(normal) == false) { p = Plane.CreateByNormalAndOrigin(normal, ln.GetEndPoint(0)); sp = SketchPlane.Create(doc, p); normal = lastNormal; } ModelCurve curve = doc.Create.NewModelCurve(ln, sp); modelLines.Add(curve as ModelLine); } st.Commit(); return(modelLines); }
/// <summary> /// Create line element /// </summary> /// <param name="app">revit application</param> /// <param name="ptA">start point</param> /// <param name="ptB">end point</param> /// <returns></returns> public static ModelCurve MakeLine(UIApplication app, Autodesk.Revit.DB.XYZ ptA, Autodesk.Revit.DB.XYZ ptB) { Document doc = app.ActiveUIDocument.Document; // Create plane by the points Line line = Line.CreateBound(ptA, ptB); Autodesk.Revit.DB.XYZ norm = ptA.CrossProduct(ptB); if (norm.GetLength() == 0) { norm = Autodesk.Revit.DB.XYZ.BasisZ; } Plane plane = app.Application.Create.NewPlane(norm, ptB); SketchPlane skplane = SketchPlane.Create(doc, plane); // Create line here ModelCurve modelcurve = doc.FamilyCreate.NewModelCurve(line, skplane); return(modelcurve); }
public ModelCurve MakeLine(Document doc, XYZ ptA, XYZ ptB) { Autodesk.Revit.ApplicationServices.Application app = doc.Application; // Create plane by the points Line line = Line.CreateBound(ptA, ptB); XYZ norm = ptA.CrossProduct(ptB); if (norm.IsZeroLength()) { norm = XYZ.BasisZ; } Plane plane = app.Create.NewPlane(norm, ptB); SketchPlane skplane = SketchPlane.Create(doc, plane); // Create line here ModelCurve modelcurve = doc.FamilyCreate.NewModelCurve(line, skplane); return(modelcurve); }
//创建模型线 private void CreateModelLine(List <XYZ> points, ExternalCommandData commandData) { for (int i = 0; i < points.Count - 1; i += 1) { UIDocument uiDoc = commandData.Application.ActiveUIDocument; //取得当前活动文档 XYZ PointStart = points[i]; XYZ PointEnd = points[i + 1]; //直线向量 XYZ vector = new XYZ(PointStart.X - PointEnd.X, PointStart.Y - PointEnd.Y, PointStart.Z - PointEnd.Z); //向量和Z向量叉乘,从而获得一个必定与向量垂直的向量,并以此创建一个平面 XYZ normal = vector.CrossProduct(XYZ.BasisZ); Plane plane = Plane.CreateByNormalAndOrigin(normal, PointStart); SketchPlane sketchPlane = SketchPlane.Create(uiDoc.Document, plane); uiDoc.Document.Create.NewModelCurve(Line.CreateBound(PointStart, PointEnd), sketchPlane); } }
public void setCurrentViewAsWorkPlan(UIDocument uiDoc) { Document doc = uiDoc.Document; using (Transaction trans = new Transaction(doc, "WorkPlane")) { trans.Start(); //Plane plane = new Plane( uiDoc.Document.ActiveView.ViewDirection, uiDoc.Document.ActiveView.Origin); Plane plane = Plane.CreateByNormalAndOrigin(uiDoc.Document.ActiveView.ViewDirection, uiDoc.Document.ActiveView.Origin); SketchPlane sp = SketchPlane.Create(doc, plane); uiDoc.Document.ActiveView.SketchPlane = sp; trans.Commit(); } }
private void CreateModelCurveArray(CurveArray curveArray, XYZ normal, XYZ point) { if (curveArray.Size > 0) { Transaction transaction2 = new Transaction(doc); transaction2.Start("绘制模型线"); try { SketchPlane modelSketch = SketchPlane.Create(doc, app.Create.NewPlane(normal, point)); ModelCurveArray modelLine = doc.Create.NewModelCurveArray(curveArray, modelSketch); } catch { } transaction2.Commit(); curveArray.Clear(); } }
public Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Application app = uiapp.Application; Document doc = uidoc.Document; Selection sel1 = uidoc.Selection; List <XYZ> tempXYZ = new List <XYZ>(1); XYZ p1 = sel1.PickPoint(); XYZ p2 = null; //tempXYZ.Add(p3); ModelCurve visualLine = null; using (TransactionGroup tGroup = new TransactionGroup(doc)) { tGroup.Start(); Redraw: using (Transaction t = new Transaction(doc)) { t.Start("Step 1"); Line line = Line.CreateBound(p1, getP3(uidoc)); Plane geomPlane = Plane.CreateByNormalAndOrigin(doc.ActiveView.ViewDirection, doc.ActiveView.Origin); SketchPlane sketch = SketchPlane.Create(doc, geomPlane); visualLine = doc.Create.NewModelCurve(line, sketch) as ModelCurve; doc.Regenerate(); uidoc.RefreshActiveView(); goto Redraw; t.Commit(); } tGroup.Commit(); } return(Result.Succeeded); }
internal static bool PickPointOnFace(UIDocument doc, string prompt, out XYZ point, ObjectSnapTypes snapSettings = DefaultSnapTypes) { point = null; if (doc.ActiveView.ViewType != ViewType.ThreeD) { try { point = doc.Selection.PickPoint(snapSettings, prompt + "Please pick a point on the current work plane"); } catch (OperationCanceledException) { } } else { var reference = doc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Face, prompt + "Please select a face to define a work plane"); if (doc.Document.GetElement(reference.ElementId) is Element element) { if (element.GetGeometryObjectFromReference(reference) is Face face) { if (Keyboard.IsKeyDown(Key.LeftCtrl)) { point = face.Evaluate(reference.UVPoint); } else { var plane = Autodesk.Revit.DB.Plane.CreateByNormalAndOrigin(face.ComputeNormal(reference.UVPoint), face.Evaluate(reference.UVPoint)); using (var transaction = new Transaction(doc.Document)) { transaction.Start("PickPointOnFace"); doc.ActiveView.SketchPlane = SketchPlane.Create(doc.Document, plane); doc.ActiveView.ShowActiveWorkPlane(); try { point = doc.Selection.PickPoint(snapSettings, prompt + "Please pick a point on the defined work plane"); } catch (OperationCanceledException) { } transaction.RollBack(); } } } } } return(null != point); }