ADeko Technologies
https://adeko.com/phpBB3/

SDS'deki database destegi
https://adeko.com/phpBB3/viewtopic.php?f=7&t=180
1. sayfa (Toplam 1 sayfa)

Yazar:  efeguney [ 27 Ağu 2003 18:41 ]
Mesaj Başlığı:  SDS'deki database destegi

İyigünler. SDS de OBJArx in named object dictionary'lerinin yerine geçebilecek, entityler disinda da data saklayabilecegim bir yer varmı. Burada entitylerin extended datasından bahsetmiyorum.

Örnegin "Efe" diye bir obje altina string, long vs.. gibi bilgiler yerlestirip saklayabilecegim bir database mevcut mu?

Dummy entityler yaratıp bunların extended datasını kullanmak bir çözüm, ancak bunun dışında bir şey önerebilirmisiniz?

Teşekkür Ederim.

ODTÜ CAD LAB.

Yazar:  Destek/Support [ 24 Eyl 2003 03:45 ]
Mesaj Başlığı: 

İyi soru. IntelliCAD üstünde ciddi uygulama yazan herkesin ihtiyaç duyduğu bir konudur, uygulamaya özgü kalıcı verilerin dwg içinde saklanması.

<b>DICTIONARY</b>ler ve <b>XRECORD</b>lar tam bu işe yararlar.

DICTIONARY'leri başlıklar XRECORD'ları da verilerin gerçekte saklandığı yer olarak düşünün.
<pre id=code><font face=courier size=2 id=code>
ANA DICTIONARY (Dictionary) <b>sds_namedobjdict</b> ile mevcut dictionariler elde edilir
> BENIM_DICTIONARY (Dictionary) <b>sds_dictsearch</b> ile xrecord'u elde edilir
> BENIM_VERILER (XRecord)
</font id=code></pre id=code>


Malum, programcılıkta bir örnek bir araba laftan iyidir: Farzedelim kendi yaptığımız bir dwg'ye bir copyright yazısı eklemek istiyoruz. Aramızda uygulmamızın başlığı <font face='Courier New'>"BENIM_UYGULAMAM"</font id='Courier New'> olsun. Bunu ana dictionary'e <font face='Courier New'>"ŞAHSIMA MÜNHASIR"</font id='Courier New'> copyrightımızla birlikte eklemek için:
<pre id=code><font face=courier size=2 id=code>
sds_name nmMainDict, nmMyData;
resbuf *rb2= NULL;


sds_namedobjdict(nmMainDict);
rb2 = sds_buildlist(RTDXF0, "XRECORD", 100, "AcDbXrecord", 2, "ŞAHSIMA MÜNHASIR", 0);
sds_entmakex(rb2, nmMyData);
sds_relrb(rb2);
sds_dictadd(nmMainDict, "BENIM_UYGULAMAM" , nmMyData);
</font id=code></pre id=code>
<i>(Örneğin açık olması adına hata kontrolleri ayıklandı)</i>

Vurucu satır son satırdır. Diğerleri peşrev. Unutmadan dictionaryler xrecord yerine başka dictionaryler de içerebilirler. Yani dictionaryler kendi içlerinde bir hiyerarşi oluşturabilirler. Yani şöyle bir buildlist yaratıp:
<pre id=code><font face=courier size=2 id=code>sds_buildlist(RTDXF0, "DICTIONARY", 100, "AcDbDictionary", 0);</font id=code></pre id=code>bunu <font face='Courier New'>sds_dictadd</font id='Courier New'>'e geçirip bir XRecord'u da buna ekleyebilirsiniz.

Veriyi geri almak için kullanılacak işlevler <font face='Courier New'>sds_dictsearch</font id='Courier New'> ve <font face='Courier New'>sds_dictnext</font id='Courier New'>'dir:
<pre id=code><font face=courier size=2 id=code>
resbuf *rb3= NULL, *prb;

rb3 = sds_dictsearch(nmMainDict, "BENIM_UYGULAMAM", 0);
for(prb= rb3; prb; prb=prb->rbnext)
{
if (prb->restype == 2)
sds_alert(prb->resval.rstring);
}
sds_relrb(rb3);
</font id=code></pre id=code>

XRecordlar içine datatiplerine bağlı kalmak şartı ile istediğiniz bilgiyi koyabilirsiniz. Yorum uygulamaya aittir.



Destek/Support tarafından 24/09/2003 09:47:26 tarihinde değiştirildi

Yazar:  Destek/Support [ 24 Eyl 2003 10:48 ]
Mesaj Başlığı: 

Aslında mevzu yukada anlatıldığı kadar basit. Ancaaaak dağın ardında kendini gizleyen ciddi bir bela var: Diyelim onlarca hatta yüzlerce datanız var. Bunları XRecord içinde belirli bir sıra ile tutuyorsunuz. Bu sırayı her daim muhafaza etmek ciddi efor gerektirir. Hadi bunu yaptınız peki yeni versiyonlar çıktığında data sayısında artma/azalma olunca n'olcak? Zaman içinde bunların (ecnebiler nasıl diyor) management'ı sizi asıl işinizden alıkoyacak kadar asap bozucu olabilir.

ADeko Yazılımın bir nevi kamu hizmeti olsun, size önemli bir kurnazlık öğretelim: Her dataya bir key verin ve verinizi <b>key-data / key-data / key-data / ...</b> şeklinde saklayın. Şöyle:

<pre id=code><font face=courier size=2 id=code>
sds_buildlist(RTDXF0, "XRECORD", 100, "AcDbXrecord",
70, <b>1</b>, 2, <b>"Datanın biri"</b>,
70, <b>2</b>, 10, <b>point1</b>,
70, <b>3</b>, 40, <b>3.1416</b>,
70, <b>4</b>, 2, <b>"Başka bir data"</b>,
0);
</font id=code></pre id=code>

Bu şekilde biraz yerden kaybedersiniz amma dataların sıralı olmasına gerek kalmaz, ve boş olan datanın yerine de öndeğerini (default) kod içinde rahatlıkla ikame edebilirsiniz.

Bu üçkağıdı XData'larda da uygulayabilirsiniz.

Bişi diil.





Destek/Support tarafından 24/09/2003 10:10:53 tarihinde değiştirildi

1. sayfa (Toplam 1 sayfa) Tüm zamanlar UTC + 2 saat [ GITZ ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/