/// <summary> /// Sprawdza czy w przestrzeni papieru jesteśmy poza oknem true lub w oknie false /// na podstawie https://spiderinnet1.typepad.com/blog/2014/05/autocad-net-detect-current-space-model-or-paper-and-viewport.html /// </summary> /// <returns></returns> public static bool IsInLayoutPaper() { zza.Document doc = zza.Application.DocumentManager.MdiActiveDocument; zzd.Database db = doc.Database; zze.Editor ed = doc.Editor; if (db.TileMode) { return(false); } else { if (db.PaperSpaceVportId == zzd.ObjectId.Null) { return(false); } else if (ed.CurrentViewportObjectId == zzd.ObjectId.Null) { return(false); } else if (ed.CurrentViewportObjectId == db.PaperSpaceVportId) { return(true); } else { return(false); } } }
/// <summary> /// Tworzy styl tekstu PI_DIMENSION /// </summary> /// <returns></returns> public static zzd.ObjectId Dodaj_styl_PI_DIMENSIONTEXT() { zza.Document doc = zza.Application.DocumentManager.MdiActiveDocument; zzd.Database db = doc.Database; string name = "PI_DIMENSIONTEXT"; zzd.ObjectId dimstyleID; using (zzd.Transaction tr = db.TransactionManager.StartTransaction()) { zzd.TextStyleTable tst = (zzd.TextStyleTable)tr.GetObject(db.TextStyleTableId, zzd.OpenMode.ForWrite); if (!tst.Has(name)) { tst.UpgradeOpen(); zzd.TextStyleTableRecord newRecord = new zzd.TextStyleTableRecord(); newRecord.Name = name; newRecord.FileName = "simplex.shx"; newRecord.XScale = 0.65; // Width factor tst.Add(newRecord); tr.AddNewlyCreatedDBObject(newRecord, true); dimstyleID = tst[name]; } else { dimstyleID = tst[name]; } tr.Commit(); return(dimstyleID); } }
/// <summary> /// Pobiera blok. który można użyć jako strzałkę /// </summary> /// <param name="arrow"></param> /// <param name="newArrName"></param> /// <returns></returns> public static zzd.ObjectId GetArrowObjectId(string arrow, string newArrName) { zzd.ObjectId arrObjId = zzd.ObjectId.Null; zza.Document doc = zza.Application.DocumentManager.MdiActiveDocument; zzd.Database db = doc.Database; string oldArrName = zza.Application.GetSystemVariable(arrow) as string; zza.Application.SetSystemVariable(arrow, newArrName); if (oldArrName.Length != 0) { zza.Application.SetSystemVariable(arrow, oldArrName); } zzd.Transaction tr = db.TransactionManager.StartTransaction(); using (tr) { zzd.BlockTable bt = (zzd.BlockTable)tr.GetObject(db.BlockTableId, zzd.OpenMode.ForRead); arrObjId = bt[newArrName]; tr.Commit(); } return(arrObjId); }
/// <summary> /// Wstawia warstwę o podanej nazwie, kolorze i czyni ją plotowaną lub nie. /// </summary> /// <param name="layername"></param> /// <param name="color"></param> /// <param name="isplotable"></param> public static void WstawWarstwe(string layername, short color, bool isplotable) { zza.Document doc = zza.Application.DocumentManager.MdiActiveDocument; zzd.Database db = doc.Database; using (zzd.Transaction tr = db.TransactionManager.StartTransaction()) { zzd.LayerTable lt = (zzd.LayerTable)tr.GetObject(db.LayerTableId, zzd.OpenMode.ForRead); if (lt.Has(layername) == false) { // Tworzymy nową wartwę papier zzd.LayerTableRecord nowawarstwa = new zzd.LayerTableRecord(); //nadajemy jej wlasciwosci nowawarstwa.Name = layername; nowawarstwa.IsPlottable = isplotable; nowawarstwa.Color = zzc.Color.FromColorIndex(zzc.ColorMethod.ByAci, color); //dadaj nowarstwa do tabeli lt.UpgradeOpen(); zzd.ObjectId warstwa = lt.Add(nowawarstwa); tr.AddNewlyCreatedDBObject(nowawarstwa, true); } tr.Commit(); } }
public static void Rysuj_ramke() { for (; ;) { int wysokosc = UserControl1.wysokosc; int szerokosc = UserControl1.dlugosc; int margines_gorny = UserControl1.G_marg; int margines_dolny = UserControl1.D_marg; int margines_lewy = UserControl1.L_marg; int margines_prawy = UserControl1.P_marg; string papier = "PI_PAPIER"; string ramka = "PI_RAMKA"; WstawWarstwe(papier, 7, false); WstawWarstwe(ramka, 2, true); //pobierz aktualny rysunek i database zza.Document doc = zza.Application.DocumentManager.MdiActiveDocument; zzd.Database db = doc.Database; zze.Editor ed = doc.Editor; bool jestmodel = ItisModel(); bool jestviewport = IsInLayoutPaper(); int tilemode = Convert.ToInt16(zza.Application.GetSystemVariable("TILEMODE")); zzg.Point3d ptStart = new zzg.Point3d(-100000, -100000, 0); //zzg.Point3d ptStart = pPtRes.Value; DrawJiggerGroup jigger2 = new DrawJiggerGroup(ptStart); using (zzd.Transaction tr = db.TransactionManager.StartTransaction()) { //utworzenie grupy zzd.DBDictionary groupDic = (zzd.DBDictionary)tr.GetObject(db.GroupDictionaryId, zzd.OpenMode.ForWrite); zzd.Group anonyGroup = new zzd.Group(); groupDic.SetAt("*", anonyGroup); zzd.BlockTable bt; zzd.BlockTableRecord btr; // Open Model space for write bt = tr.GetObject(db.BlockTableId, zzd.OpenMode.ForRead) as zzd.BlockTable; if (jestmodel == false & jestviewport == true) { btr = tr.GetObject(bt[zzd.BlockTableRecord.PaperSpace], zzd.OpenMode.ForWrite) as zzd.BlockTableRecord; } else { btr = tr.GetObject(bt[zzd.BlockTableRecord.ModelSpace], zzd.OpenMode.ForWrite) as zzd.BlockTableRecord; } if (wysokosc != 210) { // Create a papier polyline using (zzd.Polyline acPoly = new zzd.Polyline()) { zzg.Point2d p1 = new zzg.Point2d(ptStart.X, ptStart.Y + margines_dolny); zzg.Point2d p2 = new zzg.Point2d(ptStart.X, ptStart.Y); zzg.Point2d p3 = new zzg.Point2d(ptStart.X + szerokosc, ptStart.Y); zzg.Point2d p4 = new zzg.Point2d(ptStart.X + szerokosc, ptStart.Y + wysokosc); zzg.Point2d p5 = new zzg.Point2d(ptStart.X, ptStart.Y + wysokosc); zzg.Point2d p6 = new zzg.Point2d(ptStart.X, ptStart.Y + 297); acPoly.AddVertexAt(0, p1, 0, 0, 0); acPoly.AddVertexAt(1, p2, 0, 0, 0); acPoly.AddVertexAt(2, p3, 0, 0, 0); acPoly.AddVertexAt(3, p4, 0, 0, 0); acPoly.AddVertexAt(4, p5, 0, 0, 0); acPoly.AddVertexAt(5, p6, 0, 0, 0); //acPoly.Closed = true; //acPoly.ColorIndex = kolorpapier; acPoly.Layer = papier; // Add the new object to the block table record and the transaction btr.AppendEntity(acPoly); tr.AddNewlyCreatedDBObject(acPoly, true); anonyGroup.Append(acPoly.ObjectId); } // Create a ramka polyline using (zzd.Polyline ramkaPoly = new zzd.Polyline()) { zzg.Point2d r1 = new zzg.Point2d(ptStart.X + margines_lewy, ptStart.Y + margines_dolny); zzg.Point2d r2 = new zzg.Point2d(ptStart.X, ptStart.Y + margines_dolny); zzg.Point2d r3 = new zzg.Point2d(ptStart.X, ptStart.Y + 297); zzg.Point2d r4 = new zzg.Point2d(ptStart.X + margines_lewy, ptStart.Y + 297); zzg.Point2d r5 = new zzg.Point2d(ptStart.X + margines_lewy, ptStart.Y + wysokosc - margines_gorny); zzg.Point2d r6 = new zzg.Point2d(ptStart.X + szerokosc - margines_prawy, ptStart.Y + wysokosc - margines_gorny); zzg.Point2d r7 = new zzg.Point2d(ptStart.X + szerokosc - margines_prawy, ptStart.Y + margines_dolny); ramkaPoly.AddVertexAt(0, r2, 0, 0, 0); ramkaPoly.AddVertexAt(1, r3, 0, 0, 0); ramkaPoly.AddVertexAt(2, r4, 0, 0, 0); ramkaPoly.AddVertexAt(3, r5, 0, 0, 0); ramkaPoly.AddVertexAt(4, r6, 0, 0, 0); ramkaPoly.AddVertexAt(5, r7, 0, 0, 0); ramkaPoly.AddVertexAt(6, r1, 0, 0, 0); ramkaPoly.AddVertexAt(7, r4, 0, 0, 0); //ramkaPoly.ColorIndex = kolorramki; ramkaPoly.Layer = ramka; // Add the new object to the block table record and the transaction btr.AppendEntity(ramkaPoly); tr.AddNewlyCreatedDBObject(ramkaPoly, true); anonyGroup.Append(ramkaPoly.ObjectId); } //tworzę miejsca na dziurkacz using (zzd.Circle dziurka1 = new zzd.Circle()) { dziurka1.Center = new zzg.Point3d(ptStart.X + 10.0, ptStart.Y + (297.0 / 2 - 40.0), ptStart.Z); dziurka1.Radius = 2.5; dziurka1.Layer = ramka; //dziurka1.ColorIndex = kolorramki; btr.AppendEntity(dziurka1); tr.AddNewlyCreatedDBObject(dziurka1, true); anonyGroup.Append(dziurka1.ObjectId); } using (zzd.Circle dziurka2 = new zzd.Circle()) { dziurka2.Center = new zzg.Point3d(ptStart.X + 10.0, ptStart.Y + (297.0 / 2 + 40.0), ptStart.Z); dziurka2.Radius = 2.5; dziurka2.Layer = ramka; //dziurka2.ColorIndex = kolorramki; btr.AppendEntity(dziurka2); tr.AddNewlyCreatedDBObject(dziurka2, true); anonyGroup.Append(dziurka2.ObjectId); } } else { // Create a papier polyline using (zzd.Polyline acPoly = new zzd.Polyline()) { zzg.Point2d p1 = new zzg.Point2d(ptStart.X, ptStart.Y); zzg.Point2d p2 = new zzg.Point2d(ptStart.X + szerokosc, ptStart.Y); zzg.Point2d p3 = new zzg.Point2d(ptStart.X + szerokosc, ptStart.Y + wysokosc); zzg.Point2d p4 = new zzg.Point2d(ptStart.X, ptStart.Y + wysokosc); acPoly.AddVertexAt(0, p1, 0, 0, 0); acPoly.AddVertexAt(1, p2, 0, 0, 0); acPoly.AddVertexAt(2, p3, 0, 0, 0); acPoly.AddVertexAt(3, p4, 0, 0, 0); acPoly.Closed = true; //acPoly.ColorIndex = kolorpapier; acPoly.Layer = papier; // Add the new object to the block table record and the transaction btr.AppendEntity(acPoly); tr.AddNewlyCreatedDBObject(acPoly, true); anonyGroup.Append(acPoly.ObjectId); } // Create a ramka polyline using (zzd.Polyline ramkaPoly = new zzd.Polyline()) { zzg.Point2d r1 = new zzg.Point2d(ptStart.X + margines_lewy, ptStart.Y + margines_dolny); zzg.Point2d r2 = new zzg.Point2d(ptStart.X + szerokosc - margines_lewy, ptStart.Y + margines_dolny); zzg.Point2d r3 = new zzg.Point2d(ptStart.X + szerokosc - margines_lewy, ptStart.Y + wysokosc - margines_gorny); zzg.Point2d r4 = new zzg.Point2d(ptStart.X + margines_lewy, ptStart.Y + wysokosc - margines_gorny); ramkaPoly.AddVertexAt(0, r1, 0, 0, 0); ramkaPoly.AddVertexAt(1, r2, 0, 0, 0); ramkaPoly.AddVertexAt(2, r3, 0, 0, 0); ramkaPoly.AddVertexAt(3, r4, 0, 0, 0); //ramkaPoly.ColorIndex = kolorramki; ramkaPoly.Closed = true; ramkaPoly.Layer = ramka; // Add the new object to the block table record and the transaction btr.AppendEntity(ramkaPoly); tr.AddNewlyCreatedDBObject(ramkaPoly, true); anonyGroup.Append(ramkaPoly.ObjectId); } //tworzę miejsca na dziurkacz using (zzd.Circle dziurka1 = new zzd.Circle()) { dziurka1.Center = new zzg.Point3d(ptStart.X + szerokosc / 2 - 40, ptStart.Y + wysokosc - 10, ptStart.Z); dziurka1.Radius = 2.5; dziurka1.Layer = ramka; //dziurka1.ColorIndex = kolorramki; btr.AppendEntity(dziurka1); tr.AddNewlyCreatedDBObject(dziurka1, true); anonyGroup.Append(dziurka1.ObjectId); } using (zzd.Circle dziurka2 = new zzd.Circle()) { dziurka2.Center = new zzg.Point3d(ptStart.X + szerokosc / 2 + 40, ptStart.Y + wysokosc - 10, ptStart.Z); dziurka2.Radius = 2.5; dziurka2.Layer = ramka; //dziurka2.ColorIndex = kolorramki; btr.AppendEntity(dziurka2); tr.AddNewlyCreatedDBObject(dziurka2, true); anonyGroup.Append(dziurka2.ObjectId); } } //znacznik 210 mm if (wysokosc != 210 & szerokosc > 210) { using (zzd.Line karta = new zzd.Line(new zzg.Point3d(ptStart.X + 210, ptStart.Y + margines_dolny, ptStart.Z), new zzg.Point3d(ptStart.X + 210, ptStart.Y + margines_dolny + 1.0, ptStart.Z))) { karta.Layer = ramka; //karta.ColorIndex = kolorramki; btr.AppendEntity(karta); tr.AddNewlyCreatedDBObject(karta, true); anonyGroup.Append(karta.ObjectId); } using (zzd.Line karta = new zzd.Line(new zzg.Point3d(ptStart.X + 210, ptStart.Y + wysokosc - margines_gorny, ptStart.Z), new zzg.Point3d(ptStart.X + 210, ptStart.Y + wysokosc - margines_gorny - 1.0, ptStart.Z))) { karta.Layer = ramka; //karta.ColorIndex = kolorramki; btr.AppendEntity(karta); tr.AddNewlyCreatedDBObject(karta, true); anonyGroup.Append(karta.ObjectId); } } if (szerokosc >= 594) { using (zzd.Line karta = new zzd.Line(new zzg.Point3d(ptStart.X + szerokosc - 210 + margines_lewy, ptStart.Y + margines_dolny, ptStart.Z), new zzg.Point3d(ptStart.X + szerokosc - 210 + margines_lewy, ptStart.Y + margines_dolny + 1.0, ptStart.Z))) { karta.Layer = ramka; //karta.ColorIndex = kolorramki; btr.AppendEntity(karta); tr.AddNewlyCreatedDBObject(karta, true); anonyGroup.Append(karta.ObjectId); } using (zzd.Line karta = new zzd.Line(new zzg.Point3d(ptStart.X + szerokosc - 210 + margines_lewy, ptStart.Y + wysokosc - margines_gorny, ptStart.Z), new zzg.Point3d(ptStart.X + szerokosc - 210 + margines_lewy, ptStart.Y + wysokosc - margines_gorny - 1.0, ptStart.Z))) { karta.Layer = ramka; //karta.ColorIndex = kolorramki; btr.AppendEntity(karta); tr.AddNewlyCreatedDBObject(karta, true); anonyGroup.Append(karta.ObjectId); } } if (szerokosc >= 841) { using (zzd.Line karta = new zzd.Line(new zzg.Point3d(ptStart.X + szerokosc - 2 * (210 - margines_lewy), ptStart.Y + margines_dolny, ptStart.Z), new zzg.Point3d(ptStart.X + szerokosc - 2 * (210 - margines_lewy), ptStart.Y + margines_dolny + 1.0, ptStart.Z))) { karta.Layer = ramka; //karta.ColorIndex = kolorramki; btr.AppendEntity(karta); tr.AddNewlyCreatedDBObject(karta, true); anonyGroup.Append(karta.ObjectId); } using (zzd.Line karta = new zzd.Line(new zzg.Point3d(ptStart.X + szerokosc - 2 * (210 - margines_lewy), ptStart.Y + wysokosc - margines_gorny, ptStart.Z), new zzg.Point3d(ptStart.X + szerokosc - 2 * (210 - margines_lewy), ptStart.Y + wysokosc - margines_gorny - 1.0, ptStart.Z))) { karta.Layer = ramka; //karta.ColorIndex = kolorramki; btr.AppendEntity(karta); tr.AddNewlyCreatedDBObject(karta, true); anonyGroup.Append(karta.ObjectId); } } if (szerokosc >= 1189) { using (zzd.Line karta = new zzd.Line(new zzg.Point3d(ptStart.X + szerokosc - 3 * (210 - margines_lewy), ptStart.Y + margines_dolny, ptStart.Z), new zzg.Point3d(ptStart.X + szerokosc - 3 * (210 - margines_lewy), ptStart.Y + margines_dolny + 1.0, ptStart.Z))) { karta.Layer = ramka; //karta.ColorIndex = kolorramki; btr.AppendEntity(karta); tr.AddNewlyCreatedDBObject(karta, true); anonyGroup.Append(karta.ObjectId); } using (zzd.Line karta = new zzd.Line(new zzg.Point3d(ptStart.X + szerokosc - 3 * (210 - margines_lewy), ptStart.Y + wysokosc - margines_gorny, ptStart.Z), new zzg.Point3d(ptStart.X + szerokosc - 3 * (210 - margines_lewy), ptStart.Y + wysokosc - margines_gorny - 1.0, ptStart.Z))) { karta.Layer = ramka; //karta.ColorIndex = kolorramki; btr.AppendEntity(karta); tr.AddNewlyCreatedDBObject(karta, true); anonyGroup.Append(karta.ObjectId); } using (zzd.Line karta = new zzd.Line(new zzg.Point3d(ptStart.X + szerokosc - 4 * (210 - margines_lewy), ptStart.Y + margines_dolny, ptStart.Z), new zzg.Point3d(ptStart.X + szerokosc - 4 * (210 - margines_lewy), ptStart.Y + margines_dolny + 1.0, ptStart.Z))) { karta.Layer = ramka; //karta.ColorIndex = kolorramki; btr.AppendEntity(karta); tr.AddNewlyCreatedDBObject(karta, true); anonyGroup.Append(karta.ObjectId); } using (zzd.Line karta = new zzd.Line(new zzg.Point3d(ptStart.X + szerokosc - 4 * (210 - margines_lewy), ptStart.Y + wysokosc - margines_gorny, ptStart.Z), new zzg.Point3d(ptStart.X + szerokosc - 4 * (210 - margines_lewy), ptStart.Y + wysokosc - margines_gorny - 1.0, ptStart.Z))) { karta.Layer = ramka; //karta.ColorIndex = kolorramki; btr.AppendEntity(karta); tr.AddNewlyCreatedDBObject(karta, true); anonyGroup.Append(karta.ObjectId); } } if (wysokosc >= 841) { using (zzd.Line karta = new zzd.Line(new zzg.Point3d(ptStart.X + margines_lewy, ptStart.Y + 594, ptStart.Z), new zzg.Point3d(ptStart.X + margines_lewy + 1.5, ptStart.Y + 594, ptStart.Z))) { karta.Layer = ramka; //karta.ColorIndex = kolorramki; btr.AppendEntity(karta); tr.AddNewlyCreatedDBObject(karta, true); anonyGroup.Append(karta.ObjectId); } } if (wysokosc >= 1189) { using (zzd.Line karta = new zzd.Line(new zzg.Point3d(ptStart.X + margines_lewy, ptStart.Y + 841, ptStart.Z), new zzg.Point3d(ptStart.X + margines_lewy + 1.5, ptStart.Y + 841, ptStart.Z))) { karta.Layer = ramka; //karta.ColorIndex = kolorramki; btr.AppendEntity(karta); tr.AddNewlyCreatedDBObject(karta, true); anonyGroup.Append(karta.ObjectId); } } foreach (zzd.ObjectId id in anonyGroup.GetAllEntityIds()) { zzd.Entity entity = (zzd.Entity)tr.GetObject(id, zzd.OpenMode.ForWrite); jigger2.AddEntity(entity); } zze.PromptResult jigRes; jigRes = ed.Drag(jigger2); if (jigRes.Status == zze.PromptStatus.OK) { jigger2.TransformEntities(); tr.AddNewlyCreatedDBObject(anonyGroup, true); tr.Commit(); } else if ((jigRes.Status == zze.PromptStatus.Cancel)) { return; } else { tr.Abort(); } } } }
/// <summary> /// Tworzy styl wymiarowania PI_STANDARD /// </summary> public static void Dodaj_styl_PI_STANDARD() { string nazwastylu = "PI_STANDARD"; zza.Document doc = zza.Application.DocumentManager.MdiActiveDocument; zzd.Database db = doc.Database; using (zzd.Transaction tr = db.TransactionManager.StartTransaction()) { zzd.DimStyleTable DimTabb = (zzd.DimStyleTable)tr.GetObject(db.DimStyleTableId, zzd.OpenMode.ForRead); zzd.ObjectId dimId = zzd.ObjectId.Null; if (!DimTabb.Has(nazwastylu)) { DimTabb.UpgradeOpen(); zzd.DimStyleTableRecord newRecord = new zzd.DimStyleTableRecord(); //nazwa stylu wymiarowania newRecord.Name = nazwastylu; //styl tekstu newRecord.Dimtxsty = Dodaj_styl_PI_DIMENSIONTEXT(); //określenie liczby miejsc wyświetlanych w precyzyjnych wymiarach kątowych. newRecord.Dimadec = 0; //dodanie alternatywnych wymiarów newRecord.Dimalt = false; //usytuowanie napisu w stosunku do linii newRecord.Dimtad = 1; //rysować tekst zawsze poziomo? newRecord.Dimtih = false; // rysować tekst nnawet jak się nie mieści newRecord.Dimtix = false; //rozmiar strzałki newRecord.Dimasz = 1; //zmienna dimsah na false wtedy stosowany jest grot strzałki wskazany przez zmienną DIMBLK newRecord.Dimsah = false; //ustawienie grotu strzałek zzd.ObjectId id1 = GetArrowObjectId("DIMBLK", "PI_grotplany"); newRecord.Dimblk = id1; //kolor tekstu newRecord.Dimclrt = zzc.Color.FromColorIndex(zzc.ColorMethod.ByAci, 2); //kolor lini wymiaru newRecord.Dimclrd = zzc.Color.FromColorIndex(zzc.ColorMethod.ByAci, 1); //ukrycie pierwszej linii pomocniczej newRecord.Dimse1 = true; //ukrycie drugiej linii pomocniczej newRecord.Dimse2 = true; //miejsc po przecinku newRecord.Dimdec = 1; //wysikość tekstu newRecord.Dimtxt = 2.0; //odległość tekstu od linii newRecord.Dimgap = 1; // tekst w odnośniku zawsze poziomo newRecord.Dimtoh = false; //przemnożenie jednostki newRecord.Dimlfac = 100; //ukrywanie zer końcowych newRecord.Dimzin = 8; newRecord.Dimscale = 1; dimId = DimTabb.Add(newRecord); tr.AddNewlyCreatedDBObject(newRecord, true); } else { dimId = DimTabb[nazwastylu]; } //ustawiamy utworzony styl jako aktualny zzd.DimStyleTableRecord DimTabbRecaord = (zzd.DimStyleTableRecord)tr.GetObject(dimId, zzd.OpenMode.ForRead); if (DimTabbRecaord.ObjectId != db.Dimstyle) { db.Dimstyle = DimTabbRecaord.ObjectId; db.SetDimstyleData(DimTabbRecaord); } tr.Commit(); } }