public static DBObject Create(this Grevit.Types.DrawingPoint a, Transaction tr) { try { LayerTable lt = (LayerTable)tr.GetObject(Command.Database.LayerTableId, OpenMode.ForRead); Point3d pp = a.point.ToPoint3d(); DBPoint ppp = new DBPoint(pp); ppp.SetDatabaseDefaults(Command.Database); if (a.TypeOrLayer != "") { if (lt.Has(a.TypeOrLayer)) { ppp.LayerId = lt[a.TypeOrLayer]; } } BlockTable bt = (BlockTable)tr.GetObject(Command.Database.BlockTableId, OpenMode.ForRead); BlockTableRecord ms = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); ms.AppendEntity(ppp); tr.AddNewlyCreatedDBObject(ppp, true); return(ppp); } catch (Autodesk.AutoCAD.Runtime.Exception e) { } return(null); }
private void DrawPoint(Point3d a) { DBPoint b = new DBPoint(a); Ed.WriteMessage("selamın aleyküm"); AppendEntity(Db.BlockTableId, b); }
public static Point3dCollection GetPoints() { Document activeDoc = Application.DocumentManager.MdiActiveDocument; Database db = activeDoc.Database; Editor ed = activeDoc.Editor; TypedValue[] values = { new TypedValue((int)DxfCode.Start, "Point") }; SelectionFilter filter = new SelectionFilter(values); PromptSelectionResult psr = ed.SelectAll(filter); SelectionSet ss = psr.Value; if (ss == null) { return(null); } Point3dCollection collPoints = new Point3dCollection(); using (Transaction trans = db.TransactionManager.StartTransaction()) { for (int i = 0; i < ss.Count; ++i) { DBPoint dbPt = trans.GetObject(ss[i].ObjectId, OpenMode.ForRead) as DBPoint; collPoints.Add(new Point3d(dbPt.Position.X, dbPt.Position.Y, dbPt.Position.Z)); } trans.Commit(); } return(collPoints); }
private static SpreadPoint GetSpreadPoint(DBPoint dbPoint) { var rbName = dbPoint.GetXDataForApplication(_nameAppName); if (rbName == null) { return(null); } var rbCode = dbPoint.GetXDataForApplication(_codeAppName); if (rbCode == null) { return(null); } var rbNameArray = rbName.AsArray(); var rbCodeArray = rbCode.AsArray(); if (rbCodeArray.Length < 2 || rbNameArray.Length < 2) { return(null); } return(new SpreadPoint() { Point = dbPoint.Position, Name = (string)rbNameArray[1].Value, Code = (string)rbCodeArray[1].Value }); }
/// <summary> 计算选择的所有曲线的面积与长度之和 </summary> public ExternalCmdResult Polyline2Point(DocumentModifier docMdf, SelectionSet impliedSelection) { _docMdf = docMdf; // var pl = SelectUtils.PickEntity <Polyline3d>(docMdf.acEditor, message: "选择一个三维多段线对象"); if (pl == null) { return(ExternalCmdResult.Cancel); } // var cs = EditStateIdentifier.GetCurrentEditState(docMdf); cs.CurrentBTR.UpgradeOpen(); foreach (ObjectId id in pl) { var vert = id.GetObject(OpenMode.ForRead) as PolylineVertex3d; if (vert != null) { var pt = vert.Position; DBPoint p = new DBPoint(pt); cs.CurrentBTR.AppendEntity(p); docMdf.acTransaction.AddNewlyCreatedDBObject(p, true); } } cs.CurrentBTR.DowngradeOpen(); return(ExternalCmdResult.Commit); }
public void IzradiPoint() { Corridor corr = OdabraniCorridor(); Point3d ptDraw = PocetnaTockaNaStacionaziD(corr); using (Transaction tr = db.TransactionManager.StartTransaction()) { BlockTable acBlkTbl; acBlkTbl = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord acBlkTblRec; acBlkTblRec = tr.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; DBPoint acPoint = new DBPoint(ptDraw); acBlkTblRec.AppendEntity(acPoint); tr.AddNewlyCreatedDBObject(acPoint, true); db.Pdmode = 34; db.Pdsize = 10; tr.Commit(); } }
//------------------------------------------------------------------------// // public static void AddPinToModel(DBPoint P, int mode, double size, int color = 255) { Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; if (acBlkTblRec == null) { return; } acCurDb.Pdmode = mode; acCurDb.Pdsize = size; P.ColorIndex = color; acBlkTblRec.AppendEntity(P); acTrans.AddNewlyCreatedDBObject(P, true); acTrans.Commit(); } }
public void MidPoint() { Document doc = GetDocument(); Database db = doc.Database; Editor ed = doc.Editor; try { using (Transaction trans = db.TransactionManager.StartTransaction()) { PromptSelectionOptions pso = new PromptSelectionOptions(); TypedValue[] tv = new TypedValue[] { new TypedValue(0, "POINT") }; SelectionFilter filter = new SelectionFilter(tv); PromptSelectionResult psr = ed.GetSelection(filter); if (psr.Status != PromptStatus.OK) { return; } var res = psr.Value.GetObjectIds(); double x = 0, y = 0; int n = 0; foreach (ObjectId objectId in res) { var pt = trans.GetObject(objectId, OpenMode.ForRead) as DBPoint; if (pt != null) { n++; x += pt.Position.X; y += pt.Position.Y; } } if (n == 0) { return; } var avgPt = new Point3d(x / n, y / n, 0); BlockTable bt = trans.GetObject(db.BlockTableId , OpenMode.ForRead) as BlockTable; BlockTableRecord btr = trans.GetObject( bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; DBPoint po = new DBPoint(avgPt); btr.AppendEntity(po); trans.AddNewlyCreatedDBObject(po, true); trans.Commit(); } } catch (Autodesk.AutoCAD.Runtime.Exception ex) { ed.WriteMessage(ex.Message + ex.StackTrace); } }
public static void Touch(ObjectId[] polylineIds) { var database = polylineIds[0].Database; using (var tr = database.TransactionManager.StartTransaction()) { foreach (var polylineId in polylineIds) { var curve = tr.GetObject(polylineId, OpenMode.ForRead) as Curve; // 读取CAD图元 var reader = new DwgReader(); var lineString = reader.ReadGeometry(curve, tr) as LineString; //lineString.Touches() // 做出缓冲区 var geometry = LineStringSelfIntersectionsOp(lineString); if (geometry.GeometryType == "Point") { var writer = new DwgWriter(); DBPoint dbPt = writer.WriteDbPoint(geometry as Point); CadUtils.DrawPoint(tr, database, dbPt); } } tr.Commit(); } }
private bool _AddCenterPointToList(Entity ent, ref List <Point3d> lists) { Circle circle = ent as Circle; if (circle != null) { if (!lists.Contains(circle.Center)) { lists.Add(circle.Center); return(true); } return(false); } DBPoint point = ent as DBPoint; if (point != null) { if (!lists.Contains(point.Position)) { lists.Add(point.Position); return(true); } return(false); } return(false); }
public static BlockTableRecord GetRedPointTemplate(Database documentDatabase) { var entities = new List <Entity>(); DBPoint dbPoint = new DBPoint(new Point3d(0, 0, 0)); //dbPoint.SetDatabaseDefaults(); dbPoint.Color = Color.FromRgb(255, 0, 0); entities.Add(dbPoint); var text = new MText(); text.Location = new Point3d(0.05, 0, 0); text.Attachment = AttachmentPoint.MiddleLeft; text.TextHeight = 0.05; text.Color = dbPoint.Color; text.Contents = "redPoint_"; entities.Add(text); var block = CreateNewBlock(documentDatabase); SetBlockEntities(block, entities); return(block); }
void GenerateLink() { Database db = Application.DocumentManager.MdiActiveDocument.Database; Line Elem = new Line(); DBPoint Node = new DBPoint(); Point3d pt = new Point3d(); double earthkeyx1 = -30000; double earthkeyx2 = -80000; List <double> earthxlist = Linsteps(earthkeyx1, earthkeyx2, -5000).ToList(); List <double> towerzlist = Linsteps(FrontE.StartPoint.Z, FrontE.StartPoint.Z + 10 * 2500, 2500).ToList(); List <double> beamxlist = Linsteps(keyx3, keyx4, cabledx).ToList(); int nearth, ntower, nbeam; int comm = -1; foreach (double tz in towerzlist) { comm++; for (int dir = -1; dir <= 2; dir += 2) { double ex = earthxlist[comm]; double bx = beamxlist[comm]; double ey = dir * 11000; pt = new Point3d(ex, ey, 0); Node = new DBPoint(pt); Node.SetNodeId(db, GlobalNodeId); NodeList.Add(Node); nearth = GlobalNodeId; GlobalNodeId++; double tx = GetBackXCoord(tz); double ty = dir * Math.Sqrt((tz - tlevel) * (11000 * 11000) / (beamlevel - tlevel)); pt = new Point3d(tx, ty, tz); Node = new DBPoint(pt); ntower = GetClosestDBP(Node); pt = new Point3d(bx, ey, 0); Node = new DBPoint(pt); nbeam = GetClosestDBP(Node); if (nbeam == -1 || ntower == -1 || nearth == -1) { ; } Elem = new Line(NodeList[GetNodeListIndex(nearth)].Position, NodeList[GetNodeListIndex(ntower)].Position); Elem.SetElemXData(db, nearth, ntower, 0, GlobalElemId, "背索"); ElemList.Add(Elem); GlobalElemId++; Elem = new Line(NodeList[GetNodeListIndex(ntower)].Position, NodeList[GetNodeListIndex(nbeam)].Position); Elem.SetElemXData(db, ntower, nbeam, 0, GlobalElemId, "主索"); ElemList.Add(Elem); GlobalElemId++; } } }
makePointEnt(Point3d pt, int colorIndex, Database db) { int mode = (int)AcadApp.GetSystemVariable("pdmode"); if (mode == 0) { AcadApp.SetSystemVariable("pdmode", 99); } try { using (Transaction tr = BaseObjs.startTransactionDb()) { using (DBPoint dbPt = new DBPoint(pt)) { dbPt.ColorIndex = colorIndex; SymTbl.AddToCurrentSpace(dbPt, db); } tr.Commit(); } } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " Db.cs: line: 431"); } }
public static void Create(Grevit.Types.DrawingPoint a) { Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database; Transaction tr = db.TransactionManager.StartTransaction(); Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; try { LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead); Point3d pp = GrevitPtoPoint3d(a.point); DBPoint ppp = new DBPoint(pp); ppp.SetDatabaseDefaults(db); if (a.TypeOrLayer != "") { if (lt.Has(a.TypeOrLayer)) ppp.LayerId = lt[a.TypeOrLayer]; } BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); BlockTableRecord ms = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); ms.AppendEntity(ppp); tr.AddNewlyCreatedDBObject(ppp, true); writeProperties(ppp, a.parameters, tr); storeID(a, ppp.Id); tr.Commit(); } catch (Autodesk.AutoCAD.Runtime.Exception e) { ed.WriteMessage(e.Message); tr.Abort(); } finally { tr.Dispose(); } }
/// <summary> /// Создание расчетной точки из найденной точки на чертеже (DBPoint) /// </summary> /// <param name="dbPt">Инс точка на чертеже</param> /// <param name="model">Модель</param> public InsPointBase(DBPoint dbPt, InsModel model) { this.Model = model; Point = dbPt.Position; DBPointId = dbPt.Id; SubscribeDbo(dbPt); }
private static ObjectId GetSpreadPointAnnotationId(DBPoint dbPoint, Transaction transaction) { var groupId = GetSpreadPointGroupId(dbPoint, transaction); if (groupId.IsNull) { return(ObjectId.Null); } ObjectId resultId = ObjectId.Null; var group = transaction.GetObject(groupId, OpenMode.ForRead) as Group; var entityIds = group.GetAllEntityIds(); foreach (ObjectId id in entityIds) { var text = transaction.GetObject(id, OpenMode.ForRead) as DBText; if (text != null) { resultId = id; text.Dispose(); break; } } group.Dispose(); return(resultId); }
/// <summary> /// Function for editing autocad draw if user want to color marks /// </summary> /// <param name="mark">Current deformation mark</param> /// <param name="trans">Current transaction</param> public static void EditIfColor(DeformationMark mark, Transaction trans) { DBText name = null; DBPoint point = null; try { name = (DBText)trans.GetObject(mark.NameId, OpenMode.ForRead); point = (DBPoint)trans.GetObject(mark.PointId, OpenMode.ForRead); } catch (Exception) { WinForms.MessageBox.Show("ERROR: Не удалось найти на чертеже примитивы для марки " + mark.Name, "Ошибка"); throw; } if (mark.Status == false) { ColorText(name, 1); ColorPoint(point, 1); } else { ColorText(name, 3); ColorPoint(point, 3); } }
Point() { m_db = Utils.Db.GetCurDwg(); Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; PromptPointOptions prPtOpt = new PromptPointOptions("\nPoint"); PromptPointResult prPtRes = ed.GetPoint(prPtOpt); if (prPtRes.Status != PromptStatus.OK) { return; } using (DBPoint point = new DBPoint()) { point.Position = prPtRes.Value; Utils.Db.TransformToWcs(point, m_db); // TBD: not sure why, but the call to set the EcsRotation must come // after we do the TransformToWcs(). Need to investigate whether that // is a bug or intended behavior. point.EcsRotation = GetDimHorizRotation(); Utils.SymTbl.AddToCurrentSpaceAndClose(point, m_db); } }
public static ObjectId CreatePoint(Point3d p1) { // Get the current document and database Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; var outLine = ObjectId.Null; // Start a transaction using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Open the Block table for read BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; // Open the Block table record Model space for write BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; var pnt = new DBPoint(p1); // Add the new object to the block table record and the transaction outLine = acBlkTblRec.AppendEntity(pnt); acTrans.AddNewlyCreatedDBObject(pnt, true); // Save the new object to the database acTrans.Commit(); } return(outLine); }
public static void DrawPoint(Transaction tr, Database database, Point3d point3D, int colorIndex = 1) { using (var dbPt = new DBPoint(point3D)) { DrawPoint(tr, database, dbPt, colorIndex); } }
/// <summary> /// Create AutoCAD's object-point by Dynamo's point and option include Z-cordinate. Return an object id of item. /// </summary> /// <param name="doc_dyn"></param> /// <param name="Point_position"></param> /// <param name="IncludeZ"></param> /// <returns></returns> public static ObjectId CreateAcadPoint(Autodesk.AutoCAD.DynamoNodes.Document doc_dyn, DynGeom.Point Point_position, bool IncludeZ = true) { //Document doc = Application.DocumentManager.MdiActiveDocument; Document doc = doc_dyn.AcDocument; Database db = doc.Database; ObjectId point_id = ObjectId.Null; using (DocumentLock acDocLock = doc.LockDocument()) { using (Transaction tr = db.TransactionManager.StartTransaction()) { BlockTable acBlkTbl; acBlkTbl = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord acBlkTblRec; acBlkTblRec = tr.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; double coord_z = Point_position.Z; if (!IncludeZ) { coord_z = 0d; } DBPoint acPoint = new DBPoint(new Point3d(Point_position.X, Point_position.Y, coord_z)); acBlkTblRec.AppendEntity(acPoint); tr.AddNewlyCreatedDBObject(acPoint, true); point_id = acPoint.ObjectId; tr.Commit(); } } return(point_id); }
public static DBObject Create(this Grevit.Types.DrawingPoint a, Transaction tr) { try { LayerTable lt = (LayerTable)tr.GetObject(Command.Database.LayerTableId, OpenMode.ForRead); Point3d pp = a.point.ToPoint3d(); DBPoint ppp = new DBPoint(pp); ppp.SetDatabaseDefaults(Command.Database); if (a.TypeOrLayer != "") { if (lt.Has(a.TypeOrLayer)) ppp.LayerId = lt[a.TypeOrLayer]; } BlockTable bt = (BlockTable)tr.GetObject(Command.Database.BlockTableId, OpenMode.ForRead); BlockTableRecord ms = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); ms.AppendEntity(ppp); tr.AddNewlyCreatedDBObject(ppp, true); return ppp; } catch (Autodesk.AutoCAD.Runtime.Exception e) { } return null; }
/// <summary> /// Add point by Point3d set /// </summary> /// <param name="points"></param> public void Create(HashSet <Point3d> points) { if (points == null) { return; } var db = HostApplicationServices.WorkingDatabase; using (var trans = db.TransactionManager.StartTransaction()) { var blkTbl = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; if (blkTbl == null) { return; } var rcd = trans.GetObject(blkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; if (rcd == null) { return; } foreach (var pt in points) { var dbPt = new DBPoint(pt); rcd.AppendEntity(dbPt); trans.AddNewlyCreatedDBObject(dbPt, true); } trans.Commit(); } }
public static ObjectId CreatePoint(this Database database, Point3d p, string layerName = null, short layerColor = 256, short entityCollor = 256) { using (var transAction = database.TransactionManager.StartOpenCloseTransaction()) { // Get the layer table from the drawing using (var blocktable = (BlockTable)transAction.GetObject(database.BlockTableId, OpenMode.ForRead)) { var blockTableRecord = (BlockTableRecord)transAction.GetObject(blocktable[BlockTableRecord.ModelSpace], OpenMode.ForWrite); ObjectId id; //create the entity using (var dbPoint = new DBPoint(p)) { dbPoint.SetDatabaseDefaults(); if (layerName != null) { database.CreateLayer(layerName, layerColor, ""); dbPoint.Layer = layerName; } dbPoint.ColorIndex = entityCollor; id = blockTableRecord.AppendEntity(dbPoint); transAction.AddNewlyCreatedDBObject(dbPoint, true); transAction.Commit(); return(id); } } } }
public static void AddPoint(Point3d pt3) { Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Open the Block table for read BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; // Open the Block table record Model space for write BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; using (DBPoint acPoint = new DBPoint(pt3)) { // Add the new object to the block table record and the transaction acBlkTblRec.AppendEntity(acPoint); acTrans.AddNewlyCreatedDBObject(acPoint, true); } // Save the new object to the database acTrans.Commit(); } }
public void iCmd_ConvertCircleToPoint() { IList <Circle> circles; if (!TrySelectObjects <Circle>(out circles, OpenMode.ForRead, "\nВыберите круги: ")) { return; } try { using (Transaction trans = Tools.StartTransaction()) { BlockTable acBlkTbl; acBlkTbl = trans.GetObject(Application.DocumentManager.MdiActiveDocument.Database.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord acBlkTblRec; acBlkTblRec = trans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; foreach (var circle in circles) { DBPoint point = new DBPoint(new Point3d(circle.Center.ToArray())); point.SetDatabaseDefaults(); acBlkTblRec.AppendEntity(point); trans.AddNewlyCreatedDBObject(point, true); } trans.Commit(); } } catch (Exception ex) { Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.Message); } }
public void AddPointZ() { Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; PromptPointOptions getStartPoint = new PromptPointOptions("Select start point"); PromptPointResult startPoint = ed.GetPoint(getStartPoint); PromptPointOptions getEndtPoint = new PromptPointOptions("Select end point"); PromptPointResult endPoint = ed.GetPoint(getEndtPoint); PromptPointOptions getNewPoint = new PromptPointOptions("Select new point"); PromptPointResult newPoint = ed.GetPoint(getNewPoint); //Create new point Database curDwg = Application.DocumentManager.MdiActiveDocument.Database; Transaction transaction = curDwg.TransactionManager.StartTransaction(); BlockTable blkTbl; blkTbl = transaction.GetObject(curDwg.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord blkTblRec; blkTblRec = transaction.GetObject(blkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; // Create a point with selected new point double xStartPoint = startPoint.Value.X; double yStartPoint = startPoint.Value.Y; double zStartPoint = startPoint.Value.Z; double xEndPoint = endPoint.Value.X; double yEndPoint = endPoint.Value.Y; double zEndPoint = endPoint.Value.Z; double xCreatePoint = newPoint.Value.X; double yCreatePoint = newPoint.Value.Y; double zCreatePoint; double distanceStartEndPoints = Math.Sqrt(Math.Pow((xStartPoint - xEndPoint), 2) + Math.Pow((yStartPoint - yEndPoint), 2)); double distanceStartNewPoints = Math.Sqrt(Math.Pow((xStartPoint - xCreatePoint), 2) + Math.Pow((yStartPoint - yCreatePoint), 2)); zCreatePoint = Math.Abs(zStartPoint - zEndPoint) * distanceStartNewPoints / distanceStartEndPoints + zStartPoint; //point addition TODO commented START DBPoint dbPoint = new DBPoint(new Point3d(xCreatePoint, yCreatePoint, zCreatePoint)); dbPoint.SetDatabaseDefaults(); // Add the new object to the block table record and the transaction blkTblRec.AppendEntity(dbPoint); transaction.AddNewlyCreatedDBObject(dbPoint, true); //point addition TODO commented END // Save the new object to the database transaction.Commit(); #if (DEBUG_PRINT) Application.ShowAlertDialog("start point = (" + xStartPoint.ToString() + " ," + yStartPoint.ToString() + " ," + zStartPoint.ToString() + ")"); Application.ShowAlertDialog("end point = (" + xEndPoint.ToString() + " ," + yEndPoint.ToString() + " ," + zEndPoint.ToString() + ")"); Application.ShowAlertDialog("distanceStartEndPoints=" + distanceStartEndPoints.ToString() + "; distanceStartNewPoints=" + distanceStartNewPoints.ToString() + ")"); #endif }
public void PLinePoints() { Document doc = GetDocument(); Database db = doc.Database; Editor ed = doc.Editor; try { using (Transaction trans = db.TransactionManager.StartTransaction()) { PromptEntityOptions peo = new PromptEntityOptions( "\nSelect a polyline: ") { AllowNone = false }; peo.SetRejectMessage("\n>>>Select a polyline: "); peo.AddAllowedClass(typeof(Polyline), true); PromptEntityResult per; Polyline pline; while (true) { per = ed.GetEntity(peo); if (per.Status == PromptStatus.Cancel) { return; } pline = trans.GetObject(per.ObjectId, OpenMode.ForRead) as Polyline; if (per.Status == PromptStatus.OK && pline != null) { break; } } //pline = trans.GetObject(per.ObjectId, OpenMode.ForRead) as Polyline; BlockTable bt = trans.GetObject(db.BlockTableId , OpenMode.ForRead) as BlockTable; BlockTableRecord btr = trans.GetObject( bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; for (int i = 0, len = pline.NumberOfVertices; i < len; i++) { DBPoint po = new DBPoint(pline.GetPoint3dAt(i)); btr.AppendEntity(po); trans.AddNewlyCreatedDBObject(po, true); } db.Pdsize = -2; db.Pdmode = 35; trans.Commit(); } } catch (Autodesk.AutoCAD.Runtime.Exception ex) { ed.WriteMessage(ex.Message + ex.StackTrace); } }
/// <summary> /// 往要生成的点表中插入一条记录 /// </summary> /// <param name="pointEnt">点实体类型</param> private void AppendPoint(DBPoint pointEnt) { System.Data.DataRow dr = GetPointTable().NewRow(); dr[POSITION] = PntToString(pointEnt.Position); dr[BLOCKNAME] = "Point"; dr[LAYER] = BelongLayer; mPointTable.Rows.Add(dr); }
static public void PointDepictor() { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = doc.Editor; // Create a TypedValue array to define the filter criteria TypedValue[] tyval = new TypedValue[1]; tyval.SetValue(new TypedValue((int)DxfCode.Start, "POINT"), 0); // Assign the filter criteria to a SelectionFilter object SelectionFilter selfil = new SelectionFilter(tyval); // Selecting PromptSelectionResult psres = ed.SelectAll(selfil); if (psres.Status != PromptStatus.OK) { return; } SelectionSet selset = psres.Value; ObjectId[] oids = selset.GetObjectIds(); // Cast dbobj to a point and draw a circle each using (Transaction tx = db.TransactionManager.StartTransaction()) { BlockTable bt = tx.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord btrec = tx.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; foreach (ObjectId oid in oids) { DBPoint pt = (DBPoint)tx.GetObject(oid, OpenMode.ForRead); Point3d pt3 = (Point3d)pt.Position; using (Circle circ = new Circle()) { circ.Center = pt3; circ.Radius = 5; circ.ColorIndex = 1; btrec.AppendEntity(circ); tx.AddNewlyCreatedDBObject(circ, true); } } tx.Commit(); } // Pause for a keystroke PromptStringOptions pstopt = new PromptStringOptions("Press any key to continue..."); pstopt.AllowSpaces = true; PromptResult pstres = ed.GetString(pstopt); // Undo previous doc.SendStringToExecute("undo 1 ", true, false, false); }
public Point3d getPointAtVector(Point3d startpoint,Vector3d offset) { Point3d calculatedPoint = new Point3d(); DBPoint point = new DBPoint(startpoint); point.TransformBy(Matrix3d.Displacement(offset)); calculatedPoint = point.Position; point.Dispose(); return calculatedPoint; }
public static bool Clear(this DBPoint obj) { if (Math.Abs(obj.Position.Z) < TOLERANCE) { return(false); } obj.Position = obj.Position.ClearZ(); return(true); }
private void Prepare(Transaction tr) { Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; RXClass rxClassOfPoint = new DBPoint().GetRXClass(); //List<DBPoint> points = this.ObjectsOfType1(acCurDb, rxClassOfPoint, tr).Cast<DBPoint>().ToList(); //acDoc.Editor.SetImpliedSelection(points.Select(p => p.Id).ToArray()); //this.PointJsonList = PointJson.GetPointsFrom(points); }
/** * @brief Metodo que contiene toda la lógica para procesar cada tipo de entidad. En función del tipo de entidad crea las estructuras * en memoria necesarias y almacena toda la información en la clase dwgFile para que posteriormente sea explotada. * **/ private static void ProcesarObjetos(ObjectId acObjId, BlockTable acBlkTbl, BlockTableRecord acBlkTblRec, Transaction t, ObjectId parentId) { Entity ent = (Entity)t.GetObject(acObjId, OpenMode.ForRead); switch (acObjId.ObjectClass.DxfName) { case "POINT": DBPoint porigen = (DBPoint)ent; dwgPunto punto = new dwgPunto(); punto.objId = acObjId; punto.capaId = ent.LayerId; punto.parentId = parentId; punto.coordenadas = porigen.Position; punto.colorPunto = porigen.Color; punto.color_R = porigen.Color.Red; punto.color_G = porigen.Color.Green; punto.color_B = porigen.Color.Blue; if (dwgf.dwgPuntos.ContainsKey(punto.objId) == false) { dwgf.dwgPuntos.Add(punto.objId, punto); } log("Procesado punto: " + punto.objId.ToString(),true,true); break; case "LINE": Line lorigen = (Line)ent; dwgLinea linea = new dwgLinea(); linea.objId = acObjId; linea.capaId = ent.LayerId; linea.parentId = parentId; linea.colorLinea = lorigen.Color; linea.color_R = lorigen.Color.Red; linea.color_G = lorigen.Color.Green; linea.color_B = lorigen.Color.Blue; linea.LineWeight = (Double)lorigen.LineWeight; if (linea.LineWeight == -1) { log("Ancho de la linea igual al ancho de la capa: " + linea.objId.ToString(), true, true); // Reemplazar por el ancho de la capa. linea.LineWeight = dlwdefault; dwgCapa c; dwgf.dwgCapas.TryGetValue(linea.capaId,out c); if (c != null) { linea.LineWeight = c.default_gruesoLinea; } } else if ((linea.LineWeight == -2) || (linea.LineWeight == -3)) { // -2: Reemplazar por el ancho del bloque. Esto habra que implementarlo cuando se de soporte a bloques. // -3: ancho por defecto del autocad. Comando LWDEFAULT log("Ancho de la linea igual al del bloque o al ancho por defecto: " + linea.objId.ToString(), true, true); linea.LineWeight = dlwdefault; } DBPoint p_origen_0 = new DBPoint(lorigen.StartPoint); DBPoint p_final_0 = new DBPoint(lorigen.EndPoint); acBlkTblRec.AppendEntity(p_origen_0); acBlkTblRec.AppendEntity(p_final_0); t.AddNewlyCreatedDBObject(p_origen_0, true); t.AddNewlyCreatedDBObject(p_final_0, true); dwgPunto p_origen_1 = new dwgPunto(); p_origen_1.objId = p_origen_0.ObjectId; p_origen_1.coordenadas = p_origen_0.Position; p_origen_1.capaId = linea.capaId; linea.p_origen = p_origen_1; dwgPunto p_final_1 = new dwgPunto(); p_final_1.objId = p_final_0.ObjectId; p_final_1.coordenadas = p_final_0.Position; p_final_1.capaId = linea.capaId; linea.p_final = p_final_1; if (dwgf.dwgPuntos.ContainsKey(p_origen_1.objId) == false) { dwgf.dwgPuntos.Add(p_origen_1.objId, p_origen_1); } if (dwgf.dwgPuntos.ContainsKey(p_final_1.objId) == false) { dwgf.dwgPuntos.Add(p_final_1.objId, p_final_1); } if (dwgf.dwgLineas.ContainsKey(linea.objId) == false) { dwgf.dwgLineas.Add(linea.objId, linea); } log("Procesada linea: " + linea.objId.ToString(), true, true); break; case "LWPOLYLINE": dwgPolylinea poli = new dwgPolylinea(); poli.objId = acObjId; poli.capaId = ent.LayerId; poli.parentId = parentId; // Descomponemos en subcomponentes. DBObjectCollection entitySet = new DBObjectCollection(); log("Descomponemos polylinea en lineas y puntos: " + poli.objId.ToString(), true, true); entitySet = dwgDecoder.ObtenerPuntosyLineas(ent, acBlkTbl, acBlkTblRec, t); // Procesamos cada uno de los subcomponentes. // Solo pueden ser: lineas y arcos. Una polylinea no puede formarse con nada mas. foreach (Entity ent2 in entitySet) { switch (ent2.ObjectId.ObjectClass.DxfName) { case "LINE": log("Obtenida linea: " + poli.objId.ToString() + ":" + ent2.ObjectId.ToString(),true, true); poli.lineas.Add(ent2.ObjectId); break; case "ARC": log("Obtenido arco: " + poli.objId.ToString() + ":" + ent2.ObjectId.ToString(), true, true); poli.arcos.Add(ent2.ObjectId); break; default: log("Al descomponer polylinea, objeto no reconocido:" + ent2.ObjectId.ObjectClass.DxfName, true, true); break; } log("Procesamos la nueva entidad obtenida - " + ent2.ObjectId.ObjectClass.DxfName + ":" + ent2.ObjectId, true, true); dwgDecoder.ProcesarObjetos(ent2.ObjectId, acBlkTbl, acBlkTblRec, t, poli.objId); } if ((entitySet.Count > 0) && (dwgf.dwgPolylineas.ContainsKey(poli.objId) == false)) { dwgf.dwgPolylineas.Add(poli.objId, poli); } log("Procesada polilinea: " + poli.objId.ToString(),true, true); break; case "ARC": Arc ar = (Arc) ent; dwgArco arco = new dwgArco(); arco.objId = acObjId; arco.capaId = ent.LayerId; arco.parentId = parentId; arco.radio = ar.Radius; arco.angulo_inicio = ar.StartAngle; arco.angulo_final = ar.EndAngle; DBPoint p_centro = new DBPoint(ar.Center); acBlkTblRec.AppendEntity(p_centro); t.AddNewlyCreatedDBObject(p_centro, true); dwgPunto p_centro_1 = new dwgPunto(); p_centro_1.objId = p_centro.ObjectId; p_centro_1.coordenadas = p_centro.Position; p_centro_1.capaId = arco.capaId; if (dwgf.dwgPuntos.ContainsKey(p_centro_1.objId) == false) { dwgf.dwgPuntos.Add(p_centro_1.objId, p_centro_1); } arco.punto_centro = p_centro_1.objId; // Descomponemos en subcomponentes. log("Descomponemos arco en lineas: " + arco.objId.ToString(), true, true); DBObjectCollection entitySet2 = new DBObjectCollection(); entitySet2 = herramientasCurvas.curvaAlineas((Curve)ent, 5, acBlkTbl, acBlkTblRec, t,arco.capaId, dwgf); // Procesamos cada uno de los subcomponentes. // Solo pueden ser: lineas. Eso lo garantiza la funcion curvaAlineas foreach (Entity ent2 in entitySet2) { log("Nueva entidad - " + ent2.ObjectId.ObjectClass.DxfName + ":" + ent2.ObjectId, true, true); arco.lineas.Add(ent2.ObjectId); dwgDecoder.ProcesarObjetos(ent2.ObjectId, acBlkTbl, acBlkTblRec, t, arco.objId); } if (dwgf.dwgArcos.ContainsKey(arco.objId) == false) { dwgf.dwgArcos.Add(arco.objId, arco); } log("Procesado arco: " + arco.objId.ToString(),true, true); break; default: log("Elemento no reconocido para procesar. No procesado. " + acObjId.ObjectClass.ClassVersion.ToString(),true,true); break; } return; }
private Dictionary<string, PanelBase> matchingPlans(List<FacadeMounting> facadesMounting, List<FloorArchitect> floorsAr) { // Определение окон в монтажных планах по архитектурным планам var panelsBase = new Dictionary<string, PanelBase>(); // string - ключ - маркаСБ + Марки Окон по порядку. // Список монтажных планов - уникальных var floorsMount = facadesMounting.SelectMany(f => f.Floors); foreach (var floorMount in floorsMount) { // Найти соотв арх план var floorAr = floorsAr.Find(f => f.Section == floorMount.Section && f.IsEqualMountingStorey(floorMount.Storey) ); //Test Добавить текст имени плана Ар в блок монтажного плана #if Test { if (floorAr != null) { using (var btrMount = floorMount.IdBtrMounting.Open(OpenMode.ForWrite) as BlockTableRecord) { DBText textFindPlanAr = new DBText(); textFindPlanAr.TextString = floorAr.BlName; btrMount.AppendEntity(textFindPlanAr); //btrMount.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(textFindPlanAr, true); } } } #endif if (floorAr == null) { Inspector.AddError($"Не найден блок архитектурного плана для соответствующего монтажного плана '{floorMount.BlRefName}'", floorMount.IdBlRefMounting, icon: System.Drawing.SystemIcons.Error); } else if (floorAr.Windows.Count == 0) { Inspector.AddError($"Не найдено ни одного окна в блоке архитектурного плана '{floorMount.BlRefName}'.", floorAr.IdBlRef, icon: System.Drawing.SystemIcons.Error); } foreach (var panelMount in floorMount.PanelsSbInFront) { Panel panelXml = GetPanelXml(panelMount.MarkSb, panelMount); if (panelXml == null) continue; PanelBase panelBase = new PanelBase(panelXml, this, panelMount); // Определение окон в панели по арх плану if (panelXml.windows?.window != null) { foreach (var window in panelXml.windows.window) { if (floorAr == null || floorAr.Windows.Count==0) { break; } // Точка окна внутри панели по XML описанию Point3d ptOpeningCenter = new Point3d(window.posi.X + window.width * 0.5, 0, 0); // Точка окна внутри монтажного плана Point3d ptWindInModel = panelMount.ExtTransToModel.MinPoint.Add(ptOpeningCenter.GetAsVector()); Point3d ptWindInArPlan = ptWindInModel.TransformBy(floorMount.Transform.Inverse()); var windowKey = floorAr?.Windows.GroupBy(w => w.Key.DistanceTo(ptWindInArPlan))?.MinBy(w => w.Key); if (windowKey == null || windowKey.Key > 600) { Inspector.AddError( $"Не найдено соответствующее окно в архитектурном плане. Блок монтажной панели {panelMount.MarkSb}", panelMount.ExtTransToModel, panelMount.IdBlRef, icon: System.Drawing.SystemIcons.Error); continue; } panelBase.WindowsBaseCenters.Add(ptOpeningCenter, windowKey.First().Value); // Test Добавление точек окна в блоке монтажки #if Test { using (var btrMountPlan = floorMount.IdBtrMounting.Open(OpenMode.ForWrite) as BlockTableRecord) { using (DBPoint ptWinInPlan = new DBPoint(ptWindInArPlan)) { ptWinInPlan.ColorIndex = 2; btrMountPlan.AppendEntity(ptWinInPlan); //btrMountPlan.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(ptWinInPlan, true); } using (DBText dbText = new DBText()) { dbText.Position = ptWindInArPlan; dbText.TextString = windowKey.First().Value; btrMountPlan.AppendEntity(dbText); //btrMountPlan.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(dbText, true); } } using (var btrArPlan = floorAr.IdBtr.Open(OpenMode.ForWrite) as BlockTableRecord) { using (DBPoint ptWinInArPlan = new DBPoint(ptWindInArPlan)) { ptWinInArPlan.ColorIndex = 1; btrArPlan.AppendEntity(ptWinInArPlan); //btrArPlan.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(ptWinInArPlan, true); } } } #endif } } // Уникальный ключ панели - МаркаСБ + Марки окон string key = panelBase.MarkWithoutElectric; if (panelBase.WindowsBaseCenters.Count > 0) { string windowMarks = string.Join(";", panelBase.WindowsBaseCenters.Values); key += windowMarks; } PanelBase panelBaseUniq; if (!panelsBase.TryGetValue(key, out panelBaseUniq)) { panelsBase.Add(key, panelBase); panelBaseUniq = panelBase; } panelMount.PanelBase = panelBaseUniq; } } return panelsBase; }
public ChangeableDBPoint(DBPoint point) { DBPoint = point; }
public Point(DBPoint point) { _id = point.Id; _name = "point"; _position = new Coordinates() { X = point.Position.X, Y = point.Position.Y }; _height = point.Position.Z; }