Ein verallgemeinertes Segmentkonzept bei CAD-Systemen

Manfred Rosendahl

Universität Koblenz

Rheinau 1

D56075 Koblenz

erschienen in: Dieter Roller(hrsg.) Produktmodellierung, Workshop Informatik 96, KlagenfurtEinführung

Sammlungen von Elementen genannt Segmente, Gruppen oder Blöcke, sind in normalerweise in CAD Systemen entweder programmiert oder lediglich eine Menge von Elemente bei denen bei einer Instanz nur wenige Parameter, wie Einsetzpunkt, Winkel oder Größe frei wählbar sind. Im RelCAD-System ist ein Segment eine Sammlung von Objekten, die nicht nur als Menge zusammengefaßt werden, sondern die zum einen geometrische und numerische Beziehungen untereinander haben und zum anderen Beziehungen zu beliebigen Elementen außerhalb des Segmentes haben. Die Segmente sind so vergleichbar mit Prozeduren in Programmiersprachen. Sie haben Bezüge nach außen über Parameter und über Zugriffe auf Elemente außerhalb des Segments, ähnlich wie beim Zugriff auf globale Variablen. Parameter können so nicht nur numerische Größen oder Konstruktionspunkte sein sondern alle Elemente eines RelCAD Modells. Selbst Segmente können wieder Parameter eines anderen Segmentes sein.

So können z.B. die Segmente Knoten und Kante definiert werden. Das Segment Knoten könnte als Parameter einen Punkt haben und das Segment Kante hätte als Parameter die beiden Instanzen von Knoten zwischen denen die Kante gezogen werden soll. Wenn eine Segmentinstanz erzeugt wird, werden den formalen Parametern des Segmentschema passende Elemente des Modells als aktuelle Parameter zugewiesen. Mit diesen Parametern wird dann das Modell der Segmentschema, d.h. die lokalen Elemente, berechnet. Das geometrische Ergebnis wird der Segmentinstanz zugeordnet. So muß das RelCAD Modell eines Segmentes nur einmal gehalten werden. Dies ist möglich, weil rekursive Segmente i.A. keinen Sinn machen und hier auch nicht erlaubt sind. Erlaubt ist hingegen, daß ein Segmentinstanz lokales Element eines anderen Segments ist. So sind geschachtelte Segmente möglich.

Im Gegensatz zu der Situation bei den Programmiersprachen macht es in einem CAD Modell durchaus Sinn von außen Bezüge auf lokale Elemente eines Segments zu haben. Um die zu realisieren obwohl das Segmentmodell nur einmal gehalten wird werden sogenannte Ersatzelemente eingeführt. Diese Elemente enthalten den Zugriffspfad auf das lokale Element einer Segmentinstanz.

Das geometrische Modelliersystem RelCAD

Das RelCAD System wurde entwickelt an der Universität Koblenz als eine Erweiterung des allgemeinen 2D CAD Systems VarioCAD, das ebenfalls dort entwickelt wurde.

Constraintbasierte Geometrische Modelle sind i.A. entweder algebraische, d.h. die Beziehungen zwischen den Elementen sind durch algebraische Gleichungen festgelegt [LiGo82,SeGo87], oder die geometrischen Beziehungen sind definiert als Fakten und Regeln [VSR92], eventuell auch durch Prolog Klauseln [ArWa91].

Im RelCAD System wird ein konstruktiver Ansatz benutzt. Dadurch kann die Anzahl der Gleichungen, die gemeinsam gelöst werden müssen minimiert werden. Jedes Element des Geometriemodells ist entweder absolut oder ist definiert durch seine Beziehungen zu anderen Elementen. Es existieren folgende absolute geometrische und nichtgeometrische Objektklassen:

Von diesen Klassen abgeleitet sind u.a. die folgenden Klassen, jeweils mit der absoluten Basisklasse:

  • Werte:
  • Koordinaten von Punkten, Distanzen, Winkel, Formeln
  • Punkte:
  • Schnittpunkte, Tangentialpunkte, Mittelpunkte, Endpunkte, Relativpunkte
  • Linien:
  • Tangentiallinien, Parallele, Lot, Achsenparallele Linien
  • Kreise:
  • Tangential zu 2 Linien oder Kreisen und Radius, Tangential zu 3 Elementen
  • Bogen:
  • wie bei Kreisen
  • Bei der Neuberechnung eines Modell erfolgt eine Berechnung der Elemente in der Reihenfolge der topologischen Sortierung entsprechend den Abhängigkeiten. Dies kann einfach durch eine rekursiven Aufruf einer Prozedur compute realisiert werden. Vor der Berechnung werden die Elemente von denen dieses Element abhängig ist, falls noch nicht geschehen zuerst berechnet. Dies wird bis zu einem absoluten Element fortgeführt. Abbildungen 2 und 3 zeigen 2 Beispiele von RelCAD Modellen und ihre Berechnung.

    Damit können jedoch nur Modelle erzeugt und berechnet werden, die keine Zyklen enthalten. Zyklen könne jedoch in einem geometrischen Modell inhärent sein oder sie entstehen, wenn in einem Modell für eine abhängige Größe ein Zielwert vorgegeben wird. Um dies zu realisieren wurden die late constraint eingeführt. Bei einem late-constraint wird ein abhängiges Objekt, d.h. ein Konten im Modellgraphen der kein Blatt ist, mit einem Blatt verbunden (Abb. 4). Mit der Einrichtung dieses late-constraint ist der Blattknoten, die Treibervariable, nicht mehr frei sondern an den late-constraint Knoten gebunden, der damit zu einer frei vorgebbaren Größe wird. Das Modell kann jedoch dann nicht mehr durch Vorwärtspropagieren berechnet werden, da nun eine zyklische Abhängigkeit besteht. Dieses late-constraint wird daher durch eine Iteration gelöst. Sind in einem Modell mehrere late-constraint vorhanden (z.B. Abb. 5) ermittelt das System, welche late-constraint gemeinsam gelöst werden müssen und löst ebenfalls durch Iteration das entsprechende Gleichungssystem.

    Parametrischer Entwurf mit Segmenten

    Für die Segmente existieren 2 Objektklassen: das Segmentschema und die Segmentinstanz. Ein Segmentschema enthält

  • Liste von formalen Parametern
  • Liste von Komponenten (lokalen Elementen)
  • Eine Segmentinstanz enthält

  • Liste der aktuellen Parameter
  • Zugehöriges Segmentschema
  • Segmentschema und Segmentinstanz entsprechen der Prozedurdeklaration und dem Prozeduraufruf. Wie eine Prozedur in einem Programm mehrfach aufgerufen werden kann, kann es von einem Segment mehrere Instanzen geben. Da die Parameter eines Segments abhängig sein können von beliebigen Objekten außerhalb des Segments, ist es so möglich eine Segmentinstanz in ein vorhandenes Modell einzupassen. Bei der Berechnung der Segmentinstanz werden die aktuellen Parameter der Instanz auf die formalen Parameter des Schema kopiert. Dann werden die Komponenten des Schema neu berechnet. Das Ergebnis wird der Instanz zugeordnet und kann z.B. gezeichnet werden.(Abb. 7). Bei der Berechnung kann auch auf Elemente außerhalb zugegriffen werden, so können Zugriffe auf externe Objekte realisiert werden (Abb. 8).

    Wenn bei einer Konstruktion auf ein lokales Element einer Segmentinstanz zugegriffen werden soll, muß ein Ersatzelement erzeugt werden, da das Modell des Segments nur einmal im Schema gehalten wird und die lokalen Elemente zweier Instanzen so nicht unterschieden werden können. Für jede der absoluten Basisklassen existiert daher eine substitute class. Jedes Element der substitute class enthält den Pfad zu dem lokalen Element in der Segmentinstanz. Dieser Pfad enthält zunächst einen Zeiger auf die Instanz und die Nummer des lokalen Elements. Wenn das Element ein lokales Element in einem geschachtelten Segment ist, enthält der Pfad der Reihe nach die Zeiger auf die Segmentinstanzen (Abb. 9).

    Die formalen Parameter eines Segmentschema sind entweder aus einer absoluten Klasse oder ein anderes Segmentschema. Die entsprechenden aktuellen Parameter in der Segmentinstanz müssen dann entweder aus einer davon abgeleiteten Klasse sein bzw. eine Instanz des entsprechenden Segments. Die Konsistenz der Parameter wird bei der Konstruktion einer Instanz geprüft.

    Bei der Definition eines Segmentes, d.h. bei der Erzeugung eines Schemas, pickt der Benutzer im vorhandenen Modell die Elemente, die das Segment bilden sollen. Aus diesen wählt er dann die aus, die Parameter sein sollen. Aus den Elementen, die keine Parameter sind wird dann eine Segmentinstanz mit den gewählten Parametern als aktuelle Parameter erzeugt. Als formale Parameter wird jeweils die entsprechende absolute Basisklasse eingesetzt. Bei der Erzeugung einer Instanz gibt der Benutzer entweder den Namen des Segments ein oder er pickt eine Instanz des Segments. In einem Fenster wird dem Benutzer das Segment gezeigt und die einzugebenden Parameter werden hervorgehoben. Zu dem jeweils hervorgehobenen Parameter pickt der Benutzer das Element im Modell, das den aktuellen Parameter der Instanz bilden soll. Der Benutzer muß also bei der Erzeugung von Schema und Instanz nicht auf den Modellgraphen zugreifen, sondern kann die Objekte in der Zeichnung mit dem Zeiger auswählen. Die Objekte, denen keine geometrische Elemente der Zeichnung zugeordnet sind, wie die Werte oder Punkte werden durch temporäre Hilfsdarstellungen sichtbar und auswählbar gemacht.

    Konstruktionen mit Alternativen

    Ein weiteres Konzept der Programmiersprachen sind die bedingten Anweisungen. Auch dieses Konzept kann sinnvoll auf CAD Modelle übertragen werden, indem in Abhängigkeit von bestimmten Werten unterschiedlichen Konstruktionen gewählt werden. Dazu wird folgende Klasse eingeführt:

  • type condelement=object(tany)
  • cond:valueptr;
  • truepart:anyptr;
  • falsepart:anyptr;
  • end;
  • In Abhängigkeit von cond wird das Element truepart^ oder das Element falsepart^ eingefügt. Wenn truepart und false part mehr als ein Element enthalten sollen müßte jeweils ein entsprechendes Segmentschema definiert werden. Um dies zu vereinfachen wird eine Klasse zur Gruppierung von Elementen eingeführt:

  • type elementlist=object(tany)
  • elements:reflistptr;
  • function numberofelements:integer;
  • function element(i:integer):anyptr;
  • end;
  • Wenn Zugriffe von außen auf ein bedingtes Element erfolgen sollen muß dafür gesorgt werden, daß jeweils im True- und im Falseteil auf passende Elemente zugegriffen werden kann. Der Zugriff kann ähnlich wie bei dem Zugriff auf die lokalen Elemente in einem Segment über Ersatzelemente mit dem entsprechendem Pfad erfolgen. Die beiden Elemente auf die zugegriffen wird müssen natürlich kompatibel sein.

    Konstruktionen mit Wiederholungen

    Ein weiteres Konzept der Programmiersprachen, das in dem RelCAD System realisiert wird ist die Wiederholung. Die Definition der Klasse lautet:

  • type loopelement=object(tany)
  • kind:tloopkind;
  • n:integer;
  • first,second:anyptr;
  • function element(i:integer):anyptr;
  • end;
  • Die Elemente der Schleife werden mit 0..n-1 numeriert. Es wird eine Differenz diff zwischen first und second berechnet. In Abhängigkeit des Wertes von kind wird das i. Element wie folgt berechnet:

  • kind           i. Element                        
    
    isforloop      first+i*diff                      
    
    isuntilloop    first+i/((n-1)*diff)              
    
    iswhileloop    first+i/(n*diff)                  
    
    
    


    Ein forloop beginnt mit dem first und second Element. Die Reihe wird dann mit der gleichen Differenz fortgesetzt. Beim untilloop ist second das letzte Element. Die Elemente dazwischen werden so bestimmt, daß die Differenz jeweils gleich ist. Beim whileloop wird ähnlich verfahren, nur ist second nicht das letzte Element sondern dasjenige, das das nächste in der Reihe wäre.

    Die Differenz zwischen zwei Elementen wird wie folgt definiert:


    Typ           Charakteristischer Wert                         
    
    Wert          Wert                                            
    
    Punkt         Px, Py                                          
    
    Linie         Länge, Winkel, P1x, P1y, P2x, P2y               
    
    Kreis         Radius, MittelPx, MittelPy                      
    
    Bogen         Radius, MittelPx, MittelPy, Startwin., Endwin.  
    
    
    


    Für die abgeleiteten Klassen müssen ebenso geeignete Differenzen definiert werden. Für Polarpunkte wird dies der Abstand und der Winkel sein. Ein N-Stern um den Punkt x,y mit dem Radius r kann dann wie folgt definiert werden:

    P1:=point(x,y);

  • P2:=polarpoint(P1,r,0);
  • P3:=polarpoint(P1,r,360);
  • first:=line(P1,P2);
  • second:=line(P1,P3);
  • n-star:loopelement(iswhileloop,n,first,second);
  • Referenzen:

  • [ArWa91] Arbab F and Wang B 'A Geometric Constraint Management System in OAR' in Hagen P.J.W.ten and Veerkamp P.J(Eds.) Intelligent CAD System III,Springer-Verlag,1991,pp 205-231.
  • [BuPe93] Buchanan A. and Pennington A. 'Constraint Definition System: a Computer Algebra Based Approach to Solving Geometric-constraint Problems', CAD vol 25 no 12,pp 741-750, 1993.
  • [ChSch90] Chung J and Schussel M, 'Technical evaluation of variational and parametric design. Proceedings of ASME Conference in Engineering Conference, Boston, MA, 1990,pp 289-298.
  • [DRB93] Du C, Rosendahl M and Berling R, 'Variation of Geometry and Parametric Design', Proc. 3rd. international conference on CAD and computer graphics, Beijing, Aug. 23-26, 1993, pp 400-405,international academic publishers, 1993
  • [LiGo82] Light R and Gossard D, 'Modification of geometric models through variational geometry', CAD vol 14, no 4, 1982, pp 209-214.
  • [RBD92] Rosendahl M, Berling R, and Du C, 'Objektorientierte Implementierung eines relationalen CAD-Systems', Research report 4/92, University of Koblenz-Landau, 1992.
  • [SeGo87] Serrano D and Gossard D, 'constraint Management in Conceptual Design' in Sriram D and Adey R A (Eds.) Knowledge Based Expert Systems in Engineering: Planning and Design. Computational Mechanics Publications, 1987.
  • [VSR92] Veroust,A Schonek,F, Roller,D, 'Rule oriented method for parametrized computer-aided designs, CAD, Vol.24, No.10, pp531-540.