Skip to content

Commit ee28e93

Browse files
Enable inner Cylinder radius (pipe) support in animation export
1 parent e4ca42a commit ee28e93

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

src/AnimationExport/exportAnimation.jl

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,34 @@ function exportObject(object, elements, obj::Modia3D.Composition.Object3D, box::
3939
end
4040

4141
function exportObject(object, elements, obj::Modia3D.Composition.Object3D, cylinder::Modia3D.Shapes.Cylinder, initPos, initRot)
42-
r_obj = Modia3D.ZeroVector3D
43-
R_obj = Shapes.rotateAxis2y(cylinder.axis, Modia3D.NullRotation)
4442
name = String(Modia3D.fullName(obj)) * ".geometry"
45-
geometry = (; name=name, uuid=name2uuid(name), type="CylinderBufferGeometry", radiusBottom=cylinder.diameter/2, radiusTop=cylinder.diameter/2, height=cylinder.length, radialSegments=32, heightSegments=1)
4643
material = printVisuMaterialToJSON(obj, obj.visualMaterial)
47-
objectInfo = getObjectInfo(obj, geometry, material, initPos, initRot, R_obj=R_obj)
48-
printInfoToFile(object, elements, geometry, material, nothing, objectInfo)
44+
if cylinder.innerDiameter == 0.0
45+
r_obj = Modia3D.ZeroVector3D
46+
R_obj = Shapes.rotateAxis2y(cylinder.axis, Modia3D.NullRotation)
47+
shape = nothing
48+
geometry = (; name=name, uuid=name2uuid(name), type="CylinderBufferGeometry", radiusBottom=cylinder.diameter/2, radiusTop=cylinder.diameter/2, height=cylinder.length, radialSegments=32, heightSegments=1)
49+
objectInfo = getObjectInfo(obj, geometry, material, initPos, initRot, R_obj=R_obj)
50+
else
51+
if cylinder.axis == 1
52+
r_obj = @SVector[-cylinder.length/2, 0.0, 0.0]
53+
elseif cylinder.axis == 2
54+
r_obj = @SVector[0.0, -cylinder.length/2, 0.0]
55+
else
56+
r_obj = @SVector[0.0, 0.0, -cylinder.length/2]
57+
end
58+
R_obj = Shapes.rotateAxis2z(cylinder.axis, Modia3D.NullRotation)
59+
innerCurves = [(; type="EllipseCurve", aX=0, aY=0, xRadius=cylinder.innerDiameter/2, yRadius=cylinder.innerDiameter/2, aStartAngle=0, aEndAngle=2*pi, aClockwise=false, aRotation=0)]
60+
holes = [(; type="Path", curves=innerCurves, currentPoint=[0, 0])]
61+
curves = [(; type="EllipseCurve", aX=0, aY=0, xRadius=cylinder.diameter/2, yRadius=cylinder.diameter/2, aStartAngle=0, aEndAngle=2*pi, aClockwise=false, aRotation=0)]
62+
shapeName = String(Modia3D.fullName(obj)) * ".shape"
63+
shapeUuid = name2uuid(shapeName)
64+
shape = (; name=shapeName, uuid=shapeUuid, type="Shape", curves=curves, holes=holes, currentPoint=[0, 0])
65+
options = (; depth=cylinder.length, bevelEnabled=false)
66+
geometry = (; name=name, uuid=name2uuid(name), type="ExtrudeGeometry", shapes=[shapeUuid], options=options)
67+
objectInfo = getObjectInfo(obj, geometry, material, initPos, initRot, r_obj=r_obj, R_obj=R_obj)
68+
end
69+
printInfoToFile(object, elements, geometry, material, shape, objectInfo)
4970
return (r_obj, R_obj)
5071
end
5172

src/Shapes/geometry.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ The reference frame = Object3D frame is located at the center of the cylinder.
9292
- `innerDiameter` defines the inner diameter of the cylinder (where `innerDiameter=0` defines a full cylinder).
9393
9494
# Notes
95-
- `innerDiameter` is not supported by collision and animation export.
95+
- `innerDiameter` is not supported by collision.
9696
"""
9797
mutable struct Cylinder <: Modia3D.AbstractGeometry
9898
axis::Int

0 commit comments

Comments
 (0)