如何从ABAQUS/Viewer打印3D pdf?

如何从ABAQUS/Viewer打印3D pdf?,pdf,3d,abaqus,Pdf,3d,Abaqus,我正在寻找一种从结果ABAQUS/Viewer打印3D pdf的方法。这将便于与对模拟结果感兴趣但无法访问ABAQUS的其他人交流结果 最好的方法是导出vrml文件,并使用Tetra4D或pdf3D和Adobe Acrobat professional进行转换。3D PDF看起来很不错。然而,商业软件每年的成本将超过800英镑。我确实创建了一个Python脚本,直接从Abaqus/CAE&Viewer创建了一个3D pdf,它使用了两个开源工具:1)Meshlab()创建U3D文件,2)MiKT

我正在寻找一种从结果ABAQUS/Viewer打印3D pdf的方法。这将便于与对模拟结果感兴趣但无法访问ABAQUS的其他人交流结果

最好的方法是导出vrml文件,并使用Tetra4D或pdf3D和Adobe Acrobat professional进行转换。3D PDF看起来很不错。然而,商业软件每年的成本将超过800英镑。我确实创建了一个Python脚本,直接从Abaqus/CAE&Viewer创建了一个3D pdf,它使用了两个开源工具:1)Meshlab()创建U3D文件,2)MiKTeX()将U3D文件转换为pdf文件。输出不像Tetra4D那样抛光,但它可以工作。我还没有用最新版本的Meshlab尝试过这一点。只需从Abaqus/CAE或Abaqus/Viewer运行此脚本

#Abaqus CAE/Viewer Python脚本,用于直接从Abaqus/CAE或Abaqus/Viewer创建3D pdf。
#必须首先安装meshlab(meshlabserver.exe)和MiKTeX(pdflatex.exe)
#编辑此脚本以反映meshlabserver.exe和pdflatex.exe的安装位置
#它将从当前视口的网格中导出stl或obj文件,并转换为3D pdf
#或者在Abaqus/viewer中运行,它将创建一个VRML文件并转换为3D pdf。
#如果等高线显示在Abaqus查看器中,则它将创建等高线3D pdf
从abaqus导入*
从ABAQUSCONTANTS导入*
从viewerModules导入*
导入操作系统
导入子流程
导入系统
# -----------------------------------------------------------------------------
pdfName='try'
meshlab_path=“C:/Program Files/VCG/meshlab/meshlab服务器.exe”
pdfLatex_path=“C:/Program Files(x86)/MiKTeX 2.9/MiKTeX/bin/pdfLatex.exe”
# -----------------------------------------------------------------------------
currView=session.viewports[session.currentViewportName]
try:#用于Abaqus查看器
cOdbD=currView.odbDisplay
odb=session.odbs[cOdbD.name]
name=odb.name.split(r'/')[-1]。替换('.odb','')
模块class='Vis'
除外:#Abaqus CAE
#name=currView.displayedObject.modelName
导入stlu内核
name=repr(currView.displayedObject).split('[')[-1].split(']')[0][1:-1]#允许主模块或可视化模块
模块class='CAE'
打印模块
如果模块=='CAE':
#所有实例都必须网格化
cOdbD=无
尝试:
ext='.stl'
stlExport\u kernel.stlExport(moduleName='Assembly',stlFileName=pdfName+ext,stlFileType='BINARY')
除:
尝试:
ext='.obj'
session.writeOBJFile(fileName=os.path.join(目录,pdfName+ext),canvasObjects=(currView,)
除:
打印“部件未完全啮合或其他内容”
目录=(os.getcwd())
其他:#Abaqus/Viewer
如果cOdbD.viewCut:
session.graphicsOptions.setValues(抗锯齿=关闭)#禁用抗锯齿效果更好
odb=session.odbs[cOdbD.name]
directory=odb.path.replace(odb.path.split(“/”)[-1],“”).replace(“/”,“\\”)
#关闭视口中的大部分内容
currView.viewportAnnotationOptions.setValues(空间坐标轴=关闭,
图例=关闭,标题=关闭,状态=关闭,注释=关闭,指南针=关闭)
ext='.wrl'
session.writeVrmlFile(文件名=os.path.join(目录,pdfName+ext),
压缩=0,CanvasObject=(currView,)
pdfFilePath=os.path.join(目录,pdfName+'-out.pdf')
如果os.path.isfile(pdfFilePath):
删除操作系统(pdfFilePath)
#检查文件是否已删除
如果os.path.isfile(pdfFilePath):
print“由于无法删除同名pdf文件而中止。请关闭可能在中打开该文件的程序”
1/0#退出计划的狡猾方式
#调用meshlab以转换为.u3d文件
if cOdbD:#如果在Abaqus/viewer中
如果报告中的“等高线”(cOdbD.display.plotState[0]):#如果显示等高线。输出轮廓pdf
p=子进程.Popen([meshlab_路径,'-i',pdfName+ext,'-o',pdfName+'.u3d','-m','vc'])#'vn fn fc vt'
其他:
p=subprocess.Popen([meshlab_path'-i',pdfName+ext'-o',pdfName+'.u3d']))
其他:
p=subprocess.Popen([meshlab_path'-i',pdfName+ext'-o',pdfName+'.u3d']))
p、 通信()#等待meshlab完成
文件_fullPathName=os.path.join(目录,pdfName+'.tex')
#读取meshlab刚刚创建的.tex文件
打开(文件\u完整路径名,'r')作为文件:
lines=texFile.read()
#编辑.tex文件
行=行。替换(“\usepackage[3D]{movie15},”\\usepackage[3D]{movie15}\n\\usepackage[margin=-2.2in]{geometry}”)
如果cOdbD:
如果报告中的“等高线”(cOdbD.display.plotState[0]):
线条=线条。替换(“3Dlights=CAD,”,“3Dlights=CAD,\n\t3Drender=SolidWireframe,”)
lines=lines。替换(“\n\end{document}”,“{-----------------------------------------------------------------------------------------单击上方!MB1-旋转,MB2滚轮或MB3-缩放,Ctrl-MB1-平移-----------------}\n\\end{document}”)
file_fullPathName=os.path.join(目录,pdfName+'-out.tex')
以open(文件\完整路径名,“w”)作为输出:
输出写入(行)
p=子流程.Popen([
pdfLatex_路,
pdfName+'-out.tex',
])
p、 沟通
打印“转换为pdf完成”
打印文件\u完整路径名

打印Abaqus*.odb结果的最简单方法是使用Teclot 360,它可以读取Abaqus*.odb文件,您可以以任何分辨率获得*.tif和*.png结果,您还可以在3D中旋转模型,更改字体和所有需要的内容。

我刚刚尝试了您的解决方案,并确认它可以正常工作,我非常高兴对结果感到满意。谢谢@很高兴你高兴。我找不到一种方法使阴影与AbaqusViewer轮廓导出一起工作。但是它看起来仍然很好。出于兴趣,这种方法可以用于在powerpoint演示文稿中创建3d图像吗?不可以。但是,您可以将pdf作为对象嵌入到动力传动系统中。@DougR当我从Abaqus 6.13运行此脚本时,我得到一个错误,
stlExport_内核