Nesne Taşıma (Üstadlardan Rica Ediyorum)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen anonymousdelphicoder »

Herkese merhabalar,

sizlerden bilgi anlaminda bir yardim rica ediyorum, az da olsa zaman ayirirsaniz cok mutlu olurum.

Uzun zamandir GDI+ kullandim, fakat GDI+ CPU renderer oldugu icin epey hantal, bir suredir Direct2D kullaniyorum, haliyle biraz bilgi sıkıntım var, örneğin GDI+ da bir Line, Star veya Komplex bir goruntu cizdirdigimde bu cizimleri layer mantikli(ama layer degil) olarak nesneleri / cizimleri surukleyebiliyor yeniden konumlandırıp, boyutlandırabiliyordum, burada asil sorun su mouse'un cizilen goruntu uzerinde olup olmadigini anlamamız gerek bunu GDI+ de

Kod: Tümünü seç

Grap.GetPixel(x,y,outColor);
seklinde mousun x y noktasindaki rengini aliyordum eger outColor 0 (sifir) degil ise bir cizimin oldugunu anliyordum. (Siyah rengi RGB kanalında de 0 (sifir) ama bildiginiz gibi GDI+ siyah icin farkli bir renk tanimi donderiyor)
0 (sifir) olmadigi an yani çizilmiş bir pixel olduğunda bu ufak çözümle tasima islemlerimi sorunsuzca yapiyordum.

Gel gelelim bu amator yapım Direct2D de malesef gecersiz, benim asil yapmak istedigim ornegin Line çizgisi, noktadan noktaya yerlesen pixellerin uzerine gelip mouse ile tasimak. Veya bir Star'ı veya Poligon'u tasimak.. Fakat Fill olmayan Rectangle i kendi bounds sinirlari uzerinden / icinden de tasimak istiyorum, eminim bunun bir yolu vardir yoksa oyunlardaki nesne etkilesimleri nasil yapilacakti. Sizden ricam bu konuda bilgilerinizi paylaşın inanin cok arastirdim ama bir sonuca varamadim. Bunlarin yapisi hakkinda / mantalitesi hakkında bilgi verebilirseniz cok mutlu olurum. Örnek olarak
C++ ornekleri de olabilir.

Teşekkür ederim.
En son anonymousdelphicoder tarafından 01 Haz 2016 02:50 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen anonymousdelphicoder »

Galiba bu forumda istenmeyen uyeyim :)
Kullanıcı avatarı
yhackup
Üye
Mesajlar: 115
Kayıt: 09 Ağu 2014 09:09
İletişim:

Re: Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen yhackup »

ileride bende böyle sorular sorabilecekmiyim acaba :D
Çaylak Delphici :D

Yakup ULUTAŞ
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen anonymousdelphicoder »

Bu konuda bilgi sahibi bir üstadımız yok mu?
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen loaded »

Selam
Öncelikle, GDI+ vede Direct2D kullanmadım fakat çok eskiden yaptığım çizim çalışmalarından edindiğim bilgi;
Çizim objelerinizin sol_alt ve sağ_üst koordinat bilgilerini array bir değişkende saklayın. Buna limit bilgisi deniyor.
Farenin koordinatlarını bu array içerisinde aratın, eğer bulmuşsanız farenin hangi objenin sınırları içerisinde olduğunu bilebilirsiniz.
Örneğin Çember, dahasında ise farenin çemberin içindemi ,dışında mı yoksa çember çiziminin direk üstünde mi ? olduğu durumları
onpoly (geometride noktanın doğrunun üzerinde olması) veya inpoly(noktanın alanın içinde olması) fonksiyonları ile kontrol edip istediğiniz sonuca ulaşmış olursunuz.
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen anonymousdelphicoder »

çok teşekkür ediyorum hocam, fikriniz çok iyi fakat ben bu bahsettiğiniz algoritmada şu noktada takılmaktayım, bir Line i çizerken 4 nokta veriyoruz.

x1,y1,x2,y2 buna ek olarak çizginin dolgu kalınlığıda var, grafik kütüphanesine bu parametreleri verdiğinizde zaten çiziyor, asıl sorun bu çizgi çizilirken çizildiği her bir noktayı tespit etmek örneğin A Noktasından B Noktasına çiziyoruz fakat bu çizilirken hangi noktalar üzerinden geçiyor ? birde dolgu kalınlığı ekleniyor bu durumda bunu nasıl hesaplatacağım.. Ayrıca sadece çizgi olmaya bilir örneğİn bir yıldız bir karmaşık şekil...
Bu durumda bunları nasıl hesaplatacağım ? yanlış hatırlamıyor isem noktalarla çizim yapmak diye bir teknik vardı adı da Stipple dı sanırım..

ben çizdireceğim görüntüyü matematiksel olarak her noktasını ifade etmem gerekiyor sanırım, kafam çok karışık detaylı olarak anlatma şansınız varsa çok sevinirim..

Teşekkürler
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen loaded »

Selam
S:A Noktasından B Noktasına çiziyoruz fakat bu çizilirken hangi noktalar üzerinden geçiyor ?
C:İhtiyacınız olan nokta koordinatlarını, geometride bulunan doğrunun denklemi ile elde edebilirsiniz.
S:birde dolgu kalınlığı ekleniyor bu durumda bunu nasıl hesaplatacağım..
C:Hiç ihtiyacım olmadığı için bu konuyu araştırmadım dolayısıyla fikrim yok
S:Ayrıca sadece çizgi olmaya bilir örneğin bir yıldız bir karmaşık şekil...Bu durumda bunları nasıl hesaplatacağım ?
C:Objenizi pline yada polyline denilen alan formatlarına dönüştürmelisiniz. Akabinde önceki mesajımda yazdığım onpoly ,inpoly yordamlarını kullanmalısınız.
Konu ile, bi nebze ilgili olarak http://www.cadplugin.com sayfasında, yazdığım Emlakcad isimli programın videosunu inceleyebilirsiniz.
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen anonymousdelphicoder »

Merhaba,
Vakit ayırıp ilgilendiğiniz için çok çok teşekkür ederim.

Karmaşık şekillerden yola çıkacak olursak, PLine veya PolyLine alan formatları için nasıl bir yol izlemem gerek, bu bahsettiğiniz formatlar matematikte anlatılan konularmıdır? Yazmış olduğunuz InPoly ve OnPoly fonksiyonlarını Delphi'den baktım ama sanırım Delphiye has bir fonksiyon değil, veya bunları doğrudan bizim yazmamız gereken matematiksel fonksiyonlar mıdır ?

Video'nuzu inceledim gerçekten harika bir yazılım geliştirmissiniz, siz böyle bir örnek gösterince insanın istahı kabarıyor :)
Programınız hakkında merak ettiğim bir kaç şey var tabiki özel değilse, standart TCanvas üzerinden mi çiziyorsunuz ? ve çizilen çizgileri / parsellerin verisini sanırım başka bir yerden temin ettiniz?

Teşekkür ederim.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen loaded »

Selam
Faydalı olduysak ne mutlu.
InPoly ve OnPoly delphide yok bunlar geometri konusu nette araştırma yapmanız gerekecek.
Örnek :
Noktanın alan içindeki durumunu kontrol etme (PLine veya PolyLine Oluşturarak) http://wiki.lazarus.freepascal.org/Geometry_in_Pascal
Evet, çizimler için canvas kullanıyorum.
Parsel verisi çok farklı kaynaklardan temin edilebilir.
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen anonymousdelphicoder »

Allah razı olsun hocam, mantık oturdu araştırmalarla destekleyeceğim.

Birde verdiğiniz linkteki örnek çizilen karmaşık şeklin içinde / boş kısımlarında olduğumuza dair bir return yapıyor sanırım,

birde doğrudan çizim üzerinde olup olmadığımızı return edecek fonksiyona ihtiyacımız var sanırım yukarıda bahsettiğiniz gibi OnPoly konusuyla çözeceğim.

Teşekkürler.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen Kuri_YJ »

Selamlar,

Graphics hem zevkli ama bir o kadar da meşakkatli bir konu. Tam olarak neyi hedeflediğinizi söylerseniz buna göre size yardımcı olabiliriz sanırım.

Not : Uzun süredir foruma bakamıyordum. Bugün müsait oldum baktım.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen anonymousdelphicoder »

Selamlar,

@Kuri_YJ Hocam öncelikle ilginiz için teşekkür ederim.

Yukarıdaki açıklamalarıma ek olarak, Direct2D kullanarak çizimler yaptırıyorum fakat mouse ile bu çizimlerin üzerine geldiğimi veya çizimin sınırları içerisinde olduğumu anlamak istiyorum.

GDI+ da yukarıda verdiğim,

Kod: Tümünü seç

Grap.GetPixel(x,y,outColor);
kod ile ufak bir renk sorgulaması ile görüntünün üzerinde olduğumu anlayabiliyordum bu renk sorgulaması ile outColor sıfır değil ise çizilmiş bir görüntünün olduğunu anlıyor ve mousun bir pixelin üzerinde olduğunu anlayıp işlemlerimi ona göre devam ettiriyordum, fakat mouse un pixel üzerinde olduğunu tespit edebiliyor fakat bir çizimin sınırları içinde olduğunu tespit edemiyorum.

Örneğin bir Polygon(Yıldız) çizdirdim, çizgi kalınlığı 10px olsun yukarıda verdiğim kod ile o çizilmiş Polygon'un üzerinde olduğumu tespit edebilirim peki o Polygon'un sınırları içerisinde olduğumu nasıl tespit edeceğim... ?

Kısacası sorunum mouse un, çizilen bir görüntünün üzerinde veya çizimin sınırları içerisinde olduğunu anlamak istiyorum..

Eğer kod olarak yardım edebilirseniz, TCanvas üzerinden yardım ederseniz hem basit hemde anlaşılabilir olur.

Çok teşekkür ederim.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen Kuri_YJ »

Selamlar,

Fikir edinilmesi açısından kısaca izah edeceğim. Bir poligonun içinde olup olunmadığını kontrol etmek için, bulunduğunuz noktadan aksis veya ordinat yönünde bir dikme çıkın. Çizdiğiniz bu dikme poligonunuzun kenarlarını kaç defa kesiyor bunu bulun. Eğer çıkan sayı tek ise Poligonun içindedir. Eğer çift ise poligonun dışındadır. Bu teknik 2D çizimlerde kullanılır.

Daha detaylı ve görsel açıklaması ile birlikte C kod örneği aşağıdaki linkte var.

http://alienryderflex.com/polygon/

Ama senin sorduğun soru tam olarak bu değil ;)

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: Nesne Taşıma (Üstadlardan Rica Ediyorum)

Mesaj gönderen anonymousdelphicoder »

Cok tesekkur ederim hocam, inceleyecegim.
Cevapla