Autor Beitrag
HoPPeL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Do 06.10.11 18:24 
Hi,

habe folgende Schleife:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Do 06.10.11 20:08 
Hallo,

ich weis nicht ob das hier funktioniert. Ist nur so ne Idee:
ausblenden 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:
ausblenden 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.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
HoPPeL Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 102
Erhaltene Danke: 12



BeitragVerfasst: Do 08.12.11 15:31 
Hallo C#,

was genau bezweckst Du mit

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

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: 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 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 102
Erhaltene Danke: 12



BeitragVerfasst: 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.