importieren von parts

In diesem Forum Fragen und Diskussionen in Deutsch
Forum rules
Foren-Regeln und hilfreiche Informationen

WICHTIG: Bitte zuerst lesen, bevor Sie posten
Post Reply
wafi
Posts: 82
Joined: Sat Oct 15, 2016 8:45 am

importieren von parts

Post by wafi »

ich stehe irgendwie auf dem Schlauch.
Idee ist, aus einem Excel Sheet (Packliste) die zu verstauenden Stücke zu extrahieren, in diesem Fall dann einen Container oder LKW zu nehmen, die Packstücke, deren Zeichnungen als 3D Freecad Zeichnung vorliegen, dann in den Container/LKW zu stauen.
Soweit so schick. Die Excel sheet abfrage funktioniert, die Anbindung an eine Datenbank um die Abmessungen der Einzelstücke zu bekommen, funktioniert, natürlich beides mit python, nur verzweifele ich in die A2plus WB die einzelnen Packstücke per script zu importieren. Weder Erstellung eines Makros noch die Beobachtung der Python Konsole haben mich auch nur irgendwie in Richtung Problemlösung gebracht. Mag durchaus sein, dass ich den Wald vor lauter Bäumen nicht sehe, vielleicht hat jemand eine Idee.

Gruß
Peter
wafi
Posts: 82
Joined: Sat Oct 15, 2016 8:45 am

Re: importieren von parts

Post by wafi »

Moin

irgendwie verzweifele ich so langsam. Mein code um eine Datei zu importieren sieht so aus:

Code: Select all

import FreeCAD
import a2p_importpart

App.ActiveDocument=None
Gui.ActiveDocument=None
App.setActiveDocument("test")
App.ActiveDocument=App.getDocument("test")
Gui.ActiveDocument=Gui.getDocument("test")
App.setActiveDocument("C:/DSV/items/10101162.FCStd")
App.ActiveDocument=App.getDocument("C:/DSV/items/10101162.FCStd")
Gui.ActiveDocument=Gui.getDocument("C:/DSV/items/10101162.FCStd")
App.setActiveDocument("")
App.ActiveDocument=None
Gui.ActiveDocument=None
Die Fehlermeldung sieht so aus:

Code: Select all

  File "C:/Users/wafi/AppData/Roaming/FreeCAD/Macro/test10.FCMacro", line 12, in <module>
    App.setActiveDocument("C:/DSV/items/10101162.FCStd")
<class 'Base.FreeCADError'>: Try to activate unknown document 'C:/DSV/items/10101162.FCStd'
Das setzen von / oder // oder \ oder \\ ... hab ich alles durch, daran liegt es nicht. die test.FCStd liegt im gleichen Verzeichnis wie die Datei 10101162.FCStd
User avatar
Gift
Posts: 769
Joined: Tue Aug 18, 2015 10:08 am
Location: Germany, Sauerland

Re: importieren von parts

Post by Gift »

Der Dokumentenname enthält nicht den Pfad sowie die Dateierweiterung.

Code: Select all

import FreeCAD
import a2p_importpart
import os

# ...
prtPathFileName = os.path.basename(u"C:/DSV/items/10101162.FCStd")
prtFileName = os.path.splitext(prtPathFileName)[0]
FreeCAD.open(prtPathFileName)
App.setActiveDocument(prtFileName)
App.ActiveDocument=App.getDocument(prtFileName)
Gui.ActiveDocument=Gui.getDocument(prtFileName)
# ...
wafi
Posts: 82
Joined: Sat Oct 15, 2016 8:45 am

Re: importieren von parts

Post by wafi »

hm Gift

irgendwie klappt das leider auch nicht
Fehlermeldung
FreeCAD.open(prtPathFileName)
<type 'exceptions.IOError'>: File '10101162.FCStd' does not exist!
User avatar
Gift
Posts: 769
Joined: Tue Aug 18, 2015 10:08 am
Location: Germany, Sauerland

Re: importieren von parts

Post by Gift »

Oops, der Anfang sollte so aussehen:

Code: Select all

i
import FreeCAD
import a2p_importpart
import os

# ...
prtPathFileName =  u"C:/DSV/items/10101162.FCStd"
Wobei ich gerade sehe, dass "open" die ganze Arbeit macht. D.h. das aktive Dokument setzen. Also reicht einfach:

Code: Select all

FreeCAD.open(u"C:/DSV/items/10101162.FCStd")
wafi
Posts: 82
Joined: Sat Oct 15, 2016 8:45 am

Re: importieren von parts

Post by wafi »

Hi Gift
yes and no ... Ja, klappt, aber nur das laden einer Datei in ein neues Dokument. Ziel ist es, eine Zeichnung zu einem Dokument hinzuzufügen. Laut command reference soll dies möglich seim mit einem Kommando StdImport, was irgendwie erweitert ist auf StdCmdImport statt open. Soweit so schick, nur leider finde ich kein Beispiel wo erklärt ist, wie denn dieses Kommando innerhalb eines Scriptes genutzt werden kann. Was ich lese scheint Englisch zu sein, inhaltlich aber eher Chinesisch und überfordert mich schlicht.

Gruß
Peter
User avatar
Gift
Posts: 769
Joined: Tue Aug 18, 2015 10:08 am
Location: Germany, Sauerland

Re: importieren von parts

Post by Gift »

Ich finde nur Part.insert. Das unterstützt leider keine FCStd-Dateien (RuntimeError: FreeCAD exception thrown ()). Folglich muss du die Datei öffnen und die Daten kopieren kopieren.
wafi
Posts: 82
Joined: Sat Oct 15, 2016 8:45 am

Re: importieren von parts

Post by wafi »

hm Gift

ich befürchte du hast recht. Ich muß mir mal die dateien der a2p workbensch genauer anschauen, da scheint es auch zunächst eine eigene Datei geöffnet zu werden, dann kopieren in die gewünschte Datei, dann die zuvor geöffnete wieder geschlossen. Kann man sicherlich machen, kommt mir nur irgendwie ein wenig von hinten durch die Brust vor.

Schaun wer mal, werde ansonsten deinen vorgeschlagenen Weg gehen.

Gruß aus dem Norden in meine alte Heimat :mrgreen:
wafi
Posts: 82
Joined: Sat Oct 15, 2016 8:45 am

Re: importieren von parts

Post by wafi »

tja ... hab was gefunden was klappt:
Gui.ActiveDocument.mergeProject("C:/DSV/items/"+item_data+".FCStd")


So liest der mir die Bauteile aus der Bibilothek via script in eine neue Zeichnung ein und zwar ohne Umweg.

Also hier mal der code so wie er bisher aussieht, lesen einer Excel Datei, daraus zusammenstellen einer Zeichnung aus diversen Elementen, falls den schnipsel jemand gebrauchen kann.

Code: Select all

import numpy as np
import xlrd
import FreeCAD

DATA_FILE = "C:\\DSV\\vestas retour\\items\\test.xls"

# Read Excel data
def read_excel_file(filename):
    book = xlrd.open_workbook(filename, encoding_override = "utf-8")
    sheet = book.sheet_by_index(0)
    numbers = np.asarray(sheet.nrows)
    No_data = np.asarray([sheet.cell(i, 2).value for i in range(1, sheet.nrows)])
    POL_data = np.asarray([sheet.cell(i, 3).value for i in range(1, sheet.nrows)])
    item_data = np.asarray([sheet.cell(i, 4).value for i in range(1, sheet.nrows)])
    destination_data = np.asarray([sheet.cell(i, 7).value for i in range(1, sheet.nrows)])
    Qyt1_data = np.asarray([sheet.cell(i, 8).value for i in range(1, sheet.nrows)])
    Qyt2_data = np.asarray([sheet.cell(i, 9).value for i in range(1, sheet.nrows)])
    Qyt3_data = np.asarray([sheet.cell(i, 10).value for i in range(1, sheet.nrows)])
    return No_data, POL_data, item_data, destination_data, Qyt1_data, Qyt2_data, Qyt3_data, numbers

No_data, POL_data, item_data, destination_data, Qyt1_data, Qyt2_data, Qyt3_data, numbers = read_excel_file(DATA_FILE)

# only for control
print No_data
print POL_data
print item_data
print destination_data
print Qyt1_data
print Qyt2_data
print Qyt3_data
print numbers 
print "creating drawings"

# create drw
karl = "C:/DSV/items/"+No_data[0]+POL_data[0]+".FCStd"
FreeCAD.newDocument(karl)
for i in range(0, numbers):
	Gui.ActiveDocument.mergeProject("C:/DSV/items/"+item_data[i]+".FCStd")
wafi
Posts: 82
Joined: Sat Oct 15, 2016 8:45 am

Re: importieren von parts ... A2plus

Post by wafi »

So, nachdem ich nun Bauteile importieren kann, eine Stückliste daraus erstellen kann etc ... bin ich fast happy, es fehlt allerdings noch die Zeichnungsableitung. Hier komm ich nicht weiter, denn ich habe verschiedene Bauteile und kann nun zwar für jedes eine Zeichnungsableitung erstellen, aber Ziel ist es ja die GEsamtheit darzustellen ...
Soweit ich das sehe funktioniert das nur mit A2plus, soweit so schick, ABER da funktioniert mein script zum importieren von Bauteilen nicht, auch komm ich nicht dahinter, wie ich das in einem script lösen kann. Hat jemand ne Idee?

Gruß
Peter
Post Reply