فهرست منبع

script: wave displacement

johann 5 سال پیش
والد
کامیت
ba09a6bed5
4فایلهای تغییر یافته به همراه39 افزوده شده و 15 حذف شده
  1. 33 9
      lazpaint/dialog/filter/uwavedisplacement.pas
  2. 1 5
      lazpaint/ufilters.pas
  3. 3 0
      lazpaintscripts/lazpaint/filter.py
  4. 2 1
      lazpaintscripts/test_filter.py

+ 33 - 9
lazpaint/dialog/filter/uwavedisplacement.pas

@@ -42,6 +42,7 @@ type
     { private declarations }
     FInitializing: boolean;
     FCenter: TPointF;
+    procedure InitParams;
     procedure PreviewNeeded;
     function ComputeFilteredLayer: TBGRABitmap;
   public
@@ -66,8 +67,18 @@ begin
   try
     if FWaveDisplacement.FilterConnector.ActiveLayer <> nil then
     begin
-      if FWaveDisplacement.showModal = mrOk then result := srOk
-      else result := srCancelledByUser;
+      if Assigned(FWaveDisplacement.FilterConnector.Parameters) and
+        FWaveDisplacement.FilterConnector.Parameters.Booleans['Validate'] then
+      begin
+        FWaveDisplacement.InitParams;
+        FWaveDisplacement.FilterConnector.PutImage(FWaveDisplacement.ComputeFilteredLayer,False,true);
+        FWaveDisplacement.FilterConnector.ValidateAction;
+        result := srOk;
+      end else
+      begin
+        if FWaveDisplacement.showModal = mrOk then result := srOk
+        else result := srCancelledByUser;
+      end;
     end
     else
       result := srException;
@@ -86,17 +97,11 @@ begin
   CheckSpinEdit(SpinEdit_Displacement);
   CheckSpinEdit(SpinEdit_Phase);
   CheckOKCancelBtns(Button_OK{,Button_Cancel});
-
-  FCenter := PointF(0.5,0.5);
 end;
 
 procedure TFWaveDisplacement.FormShow(Sender: TObject);
 begin
-  FInitializing:= true;
-  SpinEdit_Wavelength.Value := round(FilterConnector.LazPaintInstance.Config.DefaultWaveDisplacementWavelength);
-  SpinEdit_Displacement.Value := round(FilterConnector.LazPaintInstance.Config.DefaultWaveDisplacementAmount);
-  SpinEdit_Phase.Value := round(FilterConnector.LazPaintInstance.Config.DefaultWaveDisplacementPhase);
-  FInitializing := false;
+  InitParams;
   PreviewNeeded;
   Left := FilterConnector.LazPaintInstance.MainFormBounds.Left;
 end;
@@ -157,6 +162,25 @@ begin
   Button_OK.Enabled := true;
 end;
 
+procedure TFWaveDisplacement.InitParams;
+begin
+  FInitializing:= true;
+  SpinEdit_Wavelength.Value := round(FilterConnector.LazPaintInstance.Config.DefaultWaveDisplacementWavelength);
+  SpinEdit_Displacement.Value := round(FilterConnector.LazPaintInstance.Config.DefaultWaveDisplacementAmount);
+  SpinEdit_Phase.Value := round(FilterConnector.LazPaintInstance.Config.DefaultWaveDisplacementPhase);
+  FCenter := PointF(0.5,0.5);
+  if Assigned(FilterConnector.Parameters) then
+  with FilterConnector.Parameters do
+  begin
+    if IsDefined('WaveLength') then SpinEdit_Wavelength.Value := Integers['WaveLength'];
+    if IsDefined('Displacement') then SpinEdit_Displacement.Value := Integers['Displacement'];
+    if IsDefined('Phase') then SpinEdit_Phase.Value := Integers['Phase'];
+    if IsDefined('CenterXPercent') then FCenter.X := Floats['CenterXPercent']/100;
+    if IsDefined('CenterYPercent') then FCenter.Y := Floats['CenterYPercent']/100;
+  end;
+  FInitializing := false;
+end;
+
 procedure TFWaveDisplacement.PreviewNeeded;
 begin
   Timer1.Enabled := false;

+ 1 - 5
lazpaint/ufilters.pas

@@ -165,11 +165,7 @@ begin
     pfNoise: result := AInstance.ShowNoiseFilterDlg(FilterConnector);
     pfPixelate: result := AInstance.ShowPixelateDlg(FilterConnector);
     pfTwirl: result := AInstance.ShowTwirlDlg(FilterConnector);
-    pfWaveDisplacement:
-        if GetSkip then
-          filteredLayer := ugraph.WaveDisplacementFilter(layer,FilterConnector.WorkArea, PointF(layer.Width/2,layer.Height/2), AInstance.Config.DefaultWaveDisplacementWavelength, AInstance.Config.DefaultWaveDisplacementAmount, AInstance.Config.DefaultWaveDisplacementPhase ) as TBGRABitmap
-        else
-          result := AInstance.ShowWaveDisplacementDlg(FilterConnector);
+    pfWaveDisplacement: result := AInstance.ShowWaveDisplacementDlg(FilterConnector);
     pfContour: filteredLayer := layer.FilterContour as TBGRABitmap;
     pfGrayscale: filteredLayer := layer.FilterGrayscale(FilterConnector.WorkArea) as TBGRABitmap;
     pfPerlinNoise: filteredLayer := CreatePerlinNoiseMap(layer.Width,layer.Height,layer.Width/256,layer.Height/256,1,rfBestQuality);

+ 3 - 0
lazpaintscripts/lazpaint/filter.py

@@ -101,3 +101,6 @@ def phong(color_source=None, altitude_percent=None, altitude_source=None, light_
 
 def twirl(radius=None, angle=None, center_x_percent=None, center_y_percent=None, validate=True):
   command.send("Filter", Name=TWIRL, Radius=radius, Angle=angle, CenterXPercent=center_x_percent, CenterYPercent=center_y_percent, Validate=validate)
+
+def wave_displacement(wave_length=None, displacement=None, phase=None, center_x_percent=None, center_y_percent=None, validate=True):
+  command.send("Filter", Name=WAVE_DISPLACEMENT, WaveLength=wave_length, Displacement=displacement, Phase=phase, CenterXPercent=center_x_percent, CenterYPercent=center_y_percent, Validate=validate)

+ 2 - 1
lazpaintscripts/test_filter.py

@@ -7,4 +7,5 @@ from lazpaint import filter, image
 #filter.pixelate(20, filter.PIXELATE_QUALITY_BEST)
 #filter.twirl(radius=min(image.get_width(),image.get_height())/2, angle=360)
 #filter.blur_motion(50, 45, True)
-filter.sharpen(1)
+#filter.sharpen(1)
+filter.wave_displacement(100,30,0,25,25)