Delphide Otomatik Çizim yaptırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ertline
Üye
Mesajlar: 137
Kayıt: 23 Nis 2005 09:15
Konum: Bartın
İletişim:

Delphide Otomatik Çizim yaptırma

Mesaj gönderen ertline »

S.A. Arkadaşlar
Yapacağım programda
Otomatik bir çizim yapmam gerekiyor.
Şöyle ki:
Elimizde bir 2800 mm(en) X 2000 mm(boy) ebatlarında bir sunta var diyelim.Bu suntayı ben istediğim ebatlarda parçalara ayıracağım.
Örneğin;
Ham Plaka Ebatı:2800 X 2000 mm
parça no X Y Miktar
1 200 300 5
2 400 350 4

Şeklinde parçalaraq ayıracağım.Burda 2800 X 2000 Ebatındaki plaka 5 adet 200 x 300 ve 4 adet 400x350 ebatlarında toplam 9 parça oluşturulacak.Bunu nasıl delphide çizdirebilirm.Hangi componenti nasıl kullanmalıyım bu konuda çalışmış arkadaşlar varsa her zamanki gibi geniş bilgilerinizi ve düşüncelerinizi bekliyorum...

Yardımlarınız İçin Teşekkürler....
"Bilginin Doruğuna Hep Birlikte..."
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

mrb
resimlerin üzerinde işlem yaptırmak için Image Processing le ilgili araştırma yapabilirsin.
mesela ilk başta 200*300 lük kısmı pixel pixel okuyup yeni koyduğun image e pixel pixel yazdırırsın. daha sonra tüm parçaları bu şekilde halledebilrsin.
mesela her seferinde kaça böleceğin belli olmadığı için Image nesnesini create ederek kullanabilirsin.
ii çalışmalar
ertline
Üye
Mesajlar: 137
Kayıt: 23 Nis 2005 09:15
Konum: Bartın
İletişim:

Mesaj gönderen ertline »

tam olarak anlayamadım a_o,
Biraz daha açık yazarsanız sevinirim.
Hangi nesne ile yapmalıyım bunu.
Shape olur olur mu?
"Bilginin Doruğuna Hep Birlikte..."
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

Bence image nesnesi kullanın.

Kod: Tümünü seç

Image1.Canvas.MoveTo(X,Y);
Image1.Canvas.LineTo(x,y);
Image1.Canvas.Rectangle(x1,y1,x2,y2);
tarzındaki kodlar işinizi görür.
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
ertline
Üye
Mesajlar: 137
Kayıt: 23 Nis 2005 09:15
Konum: Bartın
İletişim:

Mesaj gönderen ertline »

O zaman birden fazla image mi kullanmalıyım
yani şimdi önce 2800x2000 ebatlı parça 5 adet 200x300 ve 4 adet 400x350 ebatlarında parçalar oluşacak.Sonuç olarak bizim elimizdeki 2800x2000 lik sunta 9 parçaya ayrılacak.Bu dokuz parçayı nasıl yapacağız.Bu 9 la sınırlı değil tabi.istenilen kadar parça olacak imageste bunu tam olarak nasıl yapabiliriz?Biraz daha açarsanız sevinirim..
"Bilginin Doruğuna Hep Birlikte..."
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

Tam olarak yapmak istediğiniz nedir? Bir suntanın en optimize bir şekilde nasıl parçalara ayrılacağını görsel olarak simule etmek mi? Eğer bu şekilde ise ve aynı 2800*2000 ebatlı anaparça kullanılarak diğer küçük parçalar oluşturulacaksa tek bir image üzerinde gösterebilirsiniz kesilecek yerleri, çizgilerle çizdirmek suretiyle.
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
vesper
Üye
Mesajlar: 78
Kayıt: 28 Tem 2005 08:23

Mesaj gönderen vesper »

hocam amacın sadece çizim değilse sen bu parçaları ana tabaka üzerine döndürerekte koyacaksan fire optimizasyonu yapmaya çalışıyorsan araştırman gereken şey çizimden çok knapsack problemi. senin örneğindeki gibi 2 boyutlu yada tel gibi birşey keseceksen tek boyutlu hacmi olan bir şey ise 3 boyutlu (kesmen gerekmiyor) problemi bir konteynıra eldeki belli ölçüdeki kolileri sığdırmak yada belli boyuttaki kutuları bir odanın zeminine dizmek gibide düşünebilirsin, kesinlikle Knapsack problemi ve nette epey birşey var bununla ilgili cutting ve packing diye aratabilirsin kolay gelsin
ertline
Üye
Mesajlar: 137
Kayıt: 23 Nis 2005 09:15
Konum: Bartın
İletişim:

Mesaj gönderen ertline »

Evet Mucar kardeşim, bir suntanın en optimize bir şekilde nasıl parçalara ayrılacağını görsel olarak simule etmek.
Bunu nasıl yapabilirim tek images içinde?Nasıl image yi çizgilerle bölebilrim? Kısaca açıklarsan ve kod parçası gönderebilirsen çok sevineceğim.
Allah Razı Olsun

Yardımlarınız için Teşekkürler...
"Bilginin Doruğuna Hep Birlikte..."
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

merhaba aşağıdaki kod resmin tamamını pixel pixel okuyup başka bir resme pixel pixel yazdırıyor. ama sen bunun yerine kendi resminden sadece belirli kesitler okuyup onları yeni image nesnesine yazdırırsın.mesela 9 parçaya böldürme kısmını manuel olarak mı aldırıyosun? eğer öyleyse her seferinde yeni bi image nesnesi create edersin. böylece gerçek resim değerlerini oluşturduğun resme kopyalarsın.

Kod: Tümünü seç

procedure Tana.GoruntudenDiziye;
var
   i, j : integer;
begin
     for i:=0 to Image1.Width-1 do
      for j:=0 to Image1.Height-1 do
         begin
              Image2.Canvas.Pixels[i,j]:=RGB((GetRValue(Image1.Canvas.Pixels[i,j]) ,GetGValue(Image1.Canvas.Pixels[i,j]),GetBValue(Image1.Canvas.Pixels[i,j])));
         end;
end;

Umarım işini görür.
kolay gelsin
Kullanıcı avatarı
Query
Üye
Mesajlar: 363
Kayıt: 29 Ara 2003 05:13

Mesaj gönderen Query »

Slm;

Bu çizim programından çok bir optimizasyon programı ki burda çizim yapmak olayın en kolay kısmı. Elindeki parçaların tabakaya en az fireyle nasıl dağılacağını hesaplatman lazım önce tabi bu da baya bi döngü mantığı yazman gerekiyor.

Bunu yaptıktan sonra @mucar arkadaşın yazdığı kodlar işine yarayacaktır.

Optimizasyon mantığı hele tabaka yerleşimi; 2 ve 3 boyutlu bazen kesim tek yöne olmak zorunda olduğunda (sunta gibi) baya bi hesap ve döngü gerektirecek bişidir. Çok da kolay olmayabilir. :(

Kolay gelsin. İyi çalışmalar.


.
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

Evet Query ve vesper'in de dediği gibi burada asıl sorun optimize bir biçimde parçaların adetlerinin ve nasıl yerleşeceğinin hesaplanması. Çizim yaptırmak ise işin en kolay kısmı, mesela örnek için forma bir buton, bir image (boyutlarını 200x200 yapın) koyup butona basıldığında aşağıdaki kodlar çalışsın;

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Canvas.MoveTo(0,100);
image1.Canvas.LineTo(200,100);
end;
Asıl soruna gelince; ilk başta bir alan kontrolü yapılmalı yani sizin verdiğiniz örneğe göre 2800x2000 büyük olmalı (5x200x300)+(4x400x350) kontolü olmalı. Daha sonra parçaları değişik şekildeki kombinasyonlarda sanal olarak yerleştirerek maksimum alanı kapsayan durum baz alınıp gerekli koordinatlar gerekli değişkenlere yüklenmeli. en son bu en optimize durumun koordinatlarına göre de bu durum image nesnesinde çizdirilmeli (yukarıdaki örnekte olduğu gibi).
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
delphi_photo
Üye
Mesajlar: 1
Kayıt: 06 Oca 2009 12:37

Re: Delphide Otomatik Çizim yaptırma

Mesaj gönderen delphi_photo »

ben bişey sorcaktım çok önemli benim için
canvas.pixels ne işe yarıyor
ve kullanımı nasıl
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Delphide Otomatik Çizim yaptırma

Mesaj gönderen mrmarman »

@query doğru yaklaşımda bulundu.

Önerim, bu işlerle meşgul olan birisiyle diyaloğa geçerek, onların gerçek hayatta bu bölümlemeyi nasıl yaptıklarını sorgulayın. Onu program için model olarak kullanırsanız en azından hangi boyutlarda dilimleme yapacağınızı tespit etmiş olarak problemin birinci aşamasını geçmiş olursunuz. Bundan sonra çizim çok kolay. Zaten oransal çizim yapacağınızdan bu elde edeceğiniz rakamlar sizi sonuca götürecektir.

Eğer üçüncü kişilerle diyalog kuramam diyorsanız, bunu internetten araştırmanız için ingilizce karşılığını vereyim "Cutting Stock Problem" deniyormuş. Wikipedia'dan linki: http://en.wikipedia.org/wiki/Cutting_stock_problem Bu mihmalde aramalarınızı sürdürürseniz daha çok sonuca ulaşabilirsin diye İngilizce karşılığını verdim.

Başarılar.
Resim
Resim ....Resim
Cevapla