From 1785c2875d9972acd4c1ba8350993a1e61bb01d3 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Fri, 29 Aug 2025 13:48:16 +0300 Subject: [PATCH] First commit --- POWERCAD30/UNITS/form3d.dfm | 10 +- POWERCAD30/UNITS/form3d.pas | 5 + SRC/CadEngine/U_ESCadClasess.pas | 43 +- SRC/Main/USCS_Main.dfm | 13 +- SRC/Main/USCS_Main.pas | 21 +- SRC/Main/U_CAD.dfm | 124 +++--- SRC/Main/U_CAD.pas | 673 ++++++++++++++++++++++--------- SRC/Main/U_Common.pas | 32 ++ 8 files changed, 663 insertions(+), 258 deletions(-) diff --git a/POWERCAD30/UNITS/form3d.dfm b/POWERCAD30/UNITS/form3d.dfm index 7922210..a26d807 100644 --- a/POWERCAD30/UNITS/form3d.dfm +++ b/POWERCAD30/UNITS/form3d.dfm @@ -294,6 +294,10 @@ object frm3D: Tfrm3D FixedDimension = 19 object TabSheet1: TRzTabSheet Caption = #1052#1086#1076#1077#1083#1100 + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 0 + ExplicitHeight = 0 object panObjects: TPanel Left = 0 Top = 0 @@ -423,6 +427,10 @@ object frm3D: Tfrm3D end object TabScsModel: TRzTabSheet Caption = #1057#1050#1057' '#1084#1086#1076#1077#1083#1100 + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 0 + ExplicitHeight = 0 object cxGroupBox2: TcxGroupBox Left = 0 Top = 0 @@ -3405,7 +3413,7 @@ object frm3D: Tfrm3D Left = 100 Top = 57 Bitmap = { - 494C01013A00B000080310001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 494C01013A00B0000C0310001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 000000000000360000002800000040000000F0000000010020000000000000F0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/POWERCAD30/UNITS/form3d.pas b/POWERCAD30/UNITS/form3d.pas index 4cc4a57..ed6951c 100644 --- a/POWERCAD30/UNITS/form3d.pas +++ b/POWERCAD30/UNITS/form3d.pas @@ -17516,6 +17516,7 @@ begin FreeAndNil(F3DModel); FIdsStream.Clear; FFilesStream.Clear; + Gis3D := false; //Tolik 29/08/2025 -- end; except on E: Exception do AddExceptionToLogEx('Tfrm3D.FormCloseQuery', E.Message); @@ -22585,6 +22586,10 @@ end; procedure Tfrm3D.sbApplyScsModelClick(Sender: TObject); begin ApplyScsModel; + //Tolik 29/08/2025 -- + GisChangeFrom3D := False; //сброс флага + SaveUndoProjBefore3D; // запись Undo проекта заново + // end; procedure Tfrm3D.nDivLineClick(Sender: TObject); diff --git a/SRC/CadEngine/U_ESCadClasess.pas b/SRC/CadEngine/U_ESCadClasess.pas index c0e1b4b..c68d429 100644 --- a/SRC/CadEngine/U_ESCadClasess.pas +++ b/SRC/CadEngine/U_ESCadClasess.pas @@ -3115,6 +3115,9 @@ var FirstConn, LastConn: TConnectorObject; CableTraceErr: Boolean; SavedMarkedCadTraceList: TList; + //Tolik 28/08/2025-- + isNormbaseCable: Boolean; + SavedDropComponent: TSCSComponent; // function CheckIsElComponToConnect(aObject: TConnectorObject):Boolean; @@ -3549,6 +3552,17 @@ begin // (нужен, чтобы сбросить проверку коннекторов на снапе) Result := nil; + //Tolik 28/08/2025 -- + isNormbaseCable := false; + if F_NormBase.GSCSBase.SCSComponent <> nil then + begin + isNormbaseCable := IsCableComponent(F_NormBase.GSCSBase.SCSComponent); + end; + + SavedDropComponent := GDropComponent; + GDropComponent := nil; + // + SavedMarkedCadTraceList := TList.Create; SaveDropCadMarkedTraces; // сохранить список и сбросить (отмеченных для трассировки трасс на каде) @@ -4243,9 +4257,31 @@ begin if SavedConnectorsList <> nil then FreeAndNil(SavedConnectorsList); - FreeAndNil(SavedLinesList); - end; + //FreeAndNil(SavedLinesList); + end; + //Tolik 28/08/2025 -- Если не трассировка электрики(главное, чтоб не поломалась...), если линейный компонент, + //то положить по трассам, если включен флажок ручной прокладки + if ((GDropComponent = nil) and (CallAutoTraceElectricMaster = false)) then + begin + if GAutoAddCableAfterDragDrop then + begin + if F_NormBase.GSCSBase.SCSComponent <> nil then + begin + if F_NormBase.GSCSBase.SCSComponent.IsLine = biTrue then + begin + for i := 0 to SavedLinesList.Count - 1 do + begin + CopyComponentToSCSObject(TOrthoLine(SavedLinesList[i]).ID, F_NormBase.GSCSBase.SCSComponent.ID, True); + if isNormbaseCable then //(если кабель то посоединять) + AutoConnectOnAppendCable(GCadForm.FCADListID, TOrthoLine(SavedLinesList[i]).ID); + end; + end; + end; + end; + end; + FreeAndNil(SavedLinesList); + // GCadForm.PCad.DeselectAll(2); // проверка на привязку объекта @@ -4369,6 +4405,9 @@ begin GisOrthoLineHadow := False; end; end; + //Tolik 28/08/2025 -- + GDropComponent := SavedDropComponent; + // GisOrthoLineHadow := False; // Tolik 27/08/2021 -- RestoreCadMarkedTraces; // Tolik 08/06/2021 -- восстановить список промаркированных трасс на каде //GCallAutoTraceElectricMaster := False; // Tolik 11/03/2021 -- diff --git a/SRC/Main/USCS_Main.dfm b/SRC/Main/USCS_Main.dfm index 066b317..391c4ec 100644 --- a/SRC/Main/USCS_Main.dfm +++ b/SRC/Main/USCS_Main.dfm @@ -98,7 +98,6 @@ object FSCS_Main: TFSCS_Main OnDockDrop = PDock1DockDrop OnDockOver = PDock1DockOver OnUnDock = PDock1UnDock - ExplicitLeft = 1337 end object pCADList: TPanel Left = 0 @@ -109,7 +108,6 @@ object FSCS_Main: TFSCS_Main BevelOuter = bvNone BorderStyle = bsSingle TabOrder = 2 - ExplicitWidth = 1342 object pageCADList: TPageControl Left = 0 Top = 0 @@ -125,7 +123,6 @@ object FSCS_Main: TFSCS_Main Style = tsFlatButtons TabOrder = 0 OnChange = pageCADListChange - ExplicitWidth = 1340 end end object cbMainPanel: TControlBar @@ -156,7 +153,6 @@ object FSCS_Main: TFSCS_Main OnBandPaint = cbMainPanelBandPaint OnDockOver = cbMainPanelDockOver OnMouseDown = cbMainPanelMouseDown - ExplicitWidth = 1336 object tbFile: TToolBar Left = 11 Top = 2 @@ -1228,7 +1224,6 @@ object FSCS_Main: TFSCS_Main TabOrder = 4 VisualStyle = vsClassic OnHotSpotClick = pnHintBarHotSpotClick - ExplicitWidth = 1342 end object ActionManager: TActionManager ActionBars.SessionCount = 1080 @@ -5889,7 +5884,7 @@ object FSCS_Main: TFSCS_Main Left = 496 Top = 232 Bitmap = { - 494C0101D2008C01C00310001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 494C0101D2008C01C40310001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 0000000000003600000028000000400000005003000001002000000000000050 0300000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -12899,7 +12894,7 @@ object FSCS_Main: TFSCS_Main Left = 248 Top = 280 Bitmap = { - 494C010123008C01D80320001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 494C010123008C01DC0320001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 0000000000003600000028000000800000009000000001002000000000000020 0100000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -15471,7 +15466,7 @@ object FSCS_Main: TFSCS_Main Left = 240 Top = 408 Bitmap = { - 494C010112008C01CC030E000E00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 494C010112008C01D0030E000E00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 000000000000360000002800000038000000460000000100200000000000403D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -19974,7 +19969,7 @@ object FSCS_Main: TFSCS_Main Left = 240 Top = 344 Bitmap = { - 494C0101DE008C01B40618001800FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 494C0101DE008C01B80618001800FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 00000000000036000000280000006000000040050000010020000000000000E0 070000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009D9188003D2413003D241300FFFF diff --git a/SRC/Main/USCS_Main.pas b/SRC/Main/USCS_Main.pas index a47d46b..88b1e86 100644 --- a/SRC/Main/USCS_Main.pas +++ b/SRC/Main/USCS_Main.pas @@ -20058,6 +20058,7 @@ var // 2011-05-10 xModelNode: TTreeNode; OldMapScale: Integer; + prLists: TList; begin {$ifdef 3D} if ActiveMDIChild <> nil then @@ -20080,8 +20081,15 @@ begin // 22.07.2011 G3DModelForProject := False; + GisChangeFrom3D := False; + Gis3D := True; + //Tolik 29/08/2025 -- записать Уно проекта перед 3Д //Tolik 11/07/2023 -- - SaveCurrProjectToUndoFiles(true); + //SaveCurrProjectToUndoFiles(true); + // + prLists := GetAllProjNormLists; + SaveForProjectUndo(prLists, true, false, true); + prLists.Free; // BeginProgress; if not Assigned(frm3D) then @@ -20118,6 +20126,12 @@ begin UndoListInPM(-1, GetPathToSCSUndoUniqDir(true), true, 0, 0); } // + if GisChangeFrom3D then + begin + + end; + GisChangeFrom3D := False; + Gis3D := False; // Tolik 23/07/2018 -- GCadForm.PCad.Refresh; // @@ -21779,6 +21793,11 @@ begin if not isMapScaleDifferent then begin G3DModelForProject := True; + //Tolik 29/08/2025 -- + GIs3D := True; + GisChangeFrom3D := False; + SaveUndoProjBefore3D; + // BeginProgress; if not Assigned(frm3D) then Application.CreateForm(Tfrm3D, frm3d); diff --git a/SRC/Main/U_CAD.dfm b/SRC/Main/U_CAD.dfm index 4a97031..b740040 100644 --- a/SRC/Main/U_CAD.dfm +++ b/SRC/Main/U_CAD.dfm @@ -29,7 +29,6 @@ object F_CAD: TF_CAD OldCreateOrder = False Position = poDefault Visible = True - WindowState = wsMinimized OnActivate = FormActivate OnCanResize = FormCanResize OnClose = FormClose @@ -134,7 +133,6 @@ object F_CAD: TF_CAD OnPopMenuClicked = PCadPopMenuClicked OnGUIEvent = PCadGUIEvent OnToolChanged = PCadToolChanged - ExplicitTop = -1 object HorScroll: TScrollBar Left = 0 Top = 449 @@ -458,7 +456,7 @@ object F_CAD: TF_CAD object cbManualCableTracingMode: TToolButton Left = 720 Top = 0 - Hint = #1056#1077#1078#1080#1084' '#1088#1091#1095#1085#1086#1081' '#1087#1088#1086#1082#1083#1072#1076#1082#1080' '#1082#1072#1073#1077#1083#1103'('#1076#1083#1103' '#1101#1083#1077#1082#1090#1088#1080#1082#1080')' + Hint = #1056#1077#1078#1080#1084' '#1088#1091#1095#1085#1086#1081' '#1087#1088#1086#1082#1083#1072#1076#1082#1080' '#1083#1080#1085#1077#1081#1085#1099#1093' '#1082#1086#1084#1087#1086#1085#1077#1085#1090 ImageIndex = 99 ParentShowHint = False ShowHint = True @@ -593,64 +591,80 @@ object F_CAD: TF_CAD 69006700680074003A0001000100010001000100010001000D000A0074006200 530068006F0077005400720061006E00730070006100720065006E0063007900 0100530068006F0077005400720061006E00730050004100720065006E006300 - 790001000100010001000100010001000D000A0073007400480069006E007400 - 73005F0055006E00690063006F00640065000D000A004D004900740065006D00 - 5F004300610062006C0065004E006F00430061006E0061006C0001001A043004 - 310435043B043804200032043D04350420003A0430043D0430043B043E043204 - 01001A043004310435043B045604200037043E0432043D04560420003A043004 - 3D0430043B045604320401004300610062006C006500730020006F0075007400 - 730069006400650020006300680061006E006E0065006C007300010001000100 - 010001000D000A00630062004D0061006E00750061006C004300610062006C00 - 6500540072006100630069006E0067004D006F00640065000100200435043604 - 38043C0420004004430447043D043E04390420003F0440043E043A043B043004 - 34043A04380420003A043004310435043B044F04280034043B044F0420004D04 - 3B0435043A044204400438043A0438042900010020043504360438043C042000 - 4004430447043D043E04570420003F0440043E043A043B04300434043A043804 - 20003A043004310435043B044F042000280034043B044F04200035043B043504 - 3A044204400438043A043804290001004D0061006E00750061006C0020006300 - 610062006C006500200072006F007500740069006E00670020006D006F006400 - 65002000280065006C00650063007400720069006300610020006F006E006C00 - 79002900010001000100010001000D000A007300740044006900730070006C00 - 610079004C006100620065006C0073005F0055006E00690063006F0064006500 - 0D000A007300740046006F006E00740073005F0055006E00690063006F006400 - 65000D000A00540046005F0043004100440001004D0053002000530061006E00 - 730020005300650072006900660001004D0053002000530061006E0073002000 - 5300650072006900660001004D0053002000530061006E007300200053006500 - 7200690066000100010001004D0053002000530061006E007300200053006500 - 720069006600010001000D000A005000430061006400010047004F0053005400 - 010047004F0053005400010047004F005300540001000100010047004F005300 - 5400010001000D000A0073006200560069006500770001005300650067006F00 - 650020005500490001005400610068006F006D00610001005400610068006F00 - 6D0061000100010001005400610068006F006D006100010001000D000A007300 - 74004D0075006C00740069004C0069006E00650073005F0055006E0069006300 - 6F00640065000D000A007300740053007400720069006E00670073005F005500 - 6E00690063006F00640065000D000A00730074004F0074006800650072005300 - 7400720069006E00670073005F0055006E00690063006F00640065000D000A00 - 7300740043006F006C006C0065006300740069006F006E0073005F0055006E00 - 690063006F00640065000D000A00730074004300680061007200530065007400 - 73005F0055006E00690063006F00640065000D000A00540046005F0043004100 - 44000100440045004600410055004C0054005F00430048004100520053004500 - 54000100440045004600410055004C0054005F00430048004100520053004500 - 54000100440045004600410055004C0054005F00430048004100520053004500 - 54000100440045004600410055004C0054005F00430048004100520053004500 - 54000100440045004600410055004C0054005F00430048004100520053004500 - 5400010041004E00530049005F00430048004100520053004500540001004400 - 45004600410055004C0054005F00430048004100520053004500540001000D00 - 0A0050004300610064000100440045004600410055004C0054005F0043004800 - 410052005300450054000100440045004600410055004C0054005F0043004800 - 410052005300450054000100440045004600410055004C0054005F0043004800 - 410052005300450054000100440045004600410055004C0054005F0043004800 - 410052005300450054000100440045004600410055004C0054005F0043004800 - 41005200530045005400010041004E00530049005F0043004800410052005300 - 450054000100440045004600410055004C0054005F0043004800410052005300 - 4500540001000D000A0073006200560069006500770001004400450046004100 + 790001000100010001000100010001000D000A00630062004D00610067006E00 + 6500740054006F00570061006C006C0073000100630062004D00610067006E00 + 6500740054006F00570061006C006C0073000100010001000100010001000100 + 0D000A0073007400480069006E00740073005F0055006E00690063006F006400 + 65000D000A004D004900740065006D005F004300610062006C0065004E006F00 + 430061006E0061006C0001001A043004310435043B043804200032043D043504 + 20003A0430043D0430043B043E04320401001A043004310435043B0456042000 + 37043E0432043D04560420003A0430043D0430043B0456043204010043006100 + 62006C006500730020006F007500740073006900640065002000630068006100 + 6E006E0065006C007300010001000100010001000D000A00630062004D006100 + 6E00750061006C004300610062006C006500540072006100630069006E006700 + 4D006F0064006500010020043504360438043C0420004004430447043D043E04 + 390420003F0440043E043A043B04300434043A04380420003B0438043D043504 + 39043D044B04450420003A043E043C043F043E043D0435043D04420401002004 + 3504360438043C0420004004430447043D043E04570420003F0440043E043A04 + 3B04300434043A04380420003B0456043D04560439043D043804450420003A04 + 3E043C043F043E043D0435043D04420401004D0061006E00750061006C002000 + 72006F007500740069006E00670020006D006F0064006500200066006F007200 + 20006C0069006E00650061007200200063006F006D0070006F006E0065006E00 + 74007300010001000100010001000D000A00630062004D00610067006E006500 + 740054006F00570061006C006C00730001001F04400438043C04300433043D04 + 380447043804320430043D043804350420003A0420004104420435043D043004 + 3C0419001704300436043C043804420435042000530048004900460054002000 + 34043B044F0420003204400435043C0435043D043D043E0433043E0420003E04 + 42043A043B044E04470435043D0438044F0401001F04400438043C0430043304 + 3D04560447044304320430043D043D044F04200034043E042000410442045604 + 3D0419001A00170430044204380441043D04560442044C042000530048004900 + 46005400200034043B044F042000420438043C044704300441043E0432043E04 + 33043E0420003204560434043A043B044E04470435043D043D044F0401004D00 + 610067006E006500740069007A006100740069006F006E00200074006F002000 + 770061006C006C00730019001A0048006F006C00640020005300480049004600 + 5400200074006F002000740065006D0070006F0072006100720069006C007900 + 2000640069007300610062006C006500010001000100010001000D000A007300 + 740044006900730070006C00610079004C006100620065006C0073005F005500 + 6E00690063006F00640065000D000A007300740046006F006E00740073005F00 + 55006E00690063006F00640065000D000A00540046005F004300410044000100 + 4D0053002000530061006E00730020005300650072006900660001004D005300 + 2000530061006E00730020005300650072006900660001004D00530020005300 + 61006E0073002000530065007200690066000100010001004D00530020005300 + 61006E007300200053006500720069006600010001000D000A00500043006100 + 6400010047004F0053005400010047004F0053005400010047004F0053005400 + 01000100010047004F0053005400010001000D000A0073006200560069006500 + 770001005300650067006F00650020005500490001005400610068006F006D00 + 610001005400610068006F006D0061000100010001005400610068006F006D00 + 6100010001000D000A00730074004D0075006C00740069004C0069006E006500 + 73005F0055006E00690063006F00640065000D000A0073007400530074007200 + 69006E00670073005F0055006E00690063006F00640065000D000A0073007400 + 4F00740068006500720053007400720069006E00670073005F0055006E006900 + 63006F00640065000D000A007300740043006F006C006C006500630074006900 + 6F006E0073005F0055006E00690063006F00640065000D000A00730074004300 + 68006100720053006500740073005F0055006E00690063006F00640065000D00 + 0A00540046005F004300410044000100440045004600410055004C0054005F00 + 43004800410052005300450054000100440045004600410055004C0054005F00 + 43004800410052005300450054000100440045004600410055004C0054005F00 + 43004800410052005300450054000100440045004600410055004C0054005F00 + 43004800410052005300450054000100440045004600410055004C0054005F00 + 4300480041005200530045005400010041004E00530049005F00430048004100 + 52005300450054000100440045004600410055004C0054005F00430048004100 + 520053004500540001000D000A00500043006100640001004400450046004100 55004C0054005F00430048004100520053004500540001004400450046004100 55004C0054005F00430048004100520053004500540001004400450046004100 55004C0054005F00430048004100520053004500540001004400450046004100 55004C0054005F00430048004100520053004500540001004400450046004100 55004C0054005F004300480041005200530045005400010041004E0053004900 5F0043004800410052005300450054000100440045004600410055004C005400 - 5F00430048004100520053004500540001000D000A00} + 5F00430048004100520053004500540001000D000A0073006200560069006500 + 77000100440045004600410055004C0054005F00430048004100520053004500 + 54000100440045004600410055004C0054005F00430048004100520053004500 + 54000100440045004600410055004C0054005F00430048004100520053004500 + 54000100440045004600410055004C0054005F00430048004100520053004500 + 54000100440045004600410055004C0054005F00430048004100520053004500 + 5400010041004E00530049005F00430048004100520053004500540001004400 + 45004600410055004C0054005F00430048004100520053004500540001000D00 + 0A00} end object TimerFindSnap: TTimer Enabled = False diff --git a/SRC/Main/U_CAD.pas b/SRC/Main/U_CAD.pas index d56577c..8cdbbd7 100644 --- a/SRC/Main/U_CAD.pas +++ b/SRC/Main/U_CAD.pas @@ -11258,6 +11258,10 @@ var begin if GisAutoRotingCable then // Tolik 30/05/2022 -- exit; + //Tolik 29/08/2025 -- + if GIs3D then + exit; + Result := nil; //Tolik 16/08/2021 -- GetPathToSCSCADDir; @@ -11362,49 +11366,58 @@ begin end; if CanProcess then begin - // проверить нужно ли сейчас делать слепок - if not CheckMakeSaveForUndo then + //Tolik 29/08/2025 -- для 3Д будем делать обязательно + if not a3D then begin + // + // проверить нужно ли сейчас делать слепок + if not CheckMakeSaveForUndo then + begin + // Прибавить активное действие + FActiveActions := FActiveActions + 1; + // выйти + GCanRefreshCad := SaveGCadRefreshFlag; + exit; + end; // Прибавить активное действие FActiveActions := FActiveActions + 1; - // выйти - GCanRefreshCad := SaveGCadRefreshFlag; - exit; end; - // Прибавить активное действие - FActiveActions := FActiveActions + 1; - - // кол-во откатов переполнено, сместить. - if FSCSUndoList.Count = 10 then + //Tolik 29/08/2025 -- для 3Д удалять с карусели Ундо не будем + if not a3D then begin - // удалить первый файл в списке - ListUndoAction := TListUndoAction(FSCSUndoList[0]); - FName := ListUndoAction.FCadFileName; - // удалить файл - if FileExists(FName) then - DeleteFile(FName); - // удалить элемент из списка файлов - FSCSUndoList.Delete(0); - - // *UNDO ProjectManager* - DeleteUndoFromPM(FCADListID, ListUndoAction.FBasePath, ListUndoAction.FIsProject); - - // удалить объект UndoAction - if ListUndoAction.ActionType = uat_Floor then + // + // кол-во откатов переполнено, сместить. + if FSCSUndoList.Count = 10 then begin - // завязки на другие этажи - удалить всю цепочку - DeleteProjectUndoActions(Self, ListUndoAction); - end; - FreeAndNil(ListUndoAction); - // переприсвоить имена файлов с учетом смещения - for i := 0 to FSCSUndoList.Count - 1 do - begin - ListUndoAction := TListUndoAction(FSCSUndoList[i]); - // FName := FUndoDir + FCADListName + IntTostr(FCADListIndex) + '_' + IntToStr(i); - FName := FUndoDir + FCADListFileName + '_' + IntToStr(i); - OldFName := ListUndoAction.FCadFileName; - RenameFile(OldFName, FName); - ListUndoAction.FCadFileName := FName; + // удалить первый файл в списке + ListUndoAction := TListUndoAction(FSCSUndoList[0]); + FName := ListUndoAction.FCadFileName; + // удалить файл + if FileExists(FName) then + DeleteFile(FName); + // удалить элемент из списка файлов + FSCSUndoList.Delete(0); + + // *UNDO ProjectManager* + DeleteUndoFromPM(FCADListID, ListUndoAction.FBasePath, ListUndoAction.FIsProject); + + // удалить объект UndoAction + if ListUndoAction.ActionType = uat_Floor then + begin + // завязки на другие этажи - удалить всю цепочку + DeleteProjectUndoActions(Self, ListUndoAction); + end; + FreeAndNil(ListUndoAction); + // переприсвоить имена файлов с учетом смещения + for i := 0 to FSCSUndoList.Count - 1 do + begin + ListUndoAction := TListUndoAction(FSCSUndoList[i]); + // FName := FUndoDir + FCADListName + IntTostr(FCADListIndex) + '_' + IntToStr(i); + FName := FUndoDir + FCADListFileName + '_' + IntToStr(i); + OldFName := ListUndoAction.FCadFileName; + RenameFile(OldFName, FName); + ListUndoAction.FCadFileName := FName; + end; end; end; @@ -11705,8 +11718,7 @@ begin end; end; //Tolik 18/07/2025 -- - -procedure TF_CAD.SCSUndoNormalList(a3d: Boolean = False); +procedure TF_CAD.SCSUndoNormalList(a3D: Boolean = false); var FName: string; Figure: TFigure; @@ -11724,37 +11736,31 @@ var //Tolik CadFigList: TList; SaveGCadRefreshFlag: boolean; - + //f: TextFile; begin try - SaveGCadRefreshFlag := GCanRefreshCad; - GCanRefreshCad := false; - SavedGCadForm := GCadForm; - ListOfLists := nil; // Tolik 11/12/2020 -- - - // IGOR 2017-04-25 если это не сделать, дебагить после анду/реду потом нереально при включенном стоп-он АВ - self.UnSnapFigure; - GPrevFigureTraceTo := nil; - GPrevFigureSnap := nil; - GFigureSnap := nil; - - FullEndUpdateCad(true); // Tolik 24/03/2021 -- - - BeginProgress; - if (FSCSUndoList.Count > 0) or (G3dUndoActList.Count > 0) then + if a3D then begin - if a3d then - ListUndoAction := TListUndoAction(G3dUndoActList[0]) - else - ListUndoAction := TListUndoAction(FSCSUndoList[FSCSUndoList.Count - 1]); + SaveGCadRefreshFlag := GCanRefreshCad; + GCanRefreshCad := false; + SavedGCadForm := GCadForm; + ListOfLists := nil; // Tolik 11/12/2020 -- - FName := ListUndoAction.FCadFileName; - // есть файл - if FileExists(FName) then + // IGOR 2017-04-25 если это не сделать, дебагить после анду/реду потом нереально при включенном стоп-он АВ + self.UnSnapFigure; + GPrevFigureTraceTo := nil; + GPrevFigureSnap := nil; + GFigureSnap := nil; + + FullEndUpdateCad(true); // Tolik 24/03/2021 -- + + BeginProgress; + if FSCSUndoList.Count > 0 then begin - // если на 3Д - CountInPrj := 0; - if not a3d then + ListUndoAction := TListUndoAction(FSCSUndoList[FSCSUndoList.Count - 1]); + FName := ListUndoAction.FCadFileName; + // есть файл + if FileExists(FName) then begin // Перед UNDO, создается слепок текущего состояния для REDO if ListUndoAction.ActionType = uat_Floor then @@ -11778,149 +11784,440 @@ begin CountInPrj := 1; SaveForRedo(ListUndoAction.ActionType, ListUndoAction.FSavePM, ListUndoAction.FIsProject, CountInPrj); end; - end; - // - if FListType <> lt_Normal then - PCad.RecordUndo := False; - // перед очисткой сбросим чтобы сработала проверка в TConnectorObject.Destroy; - PCad.OnObjectInserted := nil; + // + if FListType <> lt_Normal then + PCad.RecordUndo := False; + // перед очисткой сбросим чтобы сработала проверка в TConnectorObject.Destroy; + PCad.OnObjectInserted := nil; - //ClearSCSFigures; - Try - F_ProjMan.Tree_Catalog.Items.BeginUpdate; - //ClearFiguresOnListUndoRedo; - GProjectClose := True; - GClearFigures := True; - GCadForm.FCadClose := True; - GProjectClose := True; - //ClearFiguresOnListDelete(GCadForm); - ClearSCSFigures; - Finally - F_ProjMan.Tree_Catalog.Items.EndUpdate; - GProjectClose := false; - GClearFigures := false; - GCadForm.FCadClose := false; - GProjectClose := false; - End; - //PCad.OnObjectInserted := nil; - FUndoFiguresList.Clear; - PCad.LoadSCSFiguresFromFile(FName); - PCad.OnObjectInserted := PCadObjectInserted; + //ClearSCSFigures; + Try + F_ProjMan.Tree_Catalog.Items.BeginUpdate; + //ClearFiguresOnListUndoRedo; + GProjectClose := True; + GClearFigures := True; + GCadForm.FCadClose := True; + GProjectClose := True; + //ClearFiguresOnListDelete(GCadForm); + ClearSCSFigures; + Finally + F_ProjMan.Tree_Catalog.Items.EndUpdate; + GProjectClose := false; + GClearFigures := false; + GCadForm.FCadClose := false; + GProjectClose := false; + End; + //PCad.OnObjectInserted := nil; + FUndoFiguresList.Clear; + PCad.LoadSCSFiguresFromFile(FName); + PCad.OnObjectInserted := PCadObjectInserted; - FUndoStatus := True; - try - if GListWithEndPoint = Self then - begin - GEndPoint := nil; - GListWithEndPoint := nil; - end; - - GNeedReRaiseProperties := False; - //Tolik - CadFigList := TList.Create; - for i := 0 to PCad.FigureCount - 1 do - CadFigList.Add(TFigure(PCad.Figures.Items[i])); - - for i := 0 to CadFigList.Count - 1 do - begin - Figure := TFigure(CadFigList[i]); - - if CheckFigureByClassName(Figure, 'TNet') then + FUndoStatus := True; + try + if GListWithEndPoint = Self then begin - NetObj := TNet(PCad.Figures.Items[i]); - if NetObj.FComponID = 0 then + GEndPoint := nil; + GListWithEndPoint := nil; + end; + + GNeedReRaiseProperties := False; + //Tolik + CadFigList := TList.Create; + for i := 0 to PCad.FigureCount - 1 do + CadFigList.Add(TFigure(PCad.Figures.Items[i])); + + for i := 0 to CadFigList.Count - 1 do + begin + Figure := TFigure(CadFigList[i]); + + if CheckFigureByClassName(Figure, 'TNet') then begin - FActiveNet := NetObj; - ActiveNet := FActiveNet; - end; - end - else if CheckFigureByClassName(Figure, cTConnectorObject) then + NetObj := TNet(PCad.Figures.Items[i]); + if NetObj.FComponID = 0 then + begin + FActiveNet := NetObj; + ActiveNet := FActiveNet; + end; + end + else if CheckFigureByClassName(Figure, cTConnectorObject) then + begin + TConnectorObject(Figure).RaiseProperties(CadFigList); + TConnectorObject(Figure).FJoinedListIDForBox := -1; + end + else if CheckFigureByClassName(Figure, cTOrthoLine) then + TOrthoLine(Figure).RaiseProperties(CadFigList) + else if CheckFigureByClassName(Figure, cTSCSFigureGrp) then + TSCSFigureGrp(Figure).RaiseProperties(CadFigList) + else if CheckFigureByClassName(Figure, cTCabinet) then + TCabinet(Figure).RaiseProperties(CadFigList) + else if CheckFigureByClassName(Figure, cTCabinetExt) then + TCabinetExt(Figure).RaiseProperties(CadFigList) + else if CheckFigureByClassName(Figure, cTHouse) then + THouse(Figure).RaiseProperties(CadFigList); + end; + FreeAndNil(CadFigList); + + { + for i := 0 to PCad.FigureCount - 1 do begin - TConnectorObject(Figure).RaiseProperties(CadFigList); - TConnectorObject(Figure).FJoinedListIDForBox := -1; - end - else if CheckFigureByClassName(Figure, cTOrthoLine) then - TOrthoLine(Figure).RaiseProperties(CadFigList) - else if CheckFigureByClassName(Figure, cTSCSFigureGrp) then - TSCSFigureGrp(Figure).RaiseProperties(CadFigList) - else if CheckFigureByClassName(Figure, cTCabinet) then - TCabinet(Figure).RaiseProperties(CadFigList) - else if CheckFigureByClassName(Figure, cTCabinetExt) then - TCabinetExt(Figure).RaiseProperties(CadFigList) - else if CheckFigureByClassName(Figure, cTHouse) then - THouse(Figure).RaiseProperties(CadFigList); + Figure := TFigure(PCad.Figures.Items[i]); + if CheckFigureByClassName(Figure, 'TNet') then + begin + NetObj := TNet(PCad.Figures.Items[i]); + if NetObj.FComponID = 0 then + begin + FActiveNet := NetObj; + ActiveNet := FActiveNet; + end; + end + else if CheckFigureByClassName(Figure, cTConnectorObject) then + begin + TConnectorObject(Figure).RaiseProperties; + TConnectorObject(Figure).FJoinedListIDForBox := -1; + end + else if CheckFigureByClassName(Figure, cTOrthoLine) then + TOrthoLine(Figure).RaiseProperties + else if CheckFigureByClassName(Figure, cTSCSFigureGrp) then + TSCSFigureGrp(Figure).RaiseProperties + else if CheckFigureByClassName(Figure, cTCabinet) then + TCabinet(Figure).RaiseProperties + else if CheckFigureByClassName(Figure, cTCabinetExt) then + TCabinetExt(Figure).RaiseProperties + else if CheckFigureByClassName(Figure, cTHouse) then + THouse(Figure).RaiseProperties; + end; + + if GNeedReRaiseProperties then + begin + i := 0; + while i < PCad.FigureCount do + begin + Figure := TFigure(PCad.Figures.Items[i]); + if CheckFigureByClassName(Figure, cTConnectorObject) then + begin + TConnectorObject(Figure).ReRaiseProperties; + end; + if CheckFigureByClassName(Figure, cTOrthoLine) then + begin + TOrthoLine(Figure).ReRaiseProperties; + end; + i := i + 1; + end; + end; + } + + finally + FUndoStatus := False; end; - FreeAndNil(CadFigList); - finally - FUndoStatus := False; - end; + FindObjectsForConvertClasses; + PCad.DrawFigures(True); - FindObjectsForConvertClasses; - PCad.DrawFigures(True); - - // удалить файл - if FileExists(FName) then - DeleteFile(FName); - // удалить последний который поднимается из спика - if a3d then - G3dUndoActList.delete(0) - else + // удалить файл + if FileExists(FName) then + DeleteFile(FName); + // удалить последний который поднимается из спика FSCSUndoList.Delete(FSCSUndoList.Count - 1); - // *UNDO ProjectManager* - UndoListInPM(FCADListID, ListUndoAction.FBasePath, ListUndoAction.FIsProject, 0, CountInPrj); + // *UNDO ProjectManager* + UndoListInPM(FCADListID, ListUndoAction.FBasePath, ListUndoAction.FIsProject, 0, CountInPrj); - // есть связи с другими этажами - поднять со всех связанных листов - if not a3d then - begin + // есть связи с другими этажами - поднять со всех связанных листов if ListUndoAction.ActionType = uat_Floor then begin LoadProjectUndoActions(Self, ListUndoAction); end; - end; - - if CountInPrj = 1 then - begin + // Tolik 11/12/2020 -- Здесь правильно, только если будет один лист, иначе перепутаютя настройки Када + // берет, например настройки листа № 3 и применяет к кабинетам листа № 1...получается херня. // List Params - CurListParams := GetListParams(FCADListID); + {CurListParams := GetListParams(FCADListID); FCanSaveForUndo := False; LoadSettingsForListByParams(CurListParams, True); SetVisibleCabinetsNumbers(FShowCabinetsNumbers); SetVisibleCabinetsBounds(FShowCabinetsBounds); - FCanSaveForUndo := True; - OnAfterUndo; + FCanSaveForUndo := True;} + if CountInPrj = 1 then + begin + // List Params + CurListParams := GetListParams(FCADListID); + FCanSaveForUndo := False; + LoadSettingsForListByParams(CurListParams, True); + SetVisibleCabinetsNumbers(FShowCabinetsNumbers); + SetVisibleCabinetsBounds(FShowCabinetsBounds); + FCanSaveForUndo := True; + OnAfterUndo; + end + else + if CountInPrj > 1 then + begin + if ListOfLists <> nil then + begin + for i := 0 to ListOfLists.Count - 1 do + begin + GCadForm := TF_CAD(ListOfLists[i]); + CurListParams := GetListParams(GCadForm.FCADListID); + GCadForm.FCanSaveForUndo := False; + LoadSettingsForListByParams(CurListParams, True); + SetVisibleCabinetsNumbers(GCadForm.FShowCabinetsNumbers); + SetVisibleCabinetsBounds(GCadForm.FShowCabinetsBounds); + GCadForm.FCanSaveForUndo := True; + GCadForm.OnAfterUndo; + end; + FreeAndNil(ListOfLists); + end; + end; + // end else - if CountInPrj > 1 then - begin - if ListOfLists <> nil then - begin - for i := 0 to ListOfLists.Count - 1 do - begin - GCadForm := TF_CAD(ListOfLists[i]); - CurListParams := GetListParams(GCadForm.FCADListID); - GCadForm.FCanSaveForUndo := False; - LoadSettingsForListByParams(CurListParams, True); - SetVisibleCabinetsNumbers(GCadForm.FShowCabinetsNumbers); - SetVisibleCabinetsBounds(GCadForm.FShowCabinetsBounds); - GCadForm.FCanSaveForUndo := True; - GCadForm.OnAfterUndo; - end; - FreeAndNil(ListOfLists); - end; - end; + FSCSUndoList.Remove(ListUndoAction); + // удалить объект UndoAction + FreeAndNil(ListUndoAction); + // Tolik --28/06/2016 -- + if Assigned(F_SCSObjectsProp) then + if F_SCSObjectsProp.Showing then + F_SCSObjectsProp.ClearAllProperties; // - end - else - FSCSUndoList.Remove(ListUndoAction); - // удалить объект UndoAction - FreeAndNil(ListUndoAction); - // Tolik --28/06/2016 -- - if Assigned(F_SCSObjectsProp) then - if F_SCSObjectsProp.Showing then - F_SCSObjectsProp.ClearAllProperties; - // + end; + end + else + begin + SaveGCadRefreshFlag := GCanRefreshCad; + GCanRefreshCad := false; + SavedGCadForm := GCadForm; + ListOfLists := nil; // Tolik 11/12/2020 -- + + // IGOR 2017-04-25 если это не сделать, дебагить после анду/реду потом нереально при включенном стоп-он АВ + self.UnSnapFigure; + GPrevFigureTraceTo := nil; + GPrevFigureSnap := nil; + GFigureSnap := nil; + + FullEndUpdateCad(true); // Tolik 24/03/2021 -- + + BeginProgress; + if FSCSUndoList.Count > 0 then + begin + ListUndoAction := TListUndoAction(FSCSUndoList[FSCSUndoList.Count - 1]); + FName := ListUndoAction.FCadFileName; + // есть файл + if FileExists(FName) then + begin + // Перед UNDO, создается слепок текущего состояния для REDO + if ListUndoAction.ActionType = uat_Floor then + begin + CountInPrj := 0; + ListOfLists := TList.Create; + for i := 0 to ListUndoAction.FProjectUndoAction.FLinkUndoObject.Count - 1 do + begin + LinkUndoObject := TLinkUndoObject(ListUndoAction.FProjectUndoAction.FLinkUndoObject[i]); + if LinkUndoObject.FCad.FListType = lt_Normal then + begin + CountInPrj := CountInPrj + 1; + ListOfLists.Add(LinkUndoObject.FCad); + end; + end; + SaveForProjectRedo(ListOfLists, ListUndoAction.FSavePM, ListUndoAction.FIsProject); + //FreeAndNil(ListOfLists); + end + else + begin + CountInPrj := 1; + SaveForRedo(ListUndoAction.ActionType, ListUndoAction.FSavePM, ListUndoAction.FIsProject, CountInPrj); + end; + // + if FListType <> lt_Normal then + PCad.RecordUndo := False; + // перед очисткой сбросим чтобы сработала проверка в TConnectorObject.Destroy; + PCad.OnObjectInserted := nil; + + //ClearSCSFigures; + Try + F_ProjMan.Tree_Catalog.Items.BeginUpdate; + //ClearFiguresOnListUndoRedo; + GProjectClose := True; + GClearFigures := True; + GCadForm.FCadClose := True; + GProjectClose := True; + //ClearFiguresOnListDelete(GCadForm); + ClearSCSFigures; + Finally + F_ProjMan.Tree_Catalog.Items.EndUpdate; + GProjectClose := false; + GClearFigures := false; + GCadForm.FCadClose := false; + GProjectClose := false; + End; + //PCad.OnObjectInserted := nil; + FUndoFiguresList.Clear; + PCad.LoadSCSFiguresFromFile(FName); + PCad.OnObjectInserted := PCadObjectInserted; + + FUndoStatus := True; + try + if GListWithEndPoint = Self then + begin + GEndPoint := nil; + GListWithEndPoint := nil; + end; + + GNeedReRaiseProperties := False; + //Tolik + CadFigList := TList.Create; + for i := 0 to PCad.FigureCount - 1 do + CadFigList.Add(TFigure(PCad.Figures.Items[i])); + + for i := 0 to CadFigList.Count - 1 do + begin + Figure := TFigure(CadFigList[i]); + + if CheckFigureByClassName(Figure, 'TNet') then + begin + NetObj := TNet(PCad.Figures.Items[i]); + if NetObj.FComponID = 0 then + begin + FActiveNet := NetObj; + ActiveNet := FActiveNet; + end; + end + else if CheckFigureByClassName(Figure, cTConnectorObject) then + begin + TConnectorObject(Figure).RaiseProperties(CadFigList); + TConnectorObject(Figure).FJoinedListIDForBox := -1; + end + else if CheckFigureByClassName(Figure, cTOrthoLine) then + TOrthoLine(Figure).RaiseProperties(CadFigList) + else if CheckFigureByClassName(Figure, cTSCSFigureGrp) then + TSCSFigureGrp(Figure).RaiseProperties(CadFigList) + else if CheckFigureByClassName(Figure, cTCabinet) then + TCabinet(Figure).RaiseProperties(CadFigList) + else if CheckFigureByClassName(Figure, cTCabinetExt) then + TCabinetExt(Figure).RaiseProperties(CadFigList) + else if CheckFigureByClassName(Figure, cTHouse) then + THouse(Figure).RaiseProperties(CadFigList); + end; + FreeAndNil(CadFigList); + + { + for i := 0 to PCad.FigureCount - 1 do + begin + Figure := TFigure(PCad.Figures.Items[i]); + if CheckFigureByClassName(Figure, 'TNet') then + begin + NetObj := TNet(PCad.Figures.Items[i]); + if NetObj.FComponID = 0 then + begin + FActiveNet := NetObj; + ActiveNet := FActiveNet; + end; + end + else if CheckFigureByClassName(Figure, cTConnectorObject) then + begin + TConnectorObject(Figure).RaiseProperties; + TConnectorObject(Figure).FJoinedListIDForBox := -1; + end + else if CheckFigureByClassName(Figure, cTOrthoLine) then + TOrthoLine(Figure).RaiseProperties + else if CheckFigureByClassName(Figure, cTSCSFigureGrp) then + TSCSFigureGrp(Figure).RaiseProperties + else if CheckFigureByClassName(Figure, cTCabinet) then + TCabinet(Figure).RaiseProperties + else if CheckFigureByClassName(Figure, cTCabinetExt) then + TCabinetExt(Figure).RaiseProperties + else if CheckFigureByClassName(Figure, cTHouse) then + THouse(Figure).RaiseProperties; + end; + + if GNeedReRaiseProperties then + begin + i := 0; + while i < PCad.FigureCount do + begin + Figure := TFigure(PCad.Figures.Items[i]); + if CheckFigureByClassName(Figure, cTConnectorObject) then + begin + TConnectorObject(Figure).ReRaiseProperties; + end; + if CheckFigureByClassName(Figure, cTOrthoLine) then + begin + TOrthoLine(Figure).ReRaiseProperties; + end; + i := i + 1; + end; + end; + } + + finally + FUndoStatus := False; + end; + + FindObjectsForConvertClasses; + PCad.DrawFigures(True); + + // удалить файл + if FileExists(FName) then + DeleteFile(FName); + // удалить последний который поднимается из спика + FSCSUndoList.Delete(FSCSUndoList.Count - 1); + + // *UNDO ProjectManager* + UndoListInPM(FCADListID, ListUndoAction.FBasePath, ListUndoAction.FIsProject, 0, CountInPrj); + + // есть связи с другими этажами - поднять со всех связанных листов + if ListUndoAction.ActionType = uat_Floor then + begin + LoadProjectUndoActions(Self, ListUndoAction); + end; + // Tolik 11/12/2020 -- Здесь правильно, только если будет один лист, иначе перепутаютя настройки Када + // берет, например настройки листа № 3 и применяет к кабинетам листа № 1...получается херня. + // List Params + {CurListParams := GetListParams(FCADListID); + FCanSaveForUndo := False; + LoadSettingsForListByParams(CurListParams, True); + SetVisibleCabinetsNumbers(FShowCabinetsNumbers); + SetVisibleCabinetsBounds(FShowCabinetsBounds); + FCanSaveForUndo := True;} + if CountInPrj = 1 then + begin + // List Params + CurListParams := GetListParams(FCADListID); + FCanSaveForUndo := False; + LoadSettingsForListByParams(CurListParams, True); + SetVisibleCabinetsNumbers(FShowCabinetsNumbers); + SetVisibleCabinetsBounds(FShowCabinetsBounds); + FCanSaveForUndo := True; + OnAfterUndo; + end + else + if CountInPrj > 1 then + begin + if ListOfLists <> nil then + begin + for i := 0 to ListOfLists.Count - 1 do + begin + GCadForm := TF_CAD(ListOfLists[i]); + CurListParams := GetListParams(GCadForm.FCADListID); + GCadForm.FCanSaveForUndo := False; + LoadSettingsForListByParams(CurListParams, True); + SetVisibleCabinetsNumbers(GCadForm.FShowCabinetsNumbers); + SetVisibleCabinetsBounds(GCadForm.FShowCabinetsBounds); + GCadForm.FCanSaveForUndo := True; + GCadForm.OnAfterUndo; + end; + FreeAndNil(ListOfLists); + end; + end; + // + end + else + FSCSUndoList.Remove(ListUndoAction); + // удалить объект UndoAction + FreeAndNil(ListUndoAction); + // Tolik --28/06/2016 -- + if Assigned(F_SCSObjectsProp) then + if F_SCSObjectsProp.Showing then + F_SCSObjectsProp.ClearAllProperties; + // + end; end; except on E: Exception do addExceptionToLogEx('TF_CAD.SCSUndoNormalList', E.Message); @@ -11930,7 +12227,6 @@ begin if FListType <> lt_Normal then PCad.RecordUndo := True; // - // Tolik 26/09/2017 -- if FListSettings.ShowTracesCrossPoints > 0 then ShowTracesIntersections(2, FListSettings.ShowTracesCrossPoints); @@ -11939,13 +12235,10 @@ begin GCanRefreshCad := SaveGCadRefreshFlag; EndProgress; - {append(f); - writeln(f, 'END'); - writeln(f, '---------------------------------------------------------------------------'); - CloseFile(f);} PCad.refresh; end; + (* procedure TF_CAD.SCSUndoNormalList; var diff --git a/SRC/Main/U_Common.pas b/SRC/Main/U_Common.pas index 4e57fc5..10dc672 100644 --- a/SRC/Main/U_Common.pas +++ b/SRC/Main/U_Common.pas @@ -1355,6 +1355,8 @@ type Procedure ShowInvoice; //Tolik 24/08/2025 -- Procedure CreateBFMagistralTr(aFull: Boolean = true; aDown: Boolean = False; aUp: Boolean = False; aCompon: TSCSComponent = nil); + function GetAllProjNormLists: TList; // Tolik 29/08/2025 -- + procedure SaveUndoProjBefore3D; // Tolik 29/08/2025 -- // const {$IF Defined(SCS_PANDUIT) or Defined(SCS_PE)} @@ -1645,6 +1647,10 @@ var GDefineCounter: integer = 0; // 2011-05-10 G3DModelForProject: Boolean = False; + //Tolik 29/08/2025 -- + GIs3D: Boolean = False; + + {$IF Defined(ES_GRAPH_SC)} GUseArhOnlyMode: Boolean = True; {$ELSE} @@ -1768,6 +1774,32 @@ uses USCS_Main, Menus, U_main, U_MasterNewList, U_MasterNewListLite, U_AutoTrace U_InputRadio, U_BaseConstants, cxSpinEdit, Printers, PCPanel, U_InputMark, U_PEAutotraceDialog{Tolik}, U_SCSClasses, U_MakeEditCrossConnection, U_DimLineDialog, U_ResourceReport; + //Tolik 29/08/2025 -- + function GetAllProjNormLists: TList; // Tolik 29/08/2025 -- + var i: integer; + Cad: TF_CAD; + begin + Result := TList.Create; + for i := 0 to F_ProjMan.GSCSBase.CurrProject.ProjectLists.Count - 1 do + begin + if F_ProjMan.GSCSBase.CurrProject.ProjectLists[i].Setting.ListType = lt_Normal then + begin + Cad := GetListByID(F_ProjMan.GSCSBase.CurrProject.ProjectLists[i].SCSID); + if Cad <> nil then + Result.Add(Cad); + end; + end; + end; + + procedure SaveUndoProjBefore3D; + var prLists: TList; + begin + + prLists := GetAllProjNormLists; + SaveForProjectUndo(prLists, true, false, true); + prLists.Free; + end; + // //Tolik 24/08/2025 -- Procedure CreateBFMagistralTR(aFull: Boolean = true; aDown: Boolean = False; aUp: Boolean = False; aCompon: TSCSComponent = nil); var i, ListIndex: integer;