البرنامج المساعد Eclipse (gef) وتصور الرسم البياني (zest)

StackOverflow https://stackoverflow.com/questions/8884792

  •  29-10-2019
  •  | 
  •  

سؤال

أنا أكتب مكونًا إضافيًا لـ Eclipse يرسم نظام حالة محدود.نظرًا لأنه قد يكون كبيرًا، أود إرفاق بعض خوارزميات تخطيط الرسم البياني الموجودة (على سبيل المثال.التخطيط الهرمي، والتخطيط القائم على القوة، ...) الذي يعمل تلقائيًا على تحسين تصور النظام.

هل هناك طريقة لدمج المكون الإضافي الذي أكتبه (المكتوب باستخدام مرفق البيئة العالمية) بحيث يمكن وضع أجزاء التحرير التي تم إنشاؤها في منطقة المحرر باتباع بعض خوارزميات تخطيط الرسم البياني الشائعة؟

لقد وجدت هذا مقالة مثيرة للاهتمام ولكن بدلاً من تحسين تصور أجزاء التحرير، فإنه يركز على رسم رسم بياني جديد تمامًا.

ما أفعله حتى الآن هو إضافة الكود التالي (استنادًا إلى Zest 1)

private static void createNewGraph(String autName) {
    Shell tmpShell = new Shell();
    currGraph = new Graph(tmpShell, SWT.NONE);
    mapStateAndNodes = new HashMap<State, GraphNode>();
}

private static void addGraphNode(State currState)
{
    GraphNode newNode = new GraphNode(currGraph, SWT.NONE, currState.getName());
    mapStateAndNodes.put(currState, newNode);
}

private static void addGraphConnection(Transition currTrans)
{
    GraphNode source = mapStateAndNodes.get(currTrans.getOrigState());
    GraphNode dest = mapStateAndNodes.get(currTrans.getDestState());

    GraphConnection newConn = new GraphConnection(currGraph, SWT.NONE, source, dest);

}

private static void completeGraph()
{
    currGraph.setLayoutAlgorithm(new SpringLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING), true);
}

وأثناء بناء نموذجي، أتصل أيضًا createNewGraph(...), addGraphNode(...), addGraphConnection(...) و completeGraph(...).المشكلة هي:بعد currGraph.setLayoutAlgorithm(..., true) الذي - التي true يعني أنه يجب تطبيق الخوارزمية ووضع الكائنات بالترتيب "الصحيح".في هذه المرحلة (كما اقترح بعض القراء)، من الممكن استخراج الإحداثيات المحسوبة من خلال أ GraphNode.getLocation() طريقة.لسوء الحظ، بعد وضع التخطيط وتطبيقه، قامت جميع الولايات بذلك Point(0,0) كموقعهم.ووجدت هذا التعليق أيضا:

/**
 * Runs the layout on this graph. It uses the reveal listener to run the
 * layout only if the view is visible. Otherwise it will be deferred until
 * after the view is available.
 */
 public void applyLayout() {
     ...
 }

في org.eclipse.zest.core.widgets.Graph المصادر :-[ يبدو لي أنه لا يمكنني استخدام مكتبة zest Graph للقيام بهذه المهمة.هل انا مخطئ؟هل هناك أي بدائل؟

سيكون موضع تقدير أي مساعدة :)

هل كانت مفيدة؟

المحلول

باختصار، Zest لا يدعم هذا السيناريو بشكل مباشر.

ومع ذلك، يمكنك إنشاء تمثيل في الذاكرة لأجزاء التحرير التي يمكن تخطيطها باستخدام Zest.في Zest 1.0، يتعين عليك توفير ترجمة إلى Graph Nodes وGraph أقواس العلاقات يدوياً؛في الحماس 2.0 ما عليك سوى تقديم LayoutContext.لم يتم إصدار Zest 2.0 بعد، ولكن يبدو أنه من الأسهل بالنسبة لي التعامل مع هذا السيناريو.

فكرة إضافية:يدعم مشروع Spray مفتوح المصدر تخطيط Zest للرسوم البيانية Graphiti (Graphiti يمتد إلى مرفق البيئة العالمية - ربما هناك بعض الأفكار التي يمكن إعادة استخدامها).راجع ملف التعليمات البرمجية التالي: http://code.google.com/a/Eclipselabs.org/p/spray/source/browse/plugins/org.Eclipselabs.spray.runtime.graphiti.zest/src/org/Eclipselabs/spray/runtime/graphiti/ zest/features/ZestLayoutDiagramFeature.java لبعض الأفكار.

يحرر: لقد بحثت في الكود ذي الصلة في جهاز الكمبيوتر الخاص بي؛تمكنا من جعل هذا التخطيط يعمل في Zest 1.0 بالطريقة التالية:

  1. احصل على GraphNode واحد لكل عقدة، واتصال لكل قوس بين العقد.يمكنك جمعها في مصفوفتين مختلفتين؛على سبيل المثال SimpleNode[] nodes; SimpleRelationship[] relationships;
  2. قم بإنشاء مثيل لفئة الخوارزمية، وقم بتعيين المعلمات الاختيارية الخاصة بك كما تريد.
  3. يتصل algorithm.applyLayout(nodes, relationships, 0, 0, diagram.width, diagram.height, false, false) - آسف، ليس لديك تثبيت Zest 1.0 متاح للتحقق من المعاني الدقيقة للمعلمات؛الأولين هما العقد والعلاقات المستخدمة؛ثم الأربعة التالية تحدد لوحة الرسم؛وأنا بصراحة ليس لدي أي فكرة عن الغرض من الأخيرين.:د

مزيد من التوضيح:يستخدم Zest العقد والعلاقات كمصطلحات - استبدل قوسي السابق بالعلاقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top