Προς το περιεχόμενο

Resize 3dobject (wpf c#)


Evgenios1

Προτεινόμενες αναρτήσεις

Δημοσ.

Αρχικά υποθέτω ότι δουλεύεις ας πούμε στην κλάση 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

Πιστεύω να βοήθησα...

Δημοσ.

Καλα τι να σου πω? ΕΙΣΑΙ ΘΕΟΣ :-D!!

(βεβαια δε θα το βαλω στη camera αλλα στο Model)

Δε μπορω να καταλαβω πως μου ξεφυγε...

Δε μου λες, απο normals ξερεις?

Εχω καταλαβει ο,τι αυτα οριζουν το face, και ο,τι βγενουν με cross product οκ μεχρι εδω. Απο default το face βγενει αναλογα τον tringle

wpf01.jpg

Τωρα λεω να χρησιμοποιησω normals, το προβλημα? για να βγαλω Normal θελω 3 point3d, ομως στη κλαση που παραθετω κατω κατω (Test3DObject) φτιαχνω το object point by point με user entery και οχι μεσα σε κωδικα :-(, να το interface

wpf02x.th.jpg

Καμια ιδεα?

 

>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
   }

Δημοσ.

Χμ... η αλήθεια είναι ότι δεν έχω ασχοληθεί (τουλάχιστον ακόμα) με normals. Για να καταλάβω... θέλεις έναν αλγόριθμο που να βρίσκει όλα τα normals των πολυγώνων σου ή να όριζει clickable ο χρήστης 3 point3d σημεία και να βρίσκει εκεί το Normal??

Δημοσ.

pff Εχω μπλεξει τα μπουτια μου..

Δε μου λες, ξερεις κανα τροπο να κανω resize με 2d intreface?

Δλδ εστω ο,τι εχω ενα 3d obj x,y,z .. να εχω ενα usercontrol με 3 picboxs η καθε μια για καθε διασταση:rolleyes: (pic1 = x,y pic2= x,z pic3 =z,y ).

Και κατι αλλο, πως θα αλλαξω γωνια με το ποντικι ? (DragMove etc..) τωρα το κανω με sliderbars :-( ... το προγραμματακι ειναι καπως ετσι μεχρι τωρα..

prj_o95.zip

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...