"CCanvas Sınıfını incelemek. Şeffaf Nesneler Nasıl Çizilir" makalesi için tartışma

 

Yeni makale CCanvas Sınıfını incelemek. Şeffaf Nesneler Nasıl Çizilir yayınlandı:

Hareketli ortalamaların garip grafiklerinden daha fazlasına mı ihtiyacınız var? Terminalinizde basit ve içi dolu bir dikdörtgenden daha güzel bir şey çizmek ister misiniz? Terminalde etkileyici grafikler çizilebilir. Bu, özel grafikler oluşturmak için kullanılan CСanvas sınıfı aracılığıyla uygulanabilir. Bu sınıfla, saydamlığı uygulayabilir, renkleri karıştırabilir ve üst üste binen ve karışan renkler aracılığıyla saydamlık yanılsaması oluşturabilirsiniz.

Üç boyutlu bir dünyada yaşıyoruz ve etrafımızdaki her şeyi üç boyutlu olarak algılıyoruz. Daha öncesinde üç boyutluluğu görüyor, hatta hissediyorduk. Üç boyutlu dünyada hangi cismin bize daha yakın olduğunu anlayabiliriz.

Bazı nesneler yarı saydam olabilir. Örneğin, mavi bir arka planda yarı saydam bir sıvı içeren şeffaf bir bardak alın. Mavi arka plan sıvı ile camdan görülebilir. Arka plan detayları sıvının şeffaflık derecesine bağlıdır.


Şek. 1 Boyutluluğun genel görünümü

Şek. 1 Boyutluluğun genel görünümü

Yazar: Vladimir Karputov

 
Vladimir, tuvallerle aram iyi değildir. İşte bir soru. Bir tuval var. Üzerinde bir metin etiketi var. Terminal neden etikete tıklama olayını tuvale tıklama olayı olarak görüyor? Bu çelişki bir şekilde çözülebilir mi?
 
denkir:
Vladimir, tuvallerle aram iyi değildir. İşte bir soru. Bir tuval var. Üzerinde bir metin etiketi var. Terminal neden etikete tıklama olayını tuvale tıklama olayı olarak görüyor? Bu çelişki bir şekilde çözülebilir mi?
Bana kodu ver. Bir göz atalım.
 
denkir:
...

Bunun için önceliği ayarlamak için bir özellik vardır:

OBJPROP_ZORDER - Grafik üzerinde fare tıklaması olayını alacak grafik nesnesinin önceliği (CHARTEVENT_CLICK). Varsayılan olarak, değer oluşturma sırasında sıfır olarak ayarlanır, ancak gerekirse önceliği artırabilirsiniz. Çakışan nesneler CHARTEVENT_CLICK olayını aldığında, yalnızca önceliği diğerlerinden yüksek olan bir nesne bu olayı alacaktır.

 

Size kodu daha sonra göndereceğim. OBJPROP_ZORDER - kanvas için ayarlanamıyor...

Yanlış işlem yapmama neyin sebep olduğunu buldum... Biri diğerinin üzerine bindirilmiş 2 tuval var. Ve üstte bir metin etiketi var. OnChartEvent()'in görmediği şey bu.

 
denkir:

Size kodu daha sonra göndereceğim. OBJPROP_ZORDER - kanvas için ayarlanamıyor...

Yanlış işlem yapmama neyin sebep olduğunu buldum... Biri diğerinin üzerine bindirilmiş 2 tuval var. Ve üstte bir metin etiketi var. OnChartEvent() işlevinin görmediği şey bu.

Evet, görebilir. OBJ_BITMAP_LABEL veya OBJ_BITMAP gibi sıradan bir nesne.

 
tol64:

Yapabilirsin. OBJ_BITMAP_LABEL veya OBJ_BITMAP gibi sıradan bir nesnedir.

Doğru. Teşekkürler.

Bunu yapmak için, bağlı grafik nesnesinin adını çekmeniz ve ona öncelik vermeniz gerekir.

İşte böyle (başlatma bloğundan alıntı):

//--- 1. tuvali oluşturun
   if(!myCanvas1.CreateBitmapLabel("My canvas1",_X,_Y,Width,Height,COLOR_FORMAT_ARGB_RAW)) 
     {
      Print("Error creating base canvas: ",GetLastError());
      return INIT_FAILED;
     }
//--- ekran
   myCanvas1.Erase(XRGB(0x1F,0x1F,0x1F)); 
   myCanvas1.Update();
   string obj_name=myCanvas1.ChartObjectName();
   if(!ObjectSetInteger(0,obj_name,OBJPROP_ZORDER,0))
      return INIT_FAILED;
 

Merhaba Vladimir,

Bu ilginç makale için teşekkür ederim.

Tablo 3'te küçük bir hata var.

С'255,0,255' 0xFF00FF 1111 1111 0000 0000 1111 1111


XOR
C'255,255,255' 0xFFFFFF 1111 1111 1111 1111 1111 1111 Beyaz (arka plan)


=
С'0,255,0' 0x00FF00 1111 1111 1111 0000 0000 0000
Olmalı :
0000 0000 1111 1111 0000 0000
Yeşil
 
angevoyageur:

Merhaba Vladimir,

Bu ilginç makale için teşekkür ederim.

Tablo 3'te küçük bir hata var.

С'255,0,255' 0xFF00FF 1111 1111 0000 0000 1111 1111


XOR
C'255,255,255' 0xFFFFFF 1111 1111 1111 1111 1111 1111 Beyaz (arka plan)


=
С'0,255,0' 0x00FF00 1111 1111 1111 0000 0000 0000
Olmalı :
0000 0000 1111 1111 0000 0000
Yeşil
Спасибо за найденную ошибку.
 

Soru şu. Kanvası grafik üzerinde hareket ettirmek için en iyi uygulama ne olabilir? Bir çeşit yöntem:

bool CUserCanvas::Move(int _new_x,int _new_y);
 
denkir:

Soru şu. Kanvası grafik üzerinde hareket ettirmek için en iyi uygulama ne olabilir? Bir çeşit yöntem:

Onu hareket ettirmenin amacı nedir? Çizimi kanvas üzerinde yeniden çizmek daha mı iyi olur?