Evgenios1 Δημοσ. 18 Ιουνίου 2009 Δημοσ. 18 Ιουνίου 2009 Γεια σας. Λοιπων, εστω ο,τι εχω ενα 3Δ αντικειμενο ModelVisual3D, ξερετε κανα τροπο για να το κανω resize?
psolid_snake Δημοσ. 18 Ιουνίου 2009 Δημοσ. 18 Ιουνίου 2009 Αρχικά υποθέτω ότι δουλεύεις ας πούμε στην κλάση Window1. Όρισε της σαν πεδία: > private Transform3DGroup _transform = new Transform3DGroup(); private ScaleTransform3D _scalex = new ScaleTransform3D(); Έτσι δημιουργείς ένα αντικείμενο Transform3DGroup και ένα ScaleTransform3D. Στην συνέχεια πρέπει να δηλώσεις ότι αυτό το Scale (_scale) αναφέρεται στο transform που έχεις φτιάξει (_transform). Άρα: > _transform.Children.Add(_scalex); Στην συνέχεια κάλεσαι μία συνάρτηση της κλάσης που έχει μέσα: > _scalex.ScaleX = 0.6; camera.Transform = _transform; Όπου camera είναι το όνομα της κάμερας που έχεις ορίσει στον XAML κώδικα σου. Όρισε την τιμή που θες για .ScaleX/Y/Z Πιστεύω να βοήθησα...
Evgenios1 Δημοσ. 19 Ιουνίου 2009 Μέλος Δημοσ. 19 Ιουνίου 2009 Καλα τι να σου πω? ΕΙΣΑΙ ΘΕΟΣ !! (βεβαια δε θα το βαλω στη camera αλλα στο Model) Δε μπορω να καταλαβω πως μου ξεφυγε... Δε μου λες, απο normals ξερεις? Εχω καταλαβει ο,τι αυτα οριζουν το face, και ο,τι βγενουν με cross product οκ μεχρι εδω. Απο default το face βγενει αναλογα τον tringle Τωρα λεω να χρησιμοποιησω normals, το προβλημα? για να βγαλω Normal θελω 3 point3d, ομως στη κλαση που παραθετω κατω κατω (Test3DObject) φτιαχνω το object point by point με user entery και οχι μεσα σε κωδικα , να το interface Καμια ιδεα? >public class Test3DObject : ModelVisual3D, I3DStream { private MeshGeometry3D mesh; private int triangle = 0; public Test3DObject() { Iniz(); } public Test3DObject(I3DStream streamModel) { Iniz(); Load3DObject(streamModel); } public void AddPoint(Point3D p) { triangle++; mesh.Positions.Add(p); mesh.TriangleIndices.Add(triangle - 1); // mesh.Normals.Add(new Vector3D(0, 1, 0)); } public void Load3DObject(I3DStream stream) { mesh.Positions = new Point3DCollection(stream.Points); mesh.TriangleIndices = new Int32Collection(stream.Tring); //mesh.Normals = new Vector3DCollection(stream.Normals); } public void Clean() { mesh.Positions.Clear(); mesh.Normals.Clear(); mesh.TriangleIndices.Clear(); triangle = 0; } private void Iniz() { mesh = new MeshGeometry3D(); base.Content = new GeometryModel3D { Geometry = mesh, Material = new DiffuseMaterial { Brush = new SolidColorBrush(Colors.Green) } }; } #region IMyModelStream Members public List<Point3D> Points { get { return mesh.Positions.ToList<Point3D>(); } } public List<int> Tring { get { return mesh.TriangleIndices.ToList<int>(); } } public List<Vector3D> Normals { get { return mesh.Normals.ToList<Vector3D>(); } } #endregion }
psolid_snake Δημοσ. 19 Ιουνίου 2009 Δημοσ. 19 Ιουνίου 2009 Χμ... η αλήθεια είναι ότι δεν έχω ασχοληθεί (τουλάχιστον ακόμα) με normals. Για να καταλάβω... θέλεις έναν αλγόριθμο που να βρίσκει όλα τα normals των πολυγώνων σου ή να όριζει clickable ο χρήστης 3 point3d σημεία και να βρίσκει εκεί το Normal??
Evgenios1 Δημοσ. 20 Ιουνίου 2009 Μέλος Δημοσ. 20 Ιουνίου 2009 pff Εχω μπλεξει τα μπουτια μου.. Δε μου λες, ξερεις κανα τροπο να κανω resize με 2d intreface? Δλδ εστω ο,τι εχω ενα 3d obj x,y,z .. να εχω ενα usercontrol με 3 picboxs η καθε μια για καθε διασταση (pic1 = x,y pic2= x,z pic3 =z,y ). Και κατι αλλο, πως θα αλλαξω γωνια με το ποντικι ? (DragMove etc..) τωρα το κανω με sliderbars ... το προγραμματακι ειναι καπως ετσι μεχρι τωρα.. prj_o95.zip
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.