-
Notifications
You must be signed in to change notification settings - Fork 7
/
CyclesDecal.cs
102 lines (84 loc) · 2.52 KB
/
CyclesDecal.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/**
Copyright 2014-2024 Robert McNeel and Associates
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
**/
using Rhino;
using Rhino.Render;
using System;
using System.Collections.Generic;
namespace RhinoCyclesCore
{
/// <summary>
/// Helper class to hold decal information for one mesh instance
/// </summary>
public class CyclesDecal : IDisposable
{
private bool disposedValue;
public CyclesTextureImage Texture { get; set; } = null;
public DecalMapping Mapping { get; set; } = DecalMapping.Planar;
public DecalProjection Projection { get; set; } = DecalProjection.Both;
public TextureMapping TextureMapping { get; set; } = null;
public float Height { get; set; } = 1.0f;
public float Radius { get; set; } = 1.0f;
public float HorizontalSweepStart { get; set; } = 0.0f;
public float HorizontalSweepEnd { get; set; } = 1.0f;
public float VerticalSweepStart { get; set; } = 0.0f;
public float VerticalSweepEnd { get; set; } = 1.0f;
public ccl.Transform Transform { get; set; } = null;
/// <summary>
/// Decal origin
/// </summary>
public ccl.float4 Origin { get; set; } = new ccl.float4(0.0f);
/// <summary>
/// Decal across vector (planar)
/// </summary>
public ccl.float4 Across { get; set; } = new ccl.float4(0.0f);
/// <summary>
/// Decal up vector (planar)
/// </summary>
public ccl.float4 Up { get; set; } = new ccl.float4(0.0f);
public uint CRC { get; set; } = 0;
public float Transparency { get; set; } = 0.0f;
static public uint CRCForList(List<CyclesDecal> decals)
{
uint decalsCRC = 0;
if (decals != null)
{
decalsCRC = decals[0].CRC;
if (decals.Count > 1)
{
for (int i = 1; i < decals.Count; i++)
{
decalsCRC = RhinoMath.CRC32(decalsCRC, decals[i].CRC);
}
}
}
return decalsCRC;
}
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
Texture?.Dispose();
Texture = null;
}
disposedValue = true;
}
}
public void Dispose()
{
Dispose(disposing: true);
GC.SuppressFinalize(this);
}
}
}