Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to print a 3D pdf from ABAQUS/Viewer?

Tags:

pdf

3d

abaqus

I am looking for a way to print 3D pdf from the results ABAQUS/Viewer. This will make it easy to communicate the results with others who are interested in the results of simulation but do not have access to ABAQUS.

like image 303
amirKabir Avatar asked Mar 10 '23 07:03

amirKabir


2 Answers

The best way is to export a vrml file and convert it using Tetra4D or pdf3D and Adobe Acrobat professional. The 3D pdfs can look very good. However, the commercial software would cost over £800 per year. I did create a Python script to create a 3D pdf directly from Abaqus/CAE & Viewer which uses 2 open source tools: 1) Meshlab (http://www.meshlab.net/) to create a U3D file, 2) MiKTeX (https://miktex.org/) to convert the U3D file into a pdf. The output is not as polished as Tetra4D but it works. I have not tried this with the latest version of Meshlab. Just run this script from Abaqus/CAE or Abaqus/Viewer.

# 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
like image 148
DougR Avatar answered Mar 31 '23 12:03

DougR


The simplest way of printing the Abaqus *.odb results are using Tecplot 360 which is read the Abaqus *.odb files and you can get the *.tif and *.png results with any resolutions and you can also rotate the model in 3D and change the fonts and all the things you need.

like image 40
Samanradnia Avatar answered Mar 31 '23 11:03

Samanradnia