KKP Konstruktion automatisch generieren

Nun geht es an die komplizierteste Variante. Das KKP kann mit Hilfe einer XML Datei gestartet werden. In dieser XML kann man unter anderem ein Python-Skript definieren, welches ausgeführt werden soll, wenn der 3D Bereich erstmals betreten wird. Auch in diesem Skript hat man Zugriff auf die gesamte KKP-API.

Zuerst brauchen wir eine XML Datei mit der wir dem KKP ganz allgemein sagen können, dass es über ein Fremdsystem gestartet wird.

<kkp>

<head version=“1″/>

<starter text=“KKP-App“>default</starter>

<new WorkDir=“c:\kkp-w\start_xml\mein projekt“ System=“1″ Systemprovider=“100″>

</new>

</kkp>

Als Arbeitsverzeichnis (WorkDir) müssen wir ein gültiges, existierendes Verzeichnis angeben.

Wenn man das Tag „new“ in „open“ umbenennt kann man ein bestehendes Projekt öffnen. Bei open auf einem leeren Verzeichnis wird ein Fehler ausgegeben. Bei new auf einem bestehenden Projektverzeichnis wird der Inhalt beim Laden ohne Nachfrage überschrieben.

Dann müssen wir uns eine Verknüpfung erstellen oder (was ich getan habe) eine Batchdatei erstellen mit der wir das KKP starten.

c:\kkp-w\prg32\kkp-w.exe „C:\KKP-W\start_xml\start.xml“

Wird das KKP so gestartet, geht es beim Start direkt in den „Fremdmodus“ über.

In der Start.xml kann ich dann ein Skript benennen welches ausgeführt werden soll, sobald das KKP das erste mal den 3D Bereich betritt.

<kkp>

<head version=“1″/>

<starter text=“KKP-App“>default</starter>

<new WorkDir=“c:\kkp-w\start_xml\mein projekt“ System=“1″ Systemprovider=“100″>

<script wnd_id=“3″ name=“kkp_start_from_app.py“/>

</new>

</kkp>

Das Skript kkp_start_from_app ist bereits recht umfangreich und kann sehr allgemeingültig auch sehr komplexe Konstruktionen laden. Leider ist das KKP-System, welches ich hier zur Demonstration verwende technisch nicht so hoch entwickelt, dass es dieses Skript verwenden könnte.

Nichts desto trotz, könnten wir auch im KKP-System jede Form von Konstruktion generieren, einzelne Punkte setzten, Linien und Flächen zeichnen, Kennziffern und Artikelnummern zuordnen. Prinzipiell ist alles, was der Anwender im 3D Raum machen kann, über die API möglich, je nach den Gegebenheiten jedoch mehr oder weniger aufwändig.

Wir erstellen und ein eigenes Skript zum Lernen.

Dazu erstelle im Systemgeberordner von KKP-System eine Datei kkp_start_extern.py

Die Start.xml passe ich entsprechend an.

<kkp>

<head version=“1″/>

<starter text=“KKP-App“>default</starter>

<new WorkDir=“c:\kkp-w\start_xml\mein projekt“ System=“1″ Systemprovider=“100″>

<script wnd_id=“3″ name=“kkp_start_extern.py“/>

</new>

</kkp>

Um zu testen, ob alles klappt, baue ich eine einfache Printausgabe in das Skript und starte das KKP mit der XML als Parameter.

# -*- coding: utf-8 -*-

import kkp

print(„Hallo“)

Laden wir doch einfach mal eine Vorlage.

# -*- coding: utf-8 -*-

import kkp

systemgeberDir = kkp.Get_Systemgeberdir()

vorlagenVerzeichnis = systemgeberDir + „\\vorlagen“

filenameTemplate = vorlagenVerzeichnis + „\\Vorlage.23d“

kkp.Load_3D_File(filenameTemplate)

Von hier aus können wir das Dach wieder konfigurieren, indem wir beispielsweise Profile und Parameter einstellen.

Was zum Beispiel geladen oder eingestellt werden soll und welche Werte eingetragen werden sollen könnte man ja auch aus einer Konfigurationsdatei einlesen, z.B. der start.xml

<kkp>

<head version=“1″/>

<starter text=“KKP-App“>default</starter>

<new WorkDir=“c:\kkp-w\start_xml\mein projekt“ System=“1″ Systemprovider=“100″>

<script wnd_id=“3″ name=“kkp_start_extern.py“/>

</new>

<config>

<profiles>

<profile tag=“900.001.010.100.030.0012″/>

<profile tag=“900.001.010.100.040.0012″/>

<profile tag=“900.001.010.100.050.0012″/>

</profiles>

<parameters>

<parameter tag=“998.200.0101″ value=“4500″/>

<parameter tag=“998.200.0111″ value=“3680″/>

</parameters>

</config>

</kkp>

Unser Skript könnte dann beispielsweise so angepasst werden:

# -*- coding: utf-8 -*-

import kkp

import xml.etree.ElementTree as ET
def loadTemplate():

systemgeberDir = kkp.Get_Systemgeberdir()

vorlagenVerzeichnis = systemgeberDir + „\\vorlagen“

filenameTemplate = vorlagenVerzeichnis + „\\Vorlage.23d“

kkp.Load_3D_File(filenameTemplate)

 

def readXml():

kkpDir = kkp.Get_Instdir()

filename = kkpDir + „\\start_xml\\start.xml“

xml = ET.parse(filename)

return xml

 

def configProfiles(xmlProfiles):

if xmlProfiles is None: return

for xmlProfil in xmlProfiles.findall(„profile“):

tag = xmlProfil.get(„tag“)

kkp.Profile_tauschen(tag)

def configParams(xmlParams):

if xmlParams is None: return

for xmlParam in xmlParams.findall(„parameter“):

tag = xmlParam.get(„tag“)

sValue = xmlParam.get(„value“)

fValue = float(sValue)

kkp.Set_Parameter(100 , tag , fValue)

 

def config(xml):

xmlConfig = xml.find(‚config‘)

if xmlConfig is None: return

xmlProfiles = xmlConfig.find(„profiles“)

xmlParams = xmlConfig.find(„parameters“)

configProfiles(xmlProfiles)

configParams(xmlParams)

 

def construct():

xml = readXml()

loadTemplate()

config(xml)

#Zeichnung neu berechnen, sonst muss man das händisch machen

kkp.CAD_Neu_Berechnen()

 

construct()

Die KKP API kann auch, wenn auch nur in begrenztem Maß, mit Excel Dateien umgehen. Exceldateien können gelesen, neu erstellt und gespeichert werden. Tabellenblätter können angelegt und ausgewählt werden und der Text in Zellen kann gelesen und bearbeitet werden. Die wichtigsten Grundfunktionen zum Verarbeiten von Exceldateien sind also vorhanden.

Ferner kann die KKP mit Access und Sqlite Datenbank umgehen.