לכל מומחי ה-WPF

quawax

New member
לכל מומחי ה-WPF

אני מפתח אפליקציית GIS, שבין היתר אמורה להציג שכבות של אלמנטים וקטורים על גבי המסך,
כרגע יש לי על המסך CANVAS שעליו אני מצייר את השכבות עם האלמטנים,
בכל שכבה יש משהו כמו 25 אלף אלמנטים שונים כך שמספר הילדים ב-CANVAS יכול להגיע למעל 100 אלף.

לכל שכבה, אני צריך לתת את האפשרות של שינוי Opacity / Show / Hide / Color
והייתי שמח אם הייתה לי את אפשרות לעשות Binding לכל אלמנט ב-CANVAS ולעדכן אותו בעזרת ה-ViewModel.
זאת כדי לחסוך ציור מחדש של כל האלמנטים כל פעם שאיזשהי שכבה מתעדכנת, מה שאורך כמה שניות.
לצערי לא מצאתי את הדרך לעשות את זה, יכול להיות שפספסתי משהו?

חשבתי על אפשרות לצייר את כל האלמנטים על גבי Bitmap ולהציג אותו במקום את ה-CANVAS,
האם למקרה שלי זאת נראת דרך טובה יותר?

תודה רבה,
 

ziv1f

New member
זו לדעתי שאלת ארכיטקטורה ולא רק WPF

כלומר איך מציגים מפה עם הרבה מאד אלמנטים שמקובצים בשכבות ולכל אחת מהן השקיפות שלה.

כמו שאכן ציינת האפשרויות העיקריות הן או להוסיף אובייקטים ל-Canvas או לצייר אותם בעצמך. ל-Canvas כנראה יהיה קצת כבד לרנדר כל כך הרבה אובייקטים, ומצד שני האפשרות לצייר את האובייקטים בעצמך היא מורכבת יחסית, במיוחד אם המפה צריכה לעבוד עם זום, פאן וסיבוב של המפה, למרות שגם לדברים האלה יש פונקציות וזה בסופו של דבר מתמטיקה.

האפשרות השלישית ולדעתי היותר מוצלחת, היא למצוא רכיב מוכן שיודע לעשות את כל הדברים האלה. מישהו כבר היה צריך כזה דבר פעם, יש רכיבים נפלאים וחזקים מאד לביצוע תצוגה של מפה, כולל עדכון אינטראקטיבי של אובייקטים על מפה. אני ראיתי רכיב WPF של ESRI שעובד מדהים, ויש גם את רכיב המפה של טלריק, ובוודאי עוד כמה, לרובם יש אפשרות להוריד את הרכיב לתקופת ניסיון ולבדוק אותו, אתה יכול להגדיר סט של קבצים ושכבות שאתה רוצה לבדוק ולראות על כל אחד מהרכיבים האלה איך זה עובד. מה שלדעתי עוד חשוב זה להשתמש בפורמטים סטנדרטיים, כמו למשל קבצי SHP למפות, הסיכוי למצוא רכיב שתומך בפורמט הזה גדול מאד.

הנה כמה דוגמאות לרכיבים שאולי יעניינו אותך (עולים כסף):
http://www.telerik.com/products/wpf/map.aspx
http://www.infragistics.com/dotnet/netadvantage/wpf/data-visualization/xam-map.aspx#Overview

והנה רכיב חינמי שאפשר להוריד, אם אתה הולך לכתוב דברים בעצמך זו כנראה תהיה נקודת התחלה טובה, או לפחות נקודת התייחסות טובה:
http://sharpmap.codeplex.com/


בברכה,
זיו
 
מה שאתה יכול לעשות זה...

לשים Canvas בתוך canvas בתוך canvas...
בתוך כל אחד מה - Canvas לשים Grid עם הרבה מאוד Columns ו - Rows ( יעני פיקסלים ).
בכל תא ב- Grid אתה שם נניח כפתור שמשנה את ה- Opacity שלו, כך גם אתה שולט אם הוא נראה וגם שולט אם מישהו לחץ עליו.

כמובן שב- Canvas הבסיסי\ראשון אתה שם את התמונה\מפה הרצויה.


חשבתי על זה עכשיו, אשמח שתאמר לי אם זה מצליח.
 
למעלה