Laden...
Avatar #avatar-2860.gif
Benutzerbeschreibung

Forenbeiträge von tonka Ingesamt 373 Beiträge

12.01.2010 - 11:21 Uhr

Hy@all,

ich habe momentan ein Problem mit einer TransformGroup und RenderTransform.

Ich habe mir eine Pan-Zoom-Viewer für Bilder(Falschfarbenbilder) gebaut. Im Prinzip wird dort aus bestehenden Daten in ImageSource berechnet und in einem Image dargestellt. Dem RenderTranform-Member habe ich eine TransFormGroup zugewiesen, die wiederum aus einer ScaleTransform und einer TranslateTransform besteht. Wenn ich mit der Maus Zoome/Verschiebe wird im PanZoomerViewer eine DoubleAnimation für die X- und Y-Property erstellt und ausgeführt. Das funktioniert Prima, ich kann absolut flüssig Zoomen und Verschieben.

Dieses Control wird in ein anderes Control (von mir hier als ParentCotnrol bezeichnet) eingebettet, wobei hier mehere Controls übereinander liegen (PanZoomViewer ist das Unterste). Die müssen sich teilweise mit dem PanZoomViewer mittransformieren. Somit habe ich die TransformGroup des PanZoomViewers als public deklariert und in Constructor der Parent-Control den einzelnen Canvas-Controls als RenderTransoform die RenderTransform des PanZoomViewers zugewiesen. Wenn ich jetzt Zoome/Verschiebe bewegt sich zwar das Image, die Canvas-Controls bewegen sich aber keinen Millimeter => aber warum?

MfG
Tonka

29.12.2009 - 00:06 Uhr

versuchs mal mit einem Absoulten Pfad statt einem relativen!

21.12.2009 - 19:12 Uhr

Hy,

hab zwar no nicht mit dem viel mit den IP-Adressen gearbeitet, aber ich würd sagen dass das nur for-Schleifen sind. In den IPv4 gibt eben 4 Zahlen die von 0 bis 255 gehen (also typ byte) und bei IPv6 sinds 6 Zahlen => Einfach 6 for-Schleifen. Vielleicht gibts noch was einfacheres 😉

MfG
Tonka

20.12.2009 - 16:47 Uhr

Bei Left und Top ruckelt es in Windows grundsätzlich immer, egal ob Xp, Vista, Win7. Das ist ein Windows-Problem 😉

20.12.2009 - 15:30 Uhr

Vielleicht hilft dir das weiter.

MfG
Tonka

19.12.2009 - 19:17 Uhr

Hy,

einfach auf die Projektmappe einen RMT (Rechte Maustaste) und auf Startprojekte gehen. Dann erscheint ein neues Fenster wo standardmäßig "einzelnes Startprojekt" aktiviert ist. Eins drunter kannst du "mehere Startprojekte" angeben und im Grid die Details dazu einstellen. Ich hab die Prof. Edition 2008, ich hoffe dass das in der Express edition auch so ist.

MfG
Tonka

17.12.2009 - 19:43 Uhr

Hallo,

naja, das ist ja einfach. Den String Zeichen für Zeichen mit einer for-Schleife durchgehen und immer das letzte Zeichen speicerhn. Immer wenn ein neues Zeichen kommt als das letzte oder der String zuende ist, wird das Zeichen in einen neuen String geschrieben.


// überprüfunggen muss du selbst einfügen. Code nicht getestet
char LastChar = inputtext[0];
String NewText = "";
for(int i=1;i<inputtext.length;i++)
{
    if(inputtext[i] != LastChar)
    {
           NewText += LastChar;
     }
     LastChar = inputtext[i];
}
NewText += LastChar;

MfG
Tonka

16.12.2009 - 22:46 Uhr

Ich glaube du suchst das AvalonDock

MfG
Tonka

16.12.2009 - 11:21 Uhr

Danke für die Antwort.

Ich habe nun IXmlSerializable in meiner Klasse implimentiert. Das sieht wie folgt aus:


#region IXmlSerializable Member

        public System.Xml.Schema.XmlSchema GetSchema()
        {
            return null;
        }

        public void ReadXml(System.Xml.XmlReader reader)
        {
            reader.Read();

            this.Version = Int32.Parse(reader.ReadElementString("Version"));

            this.Name = reader.ReadElementString("Name");
            this.Unit = Int32.Parse(reader.ReadElementString("Unit"));
            this.Type = Int32.Parse(reader.ReadElementString("Type"));

            this.Angle = StringToDoubleList(reader.ReadElementString("Angle"));
...

        }

        public void WriteXml(System.Xml.XmlWriter writer)
        {
            writer.WriteElementString("Version", this.Version.ToString());

            writer.WriteElementString("Name", this.Name);
            writer.WriteElementString("Unit", this.Unit.ToString());
            writer.WriteElementString("Type", this.Type.ToString());

            writer.WriteElementString("Angle", DoubleListToString(this.Angle));
            
...

        }

        #endregion

Jetzt habe ich aber noch zwei Probleme...

1.) Wie kann ich die Parameter optional gestalten. Wenn ich die Klasse serialisiere, ohne selbst IXmlSerializable zu implimentieren, so wird einfache der Standardwert für die jweweilige Variable gesetzt, sollte diese in der xml Datei nicht vorhanden sein.
Wenn ich IXmlSerializable selbst implimentieren, so muss die Reihenfolgen passen und die Variablen müssen alle in der xml vorhanden sein. Lässt sich das irgendwie "optionaler" schreiben?

2.) Ich habe in meiner Klasse eine Membervariable, die wiederum von einer Klasse kommt, die wieder IXmlSerializable implimentiert. Wie kann ich diese nun in der Read/Write Methode lesen/speicher, habe leider mit google und co. nichts gefunden (oder nach dem falschen gesucht 😃 ).

MfG
Tonka

15.12.2009 - 14:34 Uhr

verwendetes Datenbanksystem: <XML>

Hallo,

ich schreibe gerade an einer Read/Write - Routine für eine xml-Datei. Normalerweise serialisiere ich meine Klassen immer folgendermaßen (Schemenhaft dargestellt):


public Boolean WriteFile(String FilePath, ref String Message)
        {
            FileStream fs = null;
            try
            {
                XmlSerializer serializer = new XmlSerializer(typeof(LightMatrixMeasureTable));
                fs = new FileStream(FilePath,FileMode.Create,FileAccess.Write);

                serializer.Serialize(fs, this);

                Message = "OK";
                return true;
            }
            catch (Exception ex)
            {
                Message = ex.Message;
                return false;
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                    fs = null;
                }
            }
        }

Die Klasse sieht so aus:


public class MyObject
{
   public List<double> myArray {get;set;}
   ...
   ...
}

In meiner Klasse (MyObject) gibt es mehrere double-Listen. Ich würde diese aber nun gerne nicht als "normale" xml-Liste abspeichern wie z.B.


//Darstellung ist nur Schematisch
<double>
   <1.3/>
   <2.4/>
..
...
</double>

sondern ich würde gerne die Listen folgendermaßen speichern


<List>1.3;2.4</List>

Im Prinzip wäre das eine Umwandlung von von Double-List in String, jedoch würde ich das, wenn es möglich ist, dies gerne beim serialisieren machen. Ich habe bis jetzt nur xml mit "serialisieren" erstellt.

Ich möchte in der Klasse nach Möglichkeit keinen Member für einen String haben, den ich dann speichere, sonder "nur" eine double-List.

Gibt es hier eine Möglichkeit?

MfG
Tonka

01.12.2009 - 13:46 Uhr

Hy@all,

ich versuche schon seit geraumer Zeit mir Wissen bezüglich KI (AI) zu anzueignen. Ich habe mittels google schon sehr viele deutsch- und englischsprachige Beschreibungen, Erklärungen, etc. gefunden. Die Basics habe ich (meiner Meinung nach) verstanden, jedoch fehlt mir noch die "praxisbezogene Ebene". Ich verstehe nicht so ganz wie die neuronalen Netzte und co. für den praktischen(programmiertechnischen) Einsatz nutzbar sind, genauer gesagt -> Wie beziehe ich die Informationen aus dem Netz um diese in einem praktischen Beispiele wie z.B. Mustererkennung zu verwenden.

Solltet ihr ein paar gute Bücher/Links zu dem Thema kennen, die sowohl die Grundlagen als auch den praktischen Einsatz (am besten mit Source-Snippets oder etwaiges) erklären, ich würde mich über jeden Vorschlag freuen.

MfG
Tonka

27.11.2009 - 21:49 Uhr

Hallo Levitas,

hier ist ein Thread den du dir ansehen solltest. Er wurde zwar nie beantwortet, aber das was am Ende des Source-Codes steht wird dich auf den richtigen Weg bringen (System.Windows.Media.Imaging.PngBitmapDecoder).

MfG
Tonka

PS: Deine Funktion würde ich übrigends nicht im Konstruktor aufrufen, sondern eher in einer seperaten Funktion!

26.11.2009 - 20:15 Uhr

Die Definition der CIE ist mir klar. Mein Problem ist das ich nicht weiß, wie ich das in WPF (vorerst mal 2D) zeichnen soll. Das ist mein eigentliches Problem - welche Farbe wo hingehört hab ich schon!

@winSharp93: Gute Idee, jedoch würde ich gerne das Diagramm "dynamisch" zeichnen (es gibt ja noch einige Farbtafel mehr 😉 )

Hast du da einen Vorschlag?

26.11.2009 - 19:41 Uhr

Hallo,

da mein Landsmann gfoidl sein Farbkonvertierer hier vorgestellt hat ist mir eingefallen, dass ich noch eine grafische Darstellung der CIE Farbtafel von 1931 brauche. Das ganze soll in WPF umgesetzt werden und nach möglichkeit irgendwie über die Gradient Brushes (wenn möglich) oder ähnliches gelöst werden. Mir fehlen hier leider die Ideen wie ich das am besten realisiere. Das Diagramm sollte wie folgt aussehen CIE-Tafel. Ich weiß das dies über Stützpunkte definiert wird, jedoch fehlt mir der Ansatz wie ich das zeichnen soll!

Hat hier jemand ein Idee?

MfG
Tonka

26.11.2009 - 19:10 Uhr

ENUM geht wie folgt:

Deklaration


public enum EyeColor
{
blue,
green,
yellow // *ggg*
}

Im Source-Code schreibst du dann


....

EyeColor EyeColorFromPerson = EyeColor.blue;

Hinter der ENUM steckt nicht anderes als ein int-Wert. Diesen kannst du gegebenenfalls auch selbst definieren!

http://openbook.galileocomputing.de/csharp/kap20.htm

MfG
Tonka

31.10.2009 - 18:20 Uhr

So, hab die Lösung schon seit längerm gefunden, habs aber vergessen zu posten.

Also:

Ich hatte leider einen falschen Denkansatz. Mann sollte nicht die Farben als einzelen Rechtecke zeichnen, sondern einfach ein normales WPF-Image erstellen. Die Darstellung kann in einem ganz normalen Image-Control dargestellt werden. Die Mausposition kann man wie immer abfragen und so auf den Wert des gewünschten Pixels abfragen. Wichtig ist, dass das Image mit dem interpolationsmode "NextNeighbour" interpoliert wird, denn so bleiben die Pixel Rechtecke mit scharfen Kanten und verschwimmen nicht wie sonst. Das Zoomen und Skalieren kann man recht einfach mit den normalen WPF-Transformationen lösen!

MfG
Tonka

21.10.2009 - 21:49 Uhr

OK. Kann ich den GUI Dispachter dem Control übergeben und mit diesem dispatcher dann das Object erzeugen?

21.10.2009 - 18:36 Uhr

Hallo,

ich versuche gerade einen von mir programmierten Viewer "threadfähig" zu machen. Habe auch alle Methoden (die auf die GUI zugreifen) die ich benutzte ThreadSafe geschrieben, jedoch beim Instanzieren von einem Path Objekt bekomme ich den Fehler

Beim aufrufenden Thread muss es sich um einen STA-Thread handeln, da dies für viele Komponenten der Benutzeroberfläche erforderlich ist!

Ich verstehe zwar was mir der Exception gemeint ist, jedoch weiß ich nicht was ich dagegen tun kann.

Hier ist der Code, bei dem die Exception auftritt (dieser teil läuft schon im BackgroundWorker-Thread)


Path pathBorder = new Path();//hier tritt die Exception auf
            pathBorder.Stroke = Brushes.Black;
            pathBorder.StrokeThickness = 1.0;
            PathGeometry pathGeometryBorder = new PathGeometry(new PathFigure[] { pathFigureBorder });
            pathGeometryBorder.Transform = (Transform)this.CanvasGrid.RenderTransform.Inverse;
            pathBorder.Data = pathGeometryBorder;

Hat hier jemand Rat?

MfG
Tonka

09.10.2009 - 19:17 Uhr

Ich habs nun doch mit dem Zwischenordner gelöst. Hab einfach einen zweiten Button hinzugefügt "Pack to Directory" und den ersten Button hab ich "Pack to Zip" getauft. Bei Zip bleibt alles wie gehabt.

Beim "Pack to Directory" hab ich nun in ein Temp-Verzeichnis die (markierten) Dateien kopiert und dann den Ordner mit einem virtuellen Drag n Drop gedropt => das funktioniert jetzt.

MfG
Tonka

09.10.2009 - 13:36 Uhr

Hier noch ein Bild der GUI (WPF).

Das Szenario:
Wird haben eine Software, die leider nur per Drag n Drop Dateien empfängt. Beim ersten erstellen der Datei müssen die Dateien (die der User möchte) als zip übergeben werden. Der User klickt auf "Pack" und die bis dahin makierten Dateien werden in ein Temp-Zip gespeichert, die GUI wird eingefrohren und der User kann dann das Image (das Ordner-Symbol) anklicken und mit gedrückter Maustaste den Drag n Drop Vorgang ausführen => das funkt perfekt.

Wenn schon ein zip im System existiert, so muss diese vom User geöffnet werden. Dann erscheint das normale WinZIP Fenster. Nun muss der User seine gecheckten Files ohne ZIP, als nur die Dateien und Ordner mittels des simulierten Drag n Drops erledigt werden. Ich habe als Test hierfür den Explorer benutzt und bin eben auf das Problem mit den Ordner-Strukturen gestolpert.

Die einzige Lösung die mir einfällt ist, das der User auch "Pack" drückt (müsste dann "Pack as File" heißen oder so 😃 ), wenn der nur die Dateien will, den dann kann ich sie in einen Temp-Ordner spielen und danach den ganzen Ordner dropen, jedoch möchte ich das vermeiden, das die Dateinmenge pro File sehr groß ist!

09.10.2009 - 10:16 Uhr

Hallo,

hier ein Beispiel für die Pfadliste (die Dateien, die kopiert werden sollen)

C:\DataToDrag\a\1.txt
C:\DataToDrag\a\2.xls
C:\DataToDrag\b\1.txt
C:\DataToDrag\b\2.txt
C:\DataToDrag\1.txt
C:\DataToDrag\2.txt
.
.
.
.

Wenn ich mit diese Dateien im Explorer "Drope", so werden Sie alle in eine Ebene kopiert.

z.B. Zielpfad: "C:\ToDrop&quot;
Ergebnis:

C:\ToDrop\1.txt // die Datei wird mehrmals überschrieben, da sie öfters vorkommt (namentlich)
C:\ToDrop\2.txt // die Datei wird mehrmals überschrieben, da sie öfters vorkommt (namentlich)

Ich brauche aber die Ordnerstruktur

C:\ToDrop\a\1.txt
C:\ToDrop\a\2.xls
C:\ToDrop\b\1.txt
C:\ToDrop\b\2.txt
C:\ToDrop\1.txt
C:\ToDrop\2.txt

08.10.2009 - 16:47 Uhr

Hallo,

ich versuche momentan ein Drag N Drop von bereits existierenden File und Ordner. Der User hat eine GUI, dort wählt er mittels Checkbox aus, welche Files er "Dropen" will. Danach muss er einfach auf ein Image mit der linken Maustaste drücken (und halten). Danach einfach mit der Maus in den Explorer und die Maustaste loslassen - perfekt.

Nun habe ich aber das Problem, das ich auch Unterordner habe, wobei der User nicht alle Dateien im Unterordner angeklickt hat. bei "Drop" werden nur die Dateien (egal welcher Unterordner) in eine Ebene kopiert => die Ordnerstruktur geht verloren. Ein Umkopieren in einen Temp-Ordner kommt nicht in Frage, da die Datenmengen sehr groß sind!

Hier mein Snippet:


.
.
.
private void ImageDrop_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            try
            {
                List<String> files = new List<String>();
                GetCheckedFiles(root, ref files);//hier wird die List aller "gecheckten"  files geholt => Absolute Pfade
                if (files == null || files.Count <= 0)
                {
                    throw new Exception("no files checked. Drop not possible");
                }
                DataObject data = new DataObject(DataFormats.FileDrop, files.ToArray());
                DragDrop.DoDragDrop(e.OriginalSource as DependencyObject, data, DragDropEffects.Copy);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error while Drop File(s): " + ex.Message);
            }
        }
.
.
.

Weiß hier jemand Rat?

MfG
Tonka

05.10.2009 - 16:39 Uhr

Danke für die Antwort.

Die Struktur ist aus einem speziellen Grund so aufgebaut! Hab die Lösung schon gefunden. Hab den Wald vor lauter Bäume nicht mehr gesehen. Hatte unabsichtlich die Children-Elemente von ObservableCollection auf List geändert (List hat nämlich eine integrierte foreach-Funktion). Habs jetzt zurückgeändert und jetzt funktionierts.

DANKE für das Stichwort!

MfG
Tonka

05.10.2009 - 09:01 Uhr

Hallo,

ich habe ein Problem mit dem WPF TreeView. Ich schreibe einen FilePacker dem im Prinzip nichts anderes als ein oder meherer Dirctories über geben werden (es können auch Filter wie z.B. *.doc mitübergeben werden). Der Packer durchsucht dann rekuriv die Ordner, unter Einhaltung der eventuell übergebenen Filter, und stellt diese in einem TreeView da. Der User kann dort mittels CheckBoxen dann auswählen, welche Dateien dann in das Package kommen.

Soweit so gut, funktioniert beim ersten Durchlauf Prima, jedoch wenn man einem bereits gefüllten Tree die Childeren löscht und dann die neuen Daten befüllt, so wird zwar im CodeBehind die Daten geändert, jedoch sieht man im TreeView trotzdem die alten Daten.

Das Witzige daran ist, dass das alles schon funktioniert hat und ich irgendwie nicht draufkomme warums plötzlich nicht mehr funktoniert!

Funktionsweise:
ich füge dem Tree beim Constructor ein "root"-element hinzu, das aber nicht im Baum visualisiert wird. Diesem Root hänge ich dann alle weiteren Directories und Files an, die dann vom Tree vizualisiert werden (sollten 😦 )


<UserControl x:Class="FilePacker.FilePackerControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:dw="clr-namespace:FilePacker"
    Height="Auto" MinHeight="300" Width="Auto" MinWidth="600">
    <UserControl.Resources>
        <ResourceDictionary>
            <Style x:Key="TreeViewItemStyle" TargetType="TreeViewItem">
                <Setter Property="IsExpanded" Value="{Binding IsExpanded}"/>
                <Setter Property="IsSelected" Value="{Binding IsInitiallySelected, Mode=OneTime}" />
                <Setter Property="KeyboardNavigation.AcceptsReturn" Value="True" />
                <Setter Property="dw:VirtualToggleButton.IsVirtualToggleButton" Value="True" />
                <Setter Property="dw:VirtualToggleButton.IsChecked" Value="{Binding IsChecked}" />
            </Style>

            <HierarchicalDataTemplate x:Key="CheckBoxItemTemplate" ItemsSource="{Binding Children}">
                <StackPanel Orientation="Horizontal">
                    <CheckBox
                    Focusable="False" 
                    IsChecked="{Binding IsChecked}" 
                    Visibility="{Binding Visibility}"
                    VerticalAlignment="Center"
                    Margin="0,0,2,0"
                />
                    <Image Source="{Binding Icon}" Height="16" Width="16" Margin="2,0" Stretch="Uniform" Visibility="{Binding Visibility}"/>
                    <ContentPresenter 
                    Content="{Binding Header}" 
                    Margin="2,0"
                />
                </StackPanel>
            </HierarchicalDataTemplate>
        </ResourceDictionary>
    </UserControl.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="465*" />
            <ColumnDefinition Width="80" />
        </Grid.ColumnDefinitions>
        <TreeView Grid.Row="0"
      x:Name="tree2"
      ItemContainerStyle="{StaticResource TreeViewItemStyle}"
      ItemsSource="{Binding Mode=OneTime}"
      ItemTemplate="{StaticResource CheckBoxItemTemplate}" Width="Auto" DockPanel.Dock="Left" >
            <TreeView.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="Check All" Name="CMCheckAll" Click="CMCheckAll_Click"/>
                    <MenuItem Header="Uncheck All" Name="CMUncheckAll" Click="CMUncheckAll_Click"/>
                </ContextMenu>
            </TreeView.ContextMenu>
        </TreeView>
        <StackPanel Grid.Column="1" Margin="2" Name="stackPanel1">
            <Button Height="80" Name="button1" Width="Auto">Button</Button>
            <Button Height="80" Name="button2" Width="Auto">Button</Button>
        </StackPanel>
    </Grid>
</UserControl>


public partial class FilePackerControl : UserControl
    {
        #region Poperties

        private FileObjectTreeModel root = null;

        #endregion

        #region Constructor

        public FilePackerControl()
        {
            InitializeComponent();

            root = new FileObjectTreeModel("root", "", false, true);
            this.tree2.DataContext = root.Children;
            SetEmptyText("no directory given");
        }

        #endregion

        #region Methods

        private void ClearTree() // hier werden die alten Daten aus dem root-Element entfernt
        {
            if (root == null || root.Children.Count <= 0)
            {
                return;
            }
            for (Int32 i = 0; i < root.Children.Count; i++)
            {
                root.Children[i] = null;
            }
            root.Children.Clear();
        }

        public void SetEmptyText(String Text)
        {
            ClearTree();   
            root.Children.Add(new FileObjectTreeModel(Text, "", false, false, false));
        }

        public void SearchFiles(List<String> DirPaths, List<String> Filter) // mit dieser Methode wird von ausen gestartet
        {
            ClearTree();
            
            if (DirPaths == null || DirPaths.Count <= 0)
            {
                SetEmptyText("no directories given");
                return;
            }            
            foreach (String DirPath in DirPaths)
            {
                FileObjectTreeModel SubRoot = new FileObjectTreeModel(AktIO.PathChecker.RemoveBackslashAtTheEnd(DirPath), DirPath, false, true);
                SubRoot.IsExpanded = true;
                root.Children.Add(SubRoot);
                FindDirAndFiles(DirPath, Filter, ref SubRoot);
                if (SubRoot.Children.Count <= 0)
                {
                    SetEmptyText("no files");
                }
            }
            root.Initialize();
        }

        private void FindDirAndFiles(String DirPath, List<String> Filter, ref FileObjectTreeModel root) // in dieser Methode werden rekursiv die Ordner und Dateien gesucht (unter Einhaltung der Filter)
        {
            try
            {
                if (DirPath.Equals("") || root == null)
                {
                    return;
                }
                if (Directory.Exists(DirPath) == false)
                {
                    return;
                }
                if (DirPath.StartsWith("$"))
                {
                    return;
                }
                if (Filter == null || Filter.Count <= 0)
                {
                    Filter = new List<String>();
                    Filter.Add("*.*");
                }

                String[] Dirs = Directory.GetDirectories(DirPath);
                if (Dirs != null && Dirs.Length > 0)
                {
                    foreach (String Dir in Dirs)
                    {
                        FileObjectTreeModel NewRoot = new FileObjectTreeModel(Path.GetFileName(Dir), false, Dir);
                        root.Children.Add(NewRoot);
                        FindDirAndFiles(Dir, Filter, ref NewRoot);
                        if (NewRoot.Children.Count <= 0)
                        {
                            root.Children.Remove(NewRoot);
                        }
                    }
                }
                Filter = Filter.Distinct().ToList();

                List<String> Files = new List<String>();
                foreach (String Line in Filter)
                {
                    if (Line.Equals(""))
                    {
                        continue;
                    }
                    try
                    {
                        String[] TempFiles = Directory.GetFiles(DirPath, Line, SearchOption.TopDirectoryOnly);
                        if (TempFiles != null && TempFiles.Length > 0)
                        {
                            Files.AddRange(TempFiles);
                        }
                    }
                    catch
                    {
                        //error while getting files
                    }
                }
                if (Files == null || Files.Count <= 0)
                {
                    return;
                }
                foreach (String File in Files)
                {
                    FileObjectTreeModel NewChild = new FileObjectTreeModel(Path.GetFileName(File), true, File);
                    root.Children.Add(NewChild);
                }

            }
            catch
            {
                return;
            }
        }

        #endregion
}

Ich hoffe es kann mir hier irgendwe helfen?

MfG
Tonka

01.10.2009 - 21:37 Uhr

Hallo,

Kann ich die notwendigen Funktionen, Bibliotheken etc. in mein Programm linken oder gibt es eine andere Möglichkeit dies auf den PCs ohne installiertem NET Framework zum laufen zu bringen?

C# und das .NET-Framework lassen sich nicht seperat betreiben. Du musst .NET installiert haben (wie du in der Fehlermeldung siehst brauchst du .NET 2.0 und höher)!

In .NET kannst du, meiner Erfahrung nach, nur in C++ das Framework "abkoppeln"!

MfG
Tonka

23.09.2009 - 20:43 Uhr

Hallo,

hier ist ein Dokument zu CORBA für C#(.NET) und JAVA.

pdf

MfG
Tonka

04.09.2009 - 12:53 Uhr

Hallo Lector,

die Idee ist toll. Habs jetzt für meine Zwecke so gelöst, das ich die 3D-Tools (3DTools sind OpenSource - zu finden auf CodePlex) um eine Methode erweitere, das auch alle Klassen mit Light mit transformiert werden. Der Trackball dreht standardmäßig immer nur die Kamera.

Das Attached-Property wäre natürlich die optimale Lösung!

Danke für die Hilfe.

MfG
Tonka

03.09.2009 - 17:04 Uhr

Hallo,

PointLight bringt auch nix, das wird ebenfalls mitgedreht. Das Problem ist, das der Trackball (von 3DTools) alle ModelVisual3D-Childrens rotiert/zoomt. Noch eine Idee?

03.09.2009 - 16:38 Uhr

Hallo,

ich versuche gerade die Lichtquelle in außerhalb des Trackballs zu platzieren, damit sich die Lichtquelle nicht mitdreht. Es soll immer von meinem Sichtpunkt (also wenn man so wie die Bildschirm z-Achse) das Licht ausgestrahlt werden, egal wie ich auf die Geometrie schauen. Wie kann ich das realisieren???

Hier der Ausschnitt vom XAML-Code:


<tool:TrackballDecorator x:Name="mainTrackball" DockPanel.Dock="Bottom">   
                <Viewport3D Name="mainViewport" ClipToBounds="True">
                    <Viewport3D.Camera>
                        <OrthographicCamera                                 
                              LookDirection="0,0,-1"
                              UpDirection="0,1,0"
                              NearPlaneDistance="-1000" 
                              FarPlaneDistance="1000"
                              Position="0,0,100" 
                            />
                    </Viewport3D.Camera>
                    <ModelVisual3D>
                        <ModelVisual3D.Content>
                            <DirectionalLight 
	            Color="White" 
	            Direction="-2,-3,-1" />
                        </ModelVisual3D.Content>
                    </ModelVisual3D>
                </Viewport3D>       
            </tool:TrackballDecorator>

Im oben angeführten Code ist das Licht noch innerhalb des Trackballs!

MfG
Tonka

02.09.2009 - 08:40 Uhr

Hallo,

wird haben VS2008 ohne SP1 und dürfen dieses auch nicht installieren. Wir programmieren mit einer speziellen SDK, wo uns genau vordiktiert wird, welches SP und welches HOTFIX wird benutzten müssen!

Ich habe es nun mit Öffnen mit versucht. Im erscheinenden Fenster existiert kein "Window Presentation Foundation-Desginer"! Kann man den nachinstallieren. Ein VS2008 Reperatur hat nicht gebracht!

Das ausführen von devenv /resetskippkgs (wie im oben angeführten Link angegeben) hat auch nichts gebracht. Jetzt bekommt mein Kollege beim Öffnen einer xaml eine Fehlermeldung (siehe Bild)!

MfG

01.09.2009 - 17:22 Uhr

Hallo,

ich bzw. besser gesagt ein Kollege von mir hat momentan das Problem, das wenn er eine XAML-Datei öffnet der WPF-Designer nicht startet. Es wird nur ein "ungefärbter" XAML-Text dargestellt (siehe Bild)! Eine Reperatur von VS2008 hat leider nicht gebracht!

Hatte das schon mal jemand?

MfG
Tonka

31.08.2009 - 11:02 Uhr

Habs jetzt selbst gelöst. Musste einfach statt Assembly.LoadFile(...) Assebmly.LoadFrom() verwenden!


Assembly AddinAssembly = Assembly.LoadFrom(Filename);

MfG
Tonka

31.08.2009 - 09:43 Uhr

Hallo,

ich habe ein Problem mit dem dynamischen Nachladen von Plugins(bei mir Addins genannt!).

Das Plugin-System funktioniert seit Monate eigentlich prima, jedoch bin ich vor kurzem auf ein Problem gestoßen. Wenn das Addin selbst Verweise auf andere Dll's hat, die nicht im Host-Verzeichnis(also jene Exe, der die Addins dynamisch nachlädt) liegen, so bekomme ich beim dynamischen nachladen eine LoaderException, das die Datei nicht gefunden wurde (also jene Dll's, die nicht im Host-Verzeichnis liegen).

Ich habe im Forum schon diesen Eintrag gefunden, jedoch hat er mit nicht weitergebracht!

Mein Host:

Veränderungen des "Standard"-DLL Ordner in der Main-Methode:


public static void Main(string[] args)
        {            
            // add new private binar directory
            String StartUpDir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            String BinDir = StartUpDir + @"\bin";
            AppDomain.CurrentDomain.AppendPrivatePath(BinDir);

laden der Addins:


public Boolean GetAddinsFromLibary(String Filename, ref CmdInLibary AddinList)
        {
            try
            {
                if (Filename.Equals(""))
                {
                    throw new Exception();
                }
                try
                {
                    if (File.Exists(Filename) == false)
                    {
                        throw new Exception();
                    }
                }
                catch
                {
                    throw new Exception();
                }
                Assembly AddinAssembly = Assembly.LoadFile(Filename);
                if (AddinAssembly == null)
                {
                    throw new Exception();
                }
                
                AddinList = new CmdInLibary(Filename);
                Type[] arr = AddinAssembly.GetTypes(); // hier bekomme ich die Exception :-(
                foreach (Type AddinType in AddinAssembly.GetTypes())
                {
                    if (AddinType.IsPublic)
                    {
                        if (!AddinType.IsAbstract)
                        {
                            Type TypeInterface = AddinType.GetInterface(AddinInterfaceName, true);

                            if (TypeInterface != null)
                            {
                                AddinList.AddinTypes.Add(AddinType.ToString());
                            }
                            else
                            {
                                continue;
                            }
                            TypeInterface = null;
                        }
                        else
                        {
                            continue;
                        }
                    }
                    else
                    {
                        continue;
                    }
                }                
                return true;
            }                
            catch(Exception ex)
            {
                AddinList = null;
                return false;
            }
        }

Wie kann ich dem Host zeigen, das er auch in den Ordner der Plugins nach den Dll's suchen kann?

Weiß jemand was ich hier tun kann?

MfG
Tonka

25.08.2009 - 08:09 Uhr

Also mit der oben angeführten Überladung vin FileStream kann ich die Dateien einlesen!

System.IO.FileStream fs = new System.IO.FileStream(FilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);

Die Details könnt ihr hier nachlesen:
FileMode
FileAccess
FileShare

Danke nochmal für die Hilfe.

MfG
Tonka

24.08.2009 - 20:27 Uhr

Daft Punk hat ein Best Of Album in 8 Bit gemacht, das "da chip" heißt.

Link

MfG
Tonka

24.08.2009 - 20:17 Uhr

Danke erstmal für die Antworten.

Habe jetzt einen Überladen Constructor von FileStream gefunden

System.IO.FileStream fs = new System.IO.FileStream(FilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);

Den werde ich morgn ausprobieren. Sollte das nicht klappen, so gibt es noch eine Überladung mit FileShare.

Wenn's klappt werd ich's morgn hier reinschreibn(und wenn nicht auch 😃 ).

MfG
Tonka

24.08.2009 - 15:30 Uhr

Hallo,

ich habe ein Problem mit Stream's. Ich lese Dateien mittels BinaryReader aus. Lokal funktioniert alles prima, jedoch auf einem Netzlaufwerk, wo ich nur die Berechtigungen "Lesen,Ausführen" und "Lesen" habe, kann ich keinen Stream erstellen. Es ersheint immer folgende Exception:

Der Zugriff auf den Pfad ........ wurde verweigert

Ich öffnen die Datei nur im FileMode "Open", sollte das dann nicht funktionieren?

Hier ein Ausschnitt aus dem Source-Code:


public static Boolean ReadFileHeader(String FilePath, ref DataObject Data, ref String Message)
        {
            FileStream fs = null;
            BinaryReader br = null;
            try
            {
                FilePath = FilePath.Trim();
                if (FilePath.Equals(""))
                {
                    throw new Exception("No Filepath was given");
                }
                try
                {
                    if (File.Exists(FilePath) == false)
                    {
                        throw new Exception();
                    }
                }
                catch
                {
                    throw new Exception("File does not exist: " + FilePath);
                }

                // Read Header

                // get the size of file (in bytes)
                FileInfo fInfo = new FileInfo(FilePath);
                int fileSize = (int)fInfo.Length;

                if (fileSize <= 0)
                {
                    throw new Exception("File is empty: " + FilePath);
                }

                fs = new FileStream(FilePath, FileMode.Open); // hier kommt die Exception
                br = new BinaryReader(fs);

....
....
.....

                Message = "OK";
                return true;

            }
            catch (Exception ex)
            {
                Message = ex.Message;
                return false;
            }
            finally
            {
                if (br != null)
                {
                    br.Close();
                }
                if (fs != null)
                {
                    fs.Close();
                }
            }

Was bitte läuft hier falsch?

MfG
Tonka

23.08.2009 - 16:19 Uhr

Danke Noodles für die schnelle Anwort.

Man kann als nur mit Memory-Profilern die Speichergröße ermitteln.

Danke

MfG
Tonka

23.08.2009 - 16:00 Uhr

Hallo,

da ich momentan mit sehr großern Listen arbeite hätte mich interessiert, ob es eine Möglichkeit gibt den Speicherbedarf eines beliebigen Objekts zu ermitteln. Google-Anfrage hat leider nichts ergeben!

MfG
Tonka

20.08.2009 - 07:58 Uhr

Danke für euere Antworten.

Mir war zwar bewusst das es Rundunsfehler bei double und float gibt, dachte aber, dass das nur bei Division und Multiplikation auftritt und nicht bei Addition und Subtraktion.

Caste jetzt die float's auf double, somit ist meine genauigkeit ein bisschen höher (die Genauigkeit muss bei mir bis zur 4ten Komma Stelle passen). Decimal möchte ich gern vermeiden, das ich, wie pdelvo schon schrieb, ebenfalls gelesen habe, das decimal langsamer verarbeitet wird.

Danke nochmal

MfG
Tonka

19.08.2009 - 16:42 Uhr

Hallo,

ich habe ein Problem beim Addieren von float und double-Zahlen.

Ich lese aus einem Binär gespeichertem File die float's aus. In meinem Beispiel lese ich 100.000 mal den Werte 0.00001 ein. Danach zähle ich die floats zusammen. Es müsste eigentlich 1.0 rauskommen, jedoch kommt bei mir 1.000990 raus. Runden und co kommt nicht in Frage!

Ich habe nun Testhalber einfachen eine for-schleife gemacht und habe dort 100.000 mal 0.00001f zusammenzählen lassen und dort stimmt das Ergebnis.

Kann das am einlesen der float's aus der Datei liegen? Ich habe schon alles kontrolliert was nur geht und es sind in jeder Zeile 0.00001f, 100.000 Zeilen. Mit dem debugger sehe ich, das beim 5ten oder 6ten mal bei addieren schon "abnormale" Komma-Zahlen auftreten!

Wenn ich alles nach double caste ändert sich die Abweichung und es kommt zusammengezählt ein Ergebnis von 0.000999934.... raus.

Bitte an was liegt das?

Hier Ausschnitte aus dem Code:


//Stream
fs = new FileStream(FilePath,FileMode.Open);
br = new BinaryReader(fs);

.
.
.
//Zeilenweise einlesen, die E-Werte zusammenzählen
while (br.BaseStream.Position < br.BaseStream.Length)
                {
                    Data line = new Data();
                    line.x = br.ReadSingle();
                    line.y = br.ReadSingle();
                    line.z = br.ReadSingle();
                    line.a = br.ReadSingle();
                    line.b = br.ReadSingle();
                    line.c = br.ReadSingle();
                    line.force= br.ReadSingle();
                    line.e= br.ReadSingle();
                    DataGeneral.Rays.Add(line);
                    if (Header == 1)
                    {
                        DataGeneral.FullE = DataGeneral.FullE + line.e;
                    }
                }

MfG
Tonka

12.08.2009 - 12:44 Uhr

Hallo,

das Control heißt in der .NET Welt NumericUpDown (kommt von WinForms-Anwendungen). In WPF existiert bis jetzt sowas nicht. Kannst natürlich die winSharp93 angegebene Libary benutzten, oder dir einfach selbst "basteln". Ich hab mein WPFNumericUpDown Control selbst gebaut, weils ja eigentlich nicht schwer ist (Eine TB, zwei Buttons)!

MfG
Tonka

12.08.2009 - 12:36 Uhr

Hy,

du hast, soweit ich weiß, zwei Möglichkeiten:

1.) von der TB das PreviewKeyDown/Up event zu benutzten und dann abfragen ob H und Strg gedrückt sind, um dann dementsprechend darauf zu reagieren!
2.) über Commands (ICommand)

MfG
Tonka

07.08.2009 - 21:51 Uhr

Das Zauberwort das Lumbra meint ist "Automatisch". VS so die Falten automatisch für gewissen "Syntax" in eine Methode erstellen!

07.08.2009 - 21:37 Uhr

Hey,

naja, für Schleifen wie z.B. FOR oder für Abfrage wie z.B. IF wären solche automatische Falten schon sinnvoll, denn diese besitzten ja einen definierten Anfangs- und Endpunkt ( meist "{" + "}"). In VS gibts die Falten ja standardmäßig nur bei Methoden und Klassen(soweit ich weiß).

MfG
Tonka

06.08.2009 - 11:49 Uhr


>

Kann leider das Dokument auf der Seite nicht öffnen und nicht speichern!

Zugriff verweigert!

Der Zugriff auf das angeforderte Objekt ist nicht möglich. Entweder kann es vom Server nicht gelesen werden oder es ist zugriffsgeschützt.

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.

Hab jetzt eine OpenSource-Software gefunden, die das scheinbar kann => OpenCascade
Werd mal den Source-Code nach den Methoden untersuchen, das wird aber sicherlich einige Zeit in anspruch nehmen!

MfG

05.08.2009 - 22:01 Uhr

Danke für die Antwort.

Die Software ist für's UI-Design echt toll, bringt mich leider nur nicht in meinem speziellen Problem weiter!

Das Format in dem ich die NURBS bekomme ist kein Standardformat wie IGES, STEP,3DS oder so. Ich kann das File einlesen und in meine NURBS-Klasse importieren, nun bräcuht ich aber irgendeine Umrechnung in Polygone(Mesh). Ich könnte natürlich die Daten meiner NURBS als *.3ds exportieren und dann mit einem Programm aller Rhino in ein Mesh "übersetzten" lassen, jedoch wäre das meine absolute Notlösung, denn ich möchte die genauigkeit des Meshes im nachhinein auch noch "LIVE" ändern können!

Hast du ne Formel(n)???

MfG
Tonka