找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2600|回复: 0
打印 上一主题 下一主题
收起左侧

PCB Logo Creator delphi源码

[复制链接]
跳转到指定楼层
楼主


单片机源程序如下:
  1. {..............................................................................}
  2. { Summary                                                                                                                                                                                         }
  3. {   Converts a monochrome image as a PCB Logo into a series of thin                                 }
  4. {   PCB tracks that can be placed on a PCB document as a logo.                                                 }
  5. {                                                                                                                                                                                                                 }       
  6. { Copyright (c) 2008 by Altium Limited                                         }
  7. {                                                                                                                                                                                        }
  8. { Version 1.5                                                                                                                 }
  9. {                                                                                                                                                 }
  10. { Changes For Version 1.5                                                                                 }
  11. {    - Fix off by one errors accessing Canvas.Pixels                           }
  12. {    - Make more tolerant of non-monochrome images, now tracks are created at  }
  13. {      the boundary of white and non-white pixels                              }
  14. {    - Use user customized layer names                                         }
  15. {..............................................................................}

  16. Var
  17.    gvBoard : IPCB_Board;

  18. {......................................................................................................................}
  19. Procedure RunConverterScript;
  20. Begin
  21.     ConverterForm.ShowModal;
  22. End;
  23. {......................................................................................................................}

  24. {......................................................................................................................}
  25. Procedure PlaceATrack(ABoard : IPCB_Board; X1,Y1,X2,Y2 : TCoord; ALayer : TLayer, AWidth : Float);
  26. Var
  27.     PCBTrack    : IPCB_Track;
  28.     Sheet       : IPCB_Sheet;
  29.     OffSet      : TCoord;
  30. Begin
  31.     // obtain the coordinates of the sheet so can place logo within the board
  32.     Sheet  := ABoard.PCBSheet;
  33.     OffSet := MilsToCoord(100);

  34.     // place a new track on the blank PCB
  35.     PCBTrack       := PCBServer.PCBObjectFactory(eTrackObject, eNoDimension, eCreate_Default);
  36.     PCBTrack.Width := MilsToCoord(1) * AWidth;

  37.     PCBTrack.X1    := Sheet.SheetX + MilsToCoord(X1) + Offset;
  38.     PCBTrack.Y1    := Sheet.SheetY + MilsToCoord(Y1) + Offset;
  39.     PCBTrack.X2    := Sheet.SheetX + MilsToCoord(X2) + Offset;
  40.     PCBTrack.Y2    := Sheet.SheetY + MilsToCoord(Y2) + Offset;
  41.     PCBTrack.Layer := ALayer;

  42.     ABoard.AddPCBObject(PCBTrack);
  43. End;
  44. {......................................................................................................................}

  45. {......................................................................................................................}
  46. Procedure ScalingFactorChange(Dummy : TObject);
  47. Begin
  48.     ConverterForm.lImageSize.Caption := FloatToStr((ConverterForm.Image1.Picture.Width + 1)  * ConverterForm.eScalingFactor.Text) + ' x ' +
  49.                           FloatToStr((ConverterForm.Image1.Picture.Height + 1) * ConverterForm.eScalingFactor.Text) + ' mils';
  50. End;
  51. {......................................................................................................................}

  52. {......................................................................................................................}
  53. Procedure TConverterForm.eScalingFactorChange(Sender: TObject);
  54. Begin
  55.      ScalingFactorChange(Nil);
  56. End;
  57. {......................................................................................................................}

  58. {......................................................................................................................}
  59. Procedure TConverterForm.loadbuttonClick(Sender: TObject);
  60. Var
  61.    I, J : Integer;
  62. Begin
  63.     If OpenPictureDialog1.Execute then
  64.     Begin
  65.         XPProgressBar1.Position := 0;
  66.         XStatusBar1.SimpleText  := '  Loading...';
  67.         XStatusBar1.Update;

  68.         // loading a monochrome bitmap only
  69.         Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);

  70.         // Check if image is monochrome, otherwise prompt a warning
  71.         If Image1.Picture.Bitmap.PixelFormat <> pf1bit Then
  72.         Begin
  73.             For J := 0 to Image1.Picture.Height - 1 Do
  74.                 For I := 0 to Image1.Picture.Height - 1 Do
  75.             Begin
  76.                 If Image1.Canvas.Pixels[I,J] <> clWhite Then
  77.                     Image1.Canvas.Pixels[I,J] := clBlack;
  78.             End;
  79.         End;

  80.         ScalingFactorChange(Nil);

  81.         convertbutton.Enabled  := True;
  82.         LoadButton.Enabled     := False;
  83.         XStatusBar1.SimpleText := '  Ready...';
  84.         XStatusBar1.Update;
  85.     End;
  86. End;
  87. {......................................................................................................................}

  88. {......................................................................................................................}
  89. procedure TConverterForm.ConverterFormCreate(Sender: TObject);
  90. begin
  91.     // Create a standalone blank PCB document and add the new logo to it
  92.     // from the PCBLogoContainer d.s.
  93.     CreateNewDocumentFromDocumentKind('PCB');

  94.     // GetCurrentPCBBoard returns a IPCB_Board type.
  95.     gvBoard := PCBServer.GetCurrentPCBBoard;

  96.     If gvBoard = Nil Then
  97.     Begin
  98.         ShowWarning('A PCB document is not created properly.');
  99.         ShowModal := mrError;
  100.     End
  101.     Else
  102.         SetupComboBoxFromLayer(ComboBoxLayers, gvBoard);
  103. end;
  104. {......................................................................................................................}

  105. {......................................................................................................................}
  106. Procedure TConverterForm.convertbuttonClick(Sender: TObject);
  107. Var
  108.     x, y, x1, FlipY, FlipX : Integer;
  109.     PixelColor             : TColor;
  110.     Start                  : Boolean;
  111.     //PCBBoard               : IPCB_Board;
  112.     PCBLayer               : TLayer;
  113.     TrackWidth             : Integer;
  114. Begin
  115.     Screen.Cursor      := crHourGlass;
  116.     XPProgressBar1.Max := Image1.Picture.Height;
  117.     PCBLayer   := GetLayerFromComboBox(ComboBoxLayers, gvBoard);
  118.     TrackWidth := StrToFloat(eScalingFactor.Text);

  119.     // ensure the layer selected is displayed in the PCB workspace
  120.     gvBoard.LayerIsDisplayed[PCBLayer] := True;

  121.     For Y := 0 to Image1.Picture.Height - 1 Do
  122.     Begin
  123.         XPProgressBar1.Position := Y;
  124.         XPProgressBar1.Update;

  125.         XStatusBar1.SimpleText  := ' Converting...';
  126.         XStatusBar1.Update;

  127.         If (cbMirrorY.Checked) Then
  128.             FlipY := Y
  129.         Else
  130.             FlipY := Abs(Y - Image1.Picture.Height - 1);

  131.         FlipY := FlipY * StrToFloat(eScalingFactor.Text);

  132.         // Denotes the start of a line on a row of an image
  133.         Start := False;

  134.         For X := 0 To Image1.Picture.Width Do
  135.         Begin
  136.             If (cbNegative.Checked) Then
  137.                 PixelColor := clBlack
  138.             Else
  139.                 PixelColor := clWhite;

  140.             If X < Image1.Picture.Width Then
  141.                PixelColor := Image1.Canvas.Pixels[x,y];

  142.             If cbMirrorX.Checked Then
  143.                 FlipX := abs(X - Image1.Picture.Width)
  144.             Else
  145.                 FlipX  := X;

  146.             FlipX := FlipX * StrToFloat(eScalingFactor.Text);

  147.             If (cbNegative.Checked) Then
  148.             Begin
  149.                 Case PixelColor Of
  150.                      clWhite :
  151.                         If Not (Start) Then
  152.                         Begin
  153.                              x1    := FlipX;
  154.                              Start := True;
  155.                         End;

  156.                      Else
  157.                         Begin
  158.                             If (Start) Then
  159.                                 PlaceATrack(gvBoard, X1,FlipY,FlipX,FlipY, PCBLayer, TrackWidth);

  160.                             Start := False;
  161.                         End;
  162.                  End;
  163.             End
  164.             Else
  165.             Begin
  166.                 Case PixelColor Of
  167.                     clWhite:
  168.                         Begin
  169.                             If (Start) Then
  170.                                 PlaceATrack(gvBoard, X1,FlipY,FlipX,FlipY, PCBLayer, TrackWidth);
  171.                             Start := False;
  172.                         End;

  173.                     Else
  174.                         If Not (Start) Then
  175.                         Begin
  176.                             x1    := FlipX;
  177.                             Start := True;
  178.                         End;

  179.                  End;
  180.             End;
  181.         End;
  182.      End;

  183.     Screen.Cursor          := crArrow;
  184.     XStatusBar1.SimpleText := ' Done...';
  185.     XStatusBar1.Update;

  186.     // toggle buttons
  187.     ConvertButton.Enabled := False;
  188.     LoadButton.Enabled    := True;

  189.     // clear out progress bar
  190.     XPProgressBar1.Position := 0;
  191.     XPProgressBar1.Update;

  192.     //clear out image
  193.     Image1.Picture.Bitmap := nil;

  194.     Client.SendMessage('PCB:Zoom', 'Action=All' , 255, Client.CurrentView);
  195. End;
  196. {......................................................................................................................}

  197. {......................................................................................................................}
  198. Procedure TConverterForm.exitbuttonClick(Sender: TObject);
  199. Begin
  200.     Close;
  201. End;
  202. {......................................................................................................................}
复制代码

所有资料51hei提供下载:
Logo Creator.zip (60.8 KB, 下载次数: 30)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表