Entwickler-Ecke

Basistechnologien - Labels erzeugen und wieder löschen...


HoPPeL - Do 06.10.11 18:24
Titel: Labels erzeugen und wieder löschen...
Hi,

habe folgende Schleife:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
for (int i = 0; i < 8; i++)
            {
             
                vtkTextActor LabelActor = new vtkTextActor();
        
                LabelActor.GetTextProperty().SetFontSize(12);
                LabelActor.GetTextProperty().BoldOn();

                LabelActor.SetPosition(ScalarBar.GetWidth() * size[0] + 10, (((1 - ScalarBar.GetHeight()) / 2) * size[1] * 0.96) * (i + 1));
                LabelActor.SetInput(string.Format("{0:F2}" + "°C", Tempmin + temp * i));
                LabelActor.GetTextProperty().SetColor(1.00.00.0);

                Ren1.AddActor2D(LabelActor);
            }

aber denke, dass das Ganze ziemlich unsauber ist...

Das Problem ist, dass ich momentan nicht weiß, wie ich die erzeugten labels dann wieder loswerde?
Oder gibts ne bessere, sauberere Variante, bei der es gar nicht zu solchen problemen kommt?

mfg


Th69 - Do 06.10.11 19:58

Hallo HoPPeL,

vllt. solltest du ersteinmal schreiben, mit welcher Library du arbeitest (denn 'vtkTextActor' ist zumindestens keines der Standard WinForms-Komponenten)?

Und was ist 'Ren1' für eine Komponente? Wenn diese eine AddActor2D-Methode hat, so wird diese doch auch sicherlich eine Remove oder Delete-Methode besitzen?


C# - Do 06.10.11 20:08

Hallo,

ich weis nicht ob das hier funktioniert. Ist nur so ne Idee:

C#-Quelltext
1:
2:
var element = GetChildAtPoint(new Point(x, y)); //Hier musst du halt die koordinaten des Labels einsetzten
element.Dispose();           //Bin mir nicht sicher ob es mit Dispose() klappt. Habe es nicht getestet

oder mach es so:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
for (int x = 0; x < Size.Width; x++)    //Diese zwei schleifen prüfen jeden Punkt in der Form
            {
                for (int y = 0; y < Size.Height; y++)
                {
                    try //führe dass in einem Try-Block aus, da du nicht weist, ob dieses Objekt eine "Text" Eigenschaft besitzt
                    { 
                    var element = GetChildAtPoint(new Point(x, y));
                    if (element.Text == "xyz") element.Dispose();       //Hier kannst du über den Text (oder andere Eigenschaft prüfen)
                    }
                    catch { throw; }
                }
            }

Wenn Dispose() nicht klappt, probier es mit Hide(), was das Objekt allerdings nur verbirgt...

P.S. Die zweite Methode solltest du evtl. als eigenen Thread Starten, da sie je nach Formgröße ziemlich Zeitaufwändig werden kann.


HoPPeL - Do 08.12.11 14:38

so nach meiner 2 monatigen auszeit, habe ich mich wieder an das problem gesetzt.

mein Labelactor besitzt dieverse Methoden um in wieder zu entfernen, wie z.b.


C#-Quelltext
1:
Operations.LabelActor.VisibilityOff();                    


aber ich habe ja 8 stück, die alle gleich heißen und somit wird immer nur der letzte erstellete labelactor unsichtbar gemacht?!

mfg


ujr - Do 08.12.11 15:31

Hallo C#,

was genau bezweckst Du mit

user profile iconC# hat folgendes geschrieben Zum zitierten Posting springen:


C#-Quelltext
1:
                    catch { throw; }                    


zudem ist der angegebene Grund für "try/catch" nicht stichhaltig - bestenfalls, wenn Element "dynamic" ist, ansonsten beschwert sich schon der Compiler.

Hallo HoPPeL,

leider bist Du immer noch Details zur von Dir verwendeten Bibliothek schuldig geblieben.


HoPPeL - Do 08.12.11 16:16

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo HoPPeL,

vllt. solltest du ersteinmal schreiben, mit welcher Library du arbeitest (denn 'vtkTextActor' ist zumindestens keines der Standard WinForms-Komponenten)?

Und was ist 'Ren1' für eine Komponente? Wenn diese eine AddActor2D-Methode hat, so wird diese doch auch sicherlich eine Remove oder Delete-Methode besitzen?


Also es handelt sich um bei meiner genutzten bibliothek um http://www.vtk.org/
Ren1, ist meine renderer, dem ich eben meine labels mit zuordne, damit diese dann mit auf dem bildschirm ausgegeben werden.

mfg


ujr - Do 08.12.11 17:15

user profile iconHoPPeL hat folgendes geschrieben Zum zitierten Posting springen:
Ren1, ist meine renderer


Nimm einfach mal an, dass die Mehrzahl der Leser hier diese Bibliothek nicht kennt. Und dann noch mal: renderer? Was ist das für eine Klasse?

Du zitierst so schön, was Th69 schrieb - was ist denn mit der Remove-Methode? vtk hat doch eine umfangreiche Dokumentation.