First commit

This commit is contained in:
Anatoly 2025-07-18 19:23:53 +03:00
parent 6d2b2f87ce
commit 713ddf52b4
8 changed files with 506 additions and 54 deletions

View File

@ -156,7 +156,7 @@ object frm3D: Tfrm3D
end
object sbApplyScsModel: TSpeedButton
Left = 1091
Top = 8
Top = 13
Width = 161
Height = 22
Anchors = [akTop, akRight]
@ -169,7 +169,6 @@ object frm3D: Tfrm3D
Font.Style = []
ParentFont = False
OnClick = sbApplyScsModelClick
ExplicitLeft = 1003
end
object SpeedButton4: TSpeedButton
Left = 1258
@ -3405,7 +3404,7 @@ object frm3D: Tfrm3D
Left = 100
Top = 57
Bitmap = {
494C01013A00B000DC0210001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
494C01013A00B000E40210001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
000000000000360000002800000040000000F0000000010020000000000000F0
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000

View File

@ -12531,6 +12531,7 @@ var
SelList: TList;
selCatalog: TSCSCatalog;
CameraPos: T3DPoint;
UndoAct: TListUndoAction;
procedure SynchronizeCoordsToCad(aPoint: TDoublePoint; aSide: integer);
var SCSConn: TConnectorObject;
@ -12601,7 +12602,15 @@ var
if aLine.FSCSObject <> nil then
SCSLine := aLine.FSCSObject; // ñàìà òðàññà íà êàäå
//Tolik 18/07/2025 -- Undo êàäà(åñëè íå áûëî)
if G3dUndoList.IndexOf(TF_CAD(TPowerCad(SCSLine.Owner).Owner)) = -1 then
begin
UndoAct := TF_CAD(TPowerCad(SCSLine.Owner).Owner).SaveForUndo(uat_None, true, false, 0, false, true);
G3dUndoList.Add(TF_CAD(TPowerCad(SCSLine.Owner).Owner));
if UndoAct <> nil then
G3dUndoActList.Add(UndoAct);
end;
//
FaceList := TList.Create;
ObjList := TList.Create;
Obj3dList := TList.Create;
@ -13111,7 +13120,7 @@ var
GLSceneViewer.Camera.Position.z := CameraPos.z;
GCadForm := SavedGCadForm;
GisChangeFrom3D := True; // 11/07/2025 -- âûñòàâèòü ôëàã, ÷òîá áûëè èçìåíåíèÿ â ïðîåêòå èç 3Ä ...
end;
//
begin
@ -22243,6 +22252,7 @@ begin
FreeAndNil(UndoFormsList);
EndProgress;
// EndProgress;
SaveCurrProjectToUndoFiles(True);
end;
(*

View File

@ -1,7 +1,7 @@
object FSCS_Main: TFSCS_Main
Left = -8
Top = -8
Width = 1376
Width = 1380
Height = 744
HorzScrollBar.Color = clBtnFace
HorzScrollBar.ParentColor = False
@ -46,7 +46,7 @@ object FSCS_Main: TFSCS_Main
ExplicitHeight = 641
end
object sDiv2: TSplitter
Left = 1352
Left = 1356
Top = 188
Height = 474
Align = alRight
@ -82,7 +82,7 @@ object FSCS_Main: TFSCS_Main
OnUnDock = PDock1UnDock
end
object pDock2: TPanel
Left = 1355
Left = 1359
Top = 188
Width = 5
Height = 474
@ -102,7 +102,7 @@ object FSCS_Main: TFSCS_Main
object pCADList: TPanel
Left = 0
Top = 662
Width = 1360
Width = 1364
Height = 23
Align = alBottom
BevelOuter = bvNone
@ -111,7 +111,7 @@ object FSCS_Main: TFSCS_Main
object pageCADList: TPageControl
Left = 0
Top = 0
Width = 1358
Width = 1362
Height = 21
Align = alClient
Font.Charset = RUSSIAN_CHARSET
@ -129,7 +129,7 @@ object FSCS_Main: TFSCS_Main
AlignWithMargins = True
Left = 3
Top = 0
Width = 1354
Width = 1358
Height = 136
HelpContext = 76000
Margins.Top = 0
@ -1214,7 +1214,7 @@ object FSCS_Main: TFSCS_Main
object pnHintBar: TRzSizePanel
Left = 0
Top = 136
Width = 1360
Width = 1364
Height = 52
Align = alTop
BorderHighlight = clBtnFace
@ -5860,7 +5860,7 @@ object FSCS_Main: TFSCS_Main
Left = 496
Top = 232
Bitmap = {
494C0101D2008C01980310001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
494C0101D2008C01A80310001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000400000005003000001002000000000000050
0300000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@ -12870,7 +12870,7 @@ object FSCS_Main: TFSCS_Main
Left = 248
Top = 280
Bitmap = {
494C010123008C01B00320001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
494C010123008C01C00320001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000800000009000000001002000000000000020
0100000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@ -15442,7 +15442,7 @@ object FSCS_Main: TFSCS_Main
Left = 240
Top = 408
Bitmap = {
494C010112008C01A4030E000E00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
494C010112008C01B4030E000E00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
000000000000360000002800000038000000460000000100200000000000403D
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@ -19945,7 +19945,7 @@ object FSCS_Main: TFSCS_Main
Left = 240
Top = 344
Bitmap = {
494C0101DE008C018C0618001800FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
494C0101DE008C019C0618001800FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
00000000000036000000280000006000000040050000010020000000000000E0
070000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009D9188003D2413003D241300FFFF

View File

@ -20054,8 +20054,11 @@ begin
end;
{$IFEND}
// 22.07.2011
// 22.07.2011
G3DModelForProject := False;
//Tolik 11/07/2023 --
SaveCurrProjectToUndoFiles(true);
//
BeginProgress;
if not Assigned(frm3D) then
Application.CreateForm(Tfrm3D, frm3d);
@ -20086,6 +20089,10 @@ begin
Application.ProcessMessages;
frm3d.ShowModal;
FreeAndNil(frm3D);
//Tolik 11/07/2025 -- âîññòàíîâèòü ïðîåêò, åñëè áûëè èçìåíåíèÿ ÷åðåç 3Ä...
if GisChangeFrom3D then
UndoListInPM(-1, GetPathToSCSUndoUniqDir(true), true, 0, 0);
//
// Tolik 23/07/2018 --
GCadForm.PCad.Refresh;
//
@ -21459,7 +21466,11 @@ var
SubstrateFileName: String;
currGLPlane: TGLPlane;
SubstrateFileList: TStringList;
// Tolik 17/07/2025 --
VList: TList;
//tmpCad: TF_Cad;
Dir3dUndoName: string;
UndoAct: TListUndoAction;
{
procedure InsertIntoHList(Cad: TF_CAD);
var
@ -21688,6 +21699,49 @@ begin
LLists := Nil;
SubstrateFileList := TStringList.Create; // ñïèñîê ïîäëîæåê (÷òîáû ïîòîì óäàëèòü ñîçäàííûå jpeg, äàáû íå çàñîðÿòü äèñê)
//
//Tolik 11/07/2025 -- UNDO for 3D
{for i := 0 to F_ProjMan.GSCSBase.CurrProject.ProjectLists.Count - 1 do
begin
TmpCad := GetListbyID(F_ProjMan.GSCSBase.CurrProject.ProjectLists[i].SCSID);
if TmpCad <> nil then
begin
if TmpCad <> nil then
begin
if TmpCad.FListType = lt_Normal then
begin
end;
end;
end;
end;
}
//SaveCurrProjectToUndoFiles(true);
//Tolik 17/07/2025 -- Save Project Undo
G3dUndoList := TList.create;
G3dUndoActList := TList.Create;
{VList := TList.create;
for i := 0 to F_ProjMan.GSCSBase.CurrProject.ChildCatalogs.Count - 1 do
begin
if F_ProjMan.GSCSBase.CurrProject.ChildCatalogs[i] is TSCSList then
begin
TmpCad := GetListByID(F_ProjMan.GSCSBase.CurrProject.ChildCatalogs[i].SCSID);
if TmpCad <> nil then
VList.Add(TmpCad);
end;
end;
Dir3dUndoName := GetPathToSCSUndoDir +'\3D';
if DirectoryExists(Dir3dUndoName) then
FullRemoveDir(Dir3dUndoName, true, true);
if Not DirectoryExists(Dir3dUndoName) then
begin
CreateDir(Dir3dUndoName);
if DirectoryExists(Dir3dUndoName) then
SaveForProjectUndo(vList, true, false, true);
end;
//
}
{$ifdef 3D}
ctrlDown:=(IsKeyDown(VK_LCONTROL) or IsKeyDown(VK_RCONTROL));
if ActiveMDIChild <> nil then
@ -21904,6 +21958,13 @@ begin
frm3d.FCAD := GCadForm;
frm3d.ShowModal;
FreeAndNil(frm3D);
//Tolik 11/07/2025 -- âîññòàíîâèòü ïðîåêò, åñëè áûëè èçìåíåíèÿ ÷åðåç 3Ä...
//if GisChangeFrom3D then
//begin
// UndoListInPM(-1, GetPathToSCSUndoUniqDir(true), true, 0, 0);
// GCadForm.PCad.Refresh;
///end;
//
end
else
begin
@ -21958,6 +22019,27 @@ begin
end;
end;
SubstrateFileList.Free;
if G3dUndoActList.Count > 0 then
begin
j := G3dUndoActList.Count;
while G3dUndoList.Count > 0 do
begin
if j = 0 then
break;
GCadForm.SCSUndoNormalList(true);
dec(j);
end;
{
for j := G3dUndoActList.Count - 1 downto 0 do
begin
cad := TF_CAD(G3dUndoList[j]);
cad.SCSUndoNormalList(true);
end;
}
end;
FreeAndNil(G3dUndoList); // Tolik 18/07/2025 --
FreeAndNil(G3dUndoActList); // Tolik 18/07/2025 --
//
end;
// Ïðè ïðîâåðêå íà ñîîòâåòñòâèå ìàñøòàáîâ èíîãäà âîçíèêàþò êàçóñû â ïëàíå ñîîòâåòñòâèÿ "íà ãëàç" è

View File

@ -536,7 +536,9 @@ type
// Toilk 03/06/2021 - - çäåñü äîáàâëÿåì ôëàæîê, ÷òîáû âèäåòü, êîãäà óíäî ïðèõîäèò ñ ïðèìåíåíèÿ ñâîéñòâ ëèñòà,
// ÷òîáû ñäåëàòü îäèíàêîâûé îòêàò äëÿ âñåõ òèïîâ ëèñòîâ, èíà÷å íå ñìîæåì îòêàòèòü íà âñåõ ñõåìàõ ïðèìåíåíèå ñâîéñòâ ëèñòà
//Tolik 15/07/2025 -*- òóò ÷óòü ïîïðàâèì, ÷òîáû ñäåëàòü è ïåðåä 3Ä (è íå ïîòåðÿòü, ÷òîáû ïîòîì âåðíóòü )
//function SaveForUndo(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
{
function SaveForUndo(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0; aFromMasterNewList: Boolean = false): TListUndoAction;
//
function SaveForUndoNormalList(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
@ -545,8 +547,22 @@ type
function SaveForUndoELScheme(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
//
function SaveForUndoDesignList(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
}
//function SaveForUndo(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
function SaveForUndo(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0; aFromMasterNewList: Boolean = false; a3D: boolean = false): TListUndoAction;
//
function SaveForUndoNormalList(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0; a3D: boolean = false): TListUndoAction;
function SaveForUndoProjectPlan(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0; a3D: boolean = false): TListUndoAction;
// Tolik 12/02/2021
function SaveForUndoELScheme(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0; a3D: boolean = false): TListUndoAction;
//
function SaveForUndoDesignList(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0; a3D: boolean = false): TListUndoAction;
// ïîäíÿòü ïðåäûäóùåå ñîñòîÿíèå èç òåìïîâîãî ôàéëà
procedure SCSUndoNormalList;
//Tolik 18/07/2025 --
//procedure SCSUndoNormalList;
procedure SCSUndoNormalList(a3d: Boolean = False);
//
procedure SCSUndoProjectPlan;
procedure SCSUndoDesignList;
procedure SCSUndoElScheme; // Tolik 12/02/2021 --
@ -11219,7 +11235,8 @@ end;
//Tolik 03/06/2021 --
//function TF_CAD.SaveForUndo(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
function TF_CAD.SaveForUndo(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0; aFromMasterNewList: Boolean = false): TListUndoAction;
//function TF_CAD.SaveForUndo(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0; aFromMasterNewList: Boolean = false): TListUndoAction;
function TF_CAD.SaveForUndo(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0; aFromMasterNewList: Boolean = false; a3D: boolean = false): TListUndoAction;
//
var
SavedGCadForm: TF_CAD;
@ -11246,28 +11263,44 @@ begin
// Tolik 03/06/2021 --
if aFromMasterNewList then
begin
Result := SaveForUndoNormalList(aType, aSavePM, aIsProject, aProjectIndex);
//Tolik 18/07/2025 --
//Result := SaveForUndoNormalList(aType, aSavePM, aIsProject, aProjectIndex);
Result := SaveForUndoNormalList(aType, aSavePM, aIsProject, aProjectIndex, a3D);
//
GCadForm := SavedGCadForm;
exit;
end;
if FListType = lt_Normal then
Result := SaveForUndoNormalList(aType, aSavePM, aIsProject, aProjectIndex)
//
//Result := SaveForUndoNormalList(aType, aSavePM, aIsProject, aProjectIndex)
Result := SaveForUndoNormalList(aType, aSavePM, aIsProject, aProjectIndex, a3D)
//
else
if FListType = lt_ProjectPlan then
Result := SaveForUndoProjectPlan(aType, aSavePM, aIsProject, aProjectIndex)
//
//Result := SaveForUndoProjectPlan(aType, aSavePM, aIsProject, aProjectIndex)
Result := SaveForUndoProjectPlan(aType, aSavePM, aIsProject, aProjectIndex, a3D)
//
else
if FListType = lt_DesignBox then
Result := SaveForUndoDesignList(aType, aSavePM, aIsProject, aProjectIndex)
//
//Result := SaveForUndoDesignList(aType, aSavePM, aIsProject, aProjectIndex)
Result := SaveForUndoDesignList(aType, aSavePM, aIsProject, aProjectIndex, a3D)
// Tolik 12/02/2021 -- åñëè òèï ëèñòà -- ýëåêòðè÷åñêàÿ ñõåìà îäíîëèíåéíàÿ
else
if FListType = lt_ElScheme then
//SaveListToUndoStack(GCadForm.FCADListID);
Result := SaveForUndoELScheme(aType, aSavePM, aIsProject, aProjectIndex)
//
//Result := SaveForUndoELScheme(aType, aSavePM, aIsProject, aProjectIndex)
Result := SaveForUndoELScheme(aType, aSavePM, aIsProject, aProjectIndex, a3D)
//
else
if FListType = lt_AScheme then
//SaveListToUndoStack(GCadForm.FCADListID);
Result := SaveForUndoELScheme(aType, aSavePM, aIsProject, aProjectIndex);
//, a3D
//Result := SaveForUndoELScheme(aType, aSavePM, aIsProject, aProjectIndex);
Result := SaveForUndoELScheme(aType, aSavePM, aIsProject, aProjectIndex, a3D);
//
GCadForm := SavedGCadForm;
except
@ -11275,7 +11308,10 @@ begin
end;
end;
function TF_CAD.SaveForUndoNormalList(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
//Tolik 16/07/2025 --
//function TF_CAD.SaveForUndoNormalList(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
function TF_CAD.SaveForUndoNormalList(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0; a3D: boolean = false): TListUndoAction;
//
var
i, j: integer;
Count: Integer;
@ -11305,7 +11341,8 @@ begin
BasePath := '';
if (aSavePM) and ((not aIsProject) or (aProjectIndex = 0)) then
begin
BasePath := SavePMForUndo(FCADListID, aIsProject);
//BasePath := SavePMForUndo(FCADListID, aIsProject);
BasePath := SavePMForUndo(FCADListID, aIsProject, a3D);
CanProcess := BasePath <> '';
end;
if CanProcess then
@ -11360,7 +11397,11 @@ begin
// çàïèñàòü ïîñëåäíåå èçìåíåíèå â ôàéë, íàçâàíèå â FUndoList
Count := FSCSUndoList.Count;
// SetUndoName := FUndoDir + FCADListName + IntTostr(FCADListIndex) + '_' + IntToStr(Count);
SetUndoName := FUndoDir + FCADListFileName + '_' + IntToStr(Count);
//Tolik 18/07/2025 --
{ if a3d then
SetUndoName := FUndoDir + '3D\'+ FCADListFileName + '_' + IntToStr(Count)
else}
SetUndoName := FUndoDir + FCADListFileName + '_' + IntToStr(Count);
// ñîõðàíèòü â ñïèñîê ôàéëîâ
ListUndoAction.FCadFileName := SetUndoName;
ListUndoAction.FIndex := Count;
@ -11403,7 +11444,10 @@ begin
GCanRefreshCad := SaveGCadRefreshFlag;
end;
function TF_CAD.SaveForUndoProjectPlan(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
//Tolik 16/07/2025 --
//function TF_CAD.SaveForUndoProjectPlan(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
function TF_CAD.SaveForUndoProjectPlan(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0; a3D: boolean = false): TListUndoAction;
//
var
i, j: integer;
Count: Integer;
@ -11478,8 +11522,10 @@ begin
on E: Exception do addExceptionToLogEx('TF_CAD.SaveForUndoProjectPlan', E.Message);
end;
end;
// Tolik 12/02/2021 --
function TF_CAD.SaveForUndoELScheme(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
//function TF_CAD.SaveForUndoELScheme(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
function TF_CAD.SaveForUndoELScheme(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0; a3D: boolean = false): TListUndoAction; //Tolik 16/7/2025
var
i, j: integer;
Count: Integer;
@ -11555,8 +11601,10 @@ begin
end;
end;
//
function TF_CAD.SaveForUndoDesignList(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
//Tolik 16/074/2025 --
//function TF_CAD.SaveForUndoDesignList(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0): TListUndoAction;
function TF_CAD.SaveForUndoDesignList(aType: TListUndoActionType; aSavePM: Boolean; aIsProject: Boolean; aProjectIndex: Integer = 0; a3D: boolean = false): TListUndoAction;
//
var
i, j: integer;
Count: Integer;
@ -11641,7 +11689,249 @@ begin
on E: Exception do addExceptionToLogEx('', E.Message);
end;
end;
//Tolik 18/07/2025 --
procedure TF_CAD.SCSUndoNormalList(a3d: Boolean = False);
var
FName: string;
Figure: TFigure;
i, j: integer;
ListUndoAction: TListUndoAction;
LinkUndoObject: TLinkUndoObject;
Stream: TMemoryStream;
size: integer;
CountInPrj: Integer;
OldTick1, OldTick2, OldTick3, CurTick1, CurTick2, CurTick3: Cardinal;
CurListParams: TListParams;
ListOfLists: TList;
SavedGCadForm, CurrCad: TF_CAD;
NetObj: TNet;
//Tolik
CadFigList: TList;
SaveGCadRefreshFlag: boolean;
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
begin
if a3d then
ListUndoAction := TListUndoAction(G3dUndoActList[0])
else
ListUndoAction := TListUndoAction(FSCSUndoList[FSCSUndoList.Count - 1]);
FName := ListUndoAction.FCadFileName;
// åñòü ôàéë
if FileExists(FName) then
begin
// åñëè íà 3Ä
CountInPrj := 0;
if not a3d 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;
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);
finally
FUndoStatus := False;
end;
FindObjectsForConvertClasses;
PCad.DrawFigures(True);
// óäàëèòü ôàéë
if FileExists(FName) then
DeleteFile(FName);
// óäàëèòü ïîñëåäíèé êîòîðûé ïîäíèìàåòñÿ èç ñïèêà
if a3d then
G3dUndoActList.delete(0)
else
FSCSUndoList.Delete(FSCSUndoList.Count - 1);
// *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
// 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;
except
on E: Exception do addExceptionToLogEx('TF_CAD.SCSUndoNormalList', E.Message);
end;
//Tolik 04/06/2021 --
if FListType <> lt_Normal then
PCad.RecordUndo := True;
//
// Tolik 26/09/2017 --
if FListSettings.ShowTracesCrossPoints > 0 then
ShowTracesIntersections(2, FListSettings.ShowTracesCrossPoints);
//
GCadForm := SavedGCadForm;
GCanRefreshCad := SaveGCadRefreshFlag;
EndProgress;
{append(f);
writeln(f, 'END');
writeln(f, '---------------------------------------------------------------------------');
CloseFile(f);}
PCad.refresh;
end;
(*
procedure TF_CAD.SCSUndoNormalList;
var
FName: string;
@ -11927,6 +12217,7 @@ begin
CloseFile(f);}
PCad.refresh;
end;
*)
procedure TF_CAD.SCSUndoProjectPlan;
var

View File

@ -1074,7 +1074,10 @@ type
procedure SetIsCableChannel(aListID, aLineID: Integer; aFlag: Boolean);
// UNDO äëÿ ïðîåêòà ...
procedure SaveForProjectUndo(aLists: TList; aSavePM: Boolean; aIsProject: Boolean);
//Tolik 17/07/2025 -
//procedure SaveForProjectUndo(aLists: TList; aSavePM: Boolean; aIsProject: Boolean);
procedure SaveForProjectUndo(aLists: TList; aSavePM: Boolean; aIsProject: Boolean; a3d: boolean = false);
//
// óäàëèòü âñþ öåïî÷êó Undo â ñâÿçêå ñ äðóãèìè ýòàæàìè
procedure DeleteProjectUndoActions(aCad: TF_CAD; aListUndoAction: TListUndoAction);
// ïîäíÿòü âñþ öåïî÷êó UNdo â ñâÿçêå ñ äðóãèìè ýòàæàìè
@ -1653,6 +1656,10 @@ var
GFtpFromDisk: Boolean = True; // Tolik 23/12/2024
GFtpToDisk: Boolean = True; // Tolik 23/12/2024
GisChangeFrom3D: Boolean = false; // Tolik 11/07/2025 -- (åñëè áûëè èçìåíåíèÿ íà êàäå ÷åðåç 3Ä)
G3dUndoList: TList = nil;
G3dUndoActList: TList = nil;
//************* Hot Keys *********************
hkCtrlN,
hkCtrlL,
@ -48568,8 +48575,9 @@ begin
on E: Exception do addExceptionToLogEx('U_Common.SetIsCableChannel', E.Message);
end;
end;
procedure SaveForProjectUndo(aLists: TList; aSavePM: Boolean; aIsProject: Boolean);
//Tolik 17/07/2025 --
procedure SaveForProjectUndo(aLists: TList; aSavePM: Boolean; aIsProject: Boolean; a3d: boolean = false);
//procedure SaveForProjectUndo(aLists: TList; aSavePM: Boolean; aIsProject: Boolean);
var
i, j: integer;
vList: TF_CAD;
@ -48596,17 +48604,17 @@ begin
ListUndoAction := nil; //#From Oleg# //14.09.2010
//
if vList.FListType = lt_Normal then
ListUndoAction := vList.SaveForUndoNormalList(uat_Floor, aSavePM, aIsProject, i)
ListUndoAction := vList.SaveForUndoNormalList(uat_Floor, aSavePM, aIsProject, i, a3D)
else
if vList.FListType = lt_ProjectPlan then
ListUndoAction := vList.SaveForUndoProjectPlan(uat_Floor, aSavePM, aIsProject, i)
ListUndoAction := vList.SaveForUndoProjectPlan(uat_Floor, aSavePM, aIsProject, i, a3D)
else
if vList.FListType = lt_DesignBox then
ListUndoAction := vList.SaveForUndoDesignList(uat_Floor, aSavePM, aIsProject, i)
ListUndoAction := vList.SaveForUndoDesignList(uat_Floor, aSavePM, aIsProject, i, a3d)
// Tolik 12/02/2021 --
else
if vList.FListType = lt_ElScheme then
ListUndoAction := vList.SaveForUndoELScheme(uat_Floor, aSavePM, aIsProject, i);
ListUndoAction := vList.SaveForUndoELScheme(uat_Floor, aSavePM, aIsProject, i, a3d);
// ListUndoAction := vList.SaveForUndo(uat_Floor, aSavePM, aIsProject, i);
//

View File

@ -5547,7 +5547,10 @@ function GetPathToRepDesignLang: String;
function GetPathToSCSCADDir(AWithCreate: Boolean=false): string; // Ïóòü ê ïàïêå, ãäå õðàíÿòñÿ îòêðûòûå ÊÀÄ ëèñòû
function GetPathToSCSTmpDir: String;
function GetPathToSCSUndoDir(ADefine: Boolean=true): String;
function GetPathToSCSUndoUniqDir: String;
//Tolik 11/07/2025 --
//function GetPathToSCSUndoUniqDir: String;
function GetPathToSCSUndoUniqDir(aFor3D: Boolean = false): String;
//
function GetPathToUndoDir(ADefine: Boolean=true): String;
function GetPathToUnPackedTmp(AFileNoExists: Boolean): String;
function GetPathToUserReportFile(ARepFileName: String): String;
@ -5743,13 +5746,20 @@ procedure UndoListInPM(aListID: Integer; aBasePath: string; AIsProject: Boolean;
// Óäàëèòü ñëåïîê ëèñòà ïðîåêòà äëÿ îòêàòà - Âûçîâ èç CAD
procedure DeleteUndoFromPM(aListID: Integer; aBasePath: string; AIsProject: Boolean);
// Ñîçäàòü ñëåïîê ëèñòà äëÿ îòêàòà - Âûçîâ èç CAD
function SavePMForUndo(aID: Integer; AIsProject: Boolean): String;
//Tolik 18/07/2025 --
//function SavePMForUndo(aID: Integer; AIsProject: Boolean): String;
function SavePMForUndo(aID: Integer; AIsProject: Boolean; a3D: Boolean = false): String;
//
// Ñîçäàò undo ñëåïîê äëÿ ïðîåêòà
function SaveCurrProjectToUndoFiles: String;
//Tolik 11/07/2025 --
//function SaveCurrProjectToUndoFiles: String;
function SaveCurrProjectToUndoFiles(aFor3D: Boolean = false): String;
//
// Ñîçäàò undo ñëåïîê äëÿ ëèñòà
function SaveListToUndoFiles(AListID: Integer): String;
//Tolik 18/07/2025 --
//function SaveListToUndoFiles(AListID: Integer): String;
function SaveListToUndoFiles(AListID: Integer; a3D: Boolean = false): String;
//
// Ñîõðàíèò òåêóùèé ïðîåêò â UNDO ñòåê
function SaveCurrProjectToUndoStack: String;
// ñîõðàíèò ëèñò â UNDO ñòåê
@ -32145,6 +32155,29 @@ begin
Result := GetAnsiTempPath;
end;
//Tolik 11/07/2025 --
function GetPathToSCSUndoUniqDir(aFor3D: Boolean = false): String;
var
i: Integer;
begin
Result := '';
if aFor3D then
begin
Result := GetPathToSCSUndoDir +'\' + '3D';
end
else
begin
i := 0;
while True do
begin
Result := GetPathToSCSUndoDir +'\'+ GetUniqueFileName('', '');
Inc(i);
if (i=15) or DirectoryExists(Result) then
Break; //// BREAK ////
end;
end;
end;
{
function GetPathToSCSUndoUniqDir: String;
var
i: Integer;
@ -32159,6 +32192,7 @@ begin
Break; //// BREAK ////
end;
end;
}
function GetPathToUndoDir(ADefine: Boolean=true): String;
begin
@ -42250,23 +42284,35 @@ begin
FullRemoveDir(aBasePath, true, true);
end;
function SavePMForUndo(aID: Integer; AIsProject: Boolean): String;
function SavePMForUndo(aID: Integer; AIsProject: Boolean; a3D: Boolean = false): String;
begin
Result := '';
if AIsProject then
Result := SaveCurrProjectToUndoFiles
else
Result := SaveListToUndoFiles(AID);
//Tolik 18/07/2025 --
//Result := SaveListToUndoFiles(AID);
Result := SaveListToUndoFiles(AID, a3d);
//
end;
//Tolik 11/07/2025 --
function SaveCurrProjectToUndoFiles(aFor3D: Boolean = false): String;
begin
Result := GetPathToSCSUndoUniqDir(aFor3D);
if Not F_ProjMan.GSCSBase.CurrProject.ComplexSaveToDir(Result) then
Result := '';
end;
{
function SaveCurrProjectToUndoFiles: String;
begin
Result := GetPathToSCSUndoUniqDir;
if Not F_ProjMan.GSCSBase.CurrProject.ComplexSaveToDir(Result) then
Result := '';
end;
function SaveListToUndoFiles(AListID: Integer): String;
}
function SaveListToUndoFiles(AListID: Integer; a3d: Boolean = false): String;
var
SCSList: TSCSList;
begin
@ -42274,7 +42320,21 @@ begin
SCSList := F_ProjMan.GSCSBase.CurrProject.GetListBySCSID(AListID);
if SCSList <> nil then
begin
Result := GetPathToSCSUndoUniqDir;
Result := GetPathToSCSUndoUniqDir(a3D);
//Tolik18/7/2025 --
if a3d then //òóò ïðàêòè÷åñêè áóäåò 2 íîâûõ êàòàëîãà, ïîòîìó íå ñîçäàñò...íóæíî ñîçäàòü îäèí, à âòîðîé (3Ä)
//óæå ñîçäàñòñÿ äàëåå
begin
if Not DirectoryExists(Result) then
CreateDir(Result);
if DirectoryExists(Result) then
Result := Result + '\' + GetUniqueFileName('', '')
else
Result := '';
end;
//
if Result = '' then
exit;
if Not SCSList.ComplexSaveToDir(Result) then
Result := '';
end;

View File

@ -1 +1,3 @@
тут до изменения UNDO перед 3Д, чтобы потом норм восстановить, так как придется внести слишком много изменений
Undo for 3d Project пока черновик, переписать/дописать в плане запрета УНДО для када, если 3Д
Сброс и перезапуск по кнопке применения с 3Д модели, а назакрытии 3Д как раз откат,
если что останется и тогда будет ОК