Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
B
blender-addons
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
blender
blender-addons
Commits
1614612f
Commit
1614612f
authored
5 years ago
by
meta-androcto
Browse files
Options
Downloads
Patches
Plain Diff
io_scene_vrml2: move to contrib: T63750
parent
fc73dfda
No related branches found
Tags
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
io_scene_vrml2/__init__.py
+0
-161
0 additions, 161 deletions
io_scene_vrml2/__init__.py
io_scene_vrml2/export_vrml2.py
+0
-262
0 additions, 262 deletions
io_scene_vrml2/export_vrml2.py
with
0 additions
and
423 deletions
io_scene_vrml2/__init__.py
deleted
100644 → 0
+
0
−
161
View file @
fc73dfda
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
# <pep8-80 compliant>
bl_info
=
{
"
name
"
:
"
VRML2 (Virtual Reality Modeling Language)
"
,
"
author
"
:
"
Campbell Barton
"
,
"
blender
"
:
(
2
,
74
,
0
),
"
location
"
:
"
File > Export
"
,
"
description
"
:
"
Exports mesh objects to VRML2, supporting vertex and material colors
"
,
"
warning
"
:
""
,
"
wiki_url
"
:
"
http://wiki.blender.org/index.php/Extensions:2.6/Py/
"
"
Scripts/Import-Export/VRML2
"
,
"
support
"
:
'
OFFICIAL
'
,
"
category
"
:
"
Import-Export
"
}
if
"
bpy
"
in
locals
():
import
importlib
if
"
export_vrml2
"
in
locals
():
importlib
.
reload
(
export_vrml2
)
import
os
import
bpy
from
bpy.props
import
(
CollectionProperty
,
StringProperty
,
BoolProperty
,
EnumProperty
,
FloatProperty
,
)
from
bpy_extras.io_utils
import
(
ExportHelper
,
orientation_helper
,
path_reference_mode
,
axis_conversion
,
)
@orientation_helper
(
axis_forward
=
'
Z
'
,
axis_up
=
'
Y
'
)
class
ExportVRML
(
bpy
.
types
.
Operator
,
ExportHelper
):
"""
Export mesh objects as a VRML2, colors and texture coordinates
"""
bl_idname
=
"
export_scene.vrml2
"
bl_label
=
"
Export VRML2
"
filename_ext
=
"
.wrl
"
filter_glob
:
StringProperty
(
default
=
"
*.wrl
"
,
options
=
{
'
HIDDEN
'
})
use_selection
:
BoolProperty
(
name
=
"
Selection Only
"
,
description
=
"
Export selected objects only
"
,
default
=
False
,
)
use_mesh_modifiers
:
BoolProperty
(
name
=
"
Apply Modifiers
"
,
description
=
"
Apply Modifiers to the exported mesh
"
,
default
=
True
,
)
use_color
:
BoolProperty
(
name
=
"
Vertex Colors
"
,
description
=
"
Export the active vertex color layer
"
,
default
=
True
,
)
color_type
:
EnumProperty
(
name
=
'
Color
'
,
items
=
(
(
'
VERTEX
'
,
"
Vertex Color
"
,
""
),
(
'
MATERIAL
'
,
"
Material Color
"
,
""
)),
)
use_uv
:
BoolProperty
(
name
=
"
Texture/UVs
"
,
description
=
"
Export the active texture and UV coords
"
,
default
=
True
,
)
global_scale
:
FloatProperty
(
name
=
"
Scale
"
,
min
=
0.01
,
max
=
1000.0
,
default
=
1.0
,
)
path_mode
=
path_reference_mode
@classmethod
def
poll
(
cls
,
context
):
obj
=
context
.
active_object
return
(
obj
is
not
None
)
and
obj
.
type
==
'
MESH
'
def
execute
(
self
,
context
):
from
.
import
export_vrml2
from
mathutils
import
Matrix
keywords
=
self
.
as_keywords
(
ignore
=
(
"
axis_forward
"
,
"
axis_up
"
,
"
global_scale
"
,
"
check_existing
"
,
"
filter_glob
"
,
))
global_matrix
=
axis_conversion
(
to_forward
=
self
.
axis_forward
,
to_up
=
self
.
axis_up
,
).
to_4x4
()
*
Matrix
.
Scale
(
self
.
global_scale
,
4
)
keywords
[
"
global_matrix
"
]
=
global_matrix
filepath
=
self
.
filepath
filepath
=
bpy
.
path
.
ensure_ext
(
filepath
,
self
.
filename_ext
)
return
export_vrml2
.
save
(
self
,
context
,
**
keywords
)
def
draw
(
self
,
context
):
layout
=
self
.
layout
layout
.
prop
(
self
,
"
use_selection
"
)
layout
.
prop
(
self
,
"
use_mesh_modifiers
"
)
row
=
layout
.
row
()
row
.
prop
(
self
,
"
use_uv
"
)
row
.
prop
(
self
,
"
use_color
"
)
row
=
layout
.
row
()
row
.
active
=
self
.
use_color
row
.
prop
(
self
,
"
color_type
"
)
layout
.
prop
(
self
,
"
axis_forward
"
)
layout
.
prop
(
self
,
"
axis_up
"
)
layout
.
prop
(
self
,
"
global_scale
"
)
layout
.
prop
(
self
,
"
path_mode
"
)
def
menu_func_export
(
self
,
context
):
self
.
layout
.
operator
(
ExportVRML
.
bl_idname
,
text
=
"
VRML2 (.wrl)
"
)
def
register
():
bpy
.
utils
.
register_module
(
__name__
)
bpy
.
types
.
TOPBAR_MT_file_export
.
append
(
menu_func_export
)
def
unregister
():
bpy
.
utils
.
unregister_module
(
__name__
)
bpy
.
types
.
TOPBAR_MT_file_export
.
remove
(
menu_func_export
)
if
__name__
==
"
__main__
"
:
register
()
This diff is collapsed.
Click to expand it.
io_scene_vrml2/export_vrml2.py
deleted
100644 → 0
+
0
−
262
View file @
fc73dfda
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
# <pep8-80 compliant>
import
bpy
import
bpy_extras
import
bmesh
import
os
from
bpy_extras
import
object_utils
def
save_bmesh
(
fw
,
bm
,
use_color
,
color_type
,
material_colors
,
use_uv
,
uv_image
,
path_mode
,
copy_set
):
base_src
=
os
.
path
.
dirname
(
bpy
.
data
.
filepath
)
base_dst
=
os
.
path
.
dirname
(
fw
.
__self__
.
name
)
fw
(
'
Shape {
\n
'
)
fw
(
'
\t
appearance Appearance {
\n
'
)
if
use_uv
:
fw
(
'
\t\t
texture ImageTexture {
\n
'
)
filepath
=
uv_image
.
filepath
filepath_full
=
os
.
path
.
normpath
(
bpy
.
path
.
abspath
(
filepath
,
library
=
uv_image
.
library
))
filepath_ref
=
bpy_extras
.
io_utils
.
path_reference
(
filepath_full
,
base_src
,
base_dst
,
path_mode
,
"
textures
"
,
copy_set
,
uv_image
.
library
)
filepath_base
=
os
.
path
.
basename
(
filepath_full
)
images
=
[
filepath_ref
,
filepath_base
,
]
if
path_mode
!=
'
RELATIVE
'
:
images
.
append
(
filepath_full
)
fw
(
'
\t\t\t
url [ %s ]
\n
'
%
"
"
.
join
([
'"
%s
"'
%
f
for
f
in
images
])
)
del
images
del
filepath_ref
,
filepath_base
,
filepath_full
,
filepath
fw
(
'
\t\t
}
\n
'
)
# end 'ImageTexture'
else
:
fw
(
'
\t\t
material Material {
\n
'
)
fw
(
'
\t\t
}
\n
'
)
# end 'Material'
fw
(
'
\t
}
\n
'
)
# end 'Appearance'
fw
(
'
\t
geometry IndexedFaceSet {
\n
'
)
fw
(
'
\t\t
coord Coordinate {
\n
'
)
fw
(
'
\t\t\t
point [
'
)
v
=
None
for
v
in
bm
.
verts
:
fw
(
"
%.6f %.6f %.6f
"
%
v
.
co
[:])
del
v
fw
(
'
]
\n
'
)
# end 'point[]'
fw
(
'
\t\t
}
\n
'
)
# end 'Coordinate'
if
use_color
:
if
color_type
==
'
MATERIAL
'
:
fw
(
'
\t\t
colorPerVertex FALSE
\n
'
)
fw
(
'
\t\t
color Color {
\n
'
)
fw
(
'
\t\t\t
color [
'
)
c
=
None
for
c
in
material_colors
:
fw
(
c
)
del
c
fw
(
'
]
\n
'
)
# end 'color[]'
fw
(
'
\t\t
}
\n
'
)
# end 'Color'
elif
color_type
==
'
VERTEX
'
:
fw
(
'
\t\t
colorPerVertex TRUE
\n
'
)
fw
(
'
\t\t
color Color {
\n
'
)
fw
(
'
\t\t\t
color [
'
)
v
=
None
c_none
=
"
0.00 0.00 0.00
"
color_layer
=
bm
.
loops
.
layers
.
color
.
active
assert
(
color_layer
is
not
None
)
for
v
in
bm
.
verts
:
# weak, use first loops color
try
:
l
=
v
.
link_loops
[
0
]
except
:
l
=
None
fw
(
c_none
if
l
is
None
else
(
"
%.2f %.2f %.2f
"
%
l
[
color_layer
][:]))
del
v
fw
(
'
]
\n
'
)
# end 'color[]'
fw
(
'
\t\t
}
\n
'
)
# end 'Color'
# ---
if
color_type
==
'
MATERIAL
'
:
fw
(
'
\t\t
colorIndex [
'
)
i
=
None
for
f
in
bm
.
faces
:
i
=
f
.
material_index
if
i
>=
len
(
material_colors
):
i
=
0
fw
(
"
%d
"
%
i
)
del
i
fw
(
'
]
\n
'
)
# end 'colorIndex[]'
elif
color_type
==
'
VERTEX
'
:
pass
if
use_uv
:
fw
(
'
\t\t
texCoord TextureCoordinate {
\n
'
)
fw
(
'
\t\t\t
point [
'
)
v
=
None
uv_layer
=
bm
.
loops
.
layers
.
uv
.
active
assert
(
uv_layer
is
not
None
)
for
f
in
bm
.
faces
:
for
l
in
f
.
loops
:
fw
(
"
%.4f %.4f
"
%
l
[
uv_layer
].
uv
[:])
del
f
fw
(
'
]
\n
'
)
# end 'point[]'
fw
(
'
\t\t
}
\n
'
)
# end 'TextureCoordinate'
# ---
fw
(
'
\t\t
texCoordIndex [
'
)
i
=
None
for
i
in
range
(
0
,
len
(
bm
.
faces
)
*
3
,
3
):
fw
(
"
%d %d %d -1
"
%
(
i
,
i
+
1
,
i
+
2
))
del
i
fw
(
'
]
\n
'
)
# end 'coordIndex[]'
fw
(
'
\t\t
coordIndex [
'
)
f
=
fv
=
None
for
f
in
bm
.
faces
:
fv
=
f
.
verts
[:]
fw
(
"
%d %d %d -1
"
%
(
fv
[
0
].
index
,
fv
[
1
].
index
,
fv
[
2
].
index
))
del
f
,
fv
fw
(
'
]
\n
'
)
# end 'coordIndex[]'
fw
(
'
\t
}
\n
'
)
# end 'IndexedFaceSet'
fw
(
'
}
\n
'
)
# end 'Shape'
def
save_object
(
fw
,
global_matrix
,
depsgraph
,
scene
,
obj
,
use_mesh_modifiers
,
use_color
,
color_type
,
use_uv
,
path_mode
,
copy_set
):
assert
(
obj
.
type
==
'
MESH
'
)
if
use_mesh_modifiers
:
is_editmode
=
(
obj
.
mode
==
'
EDIT
'
)
if
is_editmode
:
bpy
.
ops
.
object
.
editmode_toggle
()
obj_eval
=
obj
.
evaluated_get
(
depsgraph
)
me
=
obj_eval
.
to_mesh
()
bm
=
bmesh
.
new
()
bm
.
from_mesh
(
me
)
obj_eval
.
to_mesh_clear
()
if
is_editmode
:
bpy
.
ops
.
object
.
editmode_toggle
()
else
:
me
=
obj
.
data
if
obj
.
mode
==
'
EDIT
'
:
bm_orig
=
bmesh
.
from_edit_mesh
(
me
)
bm
=
bm_orig
.
copy
()
else
:
bm
=
bmesh
.
new
()
bm
.
from_mesh
(
me
)
# triangulate first so tessellation matches the view-port.
bmesh
.
ops
.
triangulate
(
bm
,
faces
=
bm
.
faces
)
bm
.
transform
(
global_matrix
*
obj
.
matrix_world
)
# default empty
material_colors
=
[]
uv_image
=
None
if
use_color
:
if
color_type
==
'
VERTEX
'
:
if
bm
.
loops
.
layers
.
color
.
active
is
None
:
# fallback to material
color_type
=
'
MATERIAL
'
if
color_type
==
'
MATERIAL
'
:
if
not
me
.
materials
:
use_color
=
False
else
:
material_colors
=
[
"
%.2f %.2f %.2f
"
%
(
m
.
diffuse_color
[:]
if
m
else
(
1.0
,
1.0
,
1.0
))
for
m
in
me
.
materials
]
assert
(
color_type
in
{
'
VERTEX
'
,
'
MATERIAL
'
})
if
use_uv
:
if
bm
.
loops
.
layers
.
uv
.
active
is
None
:
use_uv
=
False
uv_image
=
object_utils
.
object_image_guess
(
obj
,
bm
=
bm
)
if
uv_image
is
None
:
use_uv
=
False
save_bmesh
(
fw
,
bm
,
use_color
,
color_type
,
material_colors
,
use_uv
,
uv_image
,
path_mode
,
copy_set
)
bm
.
free
()
def
save
(
operator
,
context
,
filepath
=
""
,
global_matrix
=
None
,
use_selection
=
False
,
use_mesh_modifiers
=
True
,
use_color
=
True
,
color_type
=
'
MATERIAL
'
,
use_uv
=
True
,
path_mode
=
'
AUTO
'
):
scene
=
context
.
scene
depsgraph
=
context
.
evaluated_depsgraph_get
()
# store files to copy
copy_set
=
set
()
file
=
open
(
filepath
,
'
w
'
,
encoding
=
'
utf-8
'
)
fw
=
file
.
write
fw
(
'
#VRML V2.0 utf8
\n
'
)
fw
(
'
#modeled using blender3d http://blender.org
\n
'
)
if
use_selection
:
objects
=
context
.
selected_objects
else
:
objects
=
scene
.
objects
for
obj
in
objects
:
if
obj
.
type
==
'
MESH
'
:
fw
(
"
\n
# %r
\n
"
%
obj
.
name
)
save_object
(
fw
,
global_matrix
,
depsgraph
,
scene
,
obj
,
use_mesh_modifiers
,
use_color
,
color_type
,
use_uv
,
path_mode
,
copy_set
)
file
.
close
()
# copy all collected files.
bpy_extras
.
io_utils
.
path_reference_copy
(
copy_set
)
return
{
'
FINISHED
'
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment