İşlem Yığınları ve Dönüşümler adlı bölümlerde , ModelSpace’e nasıl çizim yapılacağına dair basit örnekler vermiştik. 2B varlıkların oluşturulmasına geçmeden önce, ilerleyen kısımlarda sıkça kullanacağımız Point3d ve Vector3d yapılarını tanımak faydalı olacaktır. Bu yapılarAutodesk.AutoCAD.Geometry isim uzayında yer almaktadır.

Çok Kullanılan Geometri Yapıları

Point3d

Pointd3d yapısı, AutoCAD varlıkları yaratılırken yaygın olarak kullanılan basit bir nesnedir. Üç farklı kurucuya sahiptir.

public Point3d(PlanarEntity plane, Point2d point);
public Point3d(double[] xyz);
public Point3d(double x, double y, double z); // x,y ve z koordinatları ile 3B bir nokta oluşturur

Bir çok AutoCAD varlığının Point3d türünde özellikleri bulunmaktadır. Line nesnesinin başlangıç ve bitiş noktaları bunun örneğidir. Aşağıdaki kod parçası, üç birim uzunluğunda yatay bir çizgi oluşturacaktır. Çizginin görünebilmesi için daha önce gösterildiği gibi çizginin, ModelSpace ya da PaperSpace blok tablo kaydına eklenmesi gereklidir.

Point3d pntA = new Point3d(1.0, 0.0, 0.0);
Point3d pntB = new Point3d(4.0, 0.0, 0.0);
Line line = new Line(pntA, pntB);

Vector3d

Vector3d yapısı, doğrultu işlemleri için kullanılır. Kurucuları Point3d ile benzerdir.

public Vector3d(PlanarEntity plane, Vector2d vector2d);
public Vector3d(double[] xyz);
public Vector3d(double x, double y, double z);

Bu yapının kXAxis özelliği, (1, 0, 0) vektörünü göstermektedir.

AutoCAD Line Nesnesi

Kurucular

Line nesnesinin iki adet kurucusu vardır.

public Line()
public Line(Autodesk.AutoCAD.Geometry.Point3d pointer1, Autodesk.AutoCAD.Geometry.Point3d pointer2)

Çizgi (Line) Oluşturulması-1

5 ve 6. satırlarda erişilen doküman ve veritabanı nesneleri Active sınıfında tanımlanmıştır.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[CommandMethod("DrawLine1")]
public void DrawLine1()
{
	// Aktif doküman ve veritabanı erişim
	Document doc = Active.Document;
	Database db = Active.Database;

	// İşlem yığınının başlatılması
	using (Transaction tr = doc.TransactionManager.StartTransaction())
	{
		// Blok tablosunun okuma amaçlı ve
		// ModelSpace blok tablosu kaydının ise yazma amaçlı açılması 
		BlockTable bt = (BlockTable) db.BlockTableId.GetObject(OpenMode.ForRead);
		BlockTableRecord btr =
			(BlockTableRecord) doc.TransactionManager.GetObject(bt[BlockTableRecord.ModelSpace],
				OpenMode.ForWrite);
	
		// Çizgi nesnesinin oluşturulması
		Point3d startPnt = new Point3d(1.0, 0.0, 0.0);
		Point3d endPnt = new Point3d(4.0, 0.0, 0.0);
		Line line= new Line(startPnt, endPnt);
	
		// Çizginin blok tablo kaydına eklenmesi
		 ObjectId lineId = btr.AppendEntity(line);
		// Çizginin işlme yığınına eklenmesi
		tr.AddNewlyCreatedDBObject(line, true);
		// İşlem yığınının onaylanması
		tr.Commit();
	} // İşlem yığınının sonlandırılması
}

19-21 numaralı kod satırları çizgiyi oluşturulmakta ve 23-28 numaralı kod satırları ise çizgiyi çizim veritabanına eklemektedir.

DrawLine1 yordamı, çizim veritabanına varlık eklemenin işleyişini anlamak açısından önemlidir:

  • Blok tablosu ve blok tablo kaydına erişirken GetObject yordamı kullanılmıştır. Bu yordam DBObject türünde nesneler döndürmektedir ve uygun tür dönüşümü yapılarak BlockTable ve BlockTableRecord nesnelerine erişilmektedir. (Satır 13 ve 15.)
  • ModelSpace blok tablo kaydına yazma amaçlı erişilmiştir. Ancak okuma amaçlı erişilmiş blok tablo kaydına her zaman btr.UpgradeOpen(); yordamını kullanarak yazma amaçlı erişmek de mümkündür.
  • Oluşturulan Line nesnesi sonlandırılmamıştır. Çünkü sonlandırma işini işlem yığını üstlenmiştir. (line.Dispose(); satırını koda eklemek hatayla sonuçlanacaktır.)
  • AppendEntity yordamı ObjectId türünde bir nesne döndürmektedir. AutoCAD çiziminde her nesnenin, grafiksel olsun ya da olmasın, mutlaka benzersiz bir kimliği (ObjectId) vardır. Bu kimlikle nesnenin hangi veritabanına ait olduğu, geçerli olup olmadığı gibi bilgilere ulaşılabilmektedir. ObjectId için unutulmaması gereken en önemli şey, çizim kapatılıp tekrar açıldığında, nesne özelliklerinde değişiklik yapıldığında değerinin değişebileceğidir.

Diğer AutoCAD varlıklarının çizim veritabanına eklenmesinde izlenecek yol, DrawLine1 yordamında izlenenle aynı olacaktır.

Kılavuzun ilerleyen bölümlerinde kod tekrarından kaçınmak ve veritabanına varlık ekleme işlemlerini kolaylaştırmak için statik DatabaseHelper sınıfı tasarlanmıştır. (Bkz. EK-2: AutoCAD Veritabanı Yardımcısı)

DatabaseHelper AddToModelSpace yordamının yardımı ile DrawLine1 artık daha sade bir biçimde aşağıdaki gibi yazılabilir.

[CommandMethod("DrawLine1Yeni")]
public void DrawLine1Yeni()
{
	Point3d startPnt = new Point3d(1.0, 0.0, 0.0);
	Point3d endPnt = new Point3d(4.0, 0.0, 0.0);
	Line line = new Line(startPnt, endPnt);
	line.AddToModelSpace();
}

Çizgi (Line) Oluşturulması-2 (Dikdörtgen Çizdirilmesi)

[CommandMethod("DrawLines")]
public void DrawLine2()
{
	double width = 5.0;
	double height = 2.5;

	Point3d pnt1 = new Point3d(0.0, 0.0, 0.0);
	Point3d pnt2 = pnt1 + new Vector3d(width, 0.0, 0.0);
	Point3d pnt3 = pnt2 + new Vector3d(0.0, height, 0.0);
	Point3d pnt4 = pnt1 + new Vector3d(0.0, height, 0.0);

	List<Line> lines = new List<Line>
	{
		new Line(pnt1, pnt2),
		new Line(pnt2, pnt3),
		new Line(pnt1, pnt4),
		new Line(pnt3, pnt4)
	};
	lines.AddToModelSpace();
}

DrawLine2 yordamı alt köşe noktası (0, 0, 0) olan ve genişliği 5, yüksekliği 2.5 birim bir dikdörtgenin kenar çizgilerini oluşturacaktır.

Güncelleme tarihi:

Yorum yapın