Segmente auf Grundriss laden

In diesem Tutorial zeige ich dir, wie du die KKP API nutzen kannst, um einen Grundriss in eine leere Zeichnung einzusetzen. Dieser wird dann eingestellt und wir werden automatisch Segmente auf dem Grundriss platzieren. Wahrscheinlich werden diese Themen am ehesten verwendet, wenn man a) eine Konstruktion per API zusammenstellen möchte, deren Daten aus einem Fremdsystem übergebenen wurden, oder weil der Anwender sich die Konstruktion auf diese Weise per UI Maske zusammen stellen soll.
Die Grundfunktionen sind denkbar einfach und können daher ohne größeren Aufwand in Konstruktions- sowie UI- Skripte eingebaut werden.

Bauen wir uns also ein kleines Skript mit einer Funktion, die es uns erlaubt, einen Grundriss zu laden. Dazu müssen wir lediglich die Kennziffer des Grundrisses kennen.

# -*- coding: utf-8 -*-
import kkp
def ladeGrundriss(tag):
    kkp.Load_3D_File(tag)
if __name__ == ‚__main__‘:
    ladeGrundriss(„900.001.999.200.010“)

 

Als nächstes müssen wir Segmente auf die einzelnen Teilflächen des Grundrisses laden. Dazu müssen wir die Teilflächen aber erst einmal bestimmen.

Wenn wir den Grundriss einmal genauer betrachten (Gruppe öffnen), dann erkennen wir, das jede Teilfläche eine eigene Kennziffer besitzt.

Ferner müssen brauchen wir die Kennziffer für das Segment, welches wir einfügen wollen.

In der KKP API gibt es die Funktion Segment_auf_Grundriss_Einfuegen. Diese braucht die Kennziffer eines Segments, welches eingefügt werden soll, die Objektnummer der Teilfläche, auf die das Objekt eingefügt werden und eine Kalkulationshauptgruppe der das Segment in der Zeichnung zugeordnet werden soll. Falls du Kalkulationshauptgruppen (KHG) derweil nicht kennst, ist das für dieses Beispiel kein Problem. Bei KHGs geht darum zu bestimmen, ob das Segment Teil des Daches ist, oder zur Markise gehört oder ein separates Unterbauelement darstellt, etc… Dadurch können Gruppen / Positionen für die Kalkulation zusammengestellt werden.

# -*- coding: utf-8 -*-
import kkp
def ladeGrundriss(tag):
    kkp.Load_3D_File(tag)
    return 100
def insertSegment(kennzifferSegment , kennzifferGrundrissflaeche):
    objektnummerGrundrissflaeche = kkp.Objektliste2Erstellen(100 , kennzifferGrundrissflaeche)[0][0]
    iObjNrSegment = kkp.Segment_Auf_Grundriss_Einfuegen(kennzifferSegment , objektnummerGrundrissflaeche , kkp.eKT_Hauptgruppe)[0]
if __name__ == ‚__main__‘:
    ladeGrundriss(„900.001.999.200.010“)
    insertSegment(„900.001.010.520.101“ , „999.001.200.520“) #Pultdach Seitensparren #linke Teilfläche

Und das war es prinzipiell schon. Das können wir nun auch mit den anderen Teilflächen machen.

# -*- coding: utf-8 -*-
import kkp
def ladeGrundriss(tag):
    kkp.Load_3D_File(tag)
    return 100
def insertSegment(kennzifferSegment , kennzifferGrundrissflaeche):
    objektnummerGrundrissflaeche = kkp.Objektliste2Erstellen(100 , kennzifferGrundrissflaeche)[0][0]
    iObjNrSegment = kkp.Segment_Auf_Grundriss_Einfuegen(kennzifferSegment , objektnummerGrundrissflaeche , kkp.eKT_Hauptgruppe)[0]
if __name__ == ‚__main__‘:
    ladeGrundriss(„900.001.999.200.010“)
    insertSegment(„900.001.010.520.101“ , „999.001.200.520“) #Pultdach Seitensparren #linke Teilfläche
    insertSegment(„900.001.010.510.110“ , „999.001.200.510“) #Pultdach rechts verkürzt #mittlere Teilfläche
    insertSegment(„900.001.010.530.103“ , „999.001.200.530“) #Pultdach Rinne hochlaufend #rechts Teilfläche

Wenn wir das Skript ausführen, sieht unsere Konstruktion aber noch nicht gut aus.

Da müssen wir auf jeden Fall noch einiges machen. Zuerst einmal müssen wir dem rechten Seitensegment deutlich mehr Platz geben. 80mm sind zu wenig. Also müssen wir zunächst den Parameter einstellen.

# -*- coding: utf-8 -*-
import kkp
def ladeGrundriss(tag):
    kkp.Load_3D_File(tag)
    return 100
def insertSegment(kennzifferSegment , kennzifferGrundrissflaeche):
    objektnummerGrundrissflaeche = kkp.Objektliste2Erstellen(100 , kennzifferGrundrissflaeche)[0][0]
    iObjNrSegment = kkp.Segment_Auf_Grundriss_Einfuegen(kennzifferSegment , objektnummerGrundrissflaeche , kkp.eKT_Hauptgruppe)[0]
def parameterEinstellen(kennziffer , wert):
    kkp.Set_Parameter(100 , kennziffer , float(wert))
if __name__ == ‚__main__‘:
    ladeGrundriss(„900.001.999.200.010“)
    parameterEinstellen(„998.200.0122“ , 850)
    insertSegment(„900.001.010.520.101“ , „999.001.200.520“) #Pultdach Seitensparren #linke Teilfläche
    insertSegment(„900.001.010.510.110“ , „999.001.200.510“) #Pultdach rechts verkürzt #mittlere Teilfläche
    insertSegment(„900.001.010.530.103“ , „999.001.200.530“) #Pultdach Rinne hochlaufend #rechts Teilfläche

Schon besser. Nun haben nur noch das Problem, dass das rechte Seitensegment zu lang ist. Das Rinnenstück des rechten Seitensegments schließt nicht mit der Rinne des mittleren Segments ab. Doch auch das lässt sich lösen. Bei Segmenten, die einen solchen Versatz mitbringen wird eine extra Fläche in die Konstruktion eingezeichnet. Wenn wir das rechte Segment in dem Fall auf die andere Fläche setzen, ist alles in Ordnung.

Und so sieht dann das fertige Skript aus:

# -*- coding: utf-8 -*-
import kkp
def ladeGrundriss(tag):
    kkp.Load_3D_File(tag)
    return 100
def insertSegment(kennzifferSegment , kennzifferGrundrissflaeche):
    objektnummerGrundrissflaeche = kkp.Objektliste2Erstellen(100 , kennzifferGrundrissflaeche)[0][0]
    if kennzifferGrundrissflaeche == „999.001.200.530“: #rechts nach Fläche für Ausnehmung suchen
        l = kkp.Objektliste2Erstellen(100 , „997.001.013“)
        if len(l) > 0: objektnummerGrundrissflaeche = l[0][0]
        else:
            l = kkp.Objektliste2Erstellen(100 , „997.001.011“)
            if len(l) > 0: objektnummerGrundrissflaeche = l[0][0]
    if kennzifferGrundrissflaeche == „999.001.200.520“: #links nach Fläche für Ausnehmung suchen
        l = kkp.Objektliste2Erstellen(100 , „997.001.012“)
        if len(l) > 0: objektnummerGrundrissflaeche = l[0][0]
        else:
            l = kkp.Objektliste2Erstellen(100 , „997.001.010“)
            if len(l) > 0: objektnummerGrundrissflaeche = l[0][0]
    iObjNrSegment = kkp.Segment_Auf_Grundriss_Einfuegen(kennzifferSegment , objektnummerGrundrissflaeche , kkp.eKT_Hauptgruppe)[0]
def parameterEinstellen(kennziffer , wert):
    kkp.Set_Parameter(100 , kennziffer , float(wert))
if __name__ == ‚__main__‘:
    ladeGrundriss(„900.001.999.200.010“)
    parameterEinstellen(„998.200.0122“ , 850)
    insertSegment(„900.001.010.520.101“ , „999.001.200.520“) #Pultdach Seitensparren #linke Teilfläche
    insertSegment(„900.001.010.510.110“ , „999.001.200.510“) #Pultdach rechts verkürzt #mittlere Teilfläche
    insertSegment(„900.001.010.530.103“ , „999.001.200.530“) #Pultdach Rinne hochlaufend #rechts Teilfläche