diff --git a/2.10/Source/Editor.dfm b/2.10/Source/Editor.dfm index 3889f74..b840da1 100644 --- a/2.10/Source/Editor.dfm +++ b/2.10/Source/Editor.dfm @@ -1,9 +1,9 @@ object EditForm: TEditForm - Left = 398 - Top = 205 - Width = 582 - Height = 471 - Caption = 'Editor' + Left = 305 + Top = 166 + Width = 586 + Height = 590 + Caption = 'Transform Editor' Color = clBtnFace Font.Charset = ANSI_CHARSET Font.Color = clWindowText @@ -44,36 +44,17 @@ object EditForm: TEditForm OnClose = FormClose OnCreate = FormCreate OnDestroy = FormDestroy + OnKeyDown = editKeyDown + OnKeyPress = editKeyPress + OnMouseWheel = editMouseWheel OnResize = FormResize OnShow = FormShow PixelsPerInch = 96 TextHeight = 13 - object GrphPnl: TPanel - Left = 0 - Top = 0 - Width = 394 - Height = 429 - Align = alClient - BevelOuter = bvLowered - Color = clBlack - TabOrder = 0 - object GraphImage: TImage - Left = 1 - Top = 1 - Width = 392 - Height = 427 - Align = alClient - PopupMenu = EditPopup - OnDblClick = GraphImageDblClick - OnMouseDown = GraphImageMouseDown - OnMouseMove = GraphImageMouseMove - OnMouseUp = GraphImageMouseUp - end - end object StatusBar: TStatusBar Left = 0 - Top = 429 - Width = 574 + Top = 547 + Width = 578 Height = 15 Panels = < item @@ -86,775 +67,1418 @@ object EditForm: TEditForm Width = 150 end> end - object ControlPanel: TPanel - Left = 394 + object topPnl: TPanel + Left = 0 Top = 0 - Width = 180 - Height = 429 - Align = alRight - Alignment = taLeftJustify - BevelOuter = bvNone - TabOrder = 2 - DesignSize = ( - 180 - 429) - object lblTransform: TLabel - Left = 10 - Top = 128 - Width = 59 - Height = 13 - Caption = 'Transform' - Font.Charset = ANSI_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False + Width = 578 + Height = 24 + Align = alTop + BevelOuter = bvSpace + Ctl3D = True + ParentCtl3D = False + TabOrder = 0 + object EditorToolBar: TToolBar + Left = 1 + Top = 1 + Width = 352 + Height = 22 + Align = alLeft + ButtonWidth = 25 + Caption = 'EditorToolBar' + Color = clBtnFace + EdgeBorders = [] + Flat = True + Images = EditorTB + ParentColor = False + TabOrder = 0 + object tbUndo: TToolButton + Left = 0 + Top = 0 + Hint = 'Undo (Ctrl+Z)' + Caption = 'Undo' + ImageIndex = 3 + ParentShowHint = False + ShowHint = True + OnClick = mnuUndoClick + end + object tbRedo: TToolButton + Left = 25 + Top = 0 + Hint = 'Redo (Ctrl+Y)' + Caption = 'Redo' + ImageIndex = 4 + ParentShowHint = False + ShowHint = True + OnClick = mnuRedoClick + end + object ToolButton4: TToolButton + Left = 50 + Top = 0 + Width = 8 + Caption = 'ToolButton4' + ImageIndex = 3 + Style = tbsSeparator + end + object tbAdd: TToolButton + Left = 58 + Top = 0 + Hint = 'Adds a new triangle' + Caption = 'Add' + ImageIndex = 0 + ParentShowHint = False + ShowHint = True + OnClick = mnuAddClick + end + object tbDuplicate: TToolButton + Left = 83 + Top = 0 + Hint = 'Duplicates the selected triangle' + Caption = 'Duplicate' + ImageIndex = 1 + ParentShowHint = False + ShowHint = True + OnClick = mnuDupClick + end + object tbDelete: TToolButton + Left = 108 + Top = 0 + Hint = 'Deletes the selected triangle' + Caption = 'Delete' + ImageIndex = 2 + ParentShowHint = False + ShowHint = True + OnClick = mnuDeleteClick + end + object ToolButton1: TToolButton + Left = 133 + Top = 0 + Width = 8 + Caption = 'ToolButton1' + ImageIndex = 5 + Style = tbsSeparator + end + object tbSelect: TToolButton + Left = 141 + Top = 0 + Hint = 'Select triangle' + Caption = 'Select' + Down = True + ImageIndex = 5 + ParentShowHint = False + ShowHint = True + OnClick = tbSelectClick + end + object tbMove: TToolButton + Left = 166 + Top = 0 + Hint = 'Move Triangle' + Caption = 'Move' + ImageIndex = 6 + ParentShowHint = False + ShowHint = True + OnClick = tbEditModeClick + end + object tbRotate: TToolButton + Left = 191 + Top = 0 + Hint = 'Rotate triangle' + Caption = 'Rotate' + ImageIndex = 7 + ParentShowHint = False + ShowHint = True + OnClick = tbEditModeClick + end + object tbScale: TToolButton + Left = 216 + Top = 0 + Hint = 'Scale triangle' + Caption = 'Scale' + ImageIndex = 8 + ParentShowHint = False + ShowHint = True + OnClick = tbEditModeClick + end + object ToolButton5: TToolButton + Left = 241 + Top = 0 + Width = 8 + Caption = 'ToolButton5' + ImageIndex = 7 + Style = tbsSeparator + end + object tbFlipHorz: TToolButton + Left = 249 + Top = 0 + Hint = 'Flip triangle horizontal' + Caption = 'Flip Horizontal' + ImageIndex = 9 + ParentShowHint = False + ShowHint = True + OnClick = mnuFlipHorizontalClick + end + object tbFlipVert: TToolButton + Left = 274 + Top = 0 + Hint = 'Flip triangle vertical' + Caption = 'Flip Vertical' + ImageIndex = 10 + ParentShowHint = False + ShowHint = True + OnClick = mnuFlipVerticalClick + end + object tbFlipAllHorz: TToolButton + Left = 299 + Top = 0 + Hint = 'Flip all triangles horizontal' + Caption = 'Flip All Horizontal' + ImageIndex = 11 + MenuItem = mnuHorizintalFlipAll + ParentShowHint = False + ShowHint = True + end + object tbFlipAllVert: TToolButton + Left = 324 + Top = 0 + Hint = 'Flip all triangles vertical' + Caption = 'Flip All Vertical ' + ImageIndex = 12 + MenuItem = mnuVerticalFlipAll + ParentShowHint = False + ShowHint = True + end end - object PrevPnl: TPanel - Left = 10 - Top = 0 - Width = 162 - Height = 122 - BevelOuter = bvLowered - Caption = 'PrevPnl' + object PreviewToolBar: TToolBar + Left = 443 + Top = 1 + Width = 134 + Height = 22 + Align = alRight + Caption = 'PreviewToolBar' + EdgeBorders = [] + Flat = True + Images = MainForm.Buttons + TabOrder = 1 + Visible = False + object tbFullView: TToolButton + Left = 0 + Top = 0 + Caption = 'tbFullView' + ImageIndex = 52 + OnClick = tbFullViewClick + end + object ToolButton7: TToolButton + Left = 23 + Top = 0 + Width = 8 + Caption = 'ToolButton7' + ImageIndex = 3 + Style = tbsSeparator + end + object tbLowQ: TToolButton + Left = 31 + Top = 0 + Caption = 'tbLowQ' + Grouped = True + ImageIndex = 45 + Style = tbsCheck + OnClick = mnuLowQualityClick + end + object tbMedQ: TToolButton + Left = 54 + Top = 0 + Caption = 'tbMedQ' + Down = True + Grouped = True + ImageIndex = 45 + Style = tbsCheck + OnClick = mnuMediumQualityClick + end + object tbHiQ: TToolButton + Left = 77 + Top = 0 + Caption = 'tbHiQ' + Grouped = True + ImageIndex = 45 + Style = tbsCheck + OnClick = mnuHighQualityClick + end + object ToolButton9: TToolButton + Left = 100 + Top = 0 + Width = 8 + Caption = 'ToolButton9' + ImageIndex = 14 + Style = tbsSeparator + end + object tbResetLoc: TToolButton + Left = 108 + Top = 0 + Hint = 'Reset location on/off' + Caption = 'tbResetLoc' + Down = True + ImageIndex = 12 + OnClick = mnuResetLocClick + end + end + end + object EditPnl: TPanel + Left = 0 + Top = 24 + Width = 578 + Height = 523 + Align = alClient + TabOrder = 1 + object Splitter1: TSplitter + Left = 396 + Top = 1 + Width = 9 + Height = 521 + Align = alRight + AutoSnap = False + Beveled = True + MinSize = 172 + OnMoved = splitterMoved + end + object GrphPnl: TPanel + Left = 1 + Top = 1 + Width = 395 + Height = 521 + Align = alClient + BevelOuter = bvNone Color = clBlack TabOrder = 0 - object PreviewImage: TImage - Left = 1 - Top = 1 - Width = 160 - Height = 120 + object GraphImage: TImage + Tag = 1 + Left = 0 + Top = 0 + Width = 395 + Height = 521 Align = alClient - IncrementalDisplay = True - PopupMenu = QualityPopup + PopupMenu = EditPopup + OnDblClick = GraphImageDblClick + OnMouseDown = GraphImageMouseDown + OnMouseMove = GraphImageMouseMove + OnMouseUp = GraphImageMouseUp end end - object cbTransforms: TComboBox - Left = 75 - Top = 125 - Width = 57 - Height = 21 - Style = csDropDownList - ItemHeight = 13 + object RightPanel: TPanel + Left = 405 + Top = 1 + Width = 172 + Height = 521 + Align = alRight + Alignment = taLeftJustify + BevelOuter = bvNone TabOrder = 1 - OnChange = cbTransformsChange - end - object PageControl: TPageControl - Left = 10 - Top = 148 - Width = 167 - Height = 277 - ActivePage = TabSheet1 - Anchors = [akLeft, akTop, akRight, akBottom] - MultiLine = True - TabOrder = 2 - TabStop = False - object TabSheet1: TTabSheet - Caption = 'Triangle' - object TriangleScrollBox: TScrollBox - Left = 0 - Top = 0 - Width = 159 - Height = 231 - HorzScrollBar.Visible = False - VertScrollBar.Position = 127 - VertScrollBar.Smooth = True - VertScrollBar.Style = ssFlat - VertScrollBar.Tracking = True - Align = alClient - BevelInner = bvNone - BevelOuter = bvNone - BorderStyle = bsNone + object Splitter2: TSplitter + Left = 0 + Top = 128 + Width = 172 + Height = 8 + Cursor = crVSplit + Align = alTop + AutoSnap = False + Beveled = True + MinSize = 130 + OnMoved = splitterMoved + end + object PrevPnl: TPanel + Left = 0 + Top = 0 + Width = 172 + Height = 128 + Align = alTop + BevelOuter = bvLowered + Color = clAppWorkSpace + TabOrder = 1 + object PreviewImage: TImage + Left = 1 + Top = 1 + Width = 170 + Height = 126 + IncrementalDisplay = True + PopupMenu = QualityPopup + OnDblClick = PreviewImageDblClick + end + end + object ControlPanel: TPanel + Left = 0 + Top = 136 + Width = 172 + Height = 385 + Align = alClient + TabOrder = 0 + object lblTransform: TLabel + Left = 26 + Top = 8 + Width = 59 + Height = 13 + Caption = 'Transform' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + end + object cbTransforms: TComboBox + Left = 91 + Top = 4 + Width = 57 + Height = 19 + Style = csOwnerDrawFixed + Color = clBlack + DropDownCount = 12 + ItemHeight = 13 + TabOrder = 1 + TabStop = False + OnChange = cbTransformsChange + OnDrawItem = cbTransformsDrawItem + OnKeyDown = cbKeyDown + end + object PageControl: TPageControl + Left = 1 + Top = 26 + Width = 170 + Height = 358 + ActivePage = TriangleTab + Align = alBottom + Anchors = [akLeft, akTop, akRight, akBottom] + MultiLine = True TabOrder = 0 - object TrianglePanel: TPanel - Left = 0 - Top = -127 - Width = 155 - Height = 400 - BevelOuter = bvNone - TabOrder = 0 - object Label9: TLabel - Left = 6 - Top = 54 - Width = 16 + TabStop = False + object TriangleTab: TTabSheet + Caption = 'Triangle' + object TriangleScrollBox: TScrollBox + Left = 0 + Top = 0 + Width = 162 + Height = 312 + HorzScrollBar.Visible = False + VertScrollBar.Smooth = True + VertScrollBar.Style = ssFlat + VertScrollBar.Tracking = True + Align = alClient + BevelInner = bvNone + BevelOuter = bvNone + BorderStyle = bsNone + TabOrder = 0 + object TrianglePanel: TPanel + Left = 0 + Top = 0 + Width = 158 + Height = 305 + BevelOuter = bvNone + TabOrder = 0 + object Label9: TLabel + Left = 4 + Top = 32 + Width = 10 + Height = 13 + Caption = 'B:' + end + object Label7: TLabel + Left = 4 + Top = 8 + Width = 11 + Height = 13 + Caption = 'A:' + end + object Label11: TLabel + Left = 4 + Top = 56 + Width = 11 + Height = 13 + Caption = 'C:' + end + object btTrgRotateRight: TSpeedButton + Left = 106 + Top = 102 + Width = 23 + Height = 24 + Hint = 'Rotate triangle clockwise' + Flat = True + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 04000000000080000000130B0000130B00001000000000000000000000000000 + 8000008000000080800080000000800080008080000080808000C0C0C0000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF + FFFF77FFFFFFFFFFFFFF70FFFFFFFFFFFFFF708FFFFFFFFFFFFF707FFFFFFFFF + FFFF7007FFFFFFFFFFFFF0007FFFFF7FFFFFF7000788FF70FFFFF80000077770 + 0FFFFF770000000000FFFFF770000000000FFFFF777000000078FFFFF8777770 + 078FFFFFFFFF870078FFFFFFFFFFFF778FFFFFFFFFFFFF78FFFF} + ParentShowHint = False + ShowHint = True + OnClick = btTrgRotateRightClick + end + object btTrgRotateLeft: TSpeedButton + Left = 32 + Top = 102 + Width = 23 + Height = 24 + Hint = 'Rotate triangle counter clockwise' + Flat = True + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080808080FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF000000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000404040FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF404040000000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000000000808080FFFFFFFFFFFF + FFFFFFFFFFFFE0E0E0606060FFFFFFFFFFFFFFFFFFFFFFFFE0E0E08080800000 + 00000000000000E0E0E0FFFFFFFFFFFFFFFFFFE0E0E0202020404040FFFFFFE0 + E0E0C0C0C0A0A0A0404040000000000000000000404040FFFFFFFFFFFFFFFFFF + E0E0E02020200000004040408080804040404040400000000000000000000000 + 00000000C0C0C0FFFFFFFFFFFFE0E0E020202000000000000000000000000000 + 0000000000000000000000000000404040404040FFFFFFFFFFFFFFFFFF202020 + 0000000000000000000000000000000000000000000000000000004040408080 + 80FFFFFFFFFFFFFFFFFFC0C0C080808000000000000000000000000000000000 + 0000000000404040808080808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0 + 808080000000000000404040808080808080808080808080C0C0C0FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0808080000000202020808080C0 + C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFC0C0C0808080404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0808080FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} + ParentShowHint = False + ShowHint = True + OnClick = btTrgRotateLeftClick + end + object btTrgMoveUp: TSpeedButton + Left = 68 + Top = 129 + Width = 25 + Height = 25 + Hint = 'Move triangle up' + Flat = True + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040000000C0C0C0FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 + 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000808080FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 + 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000808080FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 + 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF808080C0C0C0FFFFFFFFFFFF000000000000808080FFFFFFFFFFFF4040 + 40FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000404040C0C0C000 + 0000000000808080808080000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF808080000000000000000000000000000000000000000000FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000 + 0000000000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF808080000000000000000000000000000000FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 + 0000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000000000FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 + 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} + ParentShowHint = False + ShowHint = True + OnClick = btTrgMoveUpClick + end + object btTrgMoveRight: TSpeedButton + Left = 106 + Top = 154 + Width = 25 + Height = 25 + Hint = 'Move triangle right' + Flat = True + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40404080 + 8080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000808080FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 + 8080000000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0808080 + 8080808080808080808080808080808080800000000000000000000000000000 + 00808080FFFFFFFFFFFF00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000808080404040000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 + C0C0000000000000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040000000000000808080FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C000 + 0000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} + ParentShowHint = False + ShowHint = True + OnClick = btTrgMoveRightClick + end + object btTrgMoveLeft: TSpeedButton + Left = 30 + Top = 154 + Width = 25 + Height = 25 + Hint = 'Move triangle left' + Flat = True + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF808080404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80808000000000000000 + 0000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 8080800000000000000000000000000000008080808080808080808080808080 + 80808080808080C0C0C080808000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF808080 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000404040FFFFFFFFFFFFFFFFFF80808000000000000000000000 + 0000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF808080000000000000404040FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 + 8080000000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} + ParentShowHint = False + ShowHint = True + OnClick = btTrgMoveLeftClick + end + object btTrgMoveDown: TSpeedButton + Left = 68 + Top = 179 + Width = 25 + Height = 25 + Hint = 'Move triangle down' + Flat = True + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 + 0000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 + 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF808080000000000000000000000000FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000 + 0000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF808080000000000000000000000000000000000000FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000 + 0000000000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF808080000000808080808080000000000000C0C0C0404040000000FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040FFFFFFFFFFFF80808000 + 0000000000FFFFFFFFFFFFC0C0C0808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80808000 + 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80808000 + 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C000 + 0000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} + ParentShowHint = False + ShowHint = True + OnClick = btTrgMoveDownClick + end + object btTrgScaleUp: TSpeedButton + Left = 106 + Top = 206 + Width = 23 + Height = 24 + Hint = 'Scale triangle up' + Flat = True + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000000000000000000000000 + 8000008000000080800080000000800080008080000080808000C0C0C0000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF + FFFFF00000000000000FF00000000000000FFF000FFFFFFFF00FFFF000FFFFFF + F00FFFFF000FFFFFF00FFFFFF000FFFFF00FFFFFFF000FFFF00FFFFFFFF000FF + F00FFFFFFFFF000FF00FFFFFFFFFF000F00FFFFFFFFFFF00000FFFFFFFFFFFF0 + 000FFFFFFFFFFFFF000FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFF} + ParentShowHint = False + ShowHint = True + OnClick = btTrgScaleUpClick + end + object btTrgScaleDown: TSpeedButton + Left = 32 + Top = 206 + Width = 23 + Height = 24 + Hint = 'Scale triangle down' + Flat = True + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000000000000000000000000 + 8000008000000080800080000000800080008080000080808000C0C0C0000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000 + 0FFFF000000000000FFFFF0000FFFFF00FFFFFF0000FFFF00FFFFFFFF000FFF0 + 0FFFFFFFFF000FF00FFFFFFFFFF000000FFFFFFFFFFF00000FFFFFFFFFFFFF00 + 0FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} + ParentShowHint = False + ShowHint = True + OnClick = btTrgScaleDownClick + end + object btTrgRotateRight90: TSpeedButton + Left = 132 + Top = 102 + Width = 23 + Height = 24 + Hint = 'Rotate triangle clockwise 90'#176 + Flat = True + Glyph.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 08000000000000010000C40E0000C40E00000001000000000000000000000000 + 8000008000000080800080000000800080008080000080808000C0C0C0000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000003300 + 00006600000099000000CC000000FF0000000033000033330000663300009933 + 0000CC330000FF33000000660000336600006666000099660000CC660000FF66 + 000000990000339900006699000099990000CC990000FF99000000CC000033CC + 000066CC000099CC0000CCCC0000FFCC000000FF000033FF000066FF000099FF + 0000CCFF0000FFFF000000003300330033006600330099003300CC003300FF00 + 330000333300333333006633330099333300CC333300FF333300006633003366 + 33006666330099663300CC663300FF6633000099330033993300669933009999 + 3300CC993300FF99330000CC330033CC330066CC330099CC3300CCCC3300FFCC + 330000FF330033FF330066FF330099FF3300CCFF3300FFFF3300000066003300 + 66006600660099006600CC006600FF0066000033660033336600663366009933 + 6600CC336600FF33660000666600336666006666660099666600CC666600FF66 + 660000996600339966006699660099996600CC996600FF99660000CC660033CC + 660066CC660099CC6600CCCC6600FFCC660000FF660033FF660066FF660099FF + 6600CCFF6600FFFF660000009900330099006600990099009900CC009900FF00 + 990000339900333399006633990099339900CC339900FF339900006699003366 + 99006666990099669900CC669900FF6699000099990033999900669999009999 + 9900CC999900FF99990000CC990033CC990066CC990099CC9900CCCC9900FFCC + 990000FF990033FF990066FF990099FF9900CCFF9900FFFF99000000CC003300 + CC006600CC009900CC00CC00CC00FF00CC000033CC003333CC006633CC009933 + CC00CC33CC00FF33CC000066CC003366CC006666CC009966CC00CC66CC00FF66 + CC000099CC003399CC006699CC009999CC00CC99CC00FF99CC0000CCCC0033CC + CC0066CCCC0099CCCC00CCCCCC00FFCCCC0000FFCC0033FFCC0066FFCC0099FF + CC00CCFFCC00FFFFCC000000FF003300FF006600FF009900FF00CC00FF00FF00 + FF000033FF003333FF006633FF009933FF00CC33FF00FF33FF000066FF003366 + FF006666FF009966FF00CC66FF00FF66FF000099FF003399FF006699FF009999 + FF00CC99FF00FF99FF0000CCFF0033CCFF0066CCFF0099CCFF00CCCCFF00FFCC + FF0000FFFF0033FFFF0066FFFF0099FFFF00CCFFFF00FFFFFF000F0F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F07000007 + 0F0F0F0F0F0F0F0F0F0F0F0F070000070F0F0F0F0F0F0F0F0F0F0F0F07000007 + 0F0F0F0F0F0F0F0F0F0F0F0F070000070F0F0F0FD40F0F0F0F0F0F0F07000007 + 0F0F0F0F7ED40F0F0F0F0F0F070000070F0F0F0F5353D40F0F0F0F0F07000007 + 0F0F0F0F530053D40F0F0F0F070000070707070700000053D40F0F0F07000000 + 0000000000000000530F0F0F07000000000000000000000007080F0F07070707 + 0707070700000007080F0F0F0F0F0F0F0F0F0F0F000007080F0F0F0F0F0F0F0F + 0F0F0F0F0007080F0F0F0F0F0F0F0F0F0F0F0F0F00080F0F0F0F} + ParentShowHint = False + ShowHint = True + OnClick = btTrgRotateRight90Click + end + object btTrgRotateLeft90: TSpeedButton + Left = 6 + Top = 102 + Width = 23 + Height = 24 + Hint = 'Rotate triangle counter clockwise 90'#176 + Flat = True + Glyph.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 08000000000000010000C40E0000C40E00000001000000000000000000000000 + 8000008000000080800080000000800080008080000080808000C0C0C0000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000003300 + 00006600000099000000CC000000FF0000000033000033330000663300009933 + 0000CC330000FF33000000660000336600006666000099660000CC660000FF66 + 000000990000339900006699000099990000CC990000FF99000000CC000033CC + 000066CC000099CC0000CCCC0000FFCC000000FF000033FF000066FF000099FF + 0000CCFF0000FFFF000000003300330033006600330099003300CC003300FF00 + 330000333300333333006633330099333300CC333300FF333300006633003366 + 33006666330099663300CC663300FF6633000099330033993300669933009999 + 3300CC993300FF99330000CC330033CC330066CC330099CC3300CCCC3300FFCC + 330000FF330033FF330066FF330099FF3300CCFF3300FFFF3300000066003300 + 66006600660099006600CC006600FF0066000033660033336600663366009933 + 6600CC336600FF33660000666600336666006666660099666600CC666600FF66 + 660000996600339966006699660099996600CC996600FF99660000CC660033CC + 660066CC660099CC6600CCCC6600FFCC660000FF660033FF660066FF660099FF + 6600CCFF6600FFFF660000009900330099006600990099009900CC009900FF00 + 990000339900333399006633990099339900CC339900FF339900006699003366 + 99006666990099669900CC669900FF6699000099990033999900669999009999 + 9900CC999900FF99990000CC990033CC990066CC990099CC9900CCCC9900FFCC + 990000FF990033FF990066FF990099FF9900CCFF9900FFFF99000000CC003300 + CC006600CC009900CC00CC00CC00FF00CC000033CC003333CC006633CC009933 + CC00CC33CC00FF33CC000066CC003366CC006666CC009966CC00CC66CC00FF66 + CC000099CC003399CC006699CC009999CC00CC99CC00FF99CC0000CCCC0033CC + CC0066CCCC0099CCCC00CCCCCC00FFCCCC0000FFCC0033FFCC0066FFCC0099FF + CC00CCFFCC00FFFFCC000000FF003300FF006600FF009900FF00CC00FF00FF00 + FF000033FF003333FF006633FF009933FF00CC33FF00FF33FF000066FF003366 + FF006666FF009966FF00CC66FF00FF66FF000099FF003399FF006699FF009999 + FF00CC99FF00FF99FF0000CCFF0033CCFF0066CCFF0099CCFF00CCCCFF00FFCC + FF0000FFFF0033FFFF0066FFFF0099FFFF00CCFFFF00FFFFFF000F0F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F + 0F0F0F0F070000070F0F0F0F0F0F0F0F0F0F0F0F070000070F0F0F0F0F0F0F0F + 0F0F0F0F070000070F0F0F0F0F0F0FD40F0F0F0F070000070F0F0F0F0F0FD47E + 0F0F0F0F070000070F0F0F0F0FD453530F0F0F0F070000070F0F0F0FD4530053 + 0F0F0F0F070000070F0F0FD45300000007070707070000070F0F0F5300000000 + 00000000000000070F0F08070000000000000000000000070F0F0F0807000000 + 07070707070707070F0F0F0F080700000F0F0F0F0F0F0F0F0F0F0F0F0F080700 + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F08000F0F0F0F0F0F0F0F0F0F} + ParentShowHint = False + ShowHint = True + OnClick = btTrgRotateLeft90Click + end + object btTrgMoveLU: TSpeedButton + Left = 42 + Top = 129 + Width = 25 + Height = 25 + Hint = 'Move triangle left-up' + Flat = True + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000120B0000120B00000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 + 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF686868FFFFFFFFFFFFFFFFFFFFFFFF0000000000000E0E + 0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030303686868FF + FFFFFFFFFF000000000000161616FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF000000000000686868000000000000000000FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B2B2B00000000000000 + 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF040404000000000000030303000000686868FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68686800000000000000000000 + 0000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF2828280000000000000000000000000000000F0F0F000000686868FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000016 + 1616404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 686868161616070707303030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000005A5A5AFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} + ParentShowHint = False + ShowHint = True + OnClick = btTrgMoveLUClick + end + object btTrgMoveLD: TSpeedButton + Left = 42 + Top = 179 + Width = 25 + Height = 25 + Hint = 'Move triangle left-down' + Flat = True + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000120B0000120B00000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 0000005A5A5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF686868161616070707303030FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000000000000000000000161616404040FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28282800000000000000000000 + 00000000000F0F0F000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF686868000000000000000000000000000000000000686868FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04040400000000000003 + 0303000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF2B2B2B000000000000000000000000000000FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000068 + 6868000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF030303686868FFFFFFFFFFFF000000000000161616FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF686868FFFFFFFF + FFFFFFFFFFFFFFFF0000000000000E0E0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 + 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} + ParentShowHint = False + ShowHint = True + OnClick = btTrgMoveLDClick + end + object btTrgMoveRU: TSpeedButton + Left = 94 + Top = 129 + Width = 25 + Height = 25 + Hint = 'Move triangle right-up' + Flat = True + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000120B0000120B00000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF0E0E0E000000000000FFFFFFFFFFFFFFFFFFFFFFFF686868FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000FF + FFFFFFFFFF686868030303FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF000000000000000000686868000000000000FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 + 00000000000000000000002B2B2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF686868000000030303000000000000040404FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68686800000000 + 0000000000000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF6868680000000F0F0F0000000000000000000000000000002828 + 28FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 + 4040161616000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3030300707071616 + 16686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF5A5A5A000000FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} + ParentShowHint = False + ShowHint = True + OnClick = btTrgMoveRUClick + end + object btTrgMoveRD: TSpeedButton + Left = 94 + Top = 179 + Width = 25 + Height = 25 + Hint = 'Move triangle right-down' + Flat = True + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000120B0000120B00000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A5A + 5A000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF303030070707161616686868FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4040401616160000000000000000000000 + 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6868680000000F0F0F00 + 0000000000000000000000000000282828FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF6868680000000000000000000000000000000000006868 + 68FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68686800 + 0000030303000000000000040404FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000002B2B2BFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000 + 0000686868000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF161616000000000000FFFFFFFFFFFF686868030303FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E0E0E000000000000FFFFFFFF + FFFFFFFFFFFFFFFF686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} + ParentShowHint = False + ShowHint = True + OnClick = btTrgMoveRDClick + end + object txtCy: TEdit + Left = 88 + Top = 52 + Width = 66 + Height = 21 + AutoSelect = False + TabOrder = 5 + Text = '0' + OnExit = CornerEditExit + OnKeyPress = CornerEditKeyPress + end + object txtCx: TEdit + Left = 20 + Top = 52 + Width = 65 + Height = 21 + AutoSelect = False + TabOrder = 4 + Text = '0' + OnExit = CornerEditExit + OnKeyPress = CornerEditKeyPress + end + object txtBy: TEdit + Left = 88 + Top = 28 + Width = 65 + Height = 21 + AutoSelect = False + TabOrder = 3 + Text = '0' + OnExit = CornerEditExit + OnKeyPress = CornerEditKeyPress + end + object txtBx: TEdit + Left = 20 + Top = 28 + Width = 65 + Height = 21 + AutoSelect = False + TabOrder = 2 + Text = '0' + OnExit = CornerEditExit + OnKeyPress = CornerEditKeyPress + end + object txtAy: TEdit + Left = 88 + Top = 4 + Width = 65 + Height = 21 + AutoSelect = False + TabOrder = 1 + Text = '0' + OnExit = CornerEditExit + OnKeyPress = CornerEditKeyPress + end + object txtAx: TEdit + Left = 20 + Top = 4 + Width = 65 + Height = 21 + AutoSelect = False + TabOrder = 0 + Text = '0' + OnExit = CornerEditExit + OnKeyPress = CornerEditKeyPress + end + object chkPreserve: TCheckBox + Left = 32 + Top = 80 + Width = 105 + Height = 17 + Caption = 'Preserve weights' + Checked = True + State = cbChecked + TabOrder = 6 + end + object rgPivot: TRadioGroup + Left = 16 + Top = 240 + Width = 129 + Height = 65 + BiDiMode = bdLeftToRight + Caption = 'Triangle Pivot' + Columns = 2 + Ctl3D = True + ItemIndex = 1 + Items.Strings = ( + 'A' + 'B' + 'C' + 'Center' + '(0;0)') + ParentBiDiMode = False + ParentCtl3D = False + TabOrder = 7 + OnClick = rgPivotClicked + end + object txtTrgMoveValue: TComboBox + Left = 56 + Top = 156 + Width = 49 + Height = 21 + ItemHeight = 13 + ItemIndex = 3 + TabOrder = 9 + Text = '0.1' + Items.Strings = ( + '1' + '0.5' + '0.25' + '0.1' + '0.05' + '0.025' + '0.01') + end + object txtTrgRotateValue: TComboBox + Left = 56 + Top = 104 + Width = 49 + Height = 21 + ItemHeight = 13 + ItemIndex = 1 + TabOrder = 8 + Text = '15' + Items.Strings = ( + '5' + '15' + '30' + '45' + '90' + '180') + end + object txtTrgScaleValue: TComboBox + Left = 56 + Top = 208 + Width = 49 + Height = 21 + ItemHeight = 13 + ItemIndex = 1 + TabOrder = 10 + Text = '0.1' + Items.Strings = ( + '0.05' + '0.1' + '0.25' + '0.5' + '0.75' + '0.9') + end + end + end + end + object tabXForm: TTabSheet + Caption = 'Transform' + object lbla: TLabel + Left = 9 + Top = 12 + Width = 10 Height = 13 - Caption = 'Bx:' + Caption = 'a:' end - object Label8: TLabel - Left = 6 - Top = 30 - Width = 17 + object Label1: TLabel + Left = 9 + Top = 36 + Width = 10 Height = 13 - Caption = 'Ay:' + Caption = 'b:' end - object Label7: TLabel - Left = 6 - Top = 6 - Width = 17 + object Label2: TLabel + Left = 9 + Top = 60 + Width = 9 Height = 13 - Caption = 'Ax:' + Caption = 'c:' end - object Label12: TLabel - Left = 6 - Top = 126 - Width = 17 + object Label3: TLabel + Left = 9 + Top = 84 + Width = 10 Height = 13 - Caption = 'Cy:' + Caption = 'd:' end - object Label11: TLabel - Left = 6 - Top = 102 - Width = 17 + object Label4: TLabel + Left = 9 + Top = 108 + Width = 10 Height = 13 - Caption = 'Cx:' + Caption = 'e:' end - object Label10: TLabel - Left = 6 - Top = 78 - Width = 16 + object Label5: TLabel + Left = 9 + Top = 132 + Width = 8 Height = 13 - Caption = 'By:' + Caption = 'f:' end - object btTrgRotateRight: TSpeedButton - Left = 90 - Top = 240 - Width = 33 - Height = 24 - Hint = 'Rotate triangle clockwise around its center' - Flat = True - Glyph.Data = { - F6000000424DF600000000000000760000002800000010000000100000000100 - 04000000000080000000130B0000130B00001000000000000000000000000000 - 8000008000000080800080000000800080008080000080808000C0C0C0000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF - FFFF77FFFFFFFFFFFFFF70FFFFFFFFFFFFFF708FFFFFFFFFFFFF707FFFFFFFFF - FFFF7007FFFFFFFFFFFFF0007FFFFF7FFFFFF7000788FF70FFFFF80000077770 - 0FFFFF770000000000FFFFF770000000000FFFFF777000000078FFFFF8777770 - 078FFFFFFFFF870078FFFFFFFFFFFF778FFFFFFFFFFFFF78FFFF} - ParentShowHint = False - ShowHint = True - OnClick = btTrgRotateRightClick + object Label6: TLabel + Left = 9 + Top = 156 + Width = 38 + Height = 13 + Caption = 'Weight:' end - object btTrgRotateLeft: TSpeedButton - Left = 22 - Top = 240 - Width = 33 - Height = 24 - Hint = 'Rotate triangle counter clockwise around its center' - Flat = True - Glyph.Data = { - 36030000424D3603000000000000360000002800000010000000100000000100 - 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080808080FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFF000000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000404040FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FF404040000000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000000000808080FFFFFFFFFFFF - FFFFFFFFFFFFE0E0E0606060FFFFFFFFFFFFFFFFFFFFFFFFE0E0E08080800000 - 00000000000000E0E0E0FFFFFFFFFFFFFFFFFFE0E0E0202020404040FFFFFFE0 - E0E0C0C0C0A0A0A0404040000000000000000000404040FFFFFFFFFFFFFFFFFF - E0E0E02020200000004040408080804040404040400000000000000000000000 - 00000000C0C0C0FFFFFFFFFFFFE0E0E020202000000000000000000000000000 - 0000000000000000000000000000404040404040FFFFFFFFFFFFFFFFFF202020 - 0000000000000000000000000000000000000000000000000000004040408080 - 80FFFFFFFFFFFFFFFFFFC0C0C080808000000000000000000000000000000000 - 0000000000404040808080808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0 - 808080000000000000404040808080808080808080808080C0C0C0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0808080000000202020808080C0 - C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFC0C0C0808080404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0808080FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} - ParentShowHint = False - ShowHint = True - OnClick = btTrgRotateLeftClick + object Label29: TLabel + Left = 9 + Top = 180 + Width = 52 + Height = 13 + Caption = 'Symmetry:' end - object btTrgMoveUp: TSpeedButton - Left = 56 - Top = 282 - Width = 33 - Height = 24 - Hint = 'Move triangle up' - Flat = True - Glyph.Data = { - 36030000424D3603000000000000360000002800000010000000100000000100 - 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040000000C0C0C0FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 - 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000808080FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 - 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000808080FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 - 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFF808080C0C0C0FFFFFFFFFFFF000000000000808080FFFFFFFFFFFF4040 - 40FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000404040C0C0C000 - 0000000000808080808080000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFF808080000000000000000000000000000000000000000000FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000 - 0000000000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFF808080000000000000000000000000000000FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 - 0000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000000000FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 - 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} - ParentShowHint = False - ShowHint = True - OnClick = btTrgMoveUpClick - end - object btTrgMoveRight: TSpeedButton - Left = 90 - Top = 306 - Width = 33 - Height = 24 - Hint = 'Move triangle right' - Flat = True - Glyph.Data = { - 36030000424D3603000000000000360000002800000010000000100000000100 - 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40404080 - 8080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000808080FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 - 8080000000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0808080 - 8080808080808080808080808080808080800000000000000000000000000000 - 00808080FFFFFFFFFFFF00000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000808080404040000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 - C0C0000000000000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040000000000000808080FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C000 - 0000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} - ParentShowHint = False - ShowHint = True - OnClick = btTrgMoveRightClick - end - object btTrgMoveLeft: TSpeedButton - Left = 22 - Top = 306 - Width = 33 - Height = 24 - Hint = 'Move triangle left' - Flat = True - Glyph.Data = { - 36030000424D3603000000000000360000002800000010000000100000000100 - 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFF808080404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80808000000000000000 - 0000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - 8080800000000000000000000000000000008080808080808080808080808080 - 80808080808080C0C0C080808000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000FFFFFF808080 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000404040FFFFFFFFFFFFFFFFFF80808000000000000000000000 - 0000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFF808080000000000000404040FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 - 8080000000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} - ParentShowHint = False - ShowHint = True - OnClick = btTrgMoveLeftClick - end - object btTrgMoveDown: TSpeedButton - Left = 56 - Top = 330 - Width = 33 - Height = 24 - Hint = 'Move triangle down' - Flat = True - Glyph.Data = { - 36030000424D3603000000000000360000002800000010000000100000000100 - 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 - 0000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 - 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFF808080000000000000000000000000FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000 - 0000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFF808080000000000000000000000000000000000000FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000 - 0000000000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFF808080000000808080808080000000000000C0C0C0404040000000FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040FFFFFFFFFFFF80808000 - 0000000000FFFFFFFFFFFFC0C0C0808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80808000 - 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80808000 - 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C000 - 0000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} - ParentShowHint = False - ShowHint = True - OnClick = btTrgMoveDownClick - end - object btTrgScaleUp: TSpeedButton - Left = 90 - Top = 374 - Width = 33 - Height = 24 - Hint = 'Scale triangle up' - Flat = True - Glyph.Data = { - F6000000424DF600000000000000760000002800000010000000100000000100 - 0400000000008000000000000000000000001000000000000000000000000000 - 8000008000000080800080000000800080008080000080808000C0C0C0000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF - FFFFF00000000000000FF00000000000000FFF000FFFFFFFF00FFFF000FFFFFF - F00FFFFF000FFFFFF00FFFFFF000FFFFF00FFFFFFF000FFFF00FFFFFFFF000FF - F00FFFFFFFFF000FF00FFFFFFFFFF000F00FFFFFFFFFFF00000FFFFFFFFFFFF0 - 000FFFFFFFFFFFFF000FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFF} - ParentShowHint = False - ShowHint = True - OnClick = btTrgScaleUpClick - end - object btTrgScaleDown: TSpeedButton - Left = 22 - Top = 374 - Width = 33 - Height = 24 - Hint = 'Scale triangle down' - Flat = True - Glyph.Data = { - F6000000424DF600000000000000760000002800000010000000100000000100 - 0400000000008000000000000000000000001000000000000000000000000000 - 8000008000000080800080000000800080008080000080808000C0C0C0000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000 - 0FFFF000000000000FFFFF0000FFFFF00FFFFFF0000FFFF00FFFFFFFF000FFF0 - 0FFFFFFFFF000FF00FFFFFFFFFF000000FFFFFFFFFFF00000FFFFFFFFFFFFF00 - 0FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} - ParentShowHint = False - ShowHint = True - OnClick = btTrgScaleDownClick - end - object txtTrgRotateValue: TEdit - Left = 56 - Top = 240 - Width = 33 - Height = 21 - TabOrder = 7 - Text = '5' - end - object txtTrgMoveValue: TEdit - Left = 56 - Top = 306 - Width = 33 - Height = 21 - TabOrder = 8 - Text = '0.05' - end - object txtCy: TEdit - Left = 28 - Top = 122 + object txtA: TEdit + Left = 32 + Top = 8 Width = 110 Height = 21 - AutoSelect = False - TabOrder = 5 - Text = '0' - OnExit = CornerEditExit - OnKeyPress = CornerEditKeyPress - end - object txtCx: TEdit - Left = 28 - Top = 98 - Width = 110 - Height = 21 - AutoSelect = False - TabOrder = 4 - Text = '0' - OnExit = CornerEditExit - OnKeyPress = CornerEditKeyPress - end - object txtBy: TEdit - Left = 28 - Top = 74 - Width = 110 - Height = 21 - AutoSelect = False - TabOrder = 3 - Text = '0' - OnExit = CornerEditExit - OnKeyPress = CornerEditKeyPress - end - object txtBx: TEdit - Left = 28 - Top = 50 - Width = 110 - Height = 21 - AutoSelect = False - TabOrder = 2 - Text = '0' - OnExit = CornerEditExit - OnKeyPress = CornerEditKeyPress - end - object txtAy: TEdit - Left = 28 - Top = 26 - Width = 110 - Height = 21 - AutoSelect = False - TabOrder = 1 - Text = '0' - OnExit = CornerEditExit - OnKeyPress = CornerEditKeyPress - end - object txtAx: TEdit - Left = 28 - Top = 2 - Width = 110 - Height = 21 - AutoSelect = False TabOrder = 0 Text = '0' - OnExit = CornerEditExit - OnKeyPress = CornerEditKeyPress + OnExit = CoefExit + OnKeyPress = CoefKeyPress end - object chkPreserve: TCheckBox - Left = 8 - Top = 152 - Width = 105 - Height = 17 - Caption = 'Preserve weights' - Checked = True - State = cbChecked - TabOrder = 6 - end - object txtTrgScaleValue: TEdit - Left = 56 - Top = 376 - Width = 33 + object txtB: TEdit + Left = 32 + Top = 32 + Width = 110 Height = 21 - TabOrder = 9 - Text = '0.1' + TabOrder = 1 + Text = '0' + OnExit = CoefExit + OnKeyPress = CoefKeyPress end - object rgPivot: TRadioGroup - Left = 8 + object txtC: TEdit + Left = 32 + Top = 56 + Width = 110 + Height = 21 + TabOrder = 2 + Text = '0' + OnExit = CoefExit + OnKeyPress = CoefKeyPress + end + object txtD: TEdit + Left = 32 + Top = 80 + Width = 110 + Height = 21 + TabOrder = 3 + Text = '0' + OnExit = CoefExit + OnKeyPress = CoefKeyPress + end + object txtE: TEdit + Left = 32 + Top = 104 + Width = 110 + Height = 21 + TabOrder = 4 + Text = '0' + OnExit = CoefExit + OnKeyPress = CoefKeyPress + end + object txtF: TEdit + Left = 32 + Top = 128 + Width = 110 + Height = 21 + TabOrder = 5 + Text = '0' + OnExit = CoefExit + OnKeyPress = CoefKeyPress + end + object txtP: TEdit + Left = 72 + Top = 152 + Width = 70 + Height = 21 + TabOrder = 6 + Text = '0' + OnExit = txtPExit + OnKeyPress = txtPKeyPress + end + object txtSymmetry: TEdit + Left = 72 Top = 176 - Width = 129 - Height = 49 - Caption = ' Rotating pivot : ' - Columns = 2 - Ctl3D = True - ItemIndex = 3 - Items.Strings = ( - 'A' - 'B' - 'C' - 'Center') - ParentCtl3D = False - TabOrder = 10 + Width = 70 + Height = 21 + TabOrder = 7 + Text = '0' + OnExit = txtSymmetryExit + OnKeyPress = txtSymmetryKeyPress end end - end - end - object XForm: TTabSheet - Caption = 'Transform' - object lbla: TLabel - Left = 9 - Top = 12 - Width = 10 - Height = 13 - Caption = 'a:' - end - object Label1: TLabel - Left = 9 - Top = 36 - Width = 10 - Height = 13 - Caption = 'b:' - end - object Label2: TLabel - Left = 9 - Top = 60 - Width = 9 - Height = 13 - Caption = 'c:' - end - object Label3: TLabel - Left = 9 - Top = 84 - Width = 10 - Height = 13 - Caption = 'd:' - end - object Label4: TLabel - Left = 9 - Top = 108 - Width = 10 - Height = 13 - Caption = 'e:' - end - object Label5: TLabel - Left = 9 - Top = 132 - Width = 8 - Height = 13 - Caption = 'f:' - end - object Label6: TLabel - Left = 9 - Top = 156 - Width = 38 - Height = 13 - Caption = 'Weight:' - end - object Label29: TLabel - Left = 9 - Top = 180 - Width = 52 - Height = 13 - Caption = 'Symmetry:' - end - object txtA: TEdit - Left = 32 - Top = 8 - Width = 110 - Height = 21 - TabOrder = 0 - Text = '0' - OnExit = CoefExit - OnKeyPress = CoefKeyPress - end - object txtB: TEdit - Left = 32 - Top = 32 - Width = 110 - Height = 21 - TabOrder = 1 - Text = '0' - OnExit = CoefExit - OnKeyPress = CoefKeyPress - end - object txtC: TEdit - Left = 32 - Top = 56 - Width = 110 - Height = 21 - TabOrder = 2 - Text = '0' - OnExit = CoefExit - OnKeyPress = CoefKeyPress - end - object txtD: TEdit - Left = 32 - Top = 80 - Width = 110 - Height = 21 - TabOrder = 3 - Text = '0' - OnExit = CoefExit - OnKeyPress = CoefKeyPress - end - object txtE: TEdit - Left = 32 - Top = 104 - Width = 110 - Height = 21 - TabOrder = 4 - Text = '0' - OnExit = CoefExit - OnKeyPress = CoefKeyPress - end - object txtF: TEdit - Left = 32 - Top = 128 - Width = 110 - Height = 21 - TabOrder = 5 - Text = '0' - OnExit = CoefExit - OnKeyPress = CoefKeyPress - end - object txtP: TEdit - Left = 72 - Top = 152 - Width = 70 - Height = 21 - TabOrder = 6 - Text = '0' - OnExit = txtPExit - OnKeyPress = txtPKeyPress - end - object txtSymmetry: TEdit - Left = 72 - Top = 176 - Width = 70 - Height = 21 - TabOrder = 7 - Text = '0' - OnExit = txtSymmetryExit - OnKeyPress = txtSymmetryKeyPress - end - end - object TabSheet3: TTabSheet - Caption = 'Variations' - object VEVars: TValueListEditor - Left = 0 - Top = 0 - Width = 159 - Height = 231 - Align = alClient - ScrollBars = ssVertical - TabOrder = 0 - TitleCaptions.Strings = ( - 'Variation' - 'Value') - OnExit = VEVarsExit - OnKeyPress = VEVarsKeyPress - OnValidate = VEVarsValidate - ColWidths = ( - 93 - 60) - end - end - object TabSheet2: TTabSheet - Caption = 'Colors' - ImageIndex = 3 - object GroupBox1: TGroupBox - Left = 8 - Top = 0 - Width = 145 - Height = 73 - Caption = 'Transform color' - TabOrder = 0 - object scrlXFormColor: TScrollBar - Left = 8 - Top = 48 - Width = 129 - Height = 13 - LargeChange = 10 - PageSize = 0 - TabOrder = 0 - OnChange = scrlXFormColorChange - OnScroll = scrlXFormColorScroll + object tabVariations: TTabSheet + Caption = 'Variations' + object VEVars: TValueListEditor + Left = 0 + Top = 0 + Width = 162 + Height = 312 + Align = alClient + ScrollBars = ssVertical + TabOrder = 0 + TitleCaptions.Strings = ( + 'Variation' + 'Value') + OnDblClick = VEVarsDblClick + OnDrawCell = VEVarsDrawCell + OnExit = VEVarsExit + OnKeyPress = VEVarsKeyPress + OnMouseDown = VEVarsMouseDown + OnMouseMove = VEVarsMouseMove + OnMouseUp = VEVarsMouseUp + OnValidate = VEVarsValidate + ColWidths = ( + 93 + 63) + end end - object pnlXFormColor: TPanel - Left = 8 - Top = 16 - Width = 65 - Height = 25 - BevelOuter = bvLowered - TabOrder = 1 - end - object txtXFormColor: TEdit - Left = 80 - Top = 16 - Width = 57 - Height = 21 - TabOrder = 2 - OnExit = txtXFormColorExit - OnKeyPress = txtXFormColorKeyPress - end - end - object GroupBox2: TGroupBox - Left = 8 - Top = 80 - Width = 145 - Height = 137 - Caption = 'Graph' - TabOrder = 1 - object Label20: TLabel - Left = 8 - Top = 56 - Width = 82 - Height = 13 - Caption = 'Background color' - end - object Label21: TLabel - Left = 8 - Top = 96 - Width = 89 - Height = 13 - Caption = 'Reference triangle' - end - object pnlBackColor: TPanel - Left = 8 - Top = 72 - Width = 129 - Height = 17 - BevelOuter = bvLowered - Color = clBlack - TabOrder = 0 - OnClick = pnlBackColorClick - end - object chkUseXFormColor: TCheckBox - Left = 8 - Top = 16 - Width = 129 - Height = 17 - Caption = 'Use transform color' - TabOrder = 1 - OnClick = chkUseXFormColorClick - end - object chkFlameBack: TCheckBox - Left = 8 - Top = 36 - Width = 129 - Height = 17 - Caption = 'Use flame background' - TabOrder = 2 - OnClick = chkFlameBackClick - end - object pnlReference: TPanel - Left = 8 - Top = 112 - Width = 129 - Height = 17 - BevelOuter = bvLowered - Color = clGray - TabOrder = 3 - OnClick = pnlReferenceClick + object tabColors: TTabSheet + Caption = 'Colors' + ImageIndex = 3 + object GroupBox1: TGroupBox + Left = 8 + Top = 0 + Width = 145 + Height = 97 + Caption = 'Transform color' + TabOrder = 0 + object scrlXFormColor: TScrollBar + Left = 8 + Top = 48 + Width = 129 + Height = 15 + LargeChange = 10 + Max = 256 + PageSize = 0 + TabOrder = 0 + OnChange = scrlXFormColorChange + OnScroll = scrlXFormColorScroll + end + object pnlXFormColor: TPanel + Left = 8 + Top = 16 + Width = 65 + Height = 25 + BevelOuter = bvLowered + TabOrder = 1 + end + object txtXFormColor: TEdit + Left = 80 + Top = 16 + Width = 57 + Height = 21 + TabOrder = 2 + OnExit = txtXFormColorExit + OnKeyPress = txtXFormColorKeyPress + end + object Panel1: TPanel + Left = 8 + Top = 70 + Width = 129 + Height = 19 + BevelOuter = bvLowered + TabOrder = 3 + object ColorImage: TImage + Left = 1 + Top = 1 + Width = 127 + Height = 17 + Cursor = crHandPoint + Align = alClient + OnMouseDown = ColorImageMouseDown + OnMouseMove = ColorImageMouseMove + OnMouseUp = ColorImageMouseUp + end + end + end + object GroupBox2: TGroupBox + Left = 8 + Top = 104 + Width = 145 + Height = 177 + Caption = 'Graph' + TabOrder = 1 + object Label20: TLabel + Left = 8 + Top = 56 + Width = 82 + Height = 13 + Caption = 'Background color' + end + object Label21: TLabel + Left = 8 + Top = 136 + Width = 89 + Height = 13 + Caption = 'Reference triangle' + end + object Label8: TLabel + Left = 8 + Top = 96 + Width = 50 + Height = 13 + Caption = 'Grid colors' + end + object pnlBackColor: TPanel + Left = 8 + Top = 72 + Width = 129 + Height = 17 + BevelOuter = bvLowered + Color = clBlack + TabOrder = 0 + OnClick = pnlBackColorClick + end + object chkUseXFormColor: TCheckBox + Left = 8 + Top = 16 + Width = 129 + Height = 17 + Caption = 'Use transform color' + TabOrder = 1 + OnClick = chkUseXFormColorClick + end + object chkFlameBack: TCheckBox + Left = 8 + Top = 36 + Width = 129 + Height = 17 + Caption = 'Use flame background' + Enabled = False + TabOrder = 2 + OnClick = chkFlameBackClick + end + object pnlReference: TPanel + Left = 8 + Top = 152 + Width = 129 + Height = 17 + BevelOuter = bvLowered + Color = clGray + TabOrder = 3 + OnClick = pnlReferenceClick + end + object pnlGridColor1: TPanel + Left = 8 + Top = 112 + Width = 62 + Height = 17 + BevelOuter = bvLowered + Color = clBlack + TabOrder = 4 + OnClick = pnlGridColor1Click + end + object pnlGridColor2: TPanel + Left = 75 + Top = 112 + Width = 62 + Height = 17 + BevelOuter = bvLowered + Color = clBlack + TabOrder = 5 + OnClick = pnlGridColor2Click + end + end end end end end end object EditPopup: TPopupMenu - Images = MainForm.Buttons - Left = 312 - Top = 8 + AutoPopup = False + Images = EditorTB + Left = 360 + Top = 40 object mnuAutoZoom: TMenuItem Caption = 'Auto Zoom' - Hint = 'Zooms the triangle display to the best fit.' + Hint = 'Zooms the triangle display to the best fit' OnClick = mnuAutoZoomClick end object N1: TMenuItem @@ -862,13 +1486,14 @@ object EditForm: TEditForm end object mnuDelete: TMenuItem Caption = 'Delete' - Hint = 'Deletes the selected triangle.' - ImageIndex = 9 + Hint = 'Deletes the selected triangle' + ImageIndex = 2 OnClick = mnuDeleteClick end object mnuDuplicate: TMenuItem Caption = 'Duplicate' - Hint = 'Duplicates the selected triangle.' + Hint = 'Duplicates the selected triangle' + ImageIndex = 1 OnClick = mnuDupClick end object MenuItem2: TMenuItem @@ -876,37 +1501,23 @@ object EditForm: TEditForm end object mnuAdd: TMenuItem Caption = 'Add' - Hint = 'Adds a new triangle.' + Hint = 'Adds a new triangle' + ImageIndex = 0 OnClick = mnuAddClick end object N4: TMenuItem Caption = '-' end - object mnuRotateRight: TMenuItem - Caption = 'Rotate Right' - OnClick = mnuRotateRightClick - end - object mnuRotateLeft: TMenuItem - Caption = 'Rotate Left' - OnClick = mnuRotateLeftClick - end - object mnuScaleUp: TMenuItem - Caption = 'Scale Up' - OnClick = mnuScaleUpClick - end - object mnuScaleDown: TMenuItem - Caption = 'Scale Down' - OnClick = mnuScaleDownClick - end - object N2: TMenuItem - Caption = '-' - end object mnuFlipVertical: TMenuItem Caption = 'Flip Vertical' + Hint = 'Flip triangle vertical' + ImageIndex = 10 OnClick = mnuFlipVerticalClick end object mnuFlipHorizontal: TMenuItem Caption = 'Flip Horizontal' + Hint = 'Flip triangle horizontal' + ImageIndex = 9 OnClick = mnuFlipHorizontalClick end object N5: TMenuItem @@ -914,41 +1525,40 @@ object EditForm: TEditForm end object mnuVerticalFlipAll: TMenuItem Caption = 'Flip All Vertical ' + Hint = 'Flip all triangles vertical' + ImageIndex = 12 OnClick = mnuVerticalFlipAllClick end object mnuHorizintalFlipAll: TMenuItem Caption = 'Flip All Horizontal' + Hint = 'Flip all triangles horizontal' + ImageIndex = 11 OnClick = mnuHorizintalFlipAllClick end object MenuItem1: TMenuItem Caption = '-' end - object mnuLockSel: TMenuItem - Caption = 'Lock' - OnClick = mnuLockClick - end - object N6: TMenuItem - Caption = '-' - end object mnuUndo: TMenuItem Caption = 'Undo' Enabled = False - ImageIndex = 4 + Hint = 'Undo' + ImageIndex = 3 ShortCut = 16474 OnClick = mnuUndoClick end object mnuRedo: TMenuItem Caption = 'Redo' Enabled = False - ImageIndex = 5 + Hint = 'Redo' + ImageIndex = 4 ShortCut = 16473 OnClick = mnuRedoClick end end object QualityPopup: TPopupMenu Images = MainForm.Buttons - Left = 344 - Top = 8 + Left = 424 + Top = 40 object mnuLowQuality: TMenuItem Caption = 'Low Quality' RadioItem = True @@ -968,10 +1578,549 @@ object EditForm: TEditForm object N3: TMenuItem Caption = '-' end - object mnuResetLocation: TMenuItem + object mnuResetLoc: TMenuItem Caption = 'Reset Location' Checked = True - OnClick = mnuResetLocationClick + OnClick = mnuResetLocClick end end + object EditorTB: TImageList + Left = 361 + Top = 80 + Bitmap = { + 494C01010D000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000004000000001002000000000000040 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800080008000800080008000 + 8000000000000000000080008000800080008000800080008000800080008000 + 8000800080008000800080008000800080000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000800080000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000005C5C + 5C00000000000000000000000000000000000000000000000000000000005C5C + 5C00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00005C5C5C000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000000080000000000000000000 + 0000000000000000000000000000800080000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00005C5C5C0000000000000000000000000000000000000000005C5C5C000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000005C5C5C0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000000080606000800000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000005C5C5C0000000000000000000000000000000000000000000000 + 0000000000005C5C5C000000000000000000000000005C5C5C00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000005C5C5C00000000000000000000000000000000000000 + 0000000000000000000000000000000000008000000000000000806060008000 + 0000000000000000000000000000800080000000000000000000000000000000 + 00005C5C5C000000000000000000000000000000000000000000000000000000 + 000000000000000000005C5C5C00000000005C5C5C0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000005C5C5C000000000000000000000000000000 + 0000000000000000000000000000000000008000000000000000000000008060 + 6000800000000000000000000000000000000000000000000000000000005C5C + 5C00000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000005C5C5C000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000005C5C5C0000000000000000000000 + 0000000000000000000000000000000000008000000000000000000000000000 + 00008060600080000000000000008000800000000000000000005C5C5C000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000005C5C5C00000000000000 + 0000000000000000000000000000000000008000000000000000000000000000 + 000000000000806060008000000000000000000000005C5C5C00000000000000 + 0000000000000000000000000000000000008000800000000000800080000000 + 0000800080000000000080008000000000008000800000000000800080000000 + 0000800080000000000080008000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000005C5C5C000000 + 0000000000000000000000000000000000008000000000000000000000000000 + 00008060600080000000000000008000800000000000000000005C5C5C000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000800000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000005C5C + 5C00000000000000000000000000000000008000000000000000000000008060 + 6000800000000000000000000000000000000000000000000000000000005C5C + 5C00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000080000000806060008000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00005C5C5C000000000000000000000000008000000000000000806060008000 + 0000000000000000000000000000800080000000000000000000000000000000 + 00005C5C5C000000000000000000000000000000000000000000000000000000 + 0000000000008000000080606000000000008060600080000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000000080606000800000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000005C5C5C0000000000000000000000000000000000000000000000 + 0000800000008060600000000000000000000000000080606000800000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000000080000000000000000000 + 0000000000000000000000000000800080000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008000 + 0000806060000000000000000000000000000000000000000000806060008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000800000008060 + 6000000000000000000000000000000000000000000000000000000000008060 + 6000800000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000800080000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000005C5C5C00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000005C5C5C00000000005C5C5C0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000005C5C5C000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00000000000000000000000000FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000600000006000000000000000000000005C5C5C0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000006000 + 000000000000000000000000000000000000000000005C5C5C00000000000000 + 0000000000000000000000000000000000000000000000000000800000000000 + 0000000000000000000000000000000000000000000000000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000006000 + 00000000000000000000000000000000000000000000000000005C5C5C000000 + 0000000000000000000000000000000000000000000000000000800000000000 + 0000000000000000000000000000000000000000000000000000000000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000000000000000000000000000000000005C5C5C000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00005C5C5C000000000000000000000000000000000000000000600000000000 + 0000000000000000000000000000000000000000000000000000000000005C5C + 5C00000000000000000000000000000000000000000000000000800000000000 + 0000000000000000000000000000000000000000000000000000800000000000 + 0000800000008000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000600000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008000 + 0000000000000000000000000000000000008000000080000000000000000000 + 0000000000008000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 00000000000000000000000000000000000000000000000000005C5C5C000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00005C5C5C000000000000000000000000000000000000000000600000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000800000008000000080000000800000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000600000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000006000 + 0000000000000000000000000000000000000000000000000000600000006000 + 0000600000006000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000006000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000600000006000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000005C5C5C00000000005C5C5C0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000600000006000000000000000000000000000000000000000600000006000 + 0000000000006000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000060000000600000006000000060000000000000000000 + 0000000000006000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000005C5C5C00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000005C5C5C00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000005C5C5C00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000005C5C5C000000000000000000000000000000 + 0000000000000000000000000000000000008000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 00000000000000000000000000000000000000000000000000000000C0000000 + 00000000000000000000000000005C5C5C0000000000000000000000C0000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000800000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000005C5C5C0000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 000000000000000000000000000000000000000000000000C0000000C0000000 + C000000000000000000000000000000000005C5C5C000000C0000000C0000000 + C000000000000000000000000000000000000000000000000000800000008000 + 0000800000008000000080000000000000000000000000000000000000000000 + 0000800000000000000000000000000000000000000000000000000000000000 + 000000800000008000000000000000000000000000005C5C5C00000000000000 + 0000000000000000000000000000000000000000000000000000800000008000 + 000080000000000000000000000000000000000000005C5C5C00800000008000 + 00000000000000000000000000000000000000000000000000000000C0000000 + C0000000C0000000000000000000000000000000C0000000C0000000C0000000 + 0000000000000000000000000000000000000000000000000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 0000000000008000000000000000000000000000000000000000000000000000 + 00000080000000800000000000000000000000000000000000005C5C5C000000 + 0000000000000000000000000000000000000000000000000000000000008000 + 0000800000008000000000000000000000000000000000000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + C0000000C0000000C000000000000000C0000000C0000000C0005C5C5C000000 + 0000000000000000000000000000000000000000000000000000800000008000 + 0000800000000000000000000000000000000000000000000000000000000000 + 0000000000008000000000000000000000000000000000000000000000000000 + 0000008000000080000000000000000000000000000000000000000000005C5C + 5C00000000000000000000000000000000000000000000000000000000000000 + 0000800000008000000080000000000000000000000000000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000C0000000C0000000C0000000C0000000C00000000000000000005C5C + 5C00000000000000000000000000000000000000000000000000800000008000 + 0000000000008000000000000000000000000000000000000000000000000000 + 0000000000008000000000000000000000000000000000000000000000000000 + 0000008000000080000000000000000000000000000000000000000000000000 + 00005C5C5C000000000000000000000000000000000000000000000000000000 + 0000000000008000000080000000800000000000000000000000800000008000 + 00005C5C5C000000000000000000000000000000000000000000000000000000 + 0000000000000000C0000000C0000000C0000000000000000000000000000000 + 00005C5C5C000000000000000000000000000000000000000000800000000000 + 0000000000000000000080000000800000000000000000000000000000000000 + 0000800000000000000000000000000000000080000000800000008000000080 + 0000008000000080000000800000008000000080000000800000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000080000000800000008000000000000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000C0000000C0000000C0000000C0000000C00000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000000080000000800000008000 + 0000000000000000000000000000000000000080000000800000008000000080 + 0000008000000080000000800000008000000080000000800000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000800000008000000080000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + C0000000C0000000C000000000000000C0000000C0000000C000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000008000000080000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000000080000000800000008000 + 00000000000000000000000000000000000000000000000000000000C0000000 + C0000000C0000000000000000000000000000000C0000000C0000000C0000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000008000000080000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 000000000000000000000000000000000000000000000000C0000000C0000000 + C00000000000000000000000000000000000000000000000C0000000C0000000 + C000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000008000000080000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000800000008000 + 00000000000000000000000000000000000000000000000000000000C0000000 + 00000000000000000000000000000000000000000000000000000000C0000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000008000000080000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000400000000100010000000000000200000000000000000000 + 000000000000000000000000FFFFFF00FFFF000000000000FFFF000000000000 + FFFF000000000000F3E7000000000000E1E7000000000000C0E7000000000000 + F3E7000000000000F3E70000000000000000000000000000F3E7000000000000 + F3E7000000000000F1C7000000000000F80F000000000000FC1F000000000000 + FFFF000000000000FFFF000000000000FFFFFFFFFFFFFF7F0001FEFF8003FF7F + 80017FFDCFE7FF7FC7F93EF9E7CFE00FE3F91FF1F39FE007F1F94EE5F93FFF63 + F8F967CDFC7FFF73FC79729DFEFFFF73FE39793D5555FB73FF19729DFEFFF363 + FF8967CDFC7FE007FFC14EE5F93FE00FFFE11FF1F39FF37FFFF13EF9E7CFFB7F + FFF97FFDCFE7FF7FFFFDFEFF8003FF7FFFFFFFCFFFFFFFFFFFFFFF87FEFFF007 + FFFFF787FC7FF9F7FFFFF30FF83FFCF7EFFFF00FFEFFF277EF83F01FFEFFEF37 + DFC3F003DEF7EF97DFE3F0079EF3DFC7DFD3F00F0001DFE7EF3BF01F9EF3DFF7 + F0FFF03FDEF7DFFFFFFFF07FFEFFEFC3FFFFF0FFFEFFEFF3FFFFF1FFF83FF3CB + FFFFF3FFFC7FFC3BFFFFF7FFFEFFFFFFFFFFFFFFFFFFFFFFC001C001C001FFFF + E001E001E001FFFFF1F9F1F9F1F9FFFFF8F90009D8D9FFF7FC7980098C09C1F7 + F239C609C619C3FBF319E309E219C7FBF389F189F009CBFBF3C1F8C1F8C1DCF7 + 0021FC41F061FF0F0031FE01E231FFFFF3F9FF09C719FFFFF3FDFF8D8F8DFFFF + F3FFFFCFDFDFFFFFF3FFFFEFFFFFFFFF00000000000000000000000000000000 + 000000000000} + end end diff --git a/2.10/Source/Editor.pas b/2.10/Source/Editor.pas index afcd5dc..3313636 100644 --- a/2.10/Source/Editor.pas +++ b/2.10/Source/Editor.pas @@ -23,7 +23,7 @@ interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls, Math, Menus, ToolWin, Registry, MyTypes, - ControlPoint, Render, cmap, Grids, ValEdit, Buttons; + ControlPoint, Render, cmap, Grids, ValEdit, Buttons, ImgList; const // PixelCountMax = 32768; @@ -39,7 +39,6 @@ type PrevPnl: TPanel; PreviewImage: TImage; EditPopup: TPopupMenu; - mnuLockSel: TMenuItem; MenuItem1: TMenuItem; mnuDelete: TMenuItem; mnuDuplicate: TMenuItem; @@ -54,18 +53,14 @@ type mnuMediumQuality: TMenuItem; mnuHighQuality: TMenuItem; N3: TMenuItem; - mnuResetLocation: TMenuItem; - mnuVerticalFlipAll: TMenuItem; + mnuResetLoc: TMenuItem; N4: TMenuItem; - mnuHorizintalFlipAll: TMenuItem; - N5: TMenuItem; mnuFlipVertical: TMenuItem; mnuFlipHorizontal: TMenuItem; cbTransforms: TComboBox; - N6: TMenuItem; PageControl: TPageControl; - TabSheet1: TTabSheet; - XForm: TTabSheet; + TriangleTab: TTabSheet; + tabXForm: TTabSheet; lbla: TLabel; Label1: TLabel; Label2: TLabel; @@ -82,9 +77,9 @@ type txtF: TEdit; txtP: TEdit; txtSymmetry: TEdit; - TabSheet3: TTabSheet; + tabVariations: TTabSheet; VEVars: TValueListEditor; - TabSheet2: TTabSheet; + tabColors: TTabSheet; GroupBox1: TGroupBox; scrlXFormColor: TScrollBar; pnlXFormColor: TPanel; @@ -96,15 +91,8 @@ type chkUseXFormColor: TCheckBox; chkFlameBack: TCheckBox; pnlReference: TPanel; - N2: TMenuItem; - mnuRotateRight: TMenuItem; - mnuRotateLeft: TMenuItem; - mnuScaleUp: TMenuItem; - mnuScaleDown: TMenuItem; TriangleScrollBox: TScrollBox; TrianglePanel: TPanel; - txtTrgRotateValue: TEdit; - txtTrgMoveValue: TEdit; txtCy: TEdit; txtCx: TEdit; txtBy: TEdit; @@ -112,11 +100,8 @@ type txtAy: TEdit; txtAx: TEdit; Label9: TLabel; - Label8: TLabel; Label7: TLabel; - Label12: TLabel; Label11: TLabel; - Label10: TLabel; chkPreserve: TCheckBox; btTrgRotateRight: TSpeedButton; btTrgRotateLeft: TSpeedButton; @@ -124,10 +109,51 @@ type btTrgMoveRight: TSpeedButton; btTrgMoveLeft: TSpeedButton; btTrgMoveDown: TSpeedButton; - txtTrgScaleValue: TEdit; btTrgScaleUp: TSpeedButton; btTrgScaleDown: TSpeedButton; rgPivot: TRadioGroup; + btTrgRotateRight90: TSpeedButton; + btTrgRotateLeft90: TSpeedButton; + txtTrgMoveValue: TComboBox; + txtTrgRotateValue: TComboBox; + txtTrgScaleValue: TComboBox; + Splitter1: TSplitter; + Splitter2: TSplitter; + EditorToolBar: TToolBar; + tbAdd: TToolButton; + tbDuplicate: TToolButton; + tbDelete: TToolButton; + ToolButton4: TToolButton; + tbMove: TToolButton; + tbRotate: TToolButton; + ToolButton1: TToolButton; + tbUndo: TToolButton; + tbRedo: TToolButton; + ToolButton5: TToolButton; + tbScale: TToolButton; + tbFlipHorz: TToolButton; + tbFlipVert: TToolButton; + tbFlipAllHorz: TToolButton; + tbFlipAllVert: TToolButton; + tbSelect: TToolButton; + btTrgMoveLU: TSpeedButton; + btTrgMoveLD: TSpeedButton; + btTrgMoveRU: TSpeedButton; + btTrgMoveRD: TSpeedButton; + EditorTB: TImageList; + Label8: TLabel; + pnlGridColor1: TPanel; + pnlGridColor2: TPanel; + PreviewToolBar: TToolBar; + tbFullView: TToolButton; + tbLowQ: TToolButton; + tbMedQ: TToolButton; + ToolButton7: TToolButton; + tbResetLoc: TToolButton; + tbHiQ: TToolButton; + ToolButton9: TToolButton; + Panel1: TPanel; + ColorImage: TImage; procedure FormCreate(Sender: TObject); procedure GraphImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer); @@ -140,9 +166,8 @@ type procedure mnuAddClick(Sender: TObject); procedure mnuDupClick(Sender: TObject); procedure mnuAutoZoomClick(Sender: TObject); - procedure mnuLockClick(Sender: TObject); - procedure mnuXFlipClick(Sender: TObject); - procedure mnuYFlipClick(Sender: TObject); +// procedure mnuXFlipClick(Sender: TObject); +// procedure mnuYFlipClick(Sender: TObject); procedure btnCloseClick(Sender: TObject); procedure FormResize(Sender: TObject); procedure txtPKeyPress(Sender: TObject; var Key: Char); @@ -157,7 +182,7 @@ type procedure mnuLowQualityClick(Sender: TObject); procedure mnuHighQualityClick(Sender: TObject); procedure mnuMediumQualityClick(Sender: TObject); - procedure mnuResetLocationClick(Sender: TObject); + procedure mnuResetLocClick(Sender: TObject); procedure mnuVerticalFlipAllClick(Sender: TObject); procedure mnuHorizintalFlipAllClick(Sender: TObject); procedure mnuFlipVerticalClick(Sender: TObject); @@ -181,54 +206,140 @@ type procedure VEVarsExit(Sender: TObject); procedure VEVarsValidate(Sender: TObject; ACol, ARow: Integer; const KeyName, KeyValue: String); - procedure mnuRotateRightClick(Sender: TObject); - procedure mnuRotateLeftClick(Sender: TObject); - procedure mnuScaleUpClick(Sender: TObject); - procedure mnuScaleDownClick(Sender: TObject); +// procedure mnuRotateRightClick(Sender: TObject); +// procedure mnuRotateLeftClick(Sender: TObject); +// procedure mnuScaleUpClick(Sender: TObject); +// procedure mnuScaleDownClick(Sender: TObject); + procedure btTrgRotateLeftClick(Sender: TObject); procedure btTrgRotateRightClick(Sender: TObject); + procedure btTrgRotateLeft90Click(Sender: TObject); + procedure btTrgRotateRight90Click(Sender: TObject); + procedure TrgMove(dx, dy: double); procedure btTrgMoveLeftClick(Sender: TObject); procedure btTrgMoveRightClick(Sender: TObject); procedure btTrgMoveUpClick(Sender: TObject); procedure btTrgMoveDownClick(Sender: TObject); procedure btTrgScaleUpClick(Sender: TObject); procedure btTrgScaleDownClick(Sender: TObject); + procedure editKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure splitterMoved(Sender: TObject); + procedure tbSelectClick(Sender: TObject); + procedure btTrgMoveLUClick(Sender: TObject); + procedure btTrgMoveLDClick(Sender: TObject); + procedure btTrgMoveRUClick(Sender: TObject); + procedure btTrgMoveRDClick(Sender: TObject); + procedure editMouseWheel(Sender: TObject; Shift: TShiftState; + WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); + procedure PreviewImageDblClick(Sender: TObject); + procedure editKeyPress(Sender: TObject; var Key: Char); + procedure rgPivotClicked(Sender: TObject); + procedure tbEditModeClick(Sender: TObject); + procedure pnlGridColor1Click(Sender: TObject); + procedure pnlGridColor2Click(Sender: TObject); + + procedure VEVarsMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure VEVarsMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); + procedure VEVarsMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure VEVarsDblClick(Sender: TObject); + procedure VEVarsDrawCell(Sender: TObject; ACol, ARow: Integer; + Rect: TRect; State: TGridDrawState); + + procedure cbTransformsDrawItem(Control: TWinControl; Index: Integer; + Rect: TRect; State: TOwnerDrawState); + procedure cbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + + procedure tbFullViewClick(Sender: TObject); + procedure ColorImageMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure ColorImageMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); + procedure ColorImageMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + private bm: TBitmap; cmap: TColorMap; // cp1: TControlPoint; PreviewDensity: double; + + // --Z-- + graphDragMode, dragged: boolean; + editMode: (modeMove, modeRotate, modeScale); + key_handled: boolean; // hack... there must be a better way to do this :-\ + + MousePos: TPoint; // in screen coordinates + mouseOverTriangle: integer; + mouseOverCorner: integer; + + varDragMode: boolean; + varDragIndex, varDragPos: integer; + varMM: boolean; //hack? + + // --Z-- variables moved from outside + GraphZoom: double; + CornerCaught: boolean; + TriangleCaught: boolean; +// SelectedTriangle: integer; // outside only for scripting (??) + SelectedCorner: integer; + SelectMode: boolean; + // Drawing: boolean; + HasChanged: boolean; + + oldx, oldy: double; + // --Z-- + olddist: double; + Pivot: TSPoint; + VarsCache: array[0..32] of double; // hack + + colorDrag, colorChanged: boolean; + colorDragX, colorOldX: integer; + // -- + +// intoldx, intoldy: integer; + + { Options } + UseFlameBackground, UseTransformColors: boolean; + BackGroundColor, ReferenceTrianglecolor: integer; + GridColor1, GridColor2: integer; // --Z-- + + procedure UpdateFlameX; procedure UpdateFlame(DrawMain: boolean); procedure DeleteTriangle(t: integer); - procedure UpdateFlameX; + + function GetPivot: TSPoint; + function GetTriangleColor(n: integer): TColor; +// procedure MouseInTriangle(fx, fy: double); + + // --Z-- functions moved from outside + procedure ShowSelectedInfo; + procedure Scale(var fx, fy: double; x, y, Width, Height: integer); +//unused: function InsideSelected(x, y: double): boolean; + procedure ReadjustWeights(var cp: TControlPoint); + public cp: TControlPoint; Render: TRenderer; - { Options} - UseFlameBackground, UseTransformColors: boolean; - BackGroundColor, ReferenceTrianglecolor: integer; - procedure UpdateDisplay; + + SelectedTriangle: integer; + + procedure UpdateDisplay(preview_only: boolean = false); procedure AutoZoom; procedure DrawGraph; end; +const + clr: array[-1..15] of TColor = (clGray, + clYellow, $ff55ff, clRed, clLime, clAqua, clGreen, $007fff, clNavy, + clOlive, clPurple, clTeal, clBlue, clFuchsia, clMoneyGreen, clSkyBlue, clCream); var EditForm: TEditForm; - GraphZoom: double; - CornerCaught: boolean; - TriangleCaught: boolean; - SelectedTriangle: integer; - SelectedCorner: integer; - SelLocked: boolean; - Drawing: boolean; - HasChanged: boolean; - oldx, oldy: double; - intoldx, intoldy: integer; - clr: array[-1..11] of TColor; - EditedVariation: integer; pcenterx, pcentery, pscale: double; -procedure ShowSelectedInfo; function ColorValToColor(c: TColorMap; index: double): TColor; function FlipTriangleVertical(t: TTriangle): TTriangle; function FlipTriangleHorizontal(t: TTriangle): TTriangle; @@ -240,6 +351,7 @@ function RotateTrianglePoint(t: TTriangle; x, y, rad: double): TTriangle; function Centroid(t: TTriangle): TSPoint; function OffsetTriangleRandom(t: TTriangle): TTriangle; function ScaleTriangleCenter(t: TTriangle; scale: double): TTriangle; +function ScaleTrianglePoint(t: TTriangle; x, y, scale: double): TTriangle; procedure ScaleAll; implementation @@ -319,6 +431,16 @@ begin Result.x[2] := scale * (t.x[2] - xr) + xr; end; +function ScaleTrianglePoint(t: TTriangle; x, y, scale: double): TTriangle; +begin + Result.y[0] := scale * (t.y[0] - y) + y; + Result.y[1] := scale * (t.y[1] - y) + y; + Result.y[2] := scale * (t.y[2] - y) + y; + Result.x[0] := scale * (t.x[0] - x) + x; + Result.x[1] := scale * (t.x[1] - x) + x; + Result.x[2] := scale * (t.x[2] - x) + x; +end; + function RotateTriangle(t: TTriangle; rad: double): TTriangle; //rad in Radians var i: integer; @@ -403,21 +525,47 @@ begin result := c[i][2] shl 16 + c[i][1] shl 8 + c[i][0]; end; -procedure TEditForm.UpdateDisplay; +procedure TEditForm.UpdateDisplay(preview_only: boolean = false); var i: integer; + pw, ph: integer; + r: double; begin cp.copy(MainCp); + + pw := PrevPnl.Width - 2; + ph := PrevPnl.Height - 2; + if (cp.width / cp.height) > (PrevPnl.Width / PrevPnl.Height) then + begin + PreviewImage.Width := pw; + r := cp.width / PreviewImage.Width; + PreviewImage.height := round(cp.height / r); + PreviewImage.Left := 1; + PreviewImage.Top := (ph - PreviewImage.Height) div 2; + end + else begin + PreviewImage.Height := ph; + r := cp.height / PreviewImage.height; + PreviewImage.Width := round(cp.Width / r); + PreviewImage.Top := 1; + PreviewImage.Left := (pw - PreviewImage.Width) div 2; + end; + AdjustScale(cp, PreviewImage.Width, PreviewImage.Height); + + DrawPreview; + if preview_only then exit; + cp.cmap := MainCp.cmap; cmap := MainCp.cmap; + cbTransforms.Clear; for i := 0 to Transforms - 1 do cbTransforms.Items.Add(IntToStr(i + 1)); - AutoZoom; + ShowSelectedInfo; + AutoZoom; DrawGraph; - DrawPreview; end; procedure TEditForm.DrawPreview; @@ -426,7 +574,7 @@ begin cp.sample_density := PreviewDensity; cp.spatial_oversample := defOversample; cp.spatial_filter_radius := defFilterRadius; - if mnuResetLocation.checked then + if mnuResetLoc.checked then begin cp.zoom := 0; cp.CalcBoundbox; @@ -445,7 +593,7 @@ begin PreviewImage.refresh; end; -procedure ReadjustWeights(var cp: TControlPoint); +procedure TEditForm.ReadjustWeights(var cp: TControlPoint); { Thanks to Rudy...code from Chaos} var total, othertotals, excess: double; @@ -462,21 +610,26 @@ begin if (i <> SelectedTriangle) then othertotals := othertotals + cp.xform[i].density; end; - excess := total - 1.0; { /* Now we need to fix'em */ } +//z excess := total - 1.0; + excess := 1.0 - (total - 1.0)/othertotals; // --Z-- for i := 0 to T - 1 do if (i <> SelectedTriangle) and (cp.xform[i].density <> 0) then - cp.xform[i].density := cp.xform[i].density - - cp.xform[i].density / othertotals * excess; +//z cp.xform[i].density := cp.xform[i].density - cp.xform[i].density / othertotals * excess; + cp.xform[i].density := cp.xform[i].density * excess; // --Z-- end; -procedure ShowSelectedInfo; +procedure TEditForm.ShowSelectedInfo; var t: integer; i: integer; a, b, c, d, e, f: double; + v: double; begin - t := SelectedTriangle; + t := SelectedTriangle; // why 't' ? + + assert(t < Transforms); // ?? hmm.. + if (t >= Transforms) then t := Transforms - 1; //if EditForm.cbTransforms.ItemIndex <> t then EditForm.cbTransforms.ItemIndex := t; EditForm.cbTransforms.ItemIndex := t; @@ -518,16 +671,21 @@ begin EditForm.txtF.Refresh; EditForm.txtP.Refresh; EditForm.pnlXFormColor.Color := ColorValToColor(EditForm.cp.cmap, EditForm.cp.xform[t].color); - EditForm.txtXFormColor.Text := FloatToStr(EditForm.cp.xform[t].color); - EditForm.scrlXFormcolor.Position := Trunc(EditForm.cp.xform[t].color * 100); + EditForm.txtXFormColor.Text := Format('%1.3f', [cp.xform[t].color]);//FloatToStr(EditForm.cp.xform[t].color); + EditForm.scrlXFormcolor.Position := Trunc(EditForm.cp.xform[t].color * scrlXFormColor.Max); for i := 0 to NRVISVAR-1 do begin - EditForm.VEVars.Values[VarNames[i]] := Format('%.6g', [EditForm.cp.xform[SelectedTriangle].vars[i]]); + v:=EditForm.cp.xform[SelectedTriangle].vars[i]; + if v <> VarsCache[i] then + begin + VarsCache[i]:=v; + EditForm.VEVars.Values[VarNames[i]] := Format('%.6g', [v]); + end; end; end; -procedure Scale(var fx, fy: double; x, y, Width, Height: integer); +procedure TEditForm.Scale(var fx, fy: double; x, y, Width, Height: integer); var sc: double; begin @@ -608,7 +766,7 @@ begin MainForm.StopThread; MainCp.Copy(cp); MainCp.cmap := cmap; - if mnuResetLocation.checked then begin + if mnuResetLoc.checked then begin MainCp.zoom := 0; MainForm.center[0] := cp.center[0]; MainForm.center[1] := cp.center[1]; @@ -668,7 +826,7 @@ begin Result := -1; inside := False; j := 2; - for k := 0 to Transforms - 1 do + for k := Transforms - 1 downto 0 do begin for i := 0 to 2 do begin @@ -680,7 +838,7 @@ begin (y - MainTriangles[k].y[i]) / (MainTriangles[k].y[j] - MainTriangles[k].y[i]) + MainTriangles[k].x[i]) then - Inside := not Inside; + Inside := not Inside; j := i end; if inside then break; @@ -688,26 +846,39 @@ begin if inside then Result := k; end; -function InTriangle(fx, fy: double): integer; +{ +//used only one time - moved into procedure +procedure TEditForm.MouseInTriangle(fx, fy: double); var i, j: integer; d: double; begin - Result := -2; - i := InsideTriangle(fx, fy); - if i > -1 then - Result := i - else - for i := 0 to Transforms - 1 do - for j := 0 to 2 do + for i := 0 to Transforms - 1 do + for j := 0 to 2 do + begin + d := dist(fx, fy, MainTriangles[i].x[j], MainTriangles[i].y[j]); + if (d * GraphZoom * 50) < 4 then begin - d := dist(fx, fy, MainTriangles[i].x[j], MainTriangles[i].y[j]); - if (d * GraphZoom * 50) < 4 then - Result := i + mouseOverTriangle:=i; + mouseOverCorner:=j; + exit; end; -end; + end; -function InsideSelected(x, y: double): boolean; + i := InsideTriangle(fx, fy); + if i >= 0 then // i > -1 + begin + mouseOverTriangle:=i; + end + else begin + mouseOverTriangle:=-2; + end; + mouseOverCorner:=-1; +end; +} + +{ +function TEditForm.InsideSelected(x, y: double): boolean; var i, j, k: integer; inside: boolean; @@ -729,6 +900,14 @@ begin end; InsideSelected := inside; end; +} + +function TEditForm.GetTriangleColor(n: integer): TColor; +begin + if chkUseXFormColor.checked then + Result := ColorValToColor(MainCp.cmap, cp.xform[n].color) + else Result := clr[n mod 16]; +end; procedure TEditForm.DrawGraph; var @@ -737,17 +916,20 @@ var ax, ay, bx, by, cx, cy: integer; Width, Height: integer; BitMap: TBitMap; + // --Z-- + gridX1, gridX2, gridY1, gridY2, gi, gstep: double; + gp: TRoundToRange; +// TrgPoints: array[0..2] of TPoint; +label DrawCorner; begin - if SelectedTriangle >= Transforms then - begin - Dec(SelectedTriangle); - SelLocked := False; - EditForm.mnuLockSel.Checked := False; - end; + // --Z-- hmmm: + if SelectedTriangle < 0 then SelectedTriangle := 0 + else if SelectedTriangle >= Transforms then SelectedTriangle := Transforms-1; + BitMap := TBitMap.Create; try - Width := EditForm.GraphImage.Width; - Height := EditForm.GraphImage.Height; + Width := GraphImage.Width; + Height := GraphImage.Height; BitMap.Width := Width; BitMap.Height := Height; ix := Width / 2; @@ -755,55 +937,214 @@ begin sc := 50 * GraphZoom; with Bitmap.canvas do begin - if chkFlameBack.checked then - brush.Color := cp.background[2] shl 16 + cp.background[1] shl 8 + cp.background[0] - else - brush.Color := pnlBackColor.Color; + brush.Color := pnlBackColor.Color; FillRect(rect(0, 0, Width, Height)); - {Reference Triangle} + Pen.Width := 1; + // --Z-- + // draw grid + Pen.Style := psSolid; + Pen.Color := GridColor2; + gridX1:=gCenterX-ix/sc; + gridX2:=gCenterX+(Width-ix)/sc; + gridY1:=gCenterY-iy/sc; + gridY2:=gCenterY+(Height-iy)/sc; + try // who knows... ;) + gp:=round(log10(gridX2-gridX1)); + if gp < log10(gridY2-gridY1) then gp:=round(log10(gridY2-gridY1)); + Dec(gp); + gstep:=power(10.0, gp); + except + gp:=0; + gstep:=1.0; + end; + + gi:=RoundTo(gridX1, gp); + while gi <= gridX2 do + begin + ax:=integer(round(ix + (gi - gCenterX)*sc)); + MoveTo(ax, 0); + LineTo(ax, Height); + gi:=gi+gstep; + end; + gi:=RoundTo(gridY1, gp); + while gi <= gridY2 do + begin + ay:=integer(round(iy - (gi - gCenterY)*sc)); + MoveTo(0, ay); + LineTo(Width, ay); + gi:=gi+gstep; + end; + // draw axis + Pen.Color := GridColor1; + Pen.Style := psSolid; + ax := integer(round(ix - gCenterX*sc)); + ay := integer(round(iy + gCentery*sc)); + MoveTo(ax, 0); + LineTo(ax, Height-1); + MoveTo(0, ay); + LineTo(Width-1, ay); + // -- + + {Reference Triangle} Pen.Style := psDot; Pen.color := pnlReference.Color; - MoveTo(integer(round(ix + MainTriangles[-1].x[0] * sc - gCenterX * sc)), integer(round(iy + (gCentery + -MainTriangles[-1].y[0]) * sc))); - LineTo(integer(round(ix + MainTriangles[-1].x[1] * sc - gCenterX * sc)), integer(round(iy + (gCentery + -MainTriangles[-1].y[1]) * sc))); - LineTo(integer(round(ix + MainTriangles[-1].x[2] * sc - gCenterX * sc)), integer(round(iy + (gCentery + -MainTriangles[-1].y[2]) * sc))); - LineTo(integer(round(ix + MainTriangles[-1].x[0] * sc - gCenterX * sc)), integer(round(iy + (gCentery + -MainTriangles[-1].y[0]) * sc))); - font.Color := pnlReference.Color; - TextOut(integer(round(ix + MainTriangles[-1].x[0] * sc - gCenterX * sc)), integer(round(iy + (gCentery + -MainTriangles[-1].y[0]) * sc)), 'A'); - TextOut(integer(round(ix + MainTriangles[-1].x[1] * sc - gCenterX * sc)), integer(round(iy + (gCentery + -MainTriangles[-1].y[1]) * sc)), 'B'); - TextOut(integer(round(ix + MainTriangles[-1].x[2] * sc - gCenterX * sc)), integer(round(iy + (gCentery + -MainTriangles[-1].y[2]) * sc)), 'C'); + ax := integer(round(ix + (MainTriangles[-1].x[0] - gCenterX) * sc)); + ay := integer(round(iy - (MainTriangles[-1].y[0] - gCenterY) * sc)); + bx := integer(round(ix + (MainTriangles[-1].x[1] - gCenterX) * sc)); + by := integer(round(iy - (MainTriangles[-1].y[1] - gCenterY) * sc)); + cx := integer(round(ix + (MainTriangles[-1].x[2] - gCenterX) * sc)); + cy := integer(round(iy - (MainTriangles[-1].y[2] - gCenterY) * sc)); + Polyline([Point(ax,ay), Point(bx,by), Point(cx,cy), Point(ax,ay)]); + Font.color := Pen.color; + TextOut(ax, ay, 'A'); + TextOut(bx, by, 'B'); + TextOut(cx, cy, 'C'); + + Pen.Style := psSolid; + {Transforms} for i := 0 to Transforms - 1 do begin - ax := integer(round(ix + MainTriangles[i].x[0] * sc - gCenterX * sc)); - ay := integer(round(iy + (gCentery + -MainTriangles[i].y[0]) * sc)); - bx := integer(round(ix + MainTriangles[i].x[1] * sc - gCenterX * sc)); - by := integer(round(iy + (gCentery + -MainTriangles[i].y[1]) * sc)); - cx := integer(round(ix + MainTriangles[i].x[2] * sc - gCenterX * sc)); - cy := integer(round(iy + (gCentery + -MainTriangles[i].y[2]) * sc)); - if chkUseXFormColor.checked then - pen.color := ColorValToColor(MainCp.cmap, cp.xform[i].color) - else Pen.color := clr[i mod 12]; - if i = SelectedTriangle then - Pen.Style := psSolid - else - Pen.Style := psDot; - MoveTo(ax, ay); - LineTo(bx, by); - LineTo(cx, cy); - LineTo(ax, ay); + ax := integer(round(ix + (MainTriangles[i].x[0] - gCenterX) * sc)); + ay := integer(round(iy - (MainTriangles[i].y[0] - gCenterY) * sc)); + bx := integer(round(ix + (MainTriangles[i].x[1] - gCenterX) * sc)); + by := integer(round(iy - (MainTriangles[i].y[1] - gCenterY) * sc)); + cx := integer(round(ix + (MainTriangles[i].x[2] - gCenterX) * sc)); + cy := integer(round(iy - (MainTriangles[i].y[2] - gCenterY) * sc)); +{ + TrgPoints[0].x := integer(round(ix + (MainTriangles[i].x[0] - gCenterX) * sc)); + TrgPoints[0].y := integer(round(iy - (MainTriangles[i].y[0] - gCenterY) * sc)); + TrgPoints[1].x := integer(round(ix + (MainTriangles[i].x[1] - gCenterX) * sc)); + TrgPoints[1].y := integer(round(iy - (MainTriangles[i].y[1] - gCenterY) * sc)); + TrgPoints[2].x := integer(round(ix + (MainTriangles[i].x[2] - gCenterX) * sc)); + TrgPoints[2].y := integer(round(iy - (MainTriangles[i].y[2] - gCenterY) * sc)); +} + //brush.Color := pnlBackColor.Color; + + Pen.Color := GetTriangleColor(i); + + if i <> SelectedTriangle then Pen.Style := psDot; + //MoveTo(ax, ay); LineTo(bx, by); LineTo(cx, cy); LineTo(ax, ay); + Polyline([Point(ax,ay), Point(bx,by), Point(cx,cy), Point(ax,ay)]); + Pen.Style := psSolid; Ellipse(ax - 4, ay - 4, ax + 4, ay + 4); Ellipse(bx - 4, by - 4, bx + 4, by + 4); Ellipse(cx - 4, cy - 4, cx + 4, cy + 4); + Font.color := Pen.color; + //brush.Color := pnlBackColor.Color; TextOut(ax, ay, 'A'); TextOut(bx, by, 'B'); TextOut(cx, cy, 'C'); +{ + brush.style:=bsClear; + Font.color := pnlBackColor.Color; + font.style:=[fsBold]; + TextOut(ax+2, ay+2, 'A'); + TextOut(bx+2, by+2, 'B'); + TextOut(cx+2, cy+2, 'C'); + font.style:=[]; + + Font.color := Pen.color; + TextOut(ax+1, ay+1, 'A'); + TextOut(bx+1, by+1, 'B'); + TextOut(cx+1, cy+1, 'C'); +} end; + + // if dragging, draw pivot axis + if TriangleCaught or CornerCaught then + begin + Pen.Mode := pmMerge; + Pen.Color := $555555; + Pen.Style := psDot; + ax := integer(round(ix + (Pivot.x - gCenterX)*sc)); + ay := integer(round(iy + (gCentery - Pivot.y)*sc)); + MoveTo(ax, 0); + LineTo(ax, Height); + MoveTo(0, ay); + LineTo(Width, ay); + Pen.Color := $707070; + Pen.Style := psSolid; + Pen.Mode := pmXor; + if CornerCaught then + begin + ax := integer(round(ix + (MainTriangles[SelectedTriangle].x[SelectedCorner] - gCenterX)*sc)); + ay := integer(round(iy - (MainTriangles[SelectedTriangle].y[SelectedCorner] - gCenterY)*sc)); + end + else begin + ax := integer(round(ix + (GetPivot.x - gCenterX)*sc)); + ay := integer(round(iy - (GetPivot.y - gCenterY)*sc)); + end; + MoveTo(ax, 0); + LineTo(ax, Height); + MoveTo(0, ay); + LineTo(Width, ay); + Pen.Mode := pmCopy; + + mouseOverTriangle := SelectedTriangle; + end; + + if (mouseOverTriangle >= 0) then // highlight triangle under cursor + begin + ax := integer(round(ix + (MainTriangles[mouseOverTriangle].x[0] - gCenterX) * sc)); + ay := integer(round(iy - (MainTriangles[mouseOverTriangle].y[0] - gCenterY) * sc)); + bx := integer(round(ix + (MainTriangles[mouseOverTriangle].x[1] - gCenterX) * sc)); + by := integer(round(iy - (MainTriangles[mouseOverTriangle].y[1] - gCenterY) * sc)); + cx := integer(round(ix + (MainTriangles[mouseOverTriangle].x[2] - gCenterX) * sc)); + cy := integer(round(iy - (MainTriangles[mouseOverTriangle].y[2] - gCenterY) * sc)); +// Pen.Style:=psSolid; + pen.Width:=2; + Pen.Color:=GetTriangleColor(mouseOverTriangle) shr 1 and $7f7f7f; + Pen.Mode:=pmMerge;//pmXor; + brush.Color:=Pen.Color shr 1 and $7f7f7f; + //Polyline([Point(ax,ay), Point(bx,by), Point(cx,cy), Point(ax,ay)]); + Polygon([Point(ax,ay), Point(bx,by), Point(cx,cy)]); + pen.width:=4; + Ellipse(ax - 3, ay - 3, ax + 3, ay + 3); + Ellipse(bx - 3, by - 3, bx + 3, by + 3); + Ellipse(cx - 3, cy - 3, cx + 3, cy + 3); + pen.width:=1; + pen.mode:=pmCopy; +// brush.Color := pen.Color; + end; + + pen.color := clWhite; + brush.Color:=clSilver; + if CornerCaught then // draw selected corner + begin + ax := integer(round(ix + (MainTriangles[SelectedTriangle].x[SelectedCorner] - gCenterX) * sc)); + ay := integer(round(iy - (MainTriangles[SelectedTriangle].y[SelectedCorner] - gCenterY) * sc)); + Ellipse(ax - 4, ay - 4, ax + 4, ay + 4); + end + else if (mouseOverTriangle>=0) and (mouseOverCorner >= 0) then // highlight corner under cursor + begin +// brush.Color := GetTriangleColor(mouseOverTriangle) shr 1 and $7f7f7f; + ax := integer(round(ix + (MainTriangles[mouseOverTriangle].x[mouseOverCorner] - gCenterX) * sc)); + ay := integer(round(iy - (MainTriangles[mouseOverTriangle].y[mouseOverCorner] - gCenterY) * sc)); + Ellipse(ax - 4, ay - 4, ax + 4, ay + 4); + end; + + // draw pivot point + ax := integer(round(ix + (GetPivot.x - gCenterX) * sc)); + ay := integer(round(iy - (GetPivot.y - gCenterY) * sc)); + Pen.Style := psSolid; + pen.Color:=clWhite; + brush.Color:=clSilver; + Ellipse(ax - 2, ay - 2, ax + 2, ay + 2); +{ + MoveTo(ax-3, ay); + LineTo(ax, ay-3); + LineTo(ax+3, ay); + LineTo(ax, ay+3); + LineTo(ax-3, ay); +} + // -- end; - EditForm.GraphImage.Picture.Graphic := Bitmap; - EditForm.GraphImage.Refresh; + GraphImage.Picture.Graphic := Bitmap; + GraphImage.Refresh; finally BitMap.Free; end; @@ -819,19 +1160,7 @@ begin bm := TBitmap.Create; GraphZoom := 1; - clr[-1] := clGray; - clr[0] := clYellow1; - clr[1] := clPlum2; - clr[2] := clRed; - clr[3] := clLime; - clr[4] := clAqua; - clr[11] := clBlue; - clr[6] := clMaroon; - clr[7] := clNavy; - clr[8] := clOlive; - clr[9] := clPurple; - clr[10] := clTeal; - clr[5] := clGreen; + case EditPrevQual of 0: begin mnuLowQuality.Checked := true; @@ -848,45 +1177,186 @@ begin end; cp := TControlPoint.Create; Render := TRenderer.Create; + + SelectMode := true; + editMode := modeMove; + mouseOverTriangle := -1; + mouseOverCorner := -1; + + for i := 0 to NRVISVAR-1 do VarsCache[i] := MinDouble; end; -procedure TEditForm.GraphImageMouseMove(Sender: TObject; Shift: TShiftState; X, - Y: integer); +procedure TEditForm.GraphImageMouseMove(Sender: TObject; Shift: TShiftState; + X, Y: integer); var vx, vy, fx, fy: double; + mt,mc: integer; + + i, j: integer; + d: double; +label FoundCorner; begin Scale(fx, fy, x, y, EditForm.GraphImage.Width, EditForm.GraphImage.Height); - if inTriangle(fx, fy) >= 0 then + // --Z-- + StatusBar.Panels[0].Text := Format('X: %f', [fx]); + StatusBar.Panels[1].Text := Format('Y: %f', [fy]); + + mt:=mouseOverTriangle; + mc:=MouseOverCorner; + + if SelectMode then // look for point or triangle under cursor + begin + for i := 0 to Transforms - 1 do + for j := 0 to 2 do + begin + d := dist(fx, fy, MainTriangles[i].x[j], MainTriangles[i].y[j]); + if (d * GraphZoom * 50) < 4 then + begin + mouseOverTriangle:=i; + mouseOverCorner:=j; + + goto FoundCorner; + end; + end; + + i := InsideTriangle(fx, fy); + if i >= 0 then // i > -1 + begin + mouseOverTriangle:=i; + end + else begin + mouseOverTriangle:=-2; + end; + mouseOverCorner:=-1; +FoundCorner: + + end; // if selectmode + + + if (mouseOverTriangle >= 0) and (SelectMode or (mouseOverTriangle = SelectedTriangle)) then GraphImage.Cursor := crHandPoint else GraphImage.Cursor := crArrow; - StatusBar.Panels[0].Text := Format('X: %f', [fx]); - StatusBar.Panels[1].Text := Format('Y: %f', [fy]); - if CornerCaught then - begin - { Drag a corner } - MainTriangles[SelectedTriangle].x[SelectedCorner] := fx; - MainTriangles[SelectedTriangle].y[SelectedCorner] := fy; - HasChanged := True; - UpdateFlameX; -// UpdateFlame(False); - end - else if TriangleCaught then - begin - { Drag a whole triangle } - vx := oldx - fx; - vy := oldy - fy; - MainTriangles[SelectedTriangle].x[0] := OldTriangle.x[0] - vx; - MainTriangles[SelectedTriangle].y[0] := OldTriangle.y[0] - vy; - MainTriangles[SelectedTriangle].x[1] := OldTriangle.x[1] - vx; - MainTriangles[SelectedTriangle].y[1] := OldTriangle.y[1] - vy; - MainTriangles[SelectedTriangle].x[2] := OldTriangle.x[2] - vx; - MainTriangles[SelectedTriangle].y[2] := OldTriangle.y[2] - vy; - HasChanged := True; - UpdateFlameX; -// UpdateFlame(False); + if graphDragMode then // graph panning + begin + dragged := true; + GcenterX := GcenterX - (fx - oldx); + GcenterY := GcenterY - (fy - oldy); + DrawGraph; + exit; end; + + Shift := Shift - [ssLeft]; + + if CornerCaught then + begin { Drag a corner } + // --Z-- + if (Shift = [ssAlt]) or ((editMode = modeRotate) and (Shift = [])) then + begin // rotate point around pivot + vy := dist(Pivot.X, Pivot.Y, fx, fy); + if vy<>0 then begin + vx := (fx-Pivot.X)*olddist/vy; + vy := (fy-Pivot.Y)*olddist/vy; + end + else begin + vx := 0; + vy := 0; + end; + MainTriangles[SelectedTriangle].x[SelectedCorner] := Pivot.X+vx; + MainTriangles[SelectedTriangle].y[SelectedCorner] := Pivot.Y+vy; + vx:=arctan2(vy,vx); + vy:=arctan2(oldy,oldx); + StatusBar.Panels[2].Text := Format('Rotate: %3.2f°', [(vx-vy)*180/PI]); + end + else if (Shift = [ssCtrl]) or ((editMode = modeScale) and (Shift = [])) then + begin // move point along vector + if olddist<>0 then begin + vy := (oldx*(fx-Pivot.X) + oldy*(fy-Pivot.Y))/(olddist*olddist); + MainTriangles[SelectedTriangle].x[SelectedCorner] := Pivot.X+oldx*vy; + MainTriangles[SelectedTriangle].y[SelectedCorner] := Pivot.Y+oldy*vy; + StatusBar.Panels[2].Text := Format('Scale: %3.2f%%', [vy*100]); + end + else begin + MainTriangles[SelectedTriangle].x[SelectedCorner] := Pivot.X; + MainTriangles[SelectedTriangle].y[SelectedCorner] := Pivot.Y; + end; + end + else begin // snap/move + if Shift = [ssShift] then // snap to axis + begin + if abs(fx-Pivot.X) > abs(fy-Pivot.Y) then begin + MainTriangles[SelectedTriangle].x[SelectedCorner] := fx; + MainTriangles[SelectedTriangle].y[SelectedCorner] := Pivot.Y; + end + else begin + MainTriangles[SelectedTriangle].x[SelectedCorner] := Pivot.x; + MainTriangles[SelectedTriangle].y[SelectedCorner] := fy; + end; + end + else begin // just move + MainTriangles[SelectedTriangle].x[SelectedCorner] := fx; + MainTriangles[SelectedTriangle].y[SelectedCorner] := fy; + end; + StatusBar.Panels[2].Text := Format('Move: %3.3f ; %3.3f', [fx-(Pivot.X+oldx), fy-(Pivot.Y+oldy)]); + end; + // -- + HasChanged := True; + UpdateFlameX; +// UpdateFlame(False); +StatusBar.Refresh; + exit; + end + else if TriangleCaught then { Modify a whole triangle } + begin + if (Shift = [ssAlt]) or ((editMode = modeRotate) and (Shift = [])) then // rotate + begin + vy := arctan2(oldy, oldx); + vx := arctan2(fy-Pivot.Y, fx-Pivot.X); + MainTriangles[SelectedTriangle] := + RotateTrianglePoint(OldTriangle, Pivot.X, Pivot.Y, vx-vy); + StatusBar.Panels[2].Text := Format('Rotate: %3.2f°', [(vx-vy)*180/PI]); + end + else if (Shift = [ssCtrl]) or ((editMode = modeScale) and (Shift = [])) then + begin // scale + if olddist<>0 then begin + vy := (oldx*(fx-Pivot.X) + oldy*(fy-Pivot.Y))/(olddist*olddist); + MainTriangles[SelectedTriangle] := + ScaleTrianglePoint(OldTriangle, Pivot.X, Pivot.Y, vy); + StatusBar.Panels[2].Text := Format('Scale: %3.2f%%', [vy*100]); + end + else MainTriangles[SelectedTriangle] := OldTriangle; + end + else begin // snap/move + vx := fx - (Pivot.x + oldx); + vy := fy - (Pivot.y + oldy); + if Shift = [ssShift] then // snap to axis + begin + //if abs(fx - Pivot.X) > abs(fy - Pivot.Y) then vy := 0 + if abs(vx) > abs(vy) then vy := 0 + else vx := 0; + end; + MainTriangles[SelectedTriangle].x[0] := OldTriangle.x[0] + vx; + MainTriangles[SelectedTriangle].y[0] := OldTriangle.y[0] + vy; + MainTriangles[SelectedTriangle].x[1] := OldTriangle.x[1] + vx; + MainTriangles[SelectedTriangle].y[1] := OldTriangle.y[1] + vy; + MainTriangles[SelectedTriangle].x[2] := OldTriangle.x[2] + vx; + MainTriangles[SelectedTriangle].y[2] := OldTriangle.y[2] + vy; + StatusBar.Panels[2].Text := Format('Move: %3.3f ; %3.3f', [vx, vy]); + end; + HasChanged := True; + UpdateFlameX; +// UpdateFlame(False); + StatusBar.Refresh; + exit; + end; + if ((mt <> mouseOverTriangle) or (mc <> MouseOverCorner)) then + begin + if (mouseOverTriangle >= 0) then + StatusBar.Panels[2].Text := Format('Transform #%d', [mouseOverTriangle+1]) + else StatusBar.Panels[2].Text := ''; + DrawGraph; + end end; procedure TEditForm.GraphImageMouseDown(Sender: TObject; Button: TMouseButton; @@ -894,185 +1364,135 @@ procedure TEditForm.GraphImageMouseDown(Sender: TObject; Button: TMouseButton; var d, fx, fy: double; i, j: integer; +//label GotCorner; begin - intoldx := x; - intoldy := y; +// intoldx := x; +// intoldy := y; CornerCaught := False; TriangleCaught := False; + dragged := false; // --Z-- Scale(fx, fy, x, y, EditForm.GraphImage.Width, EditForm.GraphImage.Height); - {Has user grabbed a corner?} + Shift := Shift - [ssLeft]; // --Z-- if Button = mbLeft then begin - if SelLocked then - { Only change the locked triangle} + if SelectMode = false then // Only change the selected triangle begin + {Has user grabbed a corner?} for j := 0 to 2 do begin d := dist(fx, fy, MainTriangles[SelectedTriangle].x[j], MainTriangles[SelectedTriangle].y[j]); - if (d * GraphZoom * 50) < 4 then - begin + if (d * GraphZoom * 50) < 4 then begin//goto GotCorner; +// WTF!?! goto isn't working right way in this shitty pascal!!! 8-() SelectedCorner := j; + Pivot := GetPivot; + oldx := MainTriangles[SelectedTriangle].x[j] - Pivot.X; + oldy := MainTriangles[SelectedTriangle].y[j] - Pivot.Y; + olddist := sqrt(oldx*oldx + oldy*oldy); + MainForm.UpdateUndo; CornerCaught := True; - oldx := fx; - oldy := fy; - Break; + DrawPreview; + ShowSelectedInfo; + DrawGraph; + exit; +// end; end; end - else - { Find a corner and select triangle } - for i := 0 to Transforms - 1 do + else begin // Find a corner and select triangle + for i := Transforms - 1 downto 0 do for j := 0 to 2 do begin d := dist(fx, fy, MainTriangles[i].x[j], MainTriangles[i].y[j]); if (d * GraphZoom * 50) < 4 then begin SelectedTriangle := i; +//GotCorner: SelectedCorner := j; + Pivot := GetPivot; + oldx := MainTriangles[SelectedTriangle].x[j] - Pivot.X; + oldy := MainTriangles[SelectedTriangle].y[j] - Pivot.Y; + olddist := sqrt(oldx*oldx + oldy*oldy); + MainForm.UpdateUndo; CornerCaught := True; - oldx := fx; - oldy := fy; - Break; + DrawPreview; + ShowSelectedInfo; + DrawGraph; + exit; end; end; - if CornerCaught then - begin - DrawPreview; - ShowSelectedInfo; - DrawGraph; - end - else - begin - if SelLocked then - begin - { Only move locked triangle } - if InsideSelected(fx, fy) then - begin - OldTriangle := MainTriangles[SelectedTriangle]; - MainForm.UpdateUndo; - TriangleCaught := True; - oldx := fx; - oldy := fy; - DrawPreview; - ShowSelectedInfo; - DrawGraph; - end; - end - else - begin - { Mouse inside a triangle?} - i := InsideTriangle(fx, fy); - if i > -1 then - begin - SelectedTriangle := i; - OldTriangle := MainTriangles[i]; - MainForm.UpdateUndo; - TriangleCaught := True; - oldx := fx; - oldy := fy; - DrawPreview; - ShowSelectedInfo; - DrawGraph; - end; - end; end; + // so user hasn't selected any vertices, + // let's check for triangles then! + +// // --Z-- // alt=rotate, ctrl=scale, shift=move + + if SelectMode then + begin + i := InsideTriangle(fx, fy); + if i >= 0 then SelectedTriangle := i + else + if Shift * [ssAlt,ssCtrl,ssShift] = [] then exit; + end; + + OldTriangle := MainTriangles[SelectedTriangle]; + MainForm.UpdateUndo; + TriangleCaught := True; + + Pivot := GetPivot; + oldx := fx-Pivot.X; + oldy := fy-Pivot.Y; + olddist := sqrt(oldx*oldx + oldy*oldy); + + DrawPreview; + ShowSelectedInfo; + DrawGraph; + exit; + end + else if Button = mbRight then // graph panning + begin + SetCaptureControl(GraphImage); + Screen.Cursor := crSizeAll; + + graphDragMode := true; + oldx := fx; + oldY := fy; end; end; procedure TEditForm.GraphImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); -var - fx, fy: double; - i: integer; - transformvalue: double; +//var +//fx, fy: double; +//i: integer; +//transformvalue: double; begin - Scale(fx, fy, x, y, EditForm.GraphImage.Width, EditForm.GraphImage.Height); - { Mouse inside a triangle?} - i := InsideTriangle(fx, fy); - if i = -1 then + if Button = mbRight then // --Z-- panning begin - if Button = mbLeft then - if Shift = [ssCtrl] then - begin - AutoZoom; - ShowSelectedInfo; - DrawGraph; - end - end - else - begin - if SelLocked and (i <> SelectedTriangle) then + graphDragMode := false; + if dragged=false then // haven't dragged - popup menu then begin + GetCursorPos(mousepos); // hmmm + EditPopup.Popup(mousepos.x, mousepos.y); end - else if Button = mbLeft then - if Shift = [ssAlt] then - begin - try - transformvalue := StrToFloat(txtTrgRotateValue.Text); - except - transformvalue := 0; - txtTrgRotateValue.Text := '0'; - end; - if transformvalue <> 0 then - begin - MainTriangles[i] := RotateTriangleCenter(MainTriangles[i], -((PI/180) * transformvalue)); - HasChanged := True; - end; - end - else if Shift = [ssCtrl, ssAlt] then - begin - try - transformvalue := StrToFloat(txtTrgRotateValue.Text); - except - transformvalue := 0; - txtTrgRotateValue.Text := '0'; - end; - if transformvalue <> 0 then - begin - MainTriangles[i] := RotateTriangleCenter(MainTriangles[i], (PI/180) * transformvalue); - HasChanged := True; - end; - end - else if Shift = [ssShift] then - begin - try - transformvalue := StrToFloat(txtTrgScaleValue.Text); - except - transformvalue := 0.0; - txtTrgScaleValue.Text := '0.0'; - end; - if transformvalue <> 0 then - begin - MainTriangles[i] := ScaleTriangleCenter(MainTriangles[i], transformvalue+1.0); - HasChanged := True; - end; - end - else if Shift = [ssCtrl, ssShift] then - begin - try - transformvalue := StrToFloat(txtTrgScaleValue.Text); - except - transformvalue := 0.0; - txtTrgScaleValue.Text := '0.0'; - end; - if transformvalue <> 0 then - begin - MainTriangles[i] := ScaleTriangleCenter(MainTriangles[i], 1.0-transformvalue); - HasChanged := True; - end; - end; + else dragged := false; + Screen.Cursor := crDefault; + SetCaptureControl(nil); + exit; end; + CornerCaught := False; TriangleCaught := False; if HasChanged then begin UpdateFlame(true); - end; - HasChanged := False; + HasChanged := False; + end + else DrawGraph; end; +{ procedure TEditForm.mnuRotateRightClick(Sender: TObject); var offset: double; @@ -1144,6 +1564,7 @@ begin UpdateFlame(true); end; end; +} procedure TEditForm.FormShow(Sender: TObject); var @@ -1181,27 +1602,35 @@ begin UseFlameBackground := False; end; if Registry.ValueExists('BackgroundColor') then - begin - BackgroundColor := Registry.ReadInteger('BackgroundColor'); - end + BackgroundColor := Registry.ReadInteger('BackgroundColor') else - begin BackgroundColor := integer(clBlack); - end; - if Registry.ValueExists('ReferenceTriangleColor') then - begin - ReferenceTriangleColor := Registry.ReadInteger('ReferenceTriangleColor'); - end + if Registry.ValueExists('GridColor1') then + GridColor1 := Registry.ReadInteger('GridColor1') + else + GridColor1 := $444444; + if Registry.ValueExists('GridColor2') then + GridColor2 := Registry.ReadInteger('GridColor2') + else + GridColor2 := $333333; + if Registry.ValueExists('ReferenceTriangleColor') then + ReferenceTriangleColor := Registry.ReadInteger('ReferenceTriangleColor') else - begin ReferenceTriangleColor := integer(clGray); - end; + if Registry.ValueExists('ResetLocation') then + mnuResetLoc.checked := Registry.ReadBool('ResetLocation') + else mnuResetLoc.checked := true; + tbResetLoc.Down := mnuResetLoc.checked; end else begin UseTransformColors := False; UseFlameBackground := False; - BackgroundColor := integer(clBlack); + BackgroundColor := $000000; + GridColor1 := $444444; + GridColor2 := $333333; ReferenceTriangleColor := integer(clGray); + mnuResetLoc.checked := true; + tbResetLoc.Down := true; end; Registry.CloseKey; finally @@ -1211,6 +1640,8 @@ begin chkFlameBack.checked := UseFlameBackground; pnlBackColor.Color := TColor(BackgroundColor); GrphPnl.Color := TColor(BackgroundColor); + pnlGridColor1.Color := GridColor1; + pnlGridColor2.Color := GridColor2; pnlReference.color := TColor(ReferenceTriangleColor); UpdateDisplay; end; @@ -1261,21 +1692,22 @@ begin end; end; + procedure TEditForm.mnuAutoZoomClick(Sender: TObject); begin AutoZoom; DrawGraph; end; - -procedure TEditForm.mnuLockClick(Sender: TObject); -begin - EditForm.mnuLockSel.Checked := not EditForm.mnuLockSel.Checked; - SelLocked := EditForm.mnuLockSel.Checked; -end; - +{ procedure TEditForm.mnuXFlipClick(Sender: TObject); begin - MainTriangles[SelectedTriangle] := FlipTriangleHorizontal(MainTriangles[SelectedTriangle]); +// MainTriangles[SelectedTriangle] := FlipTriangleHorizontal(MainTriangles[SelectedTriangle]); + with MainTriangles[SelectedTriangle] do // --Z-- + begin + x[0] := GetPivot.x - x[0]; + x[1] := x[1]; + x[2] := x[2]; + end; UpdateFlame(True); end; @@ -1284,6 +1716,7 @@ begin MainTriangles[SelectedTriangle] := FlipTriangleVertical(MainTriangles[SelectedTriangle]); UpdateFlame(True); end; +} procedure TEditForm.btnCloseClick(Sender: TObject); begin @@ -1503,7 +1936,10 @@ begin Registry.WriteBool('UseTransformColors', UseTransformColors); Registry.WriteBool('UseFlameBackground', UseFlameBackground); Registry.WriteInteger('BackgroundColor', BackgroundColor); + Registry.WriteInteger('GridColor1', GridColor1); + Registry.WriteInteger('GridColor2', GridColor2); Registry.WriteInteger('ReferenceTriangleColor', ReferenceTriangleColor); + Registry.WriteBool('ResetLocation', mnuResetLoc.checked); { Size and position } if EditForm.WindowState <> wsMaximized then begin Registry.WriteInteger('Top', EditForm.Top); @@ -1537,6 +1973,7 @@ end; procedure TEditForm.mnuLowQualityClick(Sender: TObject); begin mnuLowQuality.Checked := True; + tbLowQ.Down := true; PreviewDensity := prevLowQuality; EditPrevQual := 0; DrawPreview; @@ -1545,6 +1982,7 @@ end; procedure TEditForm.mnuHighQualityClick(Sender: TObject); begin mnuHighQuality.Checked := True; + tbHiQ.Down := true; PreviewDensity := prevHighQuality; EditPrevQual := 2; DrawPreview; @@ -1553,15 +1991,20 @@ end; procedure TEditForm.mnuMediumQualityClick(Sender: TObject); begin mnuMediumQuality.Checked := True; + tbMedQ.Down := true; PreviewDensity := prevMediumQuality; EditPrevQual := 1; DrawPreview; end; -procedure TEditForm.mnuResetLocationClick(Sender: TObject); +procedure TEditForm.mnuResetLocClick(Sender: TObject); +var + reset: boolean; begin - mnuResetLocation.Checked := not mnuResetLocation.Checked; - if not mnuResetLocation.checked then + reset:= not mnuResetLoc.Checked; + mnuResetLoc.Checked := reset; + tbResetLoc.Down := reset; + if reset then begin cp.width := MainCp.width; cp.height := MainCp.height; @@ -1601,17 +2044,35 @@ begin end; procedure TEditForm.mnuFlipVerticalClick(Sender: TObject); +var + p: double; begin MainForm.UpdateUndo; - MainTriangles[SelectedTriangle] := FlipTriangleVertical(MainTriangles[SelectedTriangle]); +// MainTriangles[SelectedTriangle] := FlipTriangleVertical(MainTriangles[SelectedTriangle]); + with MainTriangles[SelectedTriangle] do // --Z-- + begin + p := GetPivot.y * 2; + y[0] := p - y[0]; + y[1] := p - y[1]; + y[2] := p - y[2]; + end; AutoZoom; UpdateFlame(True); end; procedure TEditForm.mnuFlipHorizontalClick(Sender: TObject); +var + p: double; begin MainForm.UpdateUndo; - MainTriangles[SelectedTriangle] := FlipTriangleHorizontal(MainTriangles[SelectedTriangle]); +// MainTriangles[SelectedTriangle] := FlipTriangleHorizontal(MainTriangles[SelectedTriangle]); + with MainTriangles[SelectedTriangle] do // --Z-- + begin + p := GetPivot.x * 2; + x[0] := p - x[0]; + x[1] := p - x[1]; + x[2] := p - x[2]; + end; AutoZoom; UpdateFlame(True); end; @@ -1629,6 +2090,37 @@ begin DrawGraph; end; +procedure TEditForm.cbTransformsDrawItem(Control: TWinControl; + Index: Integer; Rect: TRect; State: TOwnerDrawState); +var + h: integer; + ax,ay,bx,by: integer; + TrgColor: TColor; +begin + TrgColor := GetTriangleColor(Index); + with cbTransforms.Canvas do + begin + h := Rect.Bottom - Rect.Top; + + brush.Color:=clBlack; + FillRect(Rect); + + Font.Color := clWhite; + //TextOut(Rect.Left+h+2, Rect.Top, eqListBox.Items[Index]); + TextOut(Rect.Left+h+2, Rect.Top, IntToStr(Index+1)); // hack + + pen.Color := TrgColor; + brush.Color := pen.Color shr 1 and $7f7f7f; + //pen.Style := psClear; + + ax:=Rect.Left+h-2; + ay:=Rect.Top+1; + bx:=Rect.Left+2; + by:=Rect.Bottom-3; + Polygon([Point(ax, ay), Point(ax, by), Point(bx, by)]); + end; +end; + procedure TEditForm.CoefKeyPress(Sender: TObject; var Key: Char); var Allow: boolean; @@ -1761,10 +2253,24 @@ end; procedure TEditForm.scrlXFormColorChange(Sender: TObject); begin - cp.xform[SelectedTriangle].color := (scrlXFormColor.Position) / 100; - txtXFormColor.Text := FloatToStr(cp.xform[SelectedTriangle].color); + cp.xform[SelectedTriangle].color := (scrlXFormColor.Position) / scrlXFormColor.Max; + txtXFormColor.Text := Format('%1.3f', [cp.xform[SelectedTriangle].color]); pnlXFormColor.color := ColorValToColor(MainCp.cmap, cp.xform[SelectedTriangle].color); - DrawGraph; +{ + with ColorImage.Canvas do ///..........! + begin + Row := Bitmap.Scanline[0]; + for i := 0 to Bitmap.Width - 1 do + begin + with Row[i] do + begin + rgbtRed := Palette[i][0]; + rgbtGreen := Palette[i][1]; + rgbtBlue := Palette[i][2]; + end; + end; + end; +} DrawPreview; end; @@ -1803,6 +2309,28 @@ begin end; end; +procedure TEditForm.pnlGridColor1Click(Sender: TObject); +begin + AdjustForm.ColorDialog.Color := pnlGridColor1.Color; + if AdjustForm.ColorDialog.Execute then + begin + pnlGridColor1.Color := AdjustForm.ColorDialog.Color; + GridColor1 := Integer(pnlGridColor1.color); + DrawGraph; + end; +end; + +procedure TEditForm.pnlGridColor2Click(Sender: TObject); +begin + AdjustForm.ColorDialog.Color := pnlGridColor2.Color; + if AdjustForm.ColorDialog.Execute then + begin + pnlGridColor2.Color := AdjustForm.ColorDialog.Color; + GridColor2 := Integer(pnlGridColor2.color); + DrawGraph; + end; +end; + procedure TEditForm.txtXFormColorExit(Sender: TObject); var v: double; @@ -1811,7 +2339,7 @@ begin v := StrToFloat(txtXFormColor.Text); except on EConvertError do begin - txtXformColor.text := FLoattoStr(cp.xform[SelectedTriangle].color); + txtXformColor.text := Format('%1.3f', [cp.xform[SelectedTriangle].color]);//FLoatToStr(cp.xform[SelectedTriangle].color); exit; end; end; @@ -1819,7 +2347,7 @@ begin if v < 0 then v := 0; if v <> cp.xform[SelectedTriangle].color then begin - scrlXFormColor.Position := round(v * 100); + scrlXFormColor.Position := round(v * scrlXFormColor.Max); UpdateFlame(true); end; end; @@ -1835,7 +2363,7 @@ begin v := StrToFloat(txtXFormColor.Text); except on EConvertError do begin - txtXformColor.text := FLoattoStr(cp.xform[SelectedTriangle].color); + txtXformColor.text := Format('%1.3f', [cp.xform[SelectedTriangle].color]);//FLoattoStr(cp.xform[SelectedTriangle].color); exit; end; end; @@ -1843,7 +2371,7 @@ begin if v < 0 then v := 0; if v <> cp.xform[SelectedTriangle].color then begin - scrlXFormColor.Position := round(v * 100); + scrlXFormColor.Position := round(v * scrlXFormColor.Max); UpdateFlame(true); end; end; @@ -1946,7 +2474,7 @@ begin if (NewVal <> OldVal) and Allow then begin MainForm.UpdateUndo; - EditedVariation := i; +// EditedVariation := i; cp.xform[SelectedTriangle].vars[i] := NewVal; // VarNormalize(cp); VEVars.Values[VarNames[i]] := Format('%.6g', [cp.xform[SelectedTriangle].vars[i]]); @@ -1985,7 +2513,7 @@ begin if (NewVal <> OldVal) and Allow then begin MainForm.UpdateUndo; - EditedVariation := i; +// EditedVariation := i; cp.xform[SelectedTriangle].vars[i] := NewVal; // VarNormalize(cp); VEVars.Values[VarNames[i]] := Format('%.6g', [cp.xform[SelectedTriangle].vars[i]]); @@ -2023,7 +2551,7 @@ begin if (NewVal <> OldVal) and Allow then begin MainForm.UpdateUndo; - EditedVariation := i; +// EditedVariation := i; cp.xform[SelectedTriangle].vars[i] := NewVal; // VarNormalize(cp); VEVars.Values[VarNames[i]] := Format('%.6g', [cp.xform[SelectedTriangle].vars[i]]); @@ -2034,6 +2562,28 @@ end; { **************************************************************************** } +function TEditForm.GetPivot: TSPoint; +begin + case (rgPivot.ItemIndex) of + 0: begin + Result.x:=MainTriangles[SelectedTriangle].x[0]; + Result.y:=MainTriangles[SelectedTriangle].y[0]; + end; + 1: begin + Result.x:=MainTriangles[SelectedTriangle].x[1]; + Result.y:=MainTriangles[SelectedTriangle].y[1]; + end; + 2: begin + Result.x:=MainTriangles[SelectedTriangle].x[2]; + Result.y:=MainTriangles[SelectedTriangle].y[2]; + end; + 3: Result:=Centroid(MainTriangles[SelectedTriangle]); + else + Result.x:=0; + Result.y:=0; + end; +end; + procedure TEditForm.btTrgRotateLeftClick(Sender: TObject); var offset: double; @@ -2046,21 +2596,23 @@ begin end; if offset <> 0 then begin - case (rgPivot.ItemIndex) of - 0: MainTriangles[SelectedTriangle] := - RotateTrianglePoint(MainTriangles[SelectedTriangle], MainTriangles[SelectedTriangle].x[0], MainTriangles[SelectedTriangle].y[0], (PI/180) * offset); - 1: MainTriangles[SelectedTriangle] := - RotateTrianglePoint(MainTriangles[SelectedTriangle], MainTriangles[SelectedTriangle].x[1], MainTriangles[SelectedTriangle].y[1], (PI/180) * offset); - 2: MainTriangles[SelectedTriangle] := - RotateTrianglePoint(MainTriangles[SelectedTriangle], MainTriangles[SelectedTriangle].x[2], MainTriangles[SelectedTriangle].y[2], (PI/180) * offset); - 3: MainTriangles[SelectedTriangle] := - RotateTriangleCenter(MainTriangles[SelectedTriangle], (PI/180) * offset); - end; + MainForm.UpdateUndo; + MainTriangles[SelectedTriangle] := + RotateTrianglePoint(MainTriangles[SelectedTriangle], GetPivot.x, GetPivot.y, (PI/180)*offset); HasChanged := True; UpdateFlame(true); end; end; +procedure TEditForm.btTrgRotateLeft90Click(Sender: TObject); +begin + MainForm.UpdateUndo; + MainTriangles[SelectedTriangle] := + RotateTrianglePoint(MainTriangles[SelectedTriangle], GetPivot.x, GetPivot.y, PI/2); + HasChanged := True; + UpdateFlame(true); +end; + procedure TEditForm.btTrgRotateRightClick(Sender: TObject); var offset: double; @@ -2073,15 +2625,42 @@ begin end; if offset <> 0 then begin - case (rgPivot.ItemIndex) of - 0: MainTriangles[SelectedTriangle] := - RotateTrianglePoint(MainTriangles[SelectedTriangle], MainTriangles[SelectedTriangle].x[0], MainTriangles[SelectedTriangle].y[0], -((PI/180) * offset)); - 1: MainTriangles[SelectedTriangle] := - RotateTrianglePoint(MainTriangles[SelectedTriangle], MainTriangles[SelectedTriangle].x[1], MainTriangles[SelectedTriangle].y[1], -((PI/180) * offset)); - 2: MainTriangles[SelectedTriangle] := - RotateTrianglePoint(MainTriangles[SelectedTriangle], MainTriangles[SelectedTriangle].x[2], MainTriangles[SelectedTriangle].y[2], -((PI/180) * offset)); - 3: MainTriangles[SelectedTriangle] := - RotateTriangleCenter(MainTriangles[SelectedTriangle], -((PI/180) * offset)); + MainForm.UpdateUndo; + MainTriangles[SelectedTriangle] := + RotateTrianglePoint(MainTriangles[SelectedTriangle], GetPivot.x, GetPivot.y, -((PI/180) * offset)); + HasChanged := True; + UpdateFlame(true); + end; +end; + +procedure TEditForm.btTrgRotateRight90Click(Sender: TObject); +begin + MainForm.UpdateUndo; + MainTriangles[SelectedTriangle] := + RotateTrianglePoint(MainTriangles[SelectedTriangle], GetPivot.x, GetPivot.y, -PI/2); + HasChanged := True; + UpdateFlame(true); +end; + +procedure TEditForm.TrgMove(dx, dy: double); +var + i: integer; + offset: double; +begin + try + offset := StrToFloat(txtTrgMoveValue.Text); + except + offset := 0; + txtTrgMoveValue.Text := '0'; + end; + if offset <> 0 then + begin + MainForm.UpdateUndo; + for i := 0 to 2 do begin + MainTriangles[SelectedTriangle].x[i] := + MainTriangles[SelectedTriangle].x[i] + dx*offset; + MainTriangles[SelectedTriangle].y[i] := + MainTriangles[SelectedTriangle].y[i] + dy*offset; end; HasChanged := True; UpdateFlame(true); @@ -2089,87 +2668,43 @@ begin end; procedure TEditForm.btTrgMoveLeftClick(Sender: TObject); -var - i: integer; - offset: double; begin - try - offset := StrToFloat(txtTrgMoveValue.Text); - except - offset := 0; - txtTrgMoveValue.Text := '0'; - end; - if offset <> 0 then - begin - for i := 0 to 2 do - MainTriangles[SelectedTriangle].x[i] := - MainTriangles[SelectedTriangle].x[i] - offset; - HasChanged := True; - UpdateFlame(true); - end; + TrgMove(-1,0); end; procedure TEditForm.btTrgMoveRightClick(Sender: TObject); -var - i: integer; - offset: double; begin - try - offset := StrToFloat(txtTrgMoveValue.Text); - except - offset := 0; - txtTrgMoveValue.Text := '0'; - end; - if offset <> 0 then - begin - for i := 0 to 2 do - MainTriangles[SelectedTriangle].x[i] := - MainTriangles[SelectedTriangle].x[i] + offset; - HasChanged := True; - UpdateFlame(true); - end; + TrgMove(1,0); end; procedure TEditForm.btTrgMoveUpClick(Sender: TObject); -var - i: integer; - offset: double; begin - try - offset := StrToFloat(txtTrgMoveValue.Text); - except - offset := 0; - txtTrgMoveValue.Text := '0'; - end; - if offset <> 0 then - begin - for i := 0 to 2 do - MainTriangles[SelectedTriangle].y[i] := - MainTriangles[SelectedTriangle].y[i] + offset; - HasChanged := True; - UpdateFlame(true); - end; + TrgMove(0,1); end; procedure TEditForm.btTrgMoveDownClick(Sender: TObject); -var - i: integer; - offset: double; begin - try - offset := StrToFloat(txtTrgMoveValue.Text); - except - offset := 0; - txtTrgMoveValue.Text := '0'; - end; - if offset <> 0 then - begin - for i := 0 to 2 do - MainTriangles[SelectedTriangle].y[i] := - MainTriangles[SelectedTriangle].y[i] - offset; - HasChanged := True; - UpdateFlame(true); - end; + TrgMove(0,-1); +end; + +procedure TEditForm.btTrgMoveLUClick(Sender: TObject); +begin + TrgMove(-1,1); +end; + +procedure TEditForm.btTrgMoveLDClick(Sender: TObject); +begin + TrgMove(-1,-1); +end; + +procedure TEditForm.btTrgMoveRUClick(Sender: TObject); +begin + TrgMove(1,1); +end; + +procedure TEditForm.btTrgMoveRDClick(Sender: TObject); +begin + TrgMove(1,-1); end; procedure TEditForm.btTrgScaleUpClick(Sender: TObject); @@ -2184,7 +2719,9 @@ begin end; if scale <> 0 then begin - MainTriangles[SelectedTriangle] := ScaleTriangleCenter(MainTriangles[SelectedTriangle], scale+1.0); + MainForm.UpdateUndo; + MainTriangles[SelectedTriangle] := + ScaleTrianglePoint(MainTriangles[SelectedTriangle], GetPivot.x, GetPivot.y, 1.0+scale); HasChanged := True; UpdateFlame(true); end; @@ -2202,11 +2739,338 @@ begin end; if scale <> 0 then begin - MainTriangles[SelectedTriangle] := ScaleTriangleCenter(MainTriangles[SelectedTriangle], 1.0-scale); + MainForm.UpdateUndo; + MainTriangles[SelectedTriangle] := + ScaleTrianglePoint(MainTriangles[SelectedTriangle], GetPivot.x, GetPivot.y, 1.0-scale); HasChanged := True; UpdateFlame(true); end; end; +procedure TEditForm.editKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +var + coeff: double; +label goNext; +begin + //if VEVars.Focused then exit; + + if Shift = [ssShift] then coeff := 10 + else if Shift = [ssCtrl] then coeff := 0.1 + else coeff := 1.0; + +// if (key in [VK_LEFT,VK_RIGHT,VK_UP,VK_DOWN,VK_PRIOR,VK_NEXT,VK_HOME,VK_END]) and +// if VEVars.Focused = false then +// if FocusedControl = VEVars then + if PageControl.TabIndex <> 2 then + begin +// MainForm.UpdateUndo; + case key of + VK_LEFT: + if Shift = [ssAlt] then btTrgRotateLeftClick(Sender) + else TrgMove(-coeff,0); + VK_RIGHT: + if Shift = [ssAlt] then btTrgRotateRightClick(Sender) + else TrgMove(coeff,0); + VK_UP: + if Shift = [ssAlt] then btTrgScaleUpClick(Sender) + else TrgMove(0,coeff); + VK_DOWN: + if Shift = [ssAlt] then btTrgScaleDownClick(Sender) + else TrgMove(0,-coeff); + VK_PRIOR: btTrgRotateLeftClick(Sender); + VK_NEXT: btTrgRotateRightClick(Sender); + VK_HOME: btTrgScaleUpClick(Sender); + VK_END: btTrgScaleDownClick(Sender); + VK_INSERT: mnuDupClick(Sender); + VK_DELETE: {if Shift = [ssShift] then} mnuDeleteClick(Sender); + else goto goNext; + end; +// HasChanged := True; + key_handled:=true; + exit; + end; + +goNext: + + case key of + VK_ADD: + if SelectedTriangle < Transforms-1 then begin + Inc(SelectedTriangle); + DrawGraph; + ShowSelectedInfo; + end; + VK_SUBTRACT: + if SelectedTriangle > 0 then begin + Dec(SelectedTriangle); + DrawGraph; + ShowSelectedInfo; + end; + VK_SPACE: EditForm.tbSelectClick(Sender); + Ord('Q'): EditForm.tbEditModeClick(tbMove); + Ord('W'): EditForm.tbEditModeClick(tbRotate); + Ord('E'): EditForm.tbEditModeClick(tbScale); + + Ord('A'): PageControl.TabIndex := 0; + Ord('S'): PageControl.TabIndex := 1; + Ord('D'): PageControl.TabIndex := 2; + Ord('F'): PageControl.TabIndex := 3; + + Ord('Z'): EditForm.rgPivot.ItemIndex:=0; + Ord('X'): EditForm.rgPivot.ItemIndex:=1; + Ord('C'): EditForm.rgPivot.ItemIndex:=2; + Ord('V'): EditForm.rgPivot.ItemIndex:=3; + Ord('B'): EditForm.rgPivot.ItemIndex:=4; + else + key_handled := false; + exit; + end; + key := 0; + key_handled := true; +end; + +procedure TEditForm.editKeyPress(Sender: TObject; var Key: Char); +begin + if key_handled then key := #0 + else if key in ['A'..'z'] then key := #0; // hmmm... +end; + +procedure TEditForm.splitterMoved(Sender: TObject); +begin + UpdateDisplay; +end; + +procedure TEditForm.tbSelectClick(Sender: TObject); +begin + SelectMode := not SelectMode; + tbSelect.Down := SelectMode; + + if SelectMode then + begin + StatusBar.Panels[2].Text := 'Select ON' + end + else begin + mouseOverTriangle := SelectedTriangle; + StatusBar.Panels[2].Text := 'Select OFF'; + end; + + // hack: + GetCursorPos(MousePos); + SetCursorPos(MousePos.x, MousePos.y); +end; + +procedure TEditForm.editMouseWheel(Sender: TObject; Shift: TShiftState; + WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); +begin + if WheelDelta > 0 then GraphZoom := GraphZoom * 1.25 + else GraphZoom := GraphZoom * 0.8; +// if GraphZoom < 0 the GraphZoom := 0; + EditForm.StatusBar.Panels[2].Text := Format('Zoom: %f', [GraphZoom]); + + DrawGraph; + Handled := true; +end; + +procedure TEditForm.PreviewImageDblClick(Sender: TObject); +begin + MainForm.UpdateUndo; + MainForm.ResetLocation; + MainForm.RedrawTimer.enabled := true; + MainForm.UpdateWindows; +end; + +procedure TEditForm.rgPivotClicked(Sender: TObject); +begin + DrawGraph; +end; + +{ +procedure TEditForm.VEVarsSelectCell(Sender: TObject; ACol, ARow: Integer; + var CanSelect: Boolean); +begin + DrawGraph; +end; +} + +procedure TEditForm.tbEditModeClick(Sender: TObject); +begin + if Sender = tbRotate then editMode := modeRotate + else if Sender = tbScale then editMode := modeScale + else editMode := modeMove; + tbMove.Down := (editMode = modeMove); + tbRotate.Down := (editMode = modeRotate); + tbScale.Down := (editMode = modeScale); +end; + +// --Z-- Value List Editor + +procedure TEditForm.VEVarsMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +var + cell: TGridCoord; +begin + if Button = mbLeft then begin + cell:=VEVars.MouseCoord(x, y); + VEVars.Row := cell.Y; + varDragIndex := cell.Y-1; + Screen.Cursor := crHSplit; + + GetCursorPos(mousepos); // hmmm + + varDragMode:=true; + varDragPos:=x; + SetCaptureControl(VEVars); + + MainForm.UpdateUndo; + end; +end; + +procedure TEditForm.VEVarsMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); +var + v: double; +// i: integer; + cell: TGridCoord; +begin + cell := VEVars.MouseCoord(x, y); + if (cell.Y > 0) and (cell.X = 0) then VEVars.Cursor := crHandPoint + else VEVars.Cursor := crDefault; + + if varMM then + begin + varMM:=false; + varDragPos:=x; + end + else + if varDragMode and (x <> varDragPos) then + begin +// i := EditForm.VEVars.Row - 1; + v := cp.xform[SelectedTriangle].vars[varDragIndex]; + v := RoundTo(v + ((x-varDragPos)*2)/1000.0, -3); + + varDragPos:=x; + SetCursorPos(MousePos.x, MousePos.y); // hmmm + varMM:=true; + + cp.xform[SelectedTriangle].vars[varDragIndex] := v; + VEVars.Values[VarNames[varDragIndex]] := Format('%.6g', [v]); + + HasChanged := True; + UpdateFlameX; + end; +end; + +procedure TEditForm.VEVarsMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if Button <> mbLeft then exit; + SetCaptureControl(nil); + if varDragMode then + begin + varDragMode:=false; + Screen.Cursor := crDefault; + + if HasChanged then + begin + UpdateFlame(true); + HasChanged := False; + end; + end; +end; + +procedure TEditForm.VEVarsDblClick(Sender: TObject); +//var +// i: integer; +begin + MainForm.UpdateUndo; + +// i := EditForm.VEVars.Row - 1; + cp.xform[SelectedTriangle].vars[varDragIndex] := 0; + VEVars.Values[VarNames[varDragIndex]] := '0'; + HasChanged := True; + UpdateFlameX; +end; + +procedure TEditForm.VEVarsDrawCell(Sender: TObject; ACol, ARow: Integer; + Rect: TRect; State: TGridDrawState); +begin +{ +// if gdFocused in State then + with eqListBox.Canvas do + begin + Brush.Color:=clBlue; + FillRect(Rect); + end; +// VEVars.DrawCell(Sender, ACol, ARow, Rect, State); +} +end; + +procedure TEditForm.cbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + key:=0; +end; + +procedure TEditForm.tbFullViewClick(Sender: TObject); +begin + MainForm.mnuFullScreenClick(Sender); +end; + +// --Z-- // transform color scroller + +procedure TEditForm.ColorImageMouseDown(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); +begin + if Button = mbLeft then + begin + colorDragX:=x; + colorOldX:=x; +// BackupPal:=Palette; + colorDrag:=true; + colorChanged:=false; + end; +end; + +procedure TEditForm.ColorImageMouseMove(Sender: TObject; + Shift: TShiftState; X, Y: Integer); +var + i, offset: integer; +begin + if colorDrag and (oldX<>x) then + begin + oldX:=x; + offset := ( ((x - colorDragX) shl 8) div ColorImage.Width ) mod 256; + colorChanged := true; +{ + for i := 0 to 255 do + begin + Palette[i][0] := BackupPal[(255 + i - offset) and $FF][0]; + Palette[i][1] := BackupPal[(255 + i - offset) and $FF][1]; + Palette[i][2] := BackupPal[(255 + i - offset) and $FF][2]; + end; + + cp.CmapIndex := cmbPalette.ItemIndex; + cp.cmap := Palette; +} + colorImage.Refresh; + end; +end; + +procedure TEditForm.ColorImageMouseUp(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); +begin + if colorDrag then + begin + colorDrag := false; + + if colorChanged then begin + // MainForm.UpdateUndo; + // cp.xxx := xxx; + // MainCP.copy(cp); + // UpdateXXXX; + end; + end; +end; + end.