Bagaimana memposisikan elemen dengan titik untuk diagram sistem kendali?

Saya ingin mengontrol posisi beberapa elemen dalam contoh berikut:

digraph {
        graph [splines=ortho];

        /* Node customization. */
        node [shape=box];
        join [shape=point];
        set [label="set\npoint"];

        /* Define node levels; driving elements on top, feed back below. */
        { rank = min; set; PID; P1; P2; join; OUT;}
        { rank = max; M1;}

        /* Edges */
        set -> PID -> P1 -> P2;
        P2-> join [arrowhead=none];
        join -> {OUT; M1};
        PID -> M1 [dir=back];
}

Diagram blok sistem kontrol

  1. Jika saya menambahkan lebih banyak elemen ke peringkat M1, ujung-ujungnya terhubung ke titik acak (sisi utara/atas). Saya ingin mereka tetap terhubung secara horizontal. Bisakah ini dilakukan?
  2. Bagaimana cara menambah jarak (panjang tepi) antara PID/P1/P2?
  3. Sebaiknya sejajarkan P1/M1 secara vertikal. Bisakah ini dilakukan?
  4. Diagram sistem kontrol tradisional tidak memiliki node gabung dan sebuah tepi muncul begitu saja dari tepi lainnya. Apakah ini mungkin? Saya menghilangkan kepala panah untuk ini.

Mungkin beberapa pertanyaan tidak relevan karena penempatan satu pertanyaan yang tepat akan membuat pertanyaan lainnya muncul secara alami.


person artless noise    schedule 17.11.2019    source sumber
comment
Diagram serupa... Saya rasa saya bisa menggunakan kepala panah yang berbeda (tidak ada) untuk 'P2' untuk bergabung dengan node.   -  person artless noise    schedule 17.11.2019


Jawaban (1)


  1. Umumnya Anda dapat mengontrol titik di mana panah memasuki simpul dengan headport atribut. Namun dengan ortho splines hal ini jarang berhasil. Spline orto menjalani kehidupannya sendiri dan dapat menyebabkan berbagai masalah berbeda, termasuk hilangnya label tepi. Jadi tidak ada jawaban pasti untuk pertanyaan pertama Anda, setiap situasi harus ditangani secara spesifik.

  2. Anda dapat meningkatkan jarak antara semua node dengan menyetel nodesep. Namun jika Anda hanya perlu menambah jarak antar node tertentu, Anda dapat menggunakan trik: Tambahkan label dengan banyak spasi untuk nilainya.

  3. Anda dapat mencapainya dengan tepian yang tidak terlihat.

Poin 2 dan 3 diilustrasikan dalam contoh yang telah diedit di bawah ini:

digraph {
        graph [splines=ortho];

        /* Node customization. */
        node [shape=box];
        join [shape=point];
        set [label="set\npoint"];

        /* Define node levels; driving elements on top, feed back below. */
        { rank = min; set; PID; P1; P2; join; OUT;}
        { rank = max; M1;}

        /* Edges */
        set -> PID;
        P2-> join [arrowhead=none];
        join -> {OUT; M1}
        PID -> M1 [dir=back];


        PID -> P1 -> P2 [label="               "] /* #2 increase space between specific nodes */
        P1 -> M1 [style=invis] /* #3 align P1 an M1 */
}

hasil:

contoh

person Dany    schedule 18.11.2019