Connector (összekötő) alkalmazásának másik aspektusa – a titokzatos Mr. N visszatér

A connector objektum az egyik alapvető modellezési egység, fő funkciója, hogy anyagáramlási kapcsolatot teremtsen két objektum között, amellyel biztosítja a szimulációs modellben az Mu-k folyamatos áramlását. Azonban bizonyos problémák megoldását csak összetett módon lehet kezelni. A megoldandó feladat során igény merült fel egy olyan modell létrehozására, ahol a felhasználó a modell objektumok helyzetét tetszés szerint megváltoztathatja, ami hatással van az objektumokat összekötő útvonalak (Track objektumok) hossz-tulajdonságaira és esetleges vonalvezetésére is. Az objektumok mozgatásával a köztük lévő útvonalaknak is változtatni kellene a méretét. Az egyetlen olyan objektum, amely automatikusan változtatja a méretét két objektum mozgatása során az a két objektumot összekötő connector. A megoldandó feladat tehát: hogyan lehet connectorból utat készíteni? A connector egyik tulajdonsága, hogy a létrehozása során különböző köztespontok is megadhatók (hasonlóan a Tracknél már jól ismert segmens pontokhoz). A connektor pontjait viszont nem lehet közvetlenül elérni, így nem lehet törölni, újat beszúrni, módosítani csupán a Framen-helyzetüket megváltoztatni.

CornerPoints

A connector egyik tulajdonsága a Connector.CornerPoints táblázat, amely a köztespontok Frame-n belüli (X,Y) koordinátáit tartalmazza. Ezt a táblázatot nem lehet közvetelnül módosítani, sem sort törölni, sem beszúrni nem lehet, viszont az egyes cella értékei módosíthatók.

Jól bevált eljárás az ilyen belső táblázatok szerkesztésére, az hogy a belső táblázat értékeit egy új külső táblázatba kimásoljuk, majd azon módosításokat hajtunk végre és a módosított táblázattal felülírjuk a belső táblázatot:
A konnektor köztespontjainak koordinátáit másoljuk egy új TableFile (külső, módosítható) táblázatba: Connector.CornerPoints.copyRangeTo({1,1}..{*,*}, Tablefile,1,1);

n020

Módosítjuk a TableFile táblázatot úgy, hogy 2. és 3. sor közé beszúrunk egy új koordinátát.

n021

Ezt követően a connektor CornerPoints attribútuma legyen egyenlő a módosított táblázattal:

Connector.CornerPoints := Tablefile;

A sikeres értékadást követően a connectoron egy új köztespont jelenik meg. Ezzel a módszerrel módosíthatóvá válik egy előre definiált connector köztespontjainak száma, elhelyezkedése, közvetett módon elvégezhetővé válnak törlési és beszúrási műveletek is. Viszont egy-egy köztespontra direkt módon nem lehet hivatkozni. Ehhez más módszert alkalmazunk.

Hivatkozás Connector egyetlen köztespontjára

A connector-ra való kattintás esetén alkalmazzuk egy SelectContol metódust, amely a connector.CornerPoints listájában szereplő összes koordináta pontba automatikusan létrehoz egy új objektumot (pl.: egy sajátkészítésű Frame-et, egy AnchorPoint-ot). Az AnchorPoint hivatkozik a kijelölt connector objektumra is, ezért elérhetővé válnak az AnchorPoint-ból hívott metódusok számára a kijelelölt connector főbb tulajdonságai, így a CornerPoitns táblája is, melynek módosítására nyílik lehetőség (köztespontok beszúrása, törlése, illetve a AnchorPoint „Move in Frame” metódusának megírásával az AnchorPoint mozgatásával direkt módon változtathatóvá válik a connector aktuális köztespontjának koordinátája is).

n022

Mivel az AnchorPoint-okat Frame-ből származtatjuk, öröklik azon tulajdonságukat, miszerint helyi, PoPuP menük készíthetők. Az egyes menüelemekhez különböző tevékenységek rendelhetők a megfelelő metódus elkészítése alapján (pl.: adott AnchorPoint törlésével elérhető, hogy a connektor hivatkozott köztespontja is törlődjön).

Útvonal létrehozása connectorból

Az előbbekben ismertetett módszer alapján meghatározzuk a kiválasztott connector köztes pontjainak (X,Y) koordinátáit, amit egy TableFile tartalmaz. Csakhogy az útvonalnak a connector teljes hosszában kell létrejönnie. Ehhez ismerni kell a connectorhoz kapcsolódó két objektum koordniátáit is, amelyeket a connector .Pred és .Succ adattagjaiban hivatkozott objektumok révén érhetők el. Létrehozunk egy SegmentTable-t, amelynek első sora a connector .Pred objektumának koordinátáit (ami jelen esetben egy Line objektum) tartlamazza, majd ehhez hozzáfűzzük a connector köztesponjainak koordinátáit a TableFile-ból, és legvégül a konnektor .Succ objektumának (X,Y) koordinátáit is hozzáadjuk a SegmentTable végéhez:

n023

Eredményképpen létrejön egy olyan SegmentTable, amely egy Track objektum SegmentsTable-adatait tartalmazhatja.

n024

Ehhez hozzunk létre egy Track obejktumot a Frame-en, és állítsuk be Track.SegmentsTable tulajdonságát a létrehozott SegmentTable alapján:

Track1.SegmentsTable:=SegmentTable;

n025

A létrejött új út követi a korábbán definiált connector vonalát. Az új utat viszont connectorokkal kell összekapcsolni a Line és a SingleProc obejktumokkal. Ehhez használjuk egy connector osztály .connect metódusát a fenti formában. A korábban elkészített connektor törölhető a PathConnector.DeleteObject alkalmazásával.

Ez a leírás akkor lehet haszos, ha olyan modellek elkészítése szükséges, amelyekben a felhasználóknak minimális beavatkozási lehetősége kell legyen. A felhasználó a connectorok módosításával, felrajzolásával a teljes anyagáramlási folyamatot leképezheti anélkül, hogy gondoskodnia kellene minden egyes modell objektum közti kapcsolatról, hiszen az útvonalak és más modell objektumok közötti kapcsolat (connector) autoamtikusan létre jön.

Köszönjük a cikket a titokzatos Mr. N-nek! 🙂

Leave a Reply