انتقل إلى المحتوى

بسّط ​

العديد من الرسوم البيانية هي في الغالب تكرار. يتشارك حدثان في أربعين عنوان IP، ويكلف كل عنوان IP عقدة، أ التسمية والحافتان على الرغم من أن ما يهم هو أن "هذان الحدثان يشتركان في أربعين عنوان IP". المحور لديه العشرات من الأوراق التي لا ترتبط بأي مكان آخر. تبسيط طي العقد التي تلعب نفس الدور في مجموعة واحدة، مرسومة في مكانها:

ts
const options = {
    render: {
        nodeTypeAccessor: (node) => node.getData().type,
    },
    UI: {
        simplify: {
            rules: [{ kind: 'neighbours', minSize: 5 }],
        },
    },
}

المجموعات هي طريقة عرض وليست بيانات

graph.getNodes()، getEdges()، الجدول والصادرات وسجل التراجع يرى العقد الحقيقية. يتم إعادة حساب المجموعة منها كلما تغير الرسم البياني، ولا يتم حفظ أي شيء عنها.

شاهده وهو يعمل على تبسيط الرسم البياني بطاقة.

القواعد ​

UI.simplify.rules هي قائمة مرتبة. تمنح كل قاعدة بعض العقد مفتاحًا، وتتشارك العقد ملفًا يصبح المفتاح مجموعة واحدة، طالما أن هناك على الأقل minSize منهم.

  • يتم تشغيل القواعد ** بالترتيب**، وكل واحد يرى المجموعات التي وضعتها القواعد أعلاه كالمعتاد العقد. وبالتالي يمكن تجميع المجموعة مرة أخرى وفقًا لقاعدة لاحقة.
  • يتم تشغيل القواعد بعد مرشحات العقدة، لذلك تحتفظ المجموعة فقط بما يمر بها: إخفاء ثلاثة من أربعون عنوان IP وتقرأ المجموعة 37. طبقات الحافة لا تغير المجموعات؛ إيقاف تشغيل واحد فقط يخفي الخطوط.
  • العقدة التي تحتوي على ملاحظة مرفقة ومجموعة موسعة لا يتم تجميعها أبدًا ****. كتلة مغلقة مجموعات مثل أي عقدة أخرى.
  • هناك قاعدة معلنة قيد التشغيل ما لم تقول enabled: false.

بدون UI.simplify، يوفر الوضع full القواعد المضمنة التي تم إيقاف تشغيلها في Simplify Rail الوضع؛ الأوضاع الأخرى لا تعمل بأي شيء. UI.simplify.enabled: false يزيل الخاصية.

حكم الجارة ​

ts
{ kind: 'neighbours', minSize: 5, typeOf: (node) => node.getData().type }

يقوم بطي العقد من نوع واحد التي ترتبط بـ نفس العقد بالضبط، وبنفس الطريقة الدائرية: نفس العقد التي تشير إليها ونفس العقد التي تشير إليها. أوراق المحور هي أبسط حالة. من خلال مشاركة الحدثين A وB في ثلاث TTPs ولكل منهما اثنتين خاصتين به، ستحصل على ذلك ثلاث مجموعات: الثلاث المشتركة بين أ وب، واثنان في كل جانب.

  • النوع خاص بالقاعدة typeOf، وإلا UI.simplify.typeOf، آخر render.nodeTypeAccessor. العقد التي لا تحتوي على مجموعة نوع فيما بينها.
  • لا يتم تجميع العقدة المرتبطة بأي شيء أبدًا: تحتاج المجموعة إلى شيء ما لتعليقه.
  • العقدة التي تكتسب رابطًا تترك مجموعتها لتنتقل إلى العقدة التي تطابق جاراتها الجديدة. إذا الذي يترك أقل من minSize، تذوب المجموعة.
  • تحتفظ المجموعة بهويتها بينما تحتفظ بمعظم أعضائها، لذا فإن العقدة الجديدة تهبط مع ينضم نفس الجيران إلى المجموعة الحالية دون نقلها.

حكم السلسلة ​

ts
{ kind: 'chains', minSize: 5, typeOf: (node) => node.getData().type }

يطوي السلاسل التي تتدلى من عقدة واحدة. حدث يحتوي على ثلاثين ملفًا، لكل منها تجزئة خاصة به، عبارة عن ثلاثين سلسلة file > sha256: لا تتشارك الملفات مع أي جار، حيث أن كل منها يربط التجزئة الخاصة به، لذلك فإن حكم الجيران يتركهم وشأنهم. تطويها قاعدة السلسلة في مجموعة واحدة من الملفات ربطها بمجموعة واحدة من التجزئات، ورسم الروابط الثلاثين الموجودة بينها كسطر واحد.

  • العقدة tail هي العقدة التي يأتي رابطها الوحيد منها، ويتبعها المصب بينما كل منها روابط الخطوة فقط على طول السلسلة. عقدة مرتبطة بعقدتين أخريين، فرع أو دورة تنتهي سلسلة هناك.
  • العقد التي تؤدي إلى سلاسل من نفس الشكل تُطوى معًا، عندما تتشارك في نفس الشكل الآخر الروابط والنوع. خمسة أزواج معزولة domain → ip تعطي مجموعة واحدة من خمسة مجالات مرتبطة بمجال واحد مجموعة من خمسة عناوين IP.
  • كل مستوى من السلاسل يُطوى أيضًا: تحت مجموعة رؤوسهم، أو تحت رأس خاصة بهم عندما لا يكون هناك تطابق.
  • عدد الروابط downstream فقط: العقدة التي يشير رابطها الوحيد إلى أخرى ليست تلك العقدة الذيل.
  • يتم وضعها بعد قاعدة الجار، وهي تطوي ما تركته تلك القاعدة. مجموعة صنعتها قاعدة الجار يمكن أن يكون الذيل.
ts
{ kind: 'degree', minDegree: 2 }
{ kind: 'kcore', k: 2 }

تقوم هذه القواعد بإزالة العقد من اللوحة القماشية من خلال مدى ارتباطها بشكل جيد، وتطويها في العقد التي يتم تعليقها منها، لذلك يبقى العدد على اللوحة القماشية:

  • روابط قليلة (degree) تطوي العقد بعدد أقل من minDegree وصلات: عند 2 أوراق المحور تصبح مجموعة واحدة على المحور.
  • خارج النواة (kcore) يقشر العقد التي تحتوي على أقل من k روابط، ثم يفعل ذلك مرة أخرى مع ما تبقى، حتى يكون لكل عقدة قائمة k روابط بين العقد الأخرى. عند 2 يتم طيها أشجار كاملة تتدلى من الرسم البياني، وليس فقط أوراقها.

العقد المطوية التي تلامس نفس العقد المتبقية واقفة تشترك في مجموعة مهما كان نوعها و قد تحتوي المجموعة على عقدة واحدة: تقرأ "1 أخرى" على مرساتها. العقد المطوية مرتبطة ببعضها البعض انتقل إلى نفس المجموعة، بحيث يتم طي المسار المعلق على المحور بأوراق المحور. تشغيل العقد المطوية التي لا تلامس شيئًا بقي واقفًا هي مجموعة خاصة بها، وكل عقدة مرتبطة بها لا شيء يشارك مجموعة واحدة. ينتقل كلا الإعدادين من 1 إلى 10، ويتم احتساب الروابط في كلتا الحالتين.

بعد قاعدة الجوار، تكون المجموعة بمثابة عقدة واحدة لهذه القواعد: روابطها هي خطوطها. مجموعة معلقة وحدها من مرساتها تبقى كما هي.

المجتمعات ​

ts
{ kind: 'communities', level: 4 }

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

  • level ينتقل من 1، ناعم، العديد من المجتمعات الصغيرة، إلى 7، خشن، حفنة كبيرة تلك. في وضع التبسيط، يكون عبارة عن شريط تمرير، يتم تطبيقه عند تركه.
  • تم العثور على المجتمعات في العامل، خارج الصفحة، ومرة أخرى فقط عندما يكون الرسم البياني تغييرات الشكل. وفي الوقت نفسه تقرأ البطاقة التجميع… وتبقى المجموعات السابقة. حيث لا يمكن للعامل أن يبدأ، سياسة أمان المحتوى التي تحظر عمال النقطة الكبيرة على سبيل المثال، نفس الرمز يعمل على الصفحة؛ useWorker: false يطلب ذلك.
  • يبقى المجتمع المكون من عقدة واحدة بمثابة عقدة، وتظل العقد ذات التعليقات التوضيحية خارجًا، كما هو الحال مع كل قاعدة.
  • على عكس القواعد المضمنة الأخرى، تكون المجتمعات في وضع التبسيط فقط عند الإعلان عنها.

الهبوط المحوري ​

ts
{ kind: 'landings', minSize: 2 }

الانضمام إلى مجموعة، في محور تذييل جزء المراجعة، يؤدي إلى وصول الصفوف المحددة مطوية: مجموعة واحدة لكل نوع، معلقة فوق العقدة التي محورتها. يصل أربعون عنوان IP "40 × ip" بدلاً من أربعين نقطة.

  • مجموعة تحمل ما يستوعبه أضاف. تبقى العقدة التي كانت موجودة بالفعل على اللوحة القماشية حيث كان.
  • عضو يبقى كل ما يرتبط به لاحقًا، على عكس قاعدة الجار. أخرجه، احذفه أو التراجع عن تناوله لإخراجه. يؤدي التراجع إلى حل المجموعة وإعادة إعادتها.
  • النوع الذي يحتوي على عدد أقل من العقد minSize (2 افتراضيًا) يهبط كعقد عادية.
  • يتم تشغيل القاعدة أولاً، وبالتالي فإن القواعد التي تليها ترى كل هبوط كعقدة واحدة. لا تحتاج إلى ذلك أعلن ذلك: يضيفه الهبوط المجمع الأول في الجزء العلوي من وضع التبسيط، قيد التشغيل. أعلنها لوضعها في مكان آخر أو تغيير مجموعتها الأصغر.
  • عمليات الهبوط التي تم تجميعها تدوم للجلسة، مثل المجموعات المفتوحة.
  • أسماء مجموعة الهبوط landing من أين جاءت: { runId, pivotId, pivotLabel }، مع التسمية من تعريف المحور. شريحة يمكنها قراءة 12 × ip · Event elements دون تحليل معرف التشغيل.

للحصول على كل نتيجة محورية مجمعة، قم بتعيين pivotIngestGrouped. بنقرة واحدة يعمل و autoIngest المحاور التي لا تفتح أبدًا للمراجعة، ثم الأرض مجمعة أيضًا:

js
new Pivotick(el, data, { pivotIngestGrouped: true })

يتبع تذييل المراجعة الخيار:

pivotIngestGroupedإدراج المحدد و إدراج الكلالزر الثاني
إيقاف (افتراضي)أرض فضفاضةانضم إلى مجموعة
علىالأرض مجمعةتناول السائبة

مع إيقاف تشغيل UI.simplify، لا يفعل الخيار شيئًا ولا يوجد زر ثانٍ.

لاختيار استيعاب واحد من الكود، قم بتمرير group:

js
await graph.pivots.ingest('correlations', 'triage', { group: true })

القواعد المخصصة ​

القاعدة الخاصة بك هي partition(view) إرجاع مفتاح لكل عقدة:

ts
{
    kind: 'custom',
    id: 'bySensor',
    label: 'By sensor',                      // its name in the Simplify mode
    description: 'Sightings reported by the same sensor.',
    minSize: 2,                              // the default for a custom rule
    partition: (view) => new Map(view.nodes
        .filter((node) => view.typeOf(node) === 'sighting')
        .map((node) => [node.id, node.getData().sensor])),
}

view هو الرسم البياني كما تراه هذه القاعدة:

عضوما هو عليه
nodesالعقد التي قد تجمعها هذه القاعدة: ما يمرر عوامل التصفية، مع مجموعات القواعد السابقة بدلاً من أعضائها. يتم استبعاد العقد المشروحة والعقد المسحوبة والمجموعات الموسعة.
inNeighbours(node) / outNeighbours(node)العقد المرسومة بخط من أو إلى هذا العقد.
typeOf(node)اكتب مجموعات القواعد حسب: UI.simplify.typeOf، وإلا render.nodeTypeAccessor.
groupOf(node)المجموعة الموجودة خلف العقدة، عندما تكون إحدى القواعد التي تم وضعها مسبقًا.

تبقى العقدة المتروكة خارج الخريطة كما هي، ويتم تجاهل المعرفات غير الموجودة في view.nodes. أ يتم إيقاف تشغيل القاعدة التي يتم رميها، وبطاقتها في وضع التبسيط تشير إلى ذلك، والقواعد الأخرى لا يزال قيد التشغيل.

وضع التبسيط ​

يفتح الزر Simplify الموجود على السكة بطاقة واحدة لكل قاعدة، بترتيب التشغيل: مفتاح، الإعداد وما القاعدة مطوية. الإعداد هو - / + السائر لأصغر مجموعة، و أقل عدد من الروابط أو القوة الأساسية، وشريط تمرير لمستوى المجتمعات. القواعد المعلنة من قبل يحمل التطبيق علامة app. يقرأ الملخص الموجود في الأعلى عدد العقد الموجودة على اللوحة القماشية من عدد مرات اجتياز المرشحات، ويقوم زر السكة بحساب المجموعات أثناء طي أي قاعدة.

العمل مع مجموعة ​

يتم رسم المجموعة كعقدة، وتعمل لصالح أعضائها حيثما يكون ذلك لا لبس فيه.

  • افتح بالنقر المزدوج، أدخل، الشريط الجانبي أو قائمة السياق. يأتي أعضاؤها تعود كعقد عادية، داخل مغسلة بلون المجموعة، وسحب خفيف يحفظها معًا. اسحب الشريحة فوقهم لتحريكهم جميعًا؛ إنه × يطويها للخلف. تلميح الأدوات الخاص بها يسمي القاعدة التي جعلت المجموعة. يعود الأعضاء إلى حيث جلسوا. أولئك الذين ليس لديهم حرية ينتشر مكانهم الخاص حول المجموعة، وتحصل الفيزياء الحية على دفعة لطيفة، أما بالنسبة لـ الكتلة. simulation.fitViewOnExpandCollapse يناسب الإطلالة على الفتح والإغلاق. مجموعة مع أعضاء أكثر من UI.simplify.openConfirmAbove (100) يسأل أولاً.
  • اختر لرؤية أعضائها في الشريط الجانبي، في قائمة قابلة للفرز. انسحب يحتفظ ب عضو خارج المجموعة حتى يتم إعادته، من قائمة السياق الخاصة به: على اللوحة القماشية المجموعة مفتوحة، أو من صفها في قاعدة البيانات سواء كانت المجموعة مفتوحة أم لا. على مدى التحديد فإنه يسحب كل عضو محدد.
  • عرض في الجدول، في الشريط الجانبي أو قائمة السياق، يسرد الأعضاء في قاعدة البيانات، حيث تعمل مرشحات الأعمدة على تضييقها بشكل أكبر. تسرد الشريحة الموجودة فوق الطاولة كل عقدة مرة أخرى.
  • اختر الأعضاء و المحور و حذف يتصرفون على الأعضاء. المحور والحذف يمران الخطافات المعتادة، لذلك يرى onBeforeDelete العقد الحقيقية. إخفاء وحذف وتدوير على الاختيار الذي يجعل المجموعات تؤثر على أعضائها أيضًا.
  • تحديد مجموعة يضيء العقد التي ترتبط بها، حيث يؤدي تحديد عقدة إلى إضاءة الجيران. لا يتم توفير التحرير والاتصال في المجموعة: فهي لا تحتوي على بيانات خاصة بها.

المجموعات المفتوحة والعقد المسحوبة تدوم للجلسة ولا تمثل خطوات التراجع. لاستعادة لهم، اتصل على graph.simplify.open() و pullOut().

المجموعات المصنوعة يدويا ​

حدد عقدتين أو أكثر، ثم مجموعة في الشريط الكبير بالشريط الجانبي أو تجميع العقد المحددة في قائمة سياق العقدة المحددة. اكتب عنوانًا، أو احتفظ بالعنوان المعروض ("3 × ip، 2 × المجال")، ويتم طي التحديد في مجموعة واحدة تحت هذا العنوان.

  • المجموعة المصنوعة يدويًا تفوز. قاعدتها، باليد، تعمل قبل بعضها البعض، لذا فإن العقدة المختارة يترك أي مجموعة قواعد. تعطي المجموعة المحددة أعضائها، ويتم اختيار العقدة في الثانية المجموعة اليدوية تترك الأولى. تبقى العقد المشروحة والمجموعات المفتوحة خارجًا، و يقول موجه كم.
  • تحتفظ بأعضائها بكل ما يرتبطون به. الذي تم حذفه أو تصفيته ليس كذلك مرسومة؛ المجموعة التي تبقى مع عضو واحد لا يتم سحبها على الإطلاق، وتعود بأعضائها.
  • أعد تسمية وفك تجميعها من لوحة الشريط الجانبي أو قائمة السياق الخاصة بها. عنوان فارغ يسميها بأنواعها مرة أخرى. يزيل الشريط المجمع Ungroup كل مجموعة مصنوعة يدويًا الاختيار يحمل أو يجلس.
  • التجميع وإعادة التسمية وفك التجميع هي خطوات التراجع، على عكس الفتح أو السحب.
  • إنها حالة العرض: لم يتم تصديرها، واستمرت في إعادة التحميل. للحفاظ عليه احفظ getManualGroups() وأعدها إلى setManualGroups(). تم استعادة المجموعات أو فتحها أو سحبها من اليمين بعد ذلك new Graph() جزء من التخطيط الافتتاحي: يتم وضع مجموعة مغلقة كنقطة واحدة، مفتوحة يتم الاحتفاظ بأعضاء الفرد معًا.
js
const id = graph.simplify.groupNodes(['ip-1', 'ip-2', 'dom-7'], 'Suspicious infra')
graph.simplify.renameGroup(id, 'Cleared infra')
graph.simplify.ungroup(id)

البحث ​

يبحث البحث في كل عقدة، بما في ذلك العقد المطوية.

  • مباراة داخل مجموعة تقول ذلك في صف نتائجها: في 12 × ip.
  • يؤدي اختيارها إلى فتح المجموعة وتحديد العقدة، كما يفعل اختر الأعضاء. مجموعة مع يبقى عدد الأعضاء أكثر من openConfirmAbove مغلقًا ويتم تحديده بدلاً من ذلك.
  • إظهار الكل على اللوحة القماشية، الصف الأخير من النتائج أو Shift+Enter، لإغلاق البحث والأضواء في كل مباراة؛ كل شيء آخر يتلاشى. مجموعة المباريات مضاءة أيضًا، ويظهر قوس بلون السمة فوق حلقته حصتهم. يقوم تلميح الأدوات بإحصائها: 2 من 12 مباراة "198.51". Esc، نقرة على قماش فارغ أو ينتهي البحث التالي.

يؤدي تحريك إدخال وسيلة الإيضاح إلى تحديد المجموعات بنفس الطريقة: تضاء المجموعة التي تحتوي على عقد من هذا الإدخال، مع نصيبها على حلقتها، فلا يقرأ أنواع الاختلاط الجماعي على أنها جميعها واحدة.

يمكن للتطبيق الذي يحتوي على بحث خاص به وضع علامة على المطابقات بنفس الطريقة graph.simplify.setMatches(nodes, query)، وامسحهم بـ setMatches([]).

المظهر ​

المجموعة عبارة عن حلقة حول القرص بلون نوعه، مع العد الموجود على القرص بمجرد وجوده غرفة لذلك والتسمية أدناه. ينمو مع عددها، إلى الحد الأقصى. أنواع الخلط الجماعي يحصل على قرص محايد وحلقة مقسمة حسب النوع.

التسمية هي 12 × ip بشكل افتراضي. typeLabel يسمي أنواعك:

ts
UI: {
    simplify: {
        typeLabel: (type, count) => `${count} ${count === 1 ? type : `${type}s`}`,
    },
}

render.groupStyle(group) تُرجع طبقة NodeStyle فوق القيمة الافتراضية، لذا tiers، html، shape والشارات تعمل على المجموعة كما على العقدة. render.groupOutline(group) يحدد ما رقاقة فوق مجموعة مفتوحة يقول:

ts
render: {
    groupStyle: (group) => group.rule === 'bySensor' ? { color: '#6b7280' } : undefined,
    groupOutline: (group) => `${group.members.length} from ${group.rule}`,
}

groupStyle يتلقى أيضًا base، النمط الذي سترسمه المكتبة. ما ترجعه يستبدل مفاتيحه، لذا فإن المضيف الذي يضيف طبقة ينتشر base.tiers للحفاظ على العدد على القرص:

ts
render: {
    groupStyle: (group, base) => ({
        tiers: [...(base.tiers ?? []), { width: 140, height: 44, style: { html: () => chip(group) } }],
    }),
}

يتلقى كل منهم GroupInfo:

الميدانما هو عليه
idمستقرة بينما تحتفظ المجموعة بمعظم أعضائها.
rule'neighbours'، 'chains'، 'degree'، 'kcore'، 'communities'، 'landings'، 'manual'، أو القاعدة المخصصة id.
membersالعقد الحقيقية التي تمثلها.
typeCountsكم عدد الأعضاء من كل نوع؛ '' ليس من النوع.
anchorsالعقد المرسومة التي ترتبط بها، بما في ذلك المجموعات.
openما إذا كان أعضاؤها قد عادوا إلى اللوحة القماشية.
levelمستوى المجتمعات تم العثور عليه.
titleعنوان المجموعة المصنوعة يدويا.
landingتشغيل ومحور مجموعة الهبوط: { runId, pivotId, pivotLabel }.

يقوم تلميح الأداة الخاص بالمجموعة بتسمية القاعدة الخاصة بها، ويسرد ما ترتبط به، وبالنسبة للمجموعة المختلطة، فإنه يسرد القاعدة الخاصة بها الأعضاء حسب النوع. tooltip.renderGroupExtra(group, ctx) يضيف خطوطك الخاصة، مثل renderNodeExtra يفعل للعقدة. تتخطى المجموعة tooltip.render وrenderNodeExtra، والتي مكتوبة لبيانات العقدة.

أنواع وألوان من المضيف ​

تحسب المجموعات أجزائها بـ render.nodeTypeAccessor وتلونها حسب أجزاء كل عضو لون النمط. خياران UI.simplify يغيران ذلك لكل قاعدة ومجموعة، بدون أنماط اللمس أو الأسطورة أو المرشحات:

  • typeOf(node) هو النوع الذي تتجمع به كل قاعدة وتحسب كل مجموعة أجزائها بواسطة: ال التسمية، أسهم حلقة مختلطة، عنوان المجموعة المصنوعة يدويا. القاعدة typeOf لا تزال تفوز لتلك القاعدة.
  • colorOf(node) هو اللون الذي تمثله العقدة في مجموعة: القرص والخاتم، المفتوح غسل، ورقائق تلميح الأدوات. يعود undefined إلى لون نمط العقدة. أ المجموعة groupStyle الخاصة لا تزال لديها الكلمة الأخيرة في الرسم المغلق.

مضيف يقوم بالتصميم حسب العنصر، والمجموعات حسب النوع الفرعي، ورسم العقد الخاصة به بنفسه:

ts
const options = {
    render: {
        nodeTypeAccessor: (node) => node.getData().element,
        nodeStyleMap: { attribute: { shape: 'none', html: drawAttribute } },
    },
    UI: {
        simplify: {
            typeOf: (node) => `${node.getData().element}:${node.getData().subtype}`,
            colorOf: (node) => palette[node.getData().subtype],
        },
    },
}

في الجدول ​

يسرد رصيف البيانات العقد الحقيقية. تقرأ العقدة المطوية grouped في العمود الرؤية، ويقوم عمود Group بتسمية مجموعته في حالة وجود أي منها. الحافة التي يتم رسم خطها إلى أ تقرأ المجموعة grouped أيضًا.

في وقت التشغيل ​

graph.simplify يحمل القواعد والمجموعات:

الطريقةماذا يفعل
setRules(rules) / getRules()استبدال القواعد؛ اقرأ حال كل واحد وما طوى.
setRuleEnabled(id, on) / setRuleSetting(id, n)ما يفعله مفتاح وضع التبسيط والسائر. setRuleMinSize(id, n) يعين فقط مجموعة أصغر.
getGroups() / groupOf(node)كل مجموعة، والمجموعة الأولى تم طي العقدة فيها. يتم أيضًا إدراج المجموعة التي تم طي القاعدة اللاحقة مرة أخرى، بجانب المجموعة التي تحتوي عليها، وكلاهما يسرد أعضائها؛ summary().groups يقوم بإحصاء المجموعات المغلقة التي ترسمها اللوحة القماشية.
open(group) / close(group)ضع أعضاء المجموعة على اللوحة القماشية، أو قم بطيها مرة أخرى.
pullOut(node) / putBack(node) / isPulledOut(node)احتفظ بعقدة خارج أي مجموعة، أو اتركها مرة أخرى.
groupNodes(nodes, title?) / renameGroup(group, title) / ungroup(groups) / isManual(group)إنشاء أو إعادة تسمية أو إزالة مجموعات يدويًا؛ كل خطوة التراجع.
getManualGroups() / setManualGroups(list)حفظ المجموعات المصنوعة يدوياً، واستعادتها.
groupLanding(runId) / ungroupLanding(runId) / isLandingGrouped(runId)قم بطي ما يضيفه التشغيل المحوري إلى مجموعات الهبوط، أو اسحبه مرة أخرى.
summary()كم عدد العقد المرسومة وتمرير المرشحات والمطوية.
setMatches(nodes, query) / matchesIn(group)وضع علامة على تطابقات البحث على المجموعات التي تحتوي عليها؛ اقرأ عدد المجموعات التي تحملها.
onChange(listener)يتم استدعاؤه بعد تغييرات التجميع؛ يعود إلغاء الاشتراك.