پس از تنظیم همه چیز ، وقت آن است که الگوریتم خود را واقعاً پیاده سازی کنید. مشکلی که الگوریتم طرح شما برای حل آن باید به شرح زیر خلاصه شود: با توجه به نمودار ورودی (احتمالاً با مختصات موجود) ، مختصات را برای همه عناصر نمودار و مسیریابی برای همه لبه ها محاسبه کنید (با توجهبر این اساس نمودار چیدمان. توجه داشته باشید که نمودار ورودی مشکل طرح را تعریف می کند ، اما پس از اجرای الگوریتم شما ، تکلیف مختصات حاصل را نیز انجام می دهد.
در حین توسعه الگوریتم خود ، به طور مرتب بین انجام این کار و تغییر ابرداده خود به عقب و جلو تغییر خواهید داد.
کلاس اصلی الگوریتم شما
با این حال بسیاری از کلاس ها یک الگوریتم طرح بندی از آن تشکیل شده است ، همیشه یک کلاس ورودی را ارائه می دهد که از AbstractLayoutProvider به ارث می برد و مهمترین روش برای الگوریتم شما را پیاده سازی می کند:
خالی چیدمان(چیدمان النود,IelkprogressMonitor ProgressMonitor);
بیایید پارامترها را به ترتیب معکوس (به دلایل) طی کنیم. پارامتر ProgressMonitor باید برای ردیابی پیشرفت و بررسی اینکه آیا کاربر می خواهد عملیات طرح بندی را لغو کند ، استفاده شود. در واقع لغو هنگامی که کاربر می خواهد لغو کند یکی از آن ویژگی هایی است که به شما کمک می کند تا نرم افزار شما از بسیاری از برنامه های دیگر متمایز شود ، بنابراین از این فرصت برای درخشش استفاده کنید!
با این حال ، پارامتر LayoutGraph از اهمیت بیشتری برخوردار است. این مشکل طرح را تعریف می کند که الگوریتم شما باید از چند طریق حل کند. اول ، ساختار نمودار را که باید بیان شود تعریف می کند: کدام گره ها وجود دارند ، چگونه آنها به هم و غیره متصل می شوند. دوم ، هر عنصر نمودار می تواند گزینه های چیدمان را به آن متصل کند که قرار است بر آنچه الگوریتم طرح شما با آنها انجام می دهد تأثیر بگذارد. و سوم ، هر عنصر ممکن است دارای مختصات از قبل موجود یا نقاط خم در ارتباط با آن باشد که الگوریتم شما ممکن است بخواهد از آن استفاده کند. این مختصات موجود توسط الگوریتم شما رونویسی می شود تا مختصات جدید و محاسبه شده را نگه دارید.
توجه داشته باشید که نمودار طرح ممکن است حاوی گره هایی باشد که خودشان حاوی گره های دیگری هستند. به طور پیش فرض ، الگوریتم های طرح بندی فقط قرار است مختصات را برای کودکان مستقیم طرح بندی محاسبه کنند و سپس اندازه خود را برای خود Layoutgraph تنظیم کنند. با این حال ، اگر الگوریتم طرح شما از طرح سلسله مراتبی پشتیبانی می کند ، و در صورت درخواست طرح سلسله مراتبی (که از طریق گزینه CoreOptions. Hierarchy_Handling انجام می شود) ، شما همچنین مختصات کودکان کودکان را محاسبه خواهید کرد.
دو روش دیگر وجود دارد که الگوریتم شما می تواند ، اما نیازی به اجرای آن نیست:
- void Initialize (پارامتر رشته) ؛از این روش می توان برای اولیه سازی ساختار داده ها و تهیه چیزها استفاده کرد. این روش دقیقاً یک بار نامیده می شود که نمونه ای از زیر کلاس AbstractLayoutProvider شما ایجاد شود. توجه داشته باشید که یک نمونه از کلاس شما می تواند برای اجرای چندین طرح استفاده شود. پارامتر پارامتر کمی مشکل است. بیشتر الگوریتم های چیدمان نیازی به آن ندارند ، اما برخی ممکن است بسته به ارزش آن رفتار خود را تنظیم کنند. یک مثال رابط کاربری ما با کتابخانه Graphviz است که الگوریتم های مختلف طرح را ارائه می دهد. ما فقط یک زیر کلاس واحد از AbstractLayoutProvider را پیاده سازی می کنیم ، اما هر نمونه از یک مقدار پارامتر منتقل می شود که نشان می دهد کدام یک از الگوریتم های GraphViz هنگام استفاده از روش طرح (.) آن را اجرا می کنند. البته ، کدام پارامتر برای عبور باید در پرونده ابرداده شما تعریف شود.
- دفع باطل () ؛قبل از طبقه بندی چکیده چکیده شما به سمت جمع کننده زباله ها فراخوانی می شود.
گزینه های چیدمان
در اینجا شایان ذکر است که مهم است که الگوریتم شما برای بازیابی مقدار گزینه چیدمان تنظیم شده روی یک عنصر نمودار از آن استفاده می کند. از آنجا که ابزارهای ابرداده ELK یک کلاس جداگانه با مجموعه کاملی از نمونه های iProperty برای هر الگوریتم ایجاد می کند ، استفاده از این موارد منطقی است. دلیل این امر این است که استفاده از آنها تضمین می کند که هنگام دسترسی به گزینه های طرح بندی که روی یک عنصر نمودار تنظیم نشده اند ، مقادیر پیش فرض صحیح را برای الگوریتم طرح خود پیکربندی کنید.
یک مثال ساده
کد زیر یک اجرای ساده از روش طرح (.) است. این شامل رفتار متغیر بر اساس مقادیر خاصیت است و نتایج مانند این را تولید می کند:

پیشرونده.شروع("طرح ساده", 2); // بازیابی چندین خاصیت پتک زدن=چیدمان چیدمان.GetProperty(ساده.لایه گذاری); دو برابرحاشیه=چیدمان چیدمان.GetProperty(ساده.Spacing_edge_edge); دو برابرادغام=چیدمان چیدمان.GetProperty(ساده.Spacing_edge_node); دو برابرنودنوسپ=چیدمان چیدمان.GetProperty(ساده.فاصله_ node_node); // دریافت و احتمالاً لیست گره ها را معکوس کنید لیستالكد>گره= جدیدلیست<>(چیدمان چیدمان.بچه گله()); if (چیدمان چیدمان.GetProperty(ساده.reverse_input)) مجموعه ها.معکوس(گره); > // گره ها را قرار دهید دو برابرکورکس=لایه گذاری.ترک کرد; دو برابرادویه کاری=لایه گذاری.بالا; برای (گره النود:گره) // مختصات گره را تنظیم کنید گره.setx(کورکس); گره.بازاده(لایه گذاری.بالا); // پیشبرد مختصات کورکس+=گره.عرضه() +نودنوسپ; ادویه کاری=ریاضی.حداکثر(ادویه کاری,لایه گذاری.بالا +گره.شیوع()); > if (!گره.خالی است()) کورکس-=نودنوسپ; > پیشرونده.کار(1); // لبه ها را مسیریابی کنید if (!چیدمان چیدمان.getConteDedges().خالی است()) ادویه کاری+=ادغام; برای (لبه بزرگ:چیدمان چیدمان.getConteDedges()) منبع النود=alkgraphutil.اتصال دهنده(حاشیه، غیرمتمرکز.منابع().گرفتن(0)); هدف الکنود=alkgraphutil.اتصال دهنده(حاشیه، غیرمتمرکز.گله().گرفتن(0)); بخش Elkedgesection=alkgraphutil.اولی(حاشیه، غیرمتمرکز, درست است، واقعی, درست است، واقعی); بخش.مکان تفکیک( منبع.getx() +منبع.عرضه() / 2, منبع.گتی() +منبع.شیوع()); بخش.مکان یابی( هدف.getx() +هدف.عرضه() / 2, هدف.گتی() +هدف.شیوع()); alkgraphutil.CreateBendPoint(بخش,بخش.GetStartx(),ادویه کاری); alkgraphutil.CreateBendPoint(بخش,بخش.GENENDX(),ادویه کاری); ادویه کاری+=حاشیه; > ادویه کاری-=حاشیه; > // اندازه نمودار نهایی را تنظیم کنید چیدمان چیدمان.پهنه(کورکس+لایه گذاری.درست); چیدمان چیدمان.جنجال(ادویه کاری+لایه گذاری.پایین); پیشرونده.انجام شده < Pan> getWidth();
فارکس کاران ایران...
ما را در سایت فارکس کاران ایران دنبال می کنید
برچسب :
نویسنده : ديناروند فهيمه
بازدید : <-PostHit->
تاريخ : دوشنبه
9 مرداد
1402 ساعت: 16:48