Yeni bir başlık gönderCevap gönder 1. sayfa (Toplam 1 sayfa)   [ 3 mesaj ]
Yazar Mesaj
 Mesaj Başlığı: SDS'deki database destegi
MesajGönderilme zamanı: 27 Ağu 2003 18:41 

Kayıt: 26 Ağu 2003 15:56
Mesajlar: 13
Konum:
İ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.


Başa Dön
 Profil  
 
 Mesaj Başlığı:
MesajGönderilme zamanı: 24 Eyl 2003 03:45 
Site Admin

Kayıt: 07 Oca 2002 13:14
Mesajlar: 1085
Konum: Turkey
İ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


Başa Dön
 Profil  
 
 Mesaj Başlığı:
MesajGönderilme zamanı: 24 Eyl 2003 10:48 
Site Admin

Kayıt: 07 Oca 2002 13:14
Mesajlar: 1085
Konum: Turkey
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


Başa Dön
 Profil  
 
Eskiden itibaren mesajları göster:  Sırala  
Yeni bir başlık gönderCevap gönder 1. sayfa (Toplam 1 sayfa)   [ 3 mesaj ]


Kimler çevrimiçi

Bu forumu gezen kullanıcılar: Hiç bir kayıtlı kullanıcı yok ve 11 misafir


Bu foruma yeni başlıklar gönderemezsiniz
Bu forumdaki başlıklara cevap veremezsiniz
Bu forumdaki mesajlarınızı düzenleyemezsiniz
Bu forumdaki mesajlarınızı silemezsiniz
Bu foruma eklentiler gönderemezsiniz

Aranacak:
Geçiş yap:  
cron


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
610nm Style by Daniel St. Jules of Gamexe.net


Türkçe çeviri: phpBB Türkiye