קורס תוכנת מטלב ויישומיה ד"ר סמדר שץ © אגף התקשוב ,אוניברסיטת בר אילן קורס תוכנת מטלב ויישומיה שיעור מס' :9עצמים גרפיים עצמים גרפיים ותכונותיהם מהו handle graphics פקודות הגרפיקה במטלב יוצרות עצמים גרפיים .קיומם של עצמים גרפיים ,תכונותיהם והיחסים ביניהם מקבלים ביטוי בתצוגה הגרפית באופן אוטומטי .לכן ההשפעה של המשתמש (או המתכנת) במטלב על הגרפיקה נעשית באמצעות יצירה, שינוי ומחיקה של עצמים גרפיים .חלק מפקודות הגרפיקה שהזכרנו עד כה יצרו עצמים גרפיים באופן עקיף .למשל ,הפעלת פקודת plotכאשר אין חלון גרפי גורמת ליצירה של חלון גרפי וכן מערכת צירים אחת ,שבתוכה יווצר העצם הגרפי של העקומה (במקום שהמשתמש יצטרך ליצור ע"י פקודה את החלון הגרפי וליצור ע"י פקודה נוספת את מערכת הצירים). פקודות גרפיות ברמת המשתמש ( )high levelמבצעות פעולות על עצמים גרפיים שונים באופן השקוף למשתמש .למשל, פקודת plotמאתחלת את מערכת הצירים ,אלא אם בוצעה לפני כן פקודת .holdלעומת זאת ,פקודות גרפיות ישירות ( low )levelמבצעות פעולות מוגדרות על עצם גרפי .למשל ,פקודת lineמוסיפה עקומה למערכת צירים (מבלי לאתחל את הצירים). לכל עצם גרפי שנוצר ,מוקצה "מזהה" ( )handleשמאפשר את הגישה לעצם .המזהה הוא מספר מסוג doubleאבל לערך ה מספר כשלעצמו אין משמעות .אם שומרים את המזהה בתוך משתנה ,כאשר עצם גרפי נמחק (אם משום שהחלון או מערכת הצירים בו היה נמחקו או אותחלו ואם באמצעת מחיקה יזומה) ,המשתנה נשאר בזיכרון אבל אין אפשרות להשתמש במספר שנשמר בו .כל פקודות השרטוט יכולות להחזיר מזהה ,באמצעותו ניתן לטפל בעצם הגרפי בהמשך התוכנית .לדוגמא: יצירת חלון גרפי חדש יצירת מערכת צירים hfig = figure = hfig 1 hax = axes = hax 173.0013 יצירת עקומה )'hcrv = plot(1:10,rand(1,10),'o = hcrv 174.0022 יצירת טקסט )'htxt = text(5,0.5,'Middle = htxt 175.0011 )'strc = importdata('circle1.gif )himage = image(strc.cdata = strc ]cdata: [600x800 uint8 ]colormap: [256x3 double = himage 0.0020 יצירת תמונה עמ' 1מתוך 9 שיעור 9 מאי 15 קורס תוכנת מטלב ויישומיה © אגף התקשוב ,אוניברסיטת בר אילן ד"ר סמדר שץ קבלת מידע על תכונות עצם גראפי )strc = get(hndl קבלת ערכי כל התכונות :מתקבל structure )'get(hndl,'PropertyName קבלת ערך של תכונה מסוימת: )'get(hcrv,'MarkerSize = ans דוגמאות: 6 1.0000 0 0 0.7500 0.7500 0 0.2500 )'get(hax,'ColorOrder = ans 0 0 0 0.5000 1.0000 0 0 0.7500 0.7500 0 0.7500 0.7500 0.2500 0.2500 )inspect(hndl צפייה אינטראקטיבית בתכונות (עם אפשרות לשינוי): )set(hndl קבלת רשימה של כל תכונות העצם הניתנות לשינוי: )'set(hndl,'property קבלת רשימת כל האפשרויות הקיימות לתכונה מסוימת: שינוי תכונות עצם גראפי )set(hndl,'PropertyName',PropertyValue שינוי תכונה של עצם גרפי: ניתן לשנות מספר תכונות בפקודה אחת, )set(hndl,'Pname1',Pvalue1,'Pname1',Pvalue1,... ע"י זוגות של שם תכונה וערך. דוגמא: )'set(hcrv,'Markersize',3,'MarkerFaceColor','m )'set(htxt,'FontSize',16,'backgroundColor','y 1 0.8 0.6 Middle 0.4 0.2 10 8 6 4 0 2 0 ◄דוגמא :1הסקריפט d9rwמציג באופן דינאמי את המסלול של הולך אקראי במישור עם אורך -צעד קבוע .מחשבים מראש המסלול לכל הצעדים ,ומכינים מראש את השטח המוצג ב מערכת הצירים כך שיכלול את כל הנקודות של המסלול בכל הזמנים .יוצרים שרטוט ראשוני (נקודת המוצא של המסלול +המיקום אחרי צעד אחד) עם כותרת מתאימה למספר צעדים זה ,ושומרים את המזהים ( )handlesשל העקומה ושל הכותרת .הצגת העקומה בלולאת הזמנים נעשית לא ע"י שרטוט מחדש של העקומה ,אלא ע"י שינוי העצם הגרפי של העקומה ועדכונו בערכים המחושבים .גם עדכון הכותרת עמ' 2מתוך 9 שיעור 9 מאי 15 קורס תוכנת מטלב ויישומיה ד"ר סמדר שץ © אגף התקשוב ,אוניברסיטת בר אילן (המציגה את מספר ה צעד) נעשה ע"י הכנת מחרוזת המציגה את הזמן ועדכון המחרוזת בעצם הגרפי של כותרת הגרף. באופן זה ,הצגת העקומה והכותרת בזמנים השונים נראית יותר "חלקה" ורציפה מאשר בשיטה של הפעלת פקודות plot בכל פעם. היררכיה גרפית במטלב עצמים גרפיים במטלב מאורגנים באופן היררכי :כל עצם שייך לעצם שכולל אותו ("הורה") ,כמוראה בתרשים: Root "שורש" הגרפיקה נוצר כאשר מטלב עולה .כל החלונות הגרפיים הם "בנים" של השורש .המזהה ( )handleשל השורש הוא תמיד .0 Figure UI Objects Axes חלון גרפי. עצמים לממשק משתמש (לדוגמא כפתורים ,תפריטים). מערכות-צירים. CoreObjects עצמים גרפיים בסיסיים :עקומות ,משטחים ,טקסטים. Plot Objects קבוצות של עצמים גרפיים בסיסיים מאותו סוג .לדוגמא ,סדרת עקומות הנוצרת מ.contour plot- Groups Objects עצמים גרפיים מקובצים .ניתן לקבץ עצמים כדי לבצע על כולם פעולות דומות, אבל לא כל הפעולות מוגדרות על צבירים מסוג זה. Annotation עצמים ב"שכבת אנוטציה" (שהיא שכבה נפרדת מן הגרפיקה הבסיסית). Objects בקורס זה לא נתייחס לשלושת הסוגים האחרונים. בדרך כלל ,לעצם ברמה נתונה משויכים מספר עצמים ב"רמת -הבת" .למשל ל"שורש" יכולים להיות מספר "ילדים" :כל אחד מהם חלון גרפי נפרד .בחלון גרפי יכולים להיות מספר מערכות צירים או מספר .UI Objectsבמערכת -צירים יכולים להיות מספר עקומות ו/או טקסטים. אחד מן ה"ילדים" הוא ה"עצם הנוכחי" ( ,)current objectוכל פעולה גרפית מבוצעת עליו (אלא אם צוין במפורש על איזה עצם תבוצע הפעולה) .למשל אם יש כמה חלונות גרפיים וחלון מס' 2הוא החלון הנוכחי ,אז פקודת clfתאתחל את חלון מס' .2אם יש כמה מערכות צירים בחלון מסוים ואחת מהן היא ה ,current axes-אז פקודת plotתיצור עקומה במערכת צירים זו. עמ' 3מתוך 9 שיעור 9 מאי 15 © אגף התקשוב ,אוניברסיטת בר אילן ד"ר סמדר שץ קורס תוכנת מטלב ויישומיה קביעת המיקוד (מיהו ה"עצם הנוכחי") :פתיחת חלון חדש באופן אוטומטי מעבירה את המיקוד לחלון זה (.)current figure כנ"ל יצירת מערכת צירים חדשה (בין אם באופן מפורש ובין אם ע"י פקודת שרטוט בחלון חדש) הופכת אותם לצירים הנוכחיים ( .) current axesבחירה ע"י העכבר מעבירה את המיקוד לעצם שנבחר ולכל ה"הורים" שלו .כמ-כן קיימות פקודות להעברת מיקוד באופן מפורש. תכונות עם משמעות משותפת יש תכונות ספציפיות לסוגי עצמים מסוימים ויש תכונות משותפות לכל העצמים או למרביתם. מינוחים משמעות מינוח אפשרויות סוג העצם type אחד מסוגי העצמים המוגדרים במטלב צבע color אחת האותיות המציינות צבע ,או שלישיית RGB יחידות אורך .רלוונטי units inches,centimeters,normalized,points,pixels,characters לתכונות כמותיות. קו התוחם משטח edge תלוי בתכונה המשויכת לקו .בדרך כלל ,צבע כמתואר למעלה. משטח תחום בקו face תלוי בתכונה המשויכת לקו .בדרך כלל ,צבע כמתואר למעלה. האם העצם נראה visible on, off עצמים -מתחת בהיררכיה children Handle עצם-מעל בהיררכיה parent Handle נוכחי ,בפוקוס current Handle ברירת -מחדל default ברירת -מחדל לתכונות עצמים שמתחת בהיררכיה .תלוי בתכונה. תכונות משותפות לסוגים שונים של עצמים Type Tag UserData Visible HandleVisibility HitTest סוג העצם מחרוזת-תווים (איננה משפיעה על התצוגה) .שימושי לצורך חיפוש. מידע המשויך לעצם (אינו משפיע על התצוגה) .שימושי לצורך תכנות. האם העצם נראה. האם העצם ייכלל בתוצאות חיפוש. האם ניתן לבחור את העצם ע"י העכבר. Colorעבור :figure+axesצבע-הרקע .עבור :lineצבע הקו. Clipping עבור קווים ,משטחים ,טקסטים וכו' :האם ייראו החלקים הנמצאים מחוץ למערכת הצירים. FontName FontAngleעבור :Textתכונות הטקסט בעצם .עבור : Axesתכונות טקסטים מתחת בהיררכיה ,למשל כותרות FontSize FontUnits צירים ,טקסטים ליד השנתות וכו' .גם מקרא ( )legendנחשב למערכת -צירים ולכן תכונות אלה משפיעות גם על הפונטים במקרא לעקומות. FontWeight עמ' 4מתוך 9 שיעור 9 מאי 15 אוניברסיטת בר אילן,© אגף התקשוב ד"ר סמדר שץ קורס תוכנת מטלב ויישומיה Marker .) צבע קו תוחם וצבע מילוי (אם יש, גודל, סימן:תכונות מרקרים .תיחום בעצמים שהם משטחים- ניתן לשייך מרקרים גם לעקומות וגם לקווי MarkerSize MarkerEdgeColor MarkerFaceColor אלה. לא נכללות תכונות הקובעו ת התנהגות של ממשקי משתמש.להלן כמה מן התכונות של העצמים הגרפיים הבסיסיים .יתוארו בשיעור על תכנות ממשקי משתמש root :)תכונות השורש (מוניטור תהליכים הקשוריםroot לכן ניתן לשנות דרך תכונות.)command window (כוללroot כל החלונות במטלב נמצאים תחת .root properties לקבלת רשימה מלאה יש לחפש בתיעוד. ועודLanguage ,format ,diary לדוגמא,לחלון הפקודות Units : יחידות מידה.ScreenSize למשל.Screen מתחילות במילה:תכונות תצוגה Chilren, CurrentFigure, PointerLocation, PointerWindow :היררכיה Tag, UserData :למתכנת figure תכונות חלון .figure ע"י פקודת:יצירת חלון figure(hndl) :העברת פוקוס לחלון .figure properties לקבלת רשימה מלאה יש לחפש בתיעוד תכונות החלון עצמו Units,Position,Visible,Resize,Color,Name,NumberTitle,WindowStyle בחירה HandleVisibility,HitTest היררכיה Children,CurrentAxes שרטוט בחלון DoubleBuffer,ColorMap,Pointer לממשק משתמש DockControls,UIContextMenu,MenuBar,ToolBar למתכנת Tag,UserData axes תכונות מערכת צירים .axes ע"י פקודת:יצירת מערכת צירים axes(hndl) :העברת פוקוס למערכת צירים .axes properties לקבלת רשימה מלאה יש לחפש בתיעוד Units,Position,OuterPosition,Box,Color,FontName, FontAngle, XAxisLocation, הצירים YAxisLocation, XColor, YColor, Zcolor, XLabel, YLabel, Zlabel, TickDir Children,Parent,CurrentPoint,Visible,HandleVisibility,HitTest XLim,YLim,ZLim,CLim,CLimMode,DataAspectRatio,XDir,YDir,ZDir היררכיה ונראות הצגת מידע XTick, YTick, Ztick, ColorOrder, LineStyleOrder,XGrid, YGrid, ZGrid, GridLineStyle אנוטציה Tag,UserData למתכנת 15 מאי 9 שיעור 9 מתוך5 'עמ אוניברסיטת בר אילן,© אגף התקשוב ד"ר סמדר שץ קורס תוכנת מטלב ויישומיה תכונות קו line(X,Y,'Property1',value1,'Property2',value2) :יצירת קו .line properties לקבלת רשימה מלאה יש לחפש בתיעוד הקו עצמו XData,YData,ZData Parent,Visible,HandleVisibility,HitTest,Selected,SelectedHighlight היררכיה וניראות Color,LineStyle,Marker,MarkerSize,Clipping, LineWidth, MarkerEdgeColor, אופן הצגת מידע MarkerFaceColor DisplayName אנוטציה Tag,UserData למתכנת תכונות משטחים למשטחים יש סדרת תכונות המגדירות את המשטח. surface properties לקבלת רשימה מלאה יש לחפש בתיעוד . תכונות אלה לא נכללות כאן.) ברק ועוד, טקסטורה,(שקיפות המשטח עצמו XData,YData,ZData,CData Parent,Visible,HandleVisibility,HitTest,Selected,SelectedHighlight היררכיה וניראות FaceColor,EdgeColor,LineStyle,Marker,MarkerSize,Clipping, LineWidth, אופן הצגת מידע MarkerEdgeColor, MarkerFaceColor DisplayName אנוטציה Tag,UserData למתכנת תכונות טקסט .text properties לקבלת רשימה מלאה יש לחפש בתיעוד הטקסט עצמו Position,String Parent,Visible,HandleVisibility,HitTest,Selected,SelectedHighlight FontUnits,FontSize,FontName,FontWeight,FontAngle,Rotation, Interpreter, היררכיה וניראות אופן הצגה HorizontalAlignment, VerticalAlignment, Units, Clipping, Margin, Extent עיצוב Color,BackgroundColor,LineStyle,LineWidth, למתכנת Tag,UserData שימוש בתכונות:דוגמא Births per year and month 13000 normalized 12000 1.1 Max 1 Min 2 4 6 8 month 10 12 y 9000 nc 10000 0.9 te n de Raw data 11000 8000 7000 6000 1970 15 מאי 1975 1980 1985 1990 year 1995 2000 2005 מציג נתוני לידות לפי שנים וחודשיםd9inset הסקריפט:2 ◄דוגמא , במערכת הצירים הראשית מוצג המידע הגולמי.)d4births-(בדומה ל ) מוצגים הנתונים לאחר נרמולinset( ואילו במערכת צירים קטנה יותר כן מוצגים טקסטים (אחד בצירים- כמו.)(נטרול מגמה כללית לפי שנים קובעות אתinset- תכונות הטקסטים ב.)inset-הראשיים ושניים ב מיקום האותיות יחסית לקואורדינטות של נקודת העיגון באופן שונה גודל.)מברירת המחדל (שהיא שמאל בציר האופקי ומרכז בציר האנכי כל.) מהצירים הראשייםFraction מחושב כחלק יחסי (משתנהinset-ה . כדי להקל על זיהוי בהמשךTag-מערכת צירים מסומנת ב 9 שיעור 9 מתוך6 'עמ © אגף התקשוב ,אוניברסיטת בר אילן ד"ר סמדר שץ קורס תוכנת מטלב ויישומיה טיפול בעצמים גרפיים מציאת העצם בפוקוס הפקודות הבאות מחזירות מזהה handleלעצם גרפי שהוא: gcf Current figure gca Current axes gco Current objet ;)'strc = importdata('circle1.gif )himage = image(strc.cdata )set(gcf,'colormap',strc.colormap דוגמא: 100 = himage 0.0015 200 300 400 500 800 700 600 500 400 300 200 100 600 חיפוש לפי תכונות )hndl=findobj(PropertyName,PropertyValue מציאת עצם/ים שלתכונה מסוימת יש ערך מסוים. )hndl=findobj(P1,V1,P2,V2,P3,V3,P4,V4 ניתן לחפש לפי מספר תכונות .מתקבלים העצמים שמקיימים את כל התנאים. ניתן להגביל את החיפוש לעצמים מסוימים (כולל ה"ילדים" )hndl=findobj(Parents,PropName,PropValue שלהם). )'htext=findobj(gca,'type','text דוגמא :מציאת כל הטקסטים השייכים למערכת הצירים הנוכחית. ◄דוגמא :3הפונקציה " d9curve_numמחלצת" את הנתונים הנומריים המוצגים בחלון גרפי מסוים .ראשית מוצגים הצירים שבחלון והמשתמש בוחר מאיזו מערכת צירים יילקחו הנתונים ,בהנחה שלכל מערכת צירים הוצמד Tagאשר יקל על זי הוי שלה .לאחר מכן מחפשים "בנים" למערכת צירים זו שהם מסוג עקומה (כדי לא לכלול גם טקסטים) .מכל אחד מן העצמים שנמצאו מקבלים את ערכי x,yואוספים את הנתונים במשתנה אחד מסוג .Cell Arrayכדוגמא להפעלת הפונקציה ,נקח את קובץ השרטוט שנוצר בדוגמא מס' xydata = d9curve_num('births.fig') .2 מחיקת עצמים )delete(hndl מחיקת עצם גרפי אשר המזהה שלו .hndl אם hndlמערך של מזהים ,יימחקו העצמים שאלה המזהים שלהם. ))'delete(findobj(gca,'type','text דוגמא :מחיקת כל הטקסטים במערכת הצירים הנוכחית. עמ' 7מתוך 9 שיעור 9 מאי 15 קורס תוכנת מטלב ויישומיה © אגף התקשוב ,אוניברסיטת בר אילן ד"ר סמדר שץ קביעת ערכי ברירת-מחדל ערכי ברירת המחדל של עצם כלשהו הם תכונה של העצם שהם שייכים אליו בהיררכיה הגרפית .למשל ,ברירת המחדל לצבע של כל מערכת צירים חדשה שנוצרת בחלון גרפי היא תכונה של החלון. )set(Hparent,'DefaultObjTypePropName',value מבנה הפקודה: מזהה של parent object סוג העצם עבורו מגדירים ברירת מחדל. שם התכונות עבורה מגדירים ברירת מחדל ערך ברירת המחדל למשל ,כדי להגדיר גופני ברירת-מחדל לצירים: Hparent ObjType PropName value )'set(gcf,'DefaultAxesFontName','Times פקודות ממשק נוספות קלט גרפי הפקודות הבאות עוצרות את ביצוע התוכנית ומחכות לקלט מן המשתמש (בדומה ל input-ו .)menu-לאחר סיום התהליך, הקלט עובר לסביבה הקוראת והתוכנית ממשיכה להתבצע. קלט קואורדינטות ע"י הקשת עכבר קלט של קואורדינטות של נקודות לפי הקשת עכבר על חלון עם נתונים מספריים .אם בזמן הפעלת הפקודה לא קיים חלון גרפי ,אז ייפתח חלון .אם לא קיימת מערכת-צירים ,אז תיווצר מערכת-צירים עם ברירת-מחדל עבור האזור הנראה בה. הקואורדינטות נתונות ביחידות של הנתונים המספריים .ביצוע התוכנית מושהה עד לסיום הקלט .יש שתי אפשרויות לסיום: )[x,y] = ginput(n קלט של nנקודות. קלט של מספר כלשהו של נקודות .הפעולה מסתיימת לאחר הקשה על מקש .ENTER [x,y] = ginput קלט בתיבת טקסט פתיחת חלון ובו מספר תיבות להכנסת טקסט +כפתורי אישור וביטול .מעל כל תיבת-טקסט יש כותרת ( .)promptלאחר שהמשתמש לוחץ על אחד הכפתורים ,החלון נסגר והקלט עובר לסביבה הקוראת כמערך תאים שבו כל תא הוא הטקסט שהוזן בכל תיבה (אם נלחץ אישור) או כמערך תאים ריק (אם נלחץ ביטול) ,והתוכנית ממשיכה להתבצע. עבור כל תא ב prompt-תיווצר תיבה להכנסת טקסט .דוגמא: )inputs = inputdlg(prompts ציון כותרת לחלון הממשק +מספר השורות לכל קלט )}'inputdlg({'No. of curves' 'output file = ans ''10 ''example )inputs = inputdlg(prompts,title,Nlines ציון ערכי ברירת-מחדל .כל ערך חייב להיות מחרוזת. )inputs=inputdlg(prompts,title,Nlines,defaults דוגמא: עמ' 8מתוך 9 ;}'Pstr = {'number of curves' 'full name ;]N = [1 ; 2 ;}'defts = {'1' 'first-name family-name שיעור 9 מאי 15 © אגף התקשוב ,אוניברסיטת בר אילן ד"ר סמדר שץ קורס תוכנת מטלב ויישומיה אם הקלט הוא יותר משורה אחת ,נוצרת מטריצה של תווים ברוחב של השורה הארוכה ביותר. )inputs = inputdlg(Pstr,'',N,defts = inputs ''3 ][2x5 char }inputs{2 = ans Dan Cohen הצגת תיבת הודעות יש במטלב ס דרה של פקודות שמייצרות חלון במטרה להציג מידע .פקודות אלה מחזירות מזהה ( )handleלחלון שנוצר, ולא עוצרות את מהלך התוכנית .דוגמא לאחת הפקודות: )hndl = msgbox(message נפתח חלון גרפי עם כפתור OKוכן טקסט כמצויין ב.message- לחיצה על הכפתור תסגור את החלון. )hndl = msgbox(message,title הצגת כותרת לחלון: )hndl = msgbox(message,title,icon הצגת צלמית: ''none' 'error' 'help' 'warn' 'custom כאשר iconיכול להיות אחד מאלה: )'h = msgbox('No file was found','message','error דוגמא: )waitfor(h לעצירת התוכנית עד שהעצם עם מזהה hנמחק עצירת התוכנית עד שהעצם hמשנה את תכונה property )waitfor(h,property לעצירת התוכנית עד שהמשתמש לוחץ על כפתור OKבתיבת הודעות: )h = msgbox(message )waitfor(h ◄דוגמא :4הפוקנציה d9curve_selectמאפשרת למשתמש לבחור מספר עקומות מתוך סדרת עקומות בחלון גרפי. המשתמש מציין מראש כמה עקומות ייבחרו .עבור כל עקומה ,מוצגת תיבת הודעות שהמשתמש סוגר לאחר שבחר את העקומה .עקומה נבחרת ע"י הקשה בעכבר עליה ,והיא מודגשת בקו עבה למשך כשנייה .ניתן להקיש על כמה עקומות לפני שמאשרים (האחרונה נקלטת) .כל עקומה שנבחרת נמחקת מן התצוגה (כדי למנוע בחירה חוזרת) .כאשר נבחרו עקומות כמספר שצוין ,התוכנית מחזירה מערך-תאים עם כל הנתונים המספריים של העקומות שנבחרו ,ומציגה בגרף רק את העקומות שנבחרו. load acid.txt כדוגמא להפעלת הפונקציה ניקח את הנתונים מהקובץ acid.txt ))plot acid(:,1),acid(:,2 נתחיל משרטוט של כל העקומות: נפעיל את הפונקציה: 0.2 ;curveData=d9curve_select 0.15 0.1 0.05 0 900 עמ' 9מתוך 9 שיעור 9 850 800 750 700 650 600 -0.05 550 מאי 15
© Copyright 2024