LZScene

Форк
0
/
FRFaceEditor.pas 
153 строки · 3.7 Кб
1
//
2
// This unit is part of the GLScene Engine https://github.com/glscene
3
//
4
{
5
   Editor fram for a TGLFaceProperties.
6
}
7
unit FRFaceEditor;
8

9
interface
10

11
{$I GLScene.inc}
12

13
uses
14
  lresources,
15
  Forms, 
16
  ComCtrls, 
17
  StdCtrls, 
18
  Controls,  
19
  Classes,
20
  Graphics,
21
  GLTexture, 
22
  FRTrackBarEdit,
23
  FRColorEditor,
24
  GLMaterial;
25

26
type
27
  TRFaceEditor = class(TFrame)
28
    PageControl: TPageControl;
29
    TSAmbient: TTabSheet;
30
    TSDiffuse: TTabSheet;
31
    TSEmission: TTabSheet;
32
    TSSpecular: TTabSheet;
33
    CEAmbiant: TRColorEditor;
34
    Label1: TLabel;
35
    TBEShininess: TRTrackBarEdit;
36
    ImageList: TImageList;
37
    CEDiffuse: TRColorEditor;
38
    CEEmission: TRColorEditor;
39
    CESpecular: TRColorEditor;
40
    procedure TBEShininessTrackBarChange(Sender: TObject);
41

42
  private
43
    
44
    FOnChange : TNotifyEvent;
45
    updating : Boolean;
46
    FFaceProperties : TGLFaceProperties;
47
    procedure SetGLFaceProperties(const val : TGLFaceProperties);
48
    procedure OnColorChange(Sender : TObject);
49

50
  public
51
    
52
    constructor Create(AOwner : TComponent); override;
53
    destructor Destroy; override;
54

55
    property OnChange : TNotifyEvent read FOnChange write FOnChange;
56
	 property FaceProperties : TGLFaceProperties read FFaceProperties write SetGLFaceProperties;
57
  end;
58

59
//=======================================================
60
implementation
61
//=======================================================
62

63

64
constructor TRFaceEditor.Create(AOwner : TComponent);
65
begin
66
   inherited;
67
   FFaceProperties:=TGLFaceProperties.Create(nil);
68
   CEAmbiant.OnChange:=OnColorChange;
69
   CEDiffuse.OnChange:=OnColorChange;
70
   CEEmission.OnChange:=OnColorChange;
71
   CESpecular.OnChange:=OnColorChange;
72
   PageControl.DoubleBuffered:=True;
73
end;
74

75
destructor TRFaceEditor.Destroy;
76
begin
77
   FFaceProperties.Free;
78
   inherited;
79
end;
80

81
procedure TRFaceEditor.OnColorChange(Sender : TObject);
82
var
83
   bmp : TBitmap;
84
   bmpRect : TRect;
85

86
   procedure AddBitmapFor(ce : TRColorEditor);
87
   begin
88
      with bmp.Canvas do begin
89
         Brush.Color:=ce.PAPreview.Color;
90
         FillRect(bmpRect);
91
      end;
92
      ImageList.Add(bmp, nil);
93
   end;
94

95
begin
96
   if not updating then begin
97
      // Update imageList
98
      bmp:=TBitmap.Create;
99
      try
100
         bmp.Width:=16;
101
         bmp.Height:=16;
102
         bmpRect:=Rect(0, 0, 16, 16);
103
         ImageList.Clear;
104
         AddBitmapFor(CEAmbiant);
105
         FFaceProperties.Ambient.Color:=CEAmbiant.EditedColor;
106
         AddBitmapFor(CEDiffuse);
107
         FFaceProperties.Diffuse.Color:=CEDiffuse.EditedColor;
108
         AddBitmapFor(CEEmission);
109
         FFaceProperties.Emission.Color:=CEEmission.EditedColor;
110
         AddBitmapFor(CESpecular);
111
         FFaceProperties.Specular.Color:=CESpecular.EditedColor;
112
      finally
113
         bmp.Free;
114
      end;
115
      // Trigger onChange
116
      if Assigned(FOnChange) then FOnChange(Self);
117
   end;
118
end;
119

120
procedure TRFaceEditor.TBEShininessTrackBarChange(Sender: TObject);
121
begin
122
   if not updating then begin
123
      TBEShininess.TrackBarChange(Sender);
124
      FFaceProperties.Shininess:=TBEShininess.Value;
125
      if Assigned(FOnChange) then FOnChange(Self);
126
   end;
127
end;
128

129
// SetGLFaceProperties
130
//
131
procedure TRFaceEditor.SetGLFaceProperties(const val : TGLFaceProperties);
132
begin
133
   updating:=True;
134
   try
135
      CEAmbiant.EditedColor:=val.Ambient.Color;
136
      CEDiffuse.EditedColor:=val.Diffuse.Color;
137
      CEEmission.EditedColor:=val.Emission.Color;
138
      CESpecular.EditedColor:=val.Specular.Color;
139
      TBEShininess.Value:=val.Shininess;
140
   finally
141
      updating:=False;
142
   end;
143
   OnColorChange(Self);
144
   TBEShininessTrackBarChange(Self);
145
end;
146

147

148
initialization
149

150
  {$I FRFaceEditor.lrs}
151

152

153
end.
154

155

156

157

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.