1372826956:AAFe2Py65GSQkfGiRnXuOQ-eD9yXcwMv988

Dinamik Blokları Anonim Hale Getirme

Şayet çizimlerinizi başka şirketlere gönderiyorsanız ve dinamik blok kütüphanelerinizi korumak istiyorsanız, dinamik bloklarınızı anonim hale getirmek şart olabilir.

Genellikle bunu özel aktarım prosedürümüzde yaparız. Prosedürümüz, dönüşümden sonra blok tanımında kalmaya devam eden, ancak görünür olmayan varlıklarla da ilgilenmektedir.

Bu, genellikle bir veya daha fazla görünürlük “visibility“ parametresi olan bir dinamik bloğu dönüştürürken oluşur. Dönüştürüldüğünde, görünür olmayan “invisible“ varlıklar muhafaza edilir, böylece çizim boyutu kayda değer ölçüde artacaktır. Prosedürümüz, dönüştürmeden sonra bu görünmez varlıkları silecektir.

İşte, bazı kullanıcıların ihtiyaç duyduğu bu anonimleştirme işlemini yapacak kod aşağıdadır. Umarım Autodesk daha iyi bir standart AutoCAD aracını programa dahil edene dek faydalı olacaktır.

// Define Command “explode_dynablocks”

[CommandMethod(“explode_dynablocks”)]

public void comsal_explode_dynablocks()

{

if (Application.DocumentManager.Count == 0) return;

Document doc = Application.DocumentManager.MdiActiveDocument;

 

// onay için kullanıcıya sorma

doc.Editor.WriteMessage(“\nBu komut tüm dinamik blokları anonim bloklara dönüştürecektir.”);

PromptStringOptions pso = new PromptStringOptions(“\nDevam edilsin mi?“);

pso.DefaultValue = “Y”;

pso.UseDefaultValue = true;

PromptResult res = doc.Editor.GetString(pso);

 

if (res.StringResult.ToUpper() == “Y”)

{

// geçerli doküman (blok) için dönüşümü yapma

int n = csDwgTools.explode_dynablocks(doc.Database);

 

if (n > 0) doc.Editor.WriteMessage(” ” + n.ToString() + ” blocks converted.”);

else doc.Editor.WriteMessage(” No block converted.”);

}

// komut satırından veri istemi (uyarı) görüntületme

Autodesk.AutoCAD.Internal.Utils.PostCommandPrompt();

}

public static int explode_dynablocks(Database db)

{

int result = 0;

Transaction tr = db.TransactionManager.StartTransaction();

using (tr)

{

BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);

 

foreach (ObjectId objId in bt)

{

BlockTableRecord ent = (BlockTableRecord)tr.GetObject(objId, OpenMode.ForRead);

if (!ent.IsErased && ent.IsDynamicBlock)

{

// tüm blok referanslarını bulma

ObjectIdCollection oic = ent.GetBlockReferenceIds(false, false);    // Bu blok referans listesini döndürür

                       

ObjectIdCollection oid = ent.GetAnonymousBlockIds();    // Bu blok tablosu kayıt listesini döndürür

// analyze BTRs and collect thier references

foreach (ObjectId o in oid)

{

DBObject dbo = tr.GetObject(o, OpenMode.ForRead);

if (dbo is BlockTableRecord)

{

BlockTableRecord abt = (BlockTableRecord)dbo;

ObjectIdCollection oc = abt.GetBlockReferenceIds(false, false);

if (oc != null)

foreach (ObjectId id in oc) oic.Add(id);

}

else if (dbo is BlockReference)

{

oic.Add(o);

}

}

// artık blok referanslardan oluşan bir koleksiyonumuz olmalı

// listeyi gözden geçirme ve dönüşümü yapma

foreach (ObjectId o in oic)

{

DBObject dbo = tr.GetObject(o, OpenMode.ForRead, false);

if ((dbo is BlockReference) && (!dbo.IsErased))

{

BlockReference br = (BlockReference)dbo;

 

if (br.IsDynamicBlock)

{

// dinamik bloğu anonime dönüştürme

br.UpgradeOpen();

br.ConvertToStaticBlock();

result++;

}

 

// bloklar dönüştürüldü

// tüm dönüşümleri gözden geçirme ve görünmez varlıkları silme

BlockTableRecord btr = (BlockTableRecord)tr.GetObject(br.IsDynamicBlock ? br.DynamicBlockTableRecord : br.BlockTableRecord, OpenMode.ForRead);

 

foreach (ObjectId oin in btr)

{

DBObject dboin = tr.GetObject(oin, OpenMode.ForRead, false);

if ((dboin is Entity) && (!dboin.IsErased))

{

Entity ee = dboin as Entity;

if (!ee.Visible)

{

ee.UpgradeOpen();

ee.Erase(true);

}

}

}

}

}

}

}

 

tr.Commit();

}

 

döndürülen sonuç;

}

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Açıklama Görünüşleri Hakkında

Revit’te bir modelin belirli bir parçasının büyütülmüş görüntüsüne daha yakından bakabilirsiniz. Bir plana, kesite, detaya …

Bir cevap yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Yardıma mı ihtiyacınız var? Chat with us
Bir görüşme başlatmak için lütfen önce gizlilik politikamızı kabul edin.