2017-04-19 2 views
4

Ich bin auf der Suche nach einer Möglichkeit, 3D-PDF aus den Ergebnissen ABAQUS/Viewer zu drucken. Dies macht es einfacher, die Ergebnisse mit anderen zu kommunizieren, die an den Ergebnissen der Simulation interessiert sind, aber keinen Zugang zu ABAQUS haben.Wie drucke ich ein 3D-PDF von ABAQUS/Viewer?

Antwort

6

Am besten exportieren Sie eine VRML-Datei und konvertieren sie mit Tetra4D oder pdf3D und Adobe Acrobat Professional. Die 3D-PDFs können sehr gut aussehen. Die kommerzielle Software würde jedoch über £ 800 pro Jahr kosten. Ich habe ein Python-Skript erstellt, um ein 3D-PDF direkt aus Abaqus/CAE & Viewer zu erstellen, der 2 Open-Source-Tools verwendet: 1) Meshlab (http://www.meshlab.net/), um eine U3D-Datei zu erstellen, 2) MiKTeX (https://miktex.org/), um die U3D-Datei zu konvertieren pdf. Die Ausgabe ist nicht so poliert wie Tetra4D, aber es funktioniert. Ich habe das mit der neuesten Version von Meshlab nicht ausprobiert. Führen Sie dieses Skript einfach in Abaqus/CAE oder Abaqus/Viewer aus.

# Abaqus CAE/Viewer Python Script to create a 3D pdf directly from Abaqus/CAE or Abaqus/Viewer. 
# You must first install meshlab (meshlabserver.exe)and MiKTeX (pdflatex.exe) 
# Edit this script to reflect the installed locations of meshlabserver.exe and pdflatex.exe 
# It will export a stl or obj file the mesh of current viewport and convert into 3D pdf 
# Or run in Abaqus/viewer and it will create a VRML file and convert to 3D pdf. 
# If contours are displayed in Abaqus Viewer, then it will create a contour 3D pdf 

from abaqus import * 
from abaqusConstants import * 
from viewerModules import * 
import os 
import subprocess 
import sys 

# ----------------------------------------------------------------------------- 
pdfName='try' 
meshlab_path="C:/Program Files/VCG/MeshLab/meshlabserver.exe" 
pdfLatex_path="C:/Program Files (x86)/MiKTeX 2.9/miktex/bin/pdflatex.exe" 
# ----------------------------------------------------------------------------- 

currView=session.viewports[session.currentViewportName] 
try: # for Abaqus Viewer 
    cOdbD=currView.odbDisplay 
    odb = session.odbs[cOdbD.name]  
    name=odb.name.split(r'/')[-1].replace('.odb','') 
    module='Vis' 
except: # Abaqus CAE 
    #name=currView.displayedObject.modelName 
    import stlExport_kernel 
    name = repr(currView.displayedObject).split('[')[-1].split(']')[0][1:-1] # allows for either main or visulation modules 
    module='CAE' 

print module 

if module=='CAE': 
    #All instances must be meshed  
    cOdbD=None 
    try: 
     ext='.stl' 
     stlExport_kernel.STLExport(moduleName='Assembly', stlFileName=pdfName + ext, stlFileType='BINARY') 
    except: 
     try: 
      ext='.obj' 
      session.writeOBJFile(fileName=os.path.join(directory,pdfName + ext), canvasObjects= (currView,)) 
     except: 
      print 'Either your assembly is not fully meshed or something else'  
    directory=(os.getcwd()) 
else: # Abaqus/Viewer 
    if cOdbD.viewCut: 
     session.graphicsOptions.setValues(antiAlias=OFF) # Better with anti aliasing off 
    odb = session.odbs[cOdbD.name]  
    directory=odb.path.replace(odb.path.split('/')[-1],'').replace('/','\\')  
    # Turn off most of the stuff in the viewport 
    currView.viewportAnnotationOptions.setValues(triad=OFF, 
     legend=OFF, title=OFF, state=OFF, annotations=OFF, compass=OFF) 
    ext='.wrl' 
    session.writeVrmlFile(fileName=os.path.join(directory,pdfName + ext), 
     compression=0, canvasObjects= (currView,)) 

pdfFilePath=os.path.join(directory,pdfName+'-out.pdf') 
if os.path.isfile(pdfFilePath): 
    os.remove(pdfFilePath) 
    #Check file was deleted 
    if os.path.isfile(pdfFilePath):  
     print "Aborted because pdf file of same name cant be deleted. Please close programs which it might be open in" 
     1/0 #a dodgy way to exit program 

# Invoke meshlab to convert to a .u3d file   
if cOdbD: #If in Abaqus/viewer 
    if 'CONTOURS' in repr(cOdbD.display.plotState[0]): # If contours are displayed. Output contoured pdf 
     p=subprocess.Popen([meshlab_path,'-i',pdfName + ext, '-o',pdfName + '.u3d','-m','vc']) #'vn fn fc vt' 
    else: 
     p=subprocess.Popen([meshlab_path,'-i',pdfName + ext, '-o',pdfName + '.u3d']) 
else: 
    p=subprocess.Popen([meshlab_path,'-i',pdfName + ext, '-o',pdfName + '.u3d'])  

p.communicate() # Wait for meshlab to finish 

file_fullPathName=os.path.join(directory, pdfName + '.tex') 

#Read the .tex file which meshlab has just created 
with open(file_fullPathName, 'r') as texFile: 
    lines = texFile.read() 

#Edit the .tex file  
lines=lines.replace("\usepackage[3D]{movie15}","\\usepackage[3D]{movie15}\n\\usepackage[margin=-2.2in]{geometry}") 
if cOdbD: 
    if 'CONTOURS' in repr(cOdbD.display.plotState[0]): 
     lines=lines.replace("3Dlights=CAD,","3Dlights=CAD,\n\t3Drender=SolidWireframe,") 
lines=lines.replace("\n\end{document}","{---------------------------------------------------------------------------------Click above! MB1 - rotate, MB2 wheel or MB3 - zoom, Ctrl-MB1 - pan--------------}\n\\end{document}") 

file_fullPathName=os.path.join(directory, pdfName + '-out.tex') 
with open(file_fullPathName, "w") as outp: 
    outp.write(lines) 

p=subprocess.Popen([ 
    pdfLatex_path, 
    pdfName + '-out.tex', 
    ]) 

p.communicate() 
print 'Conversion to pdf complete' 
print file_fullPathName 
+0

Ich habe gerade Ihre Lösung versucht und bestätige, dass es funktioniert und ich bin sehr zufrieden mit den Ergebnissen. Danke !! – CodeCupboard

+1

@churchwalk Froh, dass Sie zufrieden sind. Ich war nicht in der Lage, einen Schattenwurf zu finden, um mit dem konturierten Export von AbaqusViewer zu arbeiten. Aber es sieht immer noch ziemlich gut aus. – DougR

+0

Interessanterweise könnte diese Methode verwendet werden, um ein 3D-Bild in einer PowerPoint-Präsentation zu erstellen? – CodeCupboard

1

Der einfachste Weg, die Abaqus * .odb Ergebnisse des Druckens 360 verwenden Tecplot, die die * Abaqus gelesen wird .odb Dateien und Sie können die * .tif erhalten und * .png Ergebnisse mit allen möglichen Auflösungen und Sie können Drehen Sie das Modell auch in 3D und ändern Sie die Schriftarten und alle Dinge, die Sie brauchen.