【CAD开发】3dxml文件格式读取(Python、C++、C#)

本文介绍了3DXML文件格式,主要用于Dassault Systèmes的产品,如CATIA。文章提供了使用Python(Blender、FreeCAD、trimesh库)、C++(CAD Exchanger和个人实现)和C#(xsd文件验证和读取)读取3DXML文件的代码示例,旨在帮助开发者实现3D模型的数据交换。
摘要由CSDN通过智能技术生成

🍺相关文章汇总如下🍺:

1、简介

3D XML 格式用于所有 Dassault Systèmes 品牌 - CATIA、DELMIA、ENOVIA、
SIMULIA、3DVIA、SolidWorks 和 Virtools。 3D XML 格式规范是“3D For All”的一部分
将 3D 带给大众的倡议。 Dassault Systemes 目前提供免费的 3D XML 播放器
用于 3DXML 格式以及从其他来源 (3D PrintScreen) 捕获 3D 的工具。
该产品将继续增长。

在这里插入图片描述

3DXML格式是CATIA中基于可扩展标记语言XML的一种文件格式,是一种通用的、轻量的三维文件格式。 该格式可使用户轻松快捷地捕获并共享实时的、精确的 3D 数据。 3D XML 高度压缩复杂数据,提供快速的文件传输和缩短加载时间,同时保持交换文件的精确几何图形。与现有格式不同,3D XML 完全基于标准 XML。 因此,任何软件程序都将能够使用标准工具读取、写入和丰富 3D XML 内容。

2、文件格式

https://www.3ds.com/3ds-passport/downloads/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • Sample.3dxml:
<?xml version="1.0" encoding="utf-8" ?>
<Model_3dxml xmlns="http://www.3ds.com/xsd/3DXML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink">
	<Header>
		<SchemaVersion>4.0</SchemaVersion>
		<Title>Quad 3DXml File</Title>
		<Author>PVO</Author>
		<Generator>CATIA V5</Generator>
		<Created>2007-04-19</Created>
	</Header>
	<ProductStructure root="1">
		<Reference3D xsi:type="Reference3DType" id="1" name="Quad"/>
		<Instance3D xsi:type="Instance3DType" id="2" name="Chassis.1">
			<IsAggregatedBy>1</IsAggregatedBy>
			<IsInstanceOf>3</IsInstanceOf>
			<RelativeMatrix>1 -1.43656787854329e-016 0 1.43656787854329e-016 1 0 0 0 1 -35.3964099358518 202.211474837735 0</RelativeMatrix>
		</Instance3D>
		<Reference3D xsi:type="Reference3DType" id="3" name="Chassis"/>
		<ReferenceRep xsi:type="ReferenceRepType" id="4" name="Chassis_ReferenceRep" format="UVR" version="1.0" associatedFile="urn:3DXML:Chassis.3DRep">
			<PLM_ExternalID>Chassis_ReferenceRep_ReferenceRep</PLM_ExternalID>
			<V_discipline>Design</V_discipline>
			<V_usage>3DShape</V_usage>
			<V_nature>1</V_nature>
		</ReferenceRep>
		<InstanceRep xsi:type="InstanceRepType" id="5" name="Chassis_InstanceRep">
			<IsAggregatedBy>3</IsAggregatedBy>
			<IsInstanceOf>4</IsInstanceOf>
		</InstanceRep>
		<Instance3D xsi:type="Instance3DType" id="6" name="System Direction.1">
			<IsAggregatedBy>1</IsAggregatedBy>
			<IsInstanceOf>7</IsInstanceOf>
			<RelativeMatrix>0.999976282702582 -0.0068872356451857 4.18212442991818e-006 0.00688723564518346 0.999975545259153 -0.00121444177743552 4.18212454184191e-006 0.00121444177743528 0.999999262556567 -33.892135493604 202.211474837734 8.53090922113019</RelativeMatrix>
		</Instance3D>
		<Reference3D xsi:type="Reference3DType" id="7" name="System Direction"/>
		<ReferenceRep xsi:type="ReferenceRepType" id="8" name="System Direction_ReferenceRep" format="UVR" version="1.0" associatedFile="urn:3DXML:System_Direction.3DRep">
			<PLM_ExternalID>System Direction_ReferenceRep_ReferenceRep</PLM_ExternalID>
			<V_discipline>Design</V_discipline>
			<V_usage>3DShape</V_usage>
			<V_nature>1</V_nature>
		</ReferenceRep>
		<InstanceRep xsi:type="InstanceRepType" id="9" name="System Direction_InstanceRep">
			<IsAggregatedBy>7</IsAggregatedBy>
			<IsInstanceOf>8</IsInstanceOf>
		</InstanceRep>
		<Instance3D xsi:type="Instance3DType" id="10" name="Axle Assembly.1">
			<IsAggregatedBy>1</IsAggregatedBy>
			<IsInstanceOf>11</IsInstanceOf>
			<RelativeMatrix>0.595836252691761 -0.00312842317081944 0.803099852413572 0.00688723564512438 0.99997554525915 -0.00121444177735138 -0.803076413527011 0.00625474636786796 0.595843227858188 -41.6573762582876 10.0046989184395 -27.7670496220596</RelativeMatrix>
		</Instance3D>
		<Reference3D xsi:type="Reference3DType" id="11" name="Axle Assembly"/>
		<Instance3D xsi:type="Instance3DType" id="12" name="Wheel.1">
			<IsAggregatedBy>11</IsAggregatedBy>
			<IsInstanceOf>13</IsInstanceOf>
			<RelativeMatrix>1 0 0 0 1 0 0 0 1 -0.000299999999999301 -137.788525156015 0.00119999999999365</RelativeMatrix>
		</Instance3D>
		<Reference3D xsi:type="Reference3DType" id="13" name="Wheel"/>
		<ReferenceRep xsi:type="ReferenceRepType" id="14" name="Wheel_ReferenceRep" format="UVR" version="1.0" associatedFile="urn:3DXML:Wheel.3DRep">
			<PLM_ExternalID>Wheel_ReferenceRep_ReferenceRep</PLM_ExternalID>
			<V_discipline>Design</V_discipline>
			<V_usage>3DShape</V_usage>
			<V_nature>1</V_nature>
		</ReferenceRep>
		<InstanceRep xsi:type="InstanceRepType" id="15" name="Wheel_InstanceRep">
			<IsAggregatedBy>13</IsAggregatedBy>
			<IsInstanceOf>14</IsInstanceOf>
		</InstanceRep>
		<Instance3D xsi:type="Instance3DType" id="16" name="Wheel.2">
			<IsAggregatedBy>11</IsAggregatedBy>
			<IsInstanceOf>13</IsInstanceOf>
			<RelativeMatrix>1 0 0 0 1 0 0 0 1 -0.000299999999999301 182.211474831485 -0.00040000000000262</RelativeMatrix>
		</Instance3D>
		<Instance3D xsi:type="Instance3DType" id="17" name="Axle.1">
			<IsAggregatedBy>11</IsAggregatedBy>
			<IsInstanceOf>18</IsInstanceOf>
			<RelativeMatrix>1 0 0 0 1 0 0 0 1 0.000299999999999301 192.211474837735 0.000400000000002621</RelativeMatrix>
		</Instance3D>
		<Reference3D xsi:type="Reference3DType" id="18" name="Axle"/>
		<ReferenceRep xsi:type="ReferenceRepType" id="19" name="Axle_ReferenceRep" format="UVR" version="1.0" associatedFile="urn:3DXML:Axle.3DRep">
			<PLM_ExternalID>Axle_ReferenceRep_ReferenceRep</PLM_ExternalID>
			<V_discipline>Design</V_discipline>
			<V_usage>3DShape</V_usage>
			<V_nature>1</V_nature>
		</ReferenceRep>
		<InstanceRep xsi:type="InstanceRepType" id="20" name="Axle_InstanceRep">
			<IsAggregatedBy>18</IsAggregatedBy>
			<IsInstanceOf>19</IsInstanceOf>
		</InstanceRep>
		<Instance3D xsi:type="Instance3DType" id="21" name="Axle Assembly.2">
			<IsAggregatedBy>1</IsAggregatedBy>
			<IsInstanceOf>11</IsInstanceOf>
			<RelativeMatrix>0.999691727774109 -0.00691442879300021 -0.0238461756783509 0.00688742231737249 0.99997554393347 -0.00121447469382495 0.0238539898934834 0.00104986162245696 0.999714901837887 428.098150416237 10.8332393530064 -27.7669834952255</RelativeMatrix>
		</Instance3D>
	</ProductStructure>
	<DefaultView>
		<Viewpoint xsi:type="ParallelViewpointType" visualizedHeight="336.4707284" targetDistance="1401.501343" nearPlaneDistance="717.5784302" farPlaneDistance="2069.004395">
			<Position>-654.7354126 -704.961853 678.0846558</Position>
			<Sight>0.5839541554 0.6828992367 -0.4389148355</Sight>
			<Right>0.6628675461 -0.7132402062 -0.2278049141</Right>
			<Up>0.4686194956 0.1579147726 0.8691712618</Up>
		</Viewpoint>
		<DefaultViewProperty>
			<OccurenceId>
				<id>urn:3DXML:Sample.3dxml#6</id>
			</OccurenceId>
			<GraphicProperties xsi:type="GraphicPropertiesType">
				<SurfaceAttributes xsi:type="SurfaceAttributesType">
					<Color xsi:type="RGBAColorType" red="1" green="1" blue="1"/>
				</SurfaceAttributes>
			</GraphicProperties>
		</DefaultViewProperty>
	</DefaultView>
</Model_3dxml>

在这里插入图片描述

3、代码实现(Python)

3.1 blender(个人测试代码)

https://www.blender.org/download/
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • import_3dxml.py(版本4.3,个人实践的)
    这个脚本作者经过编写和测试,运行成功。
#***************************************************************
#   Purpose:   blender通过python实现3dxml((版本4.3))文件格式的导入
#   Author:    爱看书的小沐
#   Date:      2022-5-1
#   Languages: python
#   Platform:  blender-3.1.2, python3.10
#   OS:        Win10 win64
# **************************************************************
################################################################
# This addon enables blender to import 3D XML 4.3 documents.
# It partially implemented the 3D XML specification 4.3 from
# Dassault Syst¨¨mes. Testing was done with files exported
################################################################

import xml.etree.ElementTree as etree
import pathlib,zipfile,time,os,tempfile,math
import bpy,bmesh,bpy_extras,mathutils

bl_info={
   
	"name":"3D XML (4.3) import",
	"description":"Import 3D XML 4.3",
	"author":"Chris Xiong",
	"version":(0,1),
	"blender":(3,1,2),
	"category":"Import-Export",
	"support":"TESTING"
}

unitfactor=1
meshes = dict()
meshmat = dict()
NS="{http://www.3ds.com/xsd/3DXML}"
XSI="{http://www.w3.org/2001/XMLSchema-instance}"
texdir="/3dxml/Textures/"

def unflatten2Strips(seq):
    seq_j = []
    seq=seq
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值