First commit

This commit is contained in:
Anatoly 2025-09-12 17:50:52 +03:00
parent 1785c2875d
commit 2e9a994856
9 changed files with 1038 additions and 133 deletions

View File

@ -1,10 +1,10 @@
object frm3D: Tfrm3D object frm3D: Tfrm3D
Left = 1 Left = -7
Top = 1 Top = 7
BorderIcons = [biSystemMenu] BorderIcons = [biSystemMenu]
Caption = #1055#1088#1086#1089#1084#1086#1090#1088' '#1074' 3D' Caption = #1055#1088#1086#1089#1084#1086#1090#1088' '#1074' 3D'
ClientHeight = 687 ClientHeight = 705
ClientWidth = 1342 ClientWidth = 1360
Color = clBtnFace Color = clBtnFace
Font.Charset = DEFAULT_CHARSET Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText Font.Color = clWindowText
@ -16,7 +16,6 @@ object frm3D: Tfrm3D
OldCreateOrder = False OldCreateOrder = False
Position = poMainFormCenter Position = poMainFormCenter
Scaled = False Scaled = False
WindowState = wsMaximized
OnCloseQuery = FormCloseQuery OnCloseQuery = FormCloseQuery
OnCreate = FormCreate OnCreate = FormCreate
OnDestroy = FormDestroy OnDestroy = FormDestroy
@ -35,15 +34,15 @@ object frm3D: Tfrm3D
object panMain: TPanel object panMain: TPanel
Left = 0 Left = 0
Top = 0 Top = 0
Width = 1342 Width = 1360
Height = 687 Height = 705
Align = alClient Align = alClient
Caption = 'Panel2' Caption = 'Panel2'
TabOrder = 0 TabOrder = 0
object Splitter1: TSplitter object Splitter1: TSplitter
Left = 1338 Left = 1356
Top = 42 Top = 42
Height = 644 Height = 662
Align = alRight Align = alRight
AutoSnap = False AutoSnap = False
ResizeStyle = rsUpdate ResizeStyle = rsUpdate
@ -53,14 +52,14 @@ object frm3D: Tfrm3D
object panUpper: TPanel object panUpper: TPanel
Left = 1 Left = 1
Top = 1 Top = 1
Width = 1340 Width = 1358
Height = 41 Height = 41
Align = alTop Align = alTop
BevelOuter = bvNone BevelOuter = bvNone
Color = 15329769 Color = 15329769
TabOrder = 0 TabOrder = 0
DesignSize = ( DesignSize = (
1340 1358
41) 41)
object SpeedButton1: TSpeedButton object SpeedButton1: TSpeedButton
Left = 8 Left = 8
@ -108,7 +107,7 @@ object frm3D: Tfrm3D
OnClick = SpeedButton3Click OnClick = SpeedButton3Click
end end
object lbViewType: TLabel object lbViewType: TLabel
Left = 1168 Left = 1186
Top = 25 Top = 25
Width = 163 Width = 163
Height = 16 Height = 16
@ -155,7 +154,7 @@ object frm3D: Tfrm3D
OnClick = sbSaveModelClick OnClick = sbSaveModelClick
end end
object sbApplyScsModel: TSpeedButton object sbApplyScsModel: TSpeedButton
Left = 1073 Left = 1091
Top = 13 Top = 13
Width = 161 Width = 161
Height = 22 Height = 22
@ -169,10 +168,9 @@ object frm3D: Tfrm3D
Font.Style = [] Font.Style = []
ParentFont = False ParentFont = False
OnClick = sbApplyScsModelClick OnClick = sbApplyScsModelClick
ExplicitLeft = 1091
end end
object SpeedButton4: TSpeedButton object SpeedButton4: TSpeedButton
Left = 1240 Left = 1258
Top = 8 Top = 8
Width = 94 Width = 94
Height = 22 Height = 22
@ -211,16 +209,16 @@ object frm3D: Tfrm3D
object panScene: TPanel object panScene: TPanel
Left = 1 Left = 1
Top = 42 Top = 42
Width = 1017 Width = 1035
Height = 644 Height = 662
Align = alClient Align = alClient
BevelInner = bvLowered BevelInner = bvLowered
TabOrder = 1 TabOrder = 1
object Panel3: TPanel object Panel3: TPanel
Left = 2 Left = 2
Top = 2 Top = 2
Width = 1013 Width = 1031
Height = 640 Height = 658
Align = alClient Align = alClient
BevelOuter = bvNone BevelOuter = bvNone
Ctl3D = False Ctl3D = False
@ -229,12 +227,12 @@ object frm3D: Tfrm3D
object GLSceneViewer: TGLSceneViewer object GLSceneViewer: TGLSceneViewer
Left = 0 Left = 0
Top = 0 Top = 0
Width = 1013 Width = 1031
Height = 595 Height = 613
Camera = GLCamera Camera = GLCamera
Buffer.BackgroundColor = 15987957 Buffer.BackgroundColor = 15987957
Buffer.AntiAliasing = aa2x Buffer.AntiAliasing = aa2x
FieldOfView = 123.455924987793000000 FieldOfView = 124.868827819824200000
Align = alClient Align = alClient
OnClick = GLSceneViewerClick OnClick = GLSceneViewerClick
OnDblClick = GLSceneViewerDblClick OnDblClick = GLSceneViewerDblClick
@ -245,8 +243,8 @@ object frm3D: Tfrm3D
end end
object StatusBar1: TStatusBar object StatusBar1: TStatusBar
Left = 0 Left = 0
Top = 615 Top = 633
Width = 1013 Width = 1031
Height = 25 Height = 25
Panels = < Panels = <
item item
@ -257,8 +255,8 @@ object frm3D: Tfrm3D
end end
object sbView: TPanel object sbView: TPanel
Left = 0 Left = 0
Top = 595 Top = 613
Width = 1013 Width = 1031
Height = 20 Height = 20
Align = alBottom Align = alBottom
Alignment = taLeftJustify Alignment = taLeftJustify
@ -269,40 +267,36 @@ object frm3D: Tfrm3D
end end
end end
object RzSizePanel1: TRzSizePanel object RzSizePanel1: TRzSizePanel
Left = 1018 Left = 1036
Top = 42 Top = 42
Width = 320 Width = 320
Height = 644 Height = 662
Align = alRight Align = alRight
BorderWidth = 1 BorderWidth = 1
HotSpotVisible = True HotSpotVisible = True
SizeBarWidth = 7 SizeBarWidth = 7
TabOrder = 2 TabOrder = 2
VisualStyle = vsClassic VisualStyle = vsClassic
object RzPageControl1: TRzPageControl object PNtTree: TRzPageControl
AlignWithMargins = True AlignWithMargins = True
Left = 16 Left = 16
Top = 4 Top = 4
Width = 300 Width = 300
Height = 636 Height = 654
ActivePage = TabSheet1 ActivePage = TabSheet3
ActivePageDefault = TabSheet1 ActivePageDefault = TabSheet1
Align = alRight Align = alRight
TabIndex = 0 TabIndex = 2
TabOrder = 0 TabOrder = 0
TabStyle = tsSquareCorners TabStyle = tsSquareCorners
FixedDimension = 19 FixedDimension = 19
object TabSheet1: TRzTabSheet object TabSheet1: TRzTabSheet
Caption = #1052#1086#1076#1077#1083#1100 Caption = #1052#1086#1076#1077#1083#1100
ExplicitLeft = 0
ExplicitTop = 0
ExplicitWidth = 0
ExplicitHeight = 0
object panObjects: TPanel object panObjects: TPanel
Left = 0 Left = 0
Top = 0 Top = 0
Width = 296 Width = 296
Height = 610 Height = 628
Align = alClient Align = alClient
BevelInner = bvLowered BevelInner = bvLowered
Font.Charset = RUSSIAN_CHARSET Font.Charset = RUSSIAN_CHARSET
@ -314,7 +308,7 @@ object frm3D: Tfrm3D
TabOrder = 0 TabOrder = 0
object Splitter2: TSplitter object Splitter2: TSplitter
Left = 2 Left = 2
Top = 155 Top = 173
Width = 292 Width = 292
Height = 3 Height = 3
Cursor = crVSplit Cursor = crVSplit
@ -328,20 +322,16 @@ object frm3D: Tfrm3D
Left = 2 Left = 2
Top = 2 Top = 2
Width = 292 Width = 292
Height = 153 Height = 171
ActivePage = TabScsModel ActivePage = TabArchModel
Align = alClient Align = alClient
TabIndex = 1 TabIndex = 0
TabOrder = 0 TabOrder = 0
TabStyle = tsRoundCorners TabStyle = tsRoundCorners
OnTabClick = pcTreeTabClick OnTabClick = pcTreeTabClick
FixedDimension = 19 FixedDimension = 19
object TabArchModel: TRzTabSheet object TabArchModel: TRzTabSheet
Caption = #1040#1088#1093'. '#1084#1086#1076#1077#1083#1100 Caption = #1040#1088#1093'. '#1084#1086#1076#1077#1083#1100
ExplicitLeft = 0
ExplicitTop = 0
ExplicitWidth = 0
ExplicitHeight = 145
object cxGroupBox1: TcxGroupBox object cxGroupBox1: TcxGroupBox
Left = 0 Left = 0
Top = 0 Top = 0
@ -396,7 +386,7 @@ object frm3D: Tfrm3D
Left = 0 Left = 0
Top = 47 Top = 47
Width = 288 Width = 288
Height = 80 Height = 98
Align = alClient Align = alClient
BevelOuter = bvNone BevelOuter = bvNone
BorderStyle = bsNone BorderStyle = bsNone
@ -427,10 +417,6 @@ object frm3D: Tfrm3D
end end
object TabScsModel: TRzTabSheet object TabScsModel: TRzTabSheet
Caption = #1057#1050#1057' '#1084#1086#1076#1077#1083#1100 Caption = #1057#1050#1057' '#1084#1086#1076#1077#1083#1100
ExplicitLeft = 0
ExplicitTop = 0
ExplicitWidth = 0
ExplicitHeight = 0
object cxGroupBox2: TcxGroupBox object cxGroupBox2: TcxGroupBox
Left = 0 Left = 0
Top = 0 Top = 0
@ -485,7 +471,7 @@ object frm3D: Tfrm3D
Left = 0 Left = 0
Top = 47 Top = 47
Width = 288 Width = 288
Height = 80 Height = 98
Align = alClient Align = alClient
BevelOuter = bvNone BevelOuter = bvNone
BorderStyle = bsNone BorderStyle = bsNone
@ -525,7 +511,7 @@ object frm3D: Tfrm3D
end end
object pcProps: TRzPageControl object pcProps: TRzPageControl
Left = 2 Left = 2
Top = 158 Top = 176
Width = 292 Width = 292
Height = 450 Height = 450
ActivePage = TabScsProps ActivePage = TabScsProps
@ -536,10 +522,6 @@ object frm3D: Tfrm3D
FixedDimension = 19 FixedDimension = 19
object TabArchProps: TRzTabSheet object TabArchProps: TRzTabSheet
Caption = #1040#1088#1093'. '#1089#1074#1086#1081#1089#1090#1074#1072 Caption = #1040#1088#1093'. '#1089#1074#1086#1081#1089#1090#1074#1072
ExplicitLeft = 0
ExplicitTop = 0
ExplicitWidth = 0
ExplicitHeight = 0
object Panel1: TPanel object Panel1: TPanel
Left = 0 Left = 0
Top = 0 Top = 0
@ -2150,10 +2132,6 @@ object frm3D: Tfrm3D
end end
object TabSheet2: TRzTabSheet object TabSheet2: TRzTabSheet
Caption = #1053#1072#1089#1090#1088#1086#1081#1082#1080 Caption = #1053#1072#1089#1090#1088#1086#1081#1082#1080
ExplicitLeft = 0
ExplicitTop = 0
ExplicitWidth = 0
ExplicitHeight = 628
object Label10: TLabel object Label10: TLabel
Left = 5 Left = 5
Top = 71 Top = 71
@ -2269,6 +2247,59 @@ object frm3D: Tfrm3D
Text = '0' Text = '0'
end end
end end
object TabSheet3: TRzTabSheet
Caption = #1054#1073#1098#1077#1082#1090#1099
object Label62: TLabel
Left = 3
Top = 5
Width = 74
Height = 16
Caption = #1058#1080#1087#1099' '#1089#1077#1090#1077#1081
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label63: TLabel
Left = 3
Top = 338
Width = 160
Height = 16
Caption = #1069#1083#1077#1084#1077#1085#1090#1099' '#1072#1088#1093#1080#1090#1077#1082#1090#1091#1088#1099
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object NTypTree: TRzCheckTree
Left = 3
Top = 24
Width = 290
Height = 297
OnStateChange = NTypTreeStateChange
Indent = 19
SelectionPen.Color = clBtnShadow
StateImages = NTypTree.CheckImages
TabOrder = 0
OnChange = NTypTreeChange
end
object ArchVTree: TRzCheckTree
Left = 3
Top = 360
Width = 290
Height = 229
OnStateChange = ArchVTreeStateChange
Indent = 19
SelectionPen.Color = clBtnShadow
StateImages = NTypTree.CheckImages
TabOrder = 1
OnChange = NTypTreeChange
end
end
end end
end end
end end
@ -3413,7 +3444,7 @@ object frm3D: Tfrm3D
Left = 100 Left = 100
Top = 57 Top = 57
Bitmap = { Bitmap = {
494C01013A00B0000C0310001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 494C01013A00B000280310001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
000000000000360000002800000040000000F0000000010020000000000000F0 000000000000360000002800000040000000F0000000010020000000000000F0
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000

View File

@ -338,7 +338,7 @@ type
N1: TMenuItem; N1: TMenuItem;
N2: TMenuItem; N2: TMenuItem;
sbView: TPanel; sbView: TPanel;
RzPageControl1: TRzPageControl; PNtTree: TRzPageControl;
TabSheet1: TRzTabSheet; TabSheet1: TRzTabSheet;
TabSheet2: TRzTabSheet; TabSheet2: TRzTabSheet;
cbViewCeiling: TCheckBox; cbViewCeiling: TCheckBox;
@ -353,7 +353,12 @@ type
edWallsTransparency: TEdit; edWallsTransparency: TEdit;
Label53: TLabel; Label53: TLabel;
RzSizePanel1: TRzSizePanel; RzSizePanel1: TRzSizePanel;
DuplicateNodeTree: TTreeView; //Tolik Äåðåâî äóáëåé DuplicateNodeTree: TTreeView;
TabSheet3: TRzTabSheet;
NTypTree: TRzCheckTree;
Label62: TLabel;
ArchVTree: TRzCheckTree;
Label63: TLabel; //Tolik Äåðåâî äóáëåé
procedure GLSceneViewerMouseDown(Sender: TObject; procedure GLSceneViewerMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
@ -463,6 +468,12 @@ type
const Rect: TRect); const Rect: TRect);
procedure trWallTransparencyChange(Sender: TObject); procedure trWallTransparencyChange(Sender: TObject);
procedure tbSetWallsTransparencyClick(Sender: TObject); procedure tbSetWallsTransparencyClick(Sender: TObject);
procedure NTypTreeChange(Sender: TObject; Node: TTreeNode);
procedure Button1Click(Sender: TObject);
procedure NTypTreeStateChange(Sender: TObject; Node: TTreeNode;
NewState: TRzCheckState);
procedure ArchVTreeStateChange(Sender: TObject; Node: TTreeNode;
NewState: TRzCheckState);
private private
//Tolik 27/05/25 -- //Tolik 27/05/25 --
{ Private declarations } { Private declarations }
@ -479,6 +490,9 @@ type
procedure RotateConnModel(aObject: TGLFreeForm; aX, aY, aZ: Double); procedure RotateConnModel(aObject: TGLFreeForm; aX, aY, aZ: Double);
procedure DeselectGLObjectsT; procedure DeselectGLObjectsT;
public public
//Tolik 01/09/2025 --
NetTypeArray: array of Integer;
//
{ Public declarations } { Public declarations }
//DuplicateNodeTree: TTreeView; //Tolik 07/05/2025 -- Ñïèñîê äóáëåé óçëîâ äëÿ ñîñòàâíûõ îáúåêòîâ, êîòîðûå ïîêàçûâàòü â äåðåâå //DuplicateNodeTree: TTreeView; //Tolik 07/05/2025 -- Ñïèñîê äóáëåé óçëîâ äëÿ ñîñòàâíûõ îáúåêòîâ, êîòîðûå ïîêàçûâàòü â äåðåâå
// êîòîðûå ïîêàçûâàòü íå íàäî // êîòîðûå ïîêàçûâàòü íå íàäî
@ -680,7 +694,7 @@ type
function GetPosWithGridStep(aPos: Double): Double; function GetPosWithGridStep(aPos: Double): Double;
procedure ApplyCutting; procedure ApplyCutting;
procedure ApplyScsModel; procedure ApplyScsModel(aOnClose: Boolean = False);
procedure ValidateActiveControl; procedure ValidateActiveControl;
procedure CreateModel; procedure CreateModel;
@ -2034,7 +2048,8 @@ Procedure Tfrm3D.UpdateFaces(Faces: TList; Yh: Double = 0; aFirstLoad: boolean =
//const //const
// clrBlack : TVector = (0, 0, 0, 1); // clrBlack : TVector = (0, 0, 0, 1);
var var
i, pCnt, pCntNormal, j, k, FigureID, glPointIndex: Integer; CanAddNetType: Boolean;
i, pCnt, pCntNormal, j, k, l, FigureID, glPointIndex: Integer;
Face:TFaceRecord; Face:TFaceRecord;
glPoly:TGLPolyGon; glPoly:TGLPolyGon;
glLine: TGLLines; glLine: TGLLines;
@ -3398,7 +3413,7 @@ var
end; end;
Procedure AddLineCompon(aParentNode: TTreeNode; aCompon: TSCSComponent; aLine: TOrthoLine; a3DLine: T3dLine); Procedure AddLineCompon(aParentNode: TTreeNode; aCompon: TSCSComponent; aLine: TOrthoLine; a3DLine: T3dLine);
var i: Integer; var i, l: Integer;
currNode: TTreeNode; currNode: TTreeNode;
dir_v: TVector3F; dir_v: TVector3F;
LinearAngle, LinearAngle1: Double; LinearAngle, LinearAngle1: Double;
@ -3877,6 +3892,23 @@ var
if CanAddCompon then if CanAddCompon then
begin begin
//Tolik 02/09/2025 --
CanAddNetType := true;
for l := 0 to Length(NetTypeArray) - 1 do
begin
if NetTypeArray[l] = aCompon.IDNetType then
begin
CanAddNetType := False;
break;
end;
end;
if CanAddNetType then
begin
SetLength(NetTypeArray, Length(NetTypeArray) + 1);
NetTypeArray[Length(NetTypeArray) - 1] := aCompon.IDNetType;
end;
//
F3DLineCompon := T3DLineComponent.Create(nil, nil,Self.F3DModel); F3DLineCompon := T3DLineComponent.Create(nil, nil,Self.F3DModel);
Self.F3DModel.FScsObjects.Add(F3DLineCompon); Self.F3DModel.FScsObjects.Add(F3DLineCompon);
childNode := ScsModelTree.Items.AddChild(aParentNode, aCompon.GetNameForVisible); childNode := ScsModelTree.Items.AddChild(aParentNode, aCompon.GetNameForVisible);
@ -6760,7 +6792,7 @@ try
} }
// //
{$IFEND} {$IFEND}
glPipe.Parts := [ppOutSide,ppInSide,ppStartDisk,ppStopDisk]; //glPipe.Parts := [ppOutSide,ppInSide,ppStartDisk,ppStopDisk];
end end
else else
if Face.RecType = ftBar then if Face.RecType = ftBar then
@ -6921,12 +6953,12 @@ try
end; end;
end; end;
//Tolik 19/03/2025 - èãðóøêà, ïîñìîòðåòü ëîòîê //Tolik 19/03/2025 - èãðóøêà, ïîñìîòðåòü ëîòîê
glObject := TWireTray.Create(frm3D.DummyCube); //glObject := TWireTray.Create(frm3D.DummyCube);
//TWireTray(glObject).BeginUpdate; //TWireTray(glObject).BeginUpdate;
TWireTray(glObject).SetScene(GLScene); //TWireTray(glObject).SetScene(GLScene);
TWireTray(glObject).Length := 100; //TWireTray(glObject).Length := 100;
TWireTray(glObject).Width := 20; //TWireTray(glObject).Width := 20;
TWireTray(glObject).Height := 20; //TWireTray(glObject).Height := 20;
//TWireTray(glObject).EndUpdate; //TWireTray(glObject).EndUpdate;
// //
//// *********** FACES.COUNT ************************************************* //// *********** FACES.COUNT *************************************************
@ -7313,8 +7345,12 @@ end;
*) *)
procedure Tfrm3D.FormShow(Sender: TObject); procedure Tfrm3D.FormShow(Sender: TObject);
var i, j: Integer;
RootNode, Node: TTreeNode;
Tree_proc : TRzCheckTreeChangeEvent; //Tolik 12/09/2025 --
Procedure SortChildsInBackOrder; Procedure SortChildsInBackOrder;
var i: Integer; var i, j: Integer;
FirstChild, CurrChild: TGLPlane; FirstChild, CurrChild: TGLPlane;
begin begin
for i := 0 to GLDummyCube1.Count - 1 do for i := 0 to GLDummyCube1.Count - 1 do
@ -7422,6 +7458,47 @@ begin
} }
// //
//sbFirstFaceClick(nil); //sbFirstFaceClick(nil);
//Tolik 04/09/2025 --
Tree_proc := NTypTree.OnStateChange; // 12/09/2025 - -
NTypTree.OnStateChange := nil;
NTypTree.Items.Clear;
if Length(NetTypeArray) > 0 then
begin
RootNode := NTypTree.Items.Add( nil, cexdAll);
for i := 0 to Length(NetTypeArray) - 1 do
begin
for j := 0 to F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes.Count - 1 do
begin
if TNBNetType(F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes[j]).ID = NetTypeArray[i] then
begin
Node := NTypTree.Items.AddChild(RootNode, TNBNetType(F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes[j]).Name);
break;
end;
end;
end;
NTypTree.DropTarget := RootNode;
NTypTree.DropTarget.Expand(false);
// ÷åêàåì âñå òèïû ñåòåé ïî óìîë÷àíèþ
if NTypTree.Items.Count > 1 then
begin
for i := 0 to NTypTree.Items.Count - 1 do
begin
Node := NTypTree.Items[i];
if Node.AbsoluteIndex <> 0 then
NTypTree.Itemstate[Node.AbsoluteIndex] := csChecked;
end;
end
else
begin
if NTypTree.Items.Count = 1 then
NTypTree.Itemstate[0] := csChecked;
end;
end;
// 12/09/2025 - -
NTypTree.OnStateChange := Tree_proc;
//
end; end;
procedure Tfrm3D.GLHeightField1GetHeight(const x, y: Single; var z: Single; procedure Tfrm3D.GLHeightField1GetHeight(const x, y: Single; var z: Single;
@ -8007,6 +8084,8 @@ var
CornerNode: TTreeNode; CornerNode: TTreeNode;
xCorner: T3DCorner; xCorner: T3DCorner;
CornerName: string; CornerName: string;
RootNode, Node, ModelNode: TTreeNode;
Tree_proc : TRzCheckTreeChangeEvent;//Tolik 12/09/2025 --
begin begin
try try
xSecondWall := nil; xSecondWall := nil;
@ -8286,6 +8365,48 @@ begin
{$IFEND} {$IFEND}
//*****************\ROOF********************** //*****************\ROOF**********************
end; end;
//Tolik 11/09/2025 -- äåðåâî âêë/âûêë âûäèìîñòè àðõèòåêòóðû
Tree_proc := ArchVTree.OnStateChange;
ArchVTree.OnStateChange := nil; // 12/09/2025 Tolik
ArchVTree.Items.Clear;
RootNode := ArchVTree.Items.Add( nil, cexdAll);
for i := 0 to ModelTree.Items.Count - 1 do
begin
if TObject(ModelTree.Items[i].data) <> nil then
begin
if TObject(ModelTree.Items[i].data) is TF_CAD then
begin
if ModelTree.Items[i].Count > 0 then
begin
Str := TF_CAD(ModelTree.Items[i].data).FCADListName + ' ' + IntToStr(TF_CAD(ModelTree.Items[i].data).FCADListIndex);
Node := ArchVTree.Items.AddChild(RootNode, Str);
Node.data := TF_CAD(ModelTree.Items[i].data);
end;
end;
end;
end;
ArchVTree.DropTarget := RootNode;
ArchVTree.DropTarget.Expand(false);
// ÷åêàåì âñå òèïû ñåòåé ïî óìîë÷àíèþ
if ArchVTree.Items.Count > 1 then
begin
for i := 0 to ArchVTree.Items.Count - 1 do
begin
Node := ArchVTree.Items[i];
if Node.AbsoluteIndex <> 0 then
ArchVTree.Itemstate[Node.AbsoluteIndex] := csChecked;
end;
end
else
begin
if ArchVTree.Items.Count = 1 then
ArchVTree.Itemstate[0] := csChecked;
end;
ArchVTree.OnStateChange := Tree_proc; // 12/09/2025 Tolik
//
except except
on E: Exception do AddExceptionToLogEx('Tfrm3D.UpdateModelTree', E.Message); on E: Exception do AddExceptionToLogEx('Tfrm3D.UpdateModelTree', E.Message);
end; end;
@ -9515,6 +9636,14 @@ var
// //
begin begin
//Tolik 11/09/2025 -- àðõèòåêòóðà --
ArchVTree.Items.Clear;
RootNode := ArchVTree.Items.Add( nil, cexdAll);
ArchVTree.DropTarget := RootNode;
ArchVTree.DropTarget.Expand(false);
//
SetLength(NetTypeArray, 0); // Tolik 01/09/2025 -- ñïèñîê òèïîâ ñåòåé
FCadList := TList.Create; // Tolik 23/07/2025 -- ñïèñîê ëèñòîâ ïðîåêòà FCadList := TList.Create; // Tolik 23/07/2025 -- ñïèñîê ëèñòîâ ïðîåêòà
SetLength(FFloorsHeightArray, 0); // ìàññèâ âûñîò ýòàæåé SetLength(FFloorsHeightArray, 0); // ìàññèâ âûñîò ýòàæåé
// //
@ -17513,9 +17642,27 @@ begin
CanClose := True; CanClose := True;
if CanClose then if CanClose then
begin begin
//Tolik 30/08/2025 --
if GisChangeFrom3D then
begin
if MessageModal(F3dMmes3, ApplicationName, MB_YESNO or MB_ICONQUESTION) = IDYES then
begin
ApplyScsModel(true);
end
else
begin
//LoadProjectUndoActions3D;
end;
end
else
begin
DeleteProjectUndoActions3D;
end;
//
FreeAndNil(F3DModel); FreeAndNil(F3DModel);
FIdsStream.Clear; FIdsStream.Clear;
FFilesStream.Clear; FFilesStream.Clear;
Gis3D := false; //Tolik 29/08/2025 -- Gis3D := false; //Tolik 29/08/2025 --
end; end;
except except
@ -18640,6 +18787,54 @@ begin
ChangeDesc; ChangeDesc;
end; end;
procedure Tfrm3D.Button1Click(Sender: TObject);
var i, j: integer;
fNode: TTreeNode;
NetId: integer;
begin
for i := 0 to NTypTree.Items.Count - 1 do
begin
fNode := NTypTree.Items[i];
if fNode.AbsoluteIndex <> 0 then
begin
NetId := -1;
for j := 0 to F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes.Count - 1 do
begin
if TNBNetType(F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes[j]).Name = FNode.text then
begin
Netid := TNBNetType(F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes[j]).ID;
break;
end;
end;
if Netid <> -1 then
begin
for j := 0 to DummyCube.Count - 1 do
begin
if DummyCube.Children[j].TagObject <> nil then
begin
if TObject(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data) is T3dLineComponent then
begin
if T3dLineComponent(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FSCSCompon <> nil then
begin
if T3dLineComponent(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FSCSCompon.IDNetType = NetID then
begin
if NTypTree.Itemstate[FNode.AbsoluteIndex] = csChecked then
DummyCube.Children[j].Visible := true
else
DummyCube.Children[j].Visible := false;
end;
end;
end;
end;
end;
end;
end;
end;
end;
procedure Tfrm3D.NDel3DObjectClick(Sender: TObject); procedure Tfrm3D.NDel3DObjectClick(Sender: TObject);
var var
i, j: Integer; i, j: Integer;
@ -21782,7 +21977,7 @@ begin
end; end;
end; end;
// Tolik 04/12/2018 -- ñòàðàÿ çàêîììåí÷åíà -- ñì íèæå // Tolik 04/12/2018 -- ñòàðàÿ çàêîììåí÷åíà -- ñì íèæå
procedure Tfrm3D.ApplyScsModel; procedure Tfrm3D.ApplyScsModel(aOnClose: Boolean = False);
var var
i, j, k: integer; i, j, k: integer;
dp: T3DPoint; dp: T3DPoint;
@ -22366,7 +22561,84 @@ begin
FreeAndNil(UndoFormsList); FreeAndNil(UndoFormsList);
EndProgress; EndProgress;
// EndProgress; // EndProgress;
SaveCurrProjectToUndoFiles(True); //SaveCurrProjectToUndoFiles(True);
//Tolik 30/08/2025
GisChangeFrom3D := False; //ñáðîñèòü ôëàæîê èçìåíåíèé
if not aOnClose then // åñëè íå çàêðûòèå ôîðìû 3ä, òî ñäåëàòü ñëåïîê ïðîåêòà çàíîâî
begin
Gis3D := False;
DeleteProjectUndoActions3D;
SaveUndoProjBefore3D;
Gis3D := True;
end;
end;
procedure Tfrm3D.ArchVTreeStateChange(Sender: TObject; Node: TTreeNode;
NewState: TRzCheckState);
var i, j: integer;
CurrNode, ParentNode: TTreeNode;
SavedEvent: TglProgressEvent;
Procedure SetRoomVis(aNode: TTreeNode);
var i: integer;
begin
for i := 0 to aNode.Count - 1 do
begin
if aNode.Item[i].Count > 0 then
begin
SetRoomVis(aNode.Item[i]);
end
else
if TObject(aNode.Item[i].Data) is T3DSide then
begin
if T3DSide(aNode.Item[i].Data).FGLObject <> nil then
if T3DSide(aNode.Item[i].Data).FGLObject <> nil then
TglBaseSceneObject(T3DSide(aNode.Item[i].Data).FGLObject).Visible := (ArchVTree.Itemstate[Node.AbsoluteIndex] = csChecked);
end;
end;
end;
begin
if Node.Data <> nil then
begin
{SavedEvent := GlCadencer.OnProgress;
GlCadencer.OnProgress := nil;}
GlCadencer.Enabled := False;
GLScene.BeginUpdate;
DummyCube.BeginUpdate;
if TObject(node.data) is TF_CAD then
begin
for i := 0 to ModelTree.Items.Count - 1 do
begin
if ModelTree.Items[i].Data <> nil then
begin
if TObject(ModelTree.Items[i].Data) is TF_CAD then
begin
if TF_CAD(ModelTree.Items[i].Data) = TF_CAD(node.data) then
begin
ParentNode := ModelTree.Items[i];
for j := 0 to ParentNode.Count - 1 do
begin
if ParentNode.Item[j].Count > 0 then
begin
SetRoomVis(ParentNode.Item[j]);
end
else
if TObject(ParentNode.Item[j].Data) is T3DSide then
begin
if T3DSide(ParentNode.Item[j].Data).FGLObject <> nil then
TglBaseSceneObject(T3DSide(ParentNode.Item[j].Data).FGLObject).Visible := (ArchVTree.Itemstate[Node.AbsoluteIndex] = csChecked);
end;
end;
end;
end;
end;
end;
end;
DummyCube.EndUpdate;
GLScene.EndUpdate;
GlCadencer.Enabled := True;
//GlCadencer.OnProgress := SavedEvent;
end;
end; end;
(* (*
@ -22738,6 +23010,432 @@ begin
end; end;
end; end;
procedure Tfrm3D.NTypTreeChange(Sender: TObject; Node: TTreeNode);
var i, j: integer;
fNode: TTreeNode;
NetId: integer;
begin
{ for i := 0 to NTypTree.Items.Count - 1 do
begin
fNode := NTypTree.Items[i];
if fNode.AbsoluteIndex <> 0 then
begin
NetId := -1;
for j := 0 to F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes.Count - 1 do
begin
if TNBNetType(F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes[j]).Name = FNode.text then
begin
Netid := TNBNetType(F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes[j]).ID;
break;
end;
end;
if Netid <> -1 then
begin
for j := 0 to DummyCube.Count - 1 do
begin
if DummyCube.Children[j].TagObject <> nil then
begin
if TObject(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data) is T3dLineComponent then
begin
if T3dLineComponent(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FSCSCompon <> nil then
begin
if T3dLineComponent(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FSCSCompon.IDNetType = NetID then
begin
if NTypTree.Itemstate[FNode.AbsoluteIndex] = csChecked then
DummyCube.Children[j].Visible := true
else
DummyCube.Children[j].Visible := false;
end;
end;
end;
end;
end;
end;
end;
end;
}
end;
procedure Tfrm3D.NTypTreeStateChange(Sender: TObject; Node: TTreeNode;
NewState: TRzCheckState);
var i, j: integer;
fNode, CurrNode, ParentNode: TTreeNode;
NetId: integer;
LineNodesList, LineConnList: TList;
LineComponent: T3DLineComponent;
ObjVisible: Boolean;
Conn: T3DConnector;
SCSConnID: integer;
SavedProc: TGLProgressEvent;
begin
//SavedProc := GlCadencer.OnProgress;
//GLCadencer.OnProgress := nil;
GlCadencer.Enabled := False;
GLScene.BeginUpdate;
DummyCube.BeginUpdate;
LineNodesList := TList.Create;
LineConnList := TList.Create;
NetId := -1;
for j := 0 to F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes.Count - 1 do
begin
if TNBNetType(F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes[j]).Name = Node.text then
begin
Netid := TNBNetType(F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes[j]).ID;
break;
end;
end;
if NetId <> -1 then
begin
for j := 0 to DummyCube.Count - 1 do
begin
if DummyCube.Children[j].TagObject <> nil then
begin
if TObject(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data) is T3dLineComponent then
begin
if T3dLineComponent(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FSCSCompon <> nil then
begin
if T3dLineComponent(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FSCSCompon.IDNetType = NetID then
begin
DummyCube.Children[j].Visible := (NTypTree.Itemstate[Node.AbsoluteIndex] = csChecked);
LineNodesList.Add(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject));
end;
end;
end;
end;
end;
{
else
begin
//11/09/2025 Tolik äëÿ ïîèíòîâ
if TObject(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data) is T3dConnector then
begin
if T3dConnector(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FConnType = ct_Full then
begin
if T3dConnector(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FGLObject <> nil then
begin
if T3dConnector(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FSCSCompon <> nil then
begin
if T3dConnector(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FSCSCompon.IDNetType = NetID then
TglBaseSceneObject(T3dConnector(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FGLObject).Visible := (NTypTree.Itemstate[FNode.AbsoluteIndex] = csChecked);
end;
end;
end;
end;
end;
}
for I := 0 to LineNodesList.Count - 1 do
begin
currNode := TTreeNode(LineNodesList[i]); //
ParentNode := currNode.Parent;
while ParentNode.Level > 2 do
ParentNode := ParentNode.Parent; // Òðàññà
if ParentNode.Data <> nil then //åñëè ñ òðàññû âñå ñïðÿòàíî - òðàññó ñïðÿòàòü (è íàîáîðîò)
begin
ObjVisible := False;
for j := 0 to ParentNode.Count - 1 do
begin
if ParentNode.Item[j].Data <> nil then
begin
if TObject(ParentNode.Item[j].Data) is T3DLineComponent then
begin
if T3DLineComponent(ParentNode.Item[j].Data).FGLObject <> nil then
begin
if TGLBaseSceneObject(T3DLineComponent(ParentNode.Item[j].Data).FGLObject).Visible then
begin
ObjVisible := True;
break;
end;
end;
end;
end;
end;
TGLBaseSceneObject(T3DLine(ParentNode.Data).FGLObject).Visible := ObjVisible;
if T3DLine(ParentNode.Data).FJoinConnector1 <> nil then
begin
if LineConnList.IndexOf(T3DLine(ParentNode.Data).FJoinConnector1) = -1 then
LineConnList.Add(T3DLine(ParentNode.Data).FJoinConnector1);
end;
if T3DLine(ParentNode.Data).FJoinConnector2 <> nil then
begin
if LineConnList.IndexOf(T3DLine(ParentNode.Data).FJoinConnector2) = -1 then
LineConnList.Add(T3DLine(ParentNode.Data).FJoinConnector2);
end;
end;
end;
//ñòûêè òðóá
for i := 0 to LineConnList.Count - 1 do
begin
Conn := T3dConnector(LineConnList[i]);
if Conn.FisPipeElement then
begin
ObjVisible := False;
for j := 0 to Conn.FJoinedLinesList.Count - 1 do
begin
if T3DLine(Conn.FJoinedLinesList[j]).FGLObject <> nil then
begin
if TglBaseSceneObject(T3DLine(Conn.FJoinedLinesList[j]).FGLObject).Visible then
begin
ObjVisible := True;
break;
end;
end;
end;
//â îñíîâíîì äåðåâå
if Conn.FGLObject <> nil then
begin
TglBaseSceneObject(Conn.FGLObject).Visible := ObjVisible;
end;
if Conn.FSCSComponID <> -1 then
begin
//
for j := 0 to SCSModelTree.Items.Count - 1 do
begin
if SCSModelTree.Items[j].data <> nil then
begin
if TObject(SCSModelTree.Items[j].data) is T3DConnector then
begin
if T3DConnector(SCSModelTree.Items[j].data).FSCSComponID = Conn.FSCSComponID then
begin
if T3DConnector(SCSModelTree.Items[j].data).FGLObject <> nil then
TglBaseSceneObject(T3DConnector(SCSModelTree.Items[j].data).FGLObject).Visible := ObjVisible;
end;
end;
end;
end;
//â ñêðûòîì(ãäå äóáëèðóþòñÿ ïî àé-äè êîìïîíåíòà)
for j := 0 to DuplicateNodeTree.Items.Count - 1 do
begin
if DuplicateNodeTree.Items[j].data <> nil then
begin
if TObject(DuplicateNodeTree.Items[j].data) is T3DConnector then
begin
if T3DConnector(DuplicateNodeTree.Items[j].data).FSCSComponID = Conn.FSCSComponID then
begin
if T3DConnector(DuplicateNodeTree.Items[j].data).FGLObject <> nil then
TglBaseSceneObject(T3DConnector(DuplicateNodeTree.Items[j].data).FGLObject).Visible := ObjVisible;
end;
end;
end;
end;
end;
end;
end;
Dummycube.EndUpdate;
GLScene.EndUpdate;
GlCadencer.Enabled := True;
//GLCadencer.OnProgress := SavedProc;
end;
end;
(*
procedure Tfrm3D.NTypTreeStateChange(Sender: TObject; Node: TTreeNode;
NewState: TRzCheckState);
var i, j: integer;
fNode, CurrNode, ParentNode: TTreeNode;
NetId: integer;
LineNodesList, LineConnList: TList;
LineComponent: T3DLineComponent;
ObjVisible: Boolean;
Conn: T3DConnector;
SCSConnID: integer;
SavedProc: TGLProgressEvent;
begin
SavedProc := GlCadencer.OnProgress;
GLCadencer.OnProgress := nil;
GLScene.BeginUpdate;
DummyCube.BeginUpdate;
LineNodesList := TList.Create;
LineConnList := TList.Create;
for i := 0 to NTypTree.Items.Count - 1 do
begin
fNode := NTypTree.Items[i];
if fNode.AbsoluteIndex <> 0 then
begin
NetId := -1;
for j := 0 to F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes.Count - 1 do
begin
if TNBNetType(F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes[j]).Name = FNode.text then
begin
Netid := TNBNetType(F_ProjMan.GSCSBase.CurrProject.Spravochnik.NetTypes[j]).ID;
break;
end;
end;
if Netid <> -1 then
begin
DummyCube.BeginUpdate; //11/09/2025 --Tolik
for j := 0 to DummyCube.Count - 1 do
begin
if DummyCube.Children[j].TagObject <> nil then
begin
if TObject(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data) is T3dLineComponent then
begin
if T3dLineComponent(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FSCSCompon <> nil then
begin
if T3dLineComponent(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FSCSCompon.IDNetType = NetID then
begin
DummyCube.Children[j].Visible := (NTypTree.Itemstate[FNode.AbsoluteIndex] = csChecked);
{
if NTypTree.Itemstate[FNode.AbsoluteIndex] = csChecked then
DummyCube.Children[j].Visible := true
else
DummyCube.Children[j].Visible := false;
}
LineNodesList.Add(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject));
end;
end;
end;
{
else
begin
//11/09/2025 Tolik äëÿ ïîèíòîâ
if TObject(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data) is T3dConnector then
begin
if T3dConnector(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FConnType = ct_Full then
begin
if T3dConnector(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FGLObject <> nil then
begin
if T3dConnector(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FSCSCompon <> nil then
begin
if T3dConnector(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FSCSCompon.IDNetType = NetID then
TglBaseSceneObject(T3dConnector(TTreeNode(TGLBaseSceneObject(DummyCube.Children[j]).TagObject).Data).FGLObject).Visible := (NTypTree.Itemstate[FNode.AbsoluteIndex] = csChecked);
end;
end;
end;
end;
end;
}
end;
end;
DummyCube.EndUpdate; // 11/*09/2025 --
end;
end;
end;
for I := 0 to LineNodesList.Count - 1 do
begin
currNode := TTreeNode(LineNodesList[i]); //
ParentNode := currNode.Parent;
while ParentNode.Level > 2 do
ParentNode := ParentNode.Parent; // Òðàññà
if ParentNode.Data <> nil then //åñëè ñ òðàññû âñå ñïðÿòàíî - òðàññó ñïðÿòàòü (è íàîáîðîò)
begin
ObjVisible := False;
for j := 0 to ParentNode.Count - 1 do
begin
if ParentNode.Item[j].Data <> nil then
begin
if TObject(ParentNode.Item[j].Data) is T3DLineComponent then
begin
if T3DLineComponent(ParentNode.Item[j].Data).FGLObject <> nil then
begin
if TGLBaseSceneObject(T3DLineComponent(ParentNode.Item[j].Data).FGLObject).Visible then
begin
ObjVisible := True;
break;
end;
end;
end;
end;
end;
TGLBaseSceneObject(T3DLine(ParentNode.Data).FGLObject).Visible := ObjVisible;
if T3DLine(ParentNode.Data).FJoinConnector1 <> nil then
begin
if LineConnList.IndexOf(T3DLine(ParentNode.Data).FJoinConnector1) = -1 then
LineConnList.Add(T3DLine(ParentNode.Data).FJoinConnector1);
end;
if T3DLine(ParentNode.Data).FJoinConnector2 <> nil then
begin
if LineConnList.IndexOf(T3DLine(ParentNode.Data).FJoinConnector2) = -1 then
LineConnList.Add(T3DLine(ParentNode.Data).FJoinConnector2);
end;
end;
end;
//ñòûêè òðóá
for i := 0 to LineConnList.Count - 1 do
begin
Conn := T3dConnector(LineConnList[i]);
if Conn.FisPipeElement then
begin
ObjVisible := False;
for j := 0 to Conn.FJoinedLinesList.Count - 1 do
begin
if T3DLine(Conn.FJoinedLinesList[j]).FGLObject <> nil then
begin
if TglBaseSceneObject(T3DLine(Conn.FJoinedLinesList[j]).FGLObject).Visible then
begin
ObjVisible := True;
break;
end;
end;
end;
//â îñíîâíîì äåðåâå
if Conn.FGLObject <> nil then
begin
TglBaseSceneObject(Conn.FGLObject).Visible := ObjVisible;
end;
if Conn.FSCSComponID <> -1 then
begin
//
for j := 0 to SCSModelTree.Items.Count - 1 do
begin
if SCSModelTree.Items[j].data <> nil then
begin
if TObject(SCSModelTree.Items[j].data) is T3DConnector then
begin
if T3DConnector(SCSModelTree.Items[j].data).FSCSComponID = Conn.FSCSComponID then
begin
if T3DConnector(SCSModelTree.Items[j].data).FGLObject <> nil then
TglBaseSceneObject(T3DConnector(SCSModelTree.Items[j].data).FGLObject).Visible := ObjVisible;
end;
end;
end;
end;
//â ñêðûòîì(ãäå äóáëèðóþòñÿ ïî àé-äè êîìïîíåíòà)
for j := 0 to DuplicateNodeTree.Items.Count - 1 do
begin
if DuplicateNodeTree.Items[j].data <> nil then
begin
if TObject(DuplicateNodeTree.Items[j].data) is T3DConnector then
begin
if T3DConnector(DuplicateNodeTree.Items[j].data).FSCSComponID = Conn.FSCSComponID then
begin
if T3DConnector(DuplicateNodeTree.Items[j].data).FGLObject <> nil then
TglBaseSceneObject(T3DConnector(DuplicateNodeTree.Items[j].data).FGLObject).Visible := ObjVisible;
end;
end;
end;
end;
end;
end;
end;
Dummycube.EndUpdate;
GLScene.EndUpdate;
GLCadencer.OnProgress := SavedProc;
end;
*)
function Tfrm3D.GetPointToDivTrace(X, Y: Integer; aLine: TGLLines): T3DPoint; function Tfrm3D.GetPointToDivTrace(X, Y: Integer; aLine: TGLLines): T3DPoint;
var var
glCursor: TGLCustomSceneObject; glCursor: TGLCustomSceneObject;

View File

@ -204,7 +204,8 @@ uses
U_PortsReIndex in 'SCSNormBase\U_PortsReIndex.pas' {F_PortsReIndex}, U_PortsReIndex in 'SCSNormBase\U_PortsReIndex.pas' {F_PortsReIndex},
U_ELCommon in 'Main\U_ELCommon.pas' {/U_SetWallTransparency in 'Main\U_SetWallTransparency.pas' {F_SetWallTransparency}, U_ELCommon in 'Main\U_ELCommon.pas' {/U_SetWallTransparency in 'Main\U_SetWallTransparency.pas' {F_SetWallTransparency},
U_ShieldConfig in 'Main\U_ShieldConfig.pas' {/ Tolik 16/03/2023 ôîðìàò ùèòêà äëÿ ìîíòàæíîé ñõåìû;}, U_ShieldConfig in 'Main\U_ShieldConfig.pas' {/ Tolik 16/03/2023 ôîðìàò ùèòêà äëÿ ìîíòàæíîé ñõåìû;},
U_Reserv in 'Main\U_Reserv.pas' {F_Reserv}; U_Reserv in 'Main\U_Reserv.pas' {F_Reserv},
form3d in '..\POWERCAD30\UNITS\form3d.pas' {frm3D};
// Tolik 16/03/2023 ôîðìàò ùèòêà äëÿ ìîíòàæíîé ñõåìû; // Tolik 16/03/2023 ôîðìàò ùèòêà äëÿ ìîíòàæíîé ñõåìû;
//U_SetWallTransparency in 'Main\U_SetWallTransparency.pas' {F_SetWallTransparency}; //U_SetWallTransparency in 'Main\U_SetWallTransparency.pas' {F_SetWallTransparency};

View File

@ -708,6 +708,9 @@
<DCCReference Include="Main\U_Reserv.pas"> <DCCReference Include="Main\U_Reserv.pas">
<Form>F_Reserv</Form> <Form>F_Reserv</Form>
</DCCReference> </DCCReference>
<DCCReference Include="..\POWERCAD30\UNITS\form3d.pas">
<Form>frm3D</Form>
</DCCReference>
<BuildConfiguration Include="Release Telecom UKR Trial"> <BuildConfiguration Include="Release Telecom UKR Trial">
<Key>Cfg_10</Key> <Key>Cfg_10</Key>
<CfgParent>Base</CfgParent> <CfgParent>Base</CfgParent>

View File

@ -4181,6 +4181,11 @@ object FSCS_Main: TFSCS_Main
Caption = #1057#1086#1079#1076#1072#1090#1100' '#1084#1077#1078#1101#1090#1072#1078#1085#1091#1102' '#1074#1077#1088#1090#1080#1082#1072#1083#1100' '#1076#1086#1074#1077#1088#1093#1091 Caption = #1057#1086#1079#1076#1072#1090#1100' '#1084#1077#1078#1101#1090#1072#1078#1085#1091#1102' '#1074#1077#1088#1090#1080#1082#1072#1083#1100' '#1076#1086#1074#1077#1088#1093#1091
OnExecute = aCreateBFMagistralUpExecute OnExecute = aCreateBFMagistralUpExecute
end end
object ACreateFloorV: TAction
Category = #1052#1077#1085#1102' '#1057#1050#1057' '#1086#1073#1100#1077#1082#1090#1086#1074
Caption = #1057#1086#1079#1076#1072#1090#1100' '#1074#1077#1088#1090#1080#1082#1072#1083#1100' '#1085#1072' '#1074#1099#1089#1086#1090#1091' '#1101#1090#1072#1078#1072
OnExecute = ACreateFloorVExecute
end
end end
object PrintDialog: TPrintDialog object PrintDialog: TPrintDialog
Left = 352 Left = 352
@ -5614,6 +5619,9 @@ object FSCS_Main: TFSCS_Main
object pmCreateBFMagistralUp: TMenuItem object pmCreateBFMagistralUp: TMenuItem
Action = aCreateBFMagistralUp Action = aCreateBFMagistralUp
end end
object pmCreateFloorV: TMenuItem
Action = ACreateFloorV
end
object pmiListRefreshDesignList: TMenuItem object pmiListRefreshDesignList: TMenuItem
Action = aRefreshDesignList Action = aRefreshDesignList
end end
@ -5884,7 +5892,7 @@ object FSCS_Main: TFSCS_Main
Left = 496 Left = 496
Top = 232 Top = 232
Bitmap = { Bitmap = {
494C0101D2008C01C40310001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 494C0101D2008C01D00310001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000400000005003000001002000000000000050 0000000000003600000028000000400000005003000001002000000000000050
0300000000000000000000000000000000000000000000000000000000000000 0300000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
@ -12894,7 +12902,7 @@ object FSCS_Main: TFSCS_Main
Left = 248 Left = 248
Top = 280 Top = 280
Bitmap = { Bitmap = {
494C010123008C01DC0320001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 494C010123008C01E80320001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000800000009000000001002000000000000020 0000000000003600000028000000800000009000000001002000000000000020
0100000000000000000000000000000000000000000000000000000000000000 0100000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
@ -15466,7 +15474,7 @@ object FSCS_Main: TFSCS_Main
Left = 240 Left = 240
Top = 408 Top = 408
Bitmap = { Bitmap = {
494C010112008C01D0030E000E00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 494C010112008C01DC030E000E00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
000000000000360000002800000038000000460000000100200000000000403D 000000000000360000002800000038000000460000000100200000000000403D
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
@ -19969,7 +19977,7 @@ object FSCS_Main: TFSCS_Main
Left = 240 Left = 240
Top = 344 Top = 344
Bitmap = { Bitmap = {
494C0101DE008C01B80618001800FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 494C0101DE008C01C40618001800FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
00000000000036000000280000006000000040050000010020000000000000E0 00000000000036000000280000006000000040050000010020000000000000E0
070000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF 070000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009D9188003D2413003D241300FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009D9188003D2413003D241300FFFF

View File

@ -1190,6 +1190,8 @@ type
pmCreateBFMagistralUp: TMenuItem; pmCreateBFMagistralUp: TMenuItem;
aCreateBFMagistralDown: TAction; aCreateBFMagistralDown: TAction;
aCreateBFMagistralUp: TAction; aCreateBFMagistralUp: TAction;
ACreateFloorV: TAction;
pmCreateFloorV: TMenuItem;
// ACTIONs // ACTIONs
// ñîçäàòü íîâûé ïðîåêò // ñîçäàòü íîâûé ïðîåêò
@ -2007,6 +2009,7 @@ type
procedure aCreateBFMagistralExecute(Sender: TObject); procedure aCreateBFMagistralExecute(Sender: TObject);
procedure aCreateBFMagistralDownExecute(Sender: TObject); procedure aCreateBFMagistralDownExecute(Sender: TObject);
procedure aCreateBFMagistralUpExecute(Sender: TObject); procedure aCreateBFMagistralUpExecute(Sender: TObject);
procedure ACreateFloorVExecute(Sender: TObject);
{ procedure SelectAllLineObjsHint(var HintStr: String; { procedure SelectAllLineObjsHint(var HintStr: String;
var CanShow: Boolean); var CanShow: Boolean);
@ -19632,6 +19635,63 @@ begin
// //
end; end;
procedure TFSCS_Main.ACreateFloorVExecute(Sender: TObject);
var i, ListIndex: integer;
x,y: Double;
FCad, SavedGcadForm: TF_Cad;
CadList: TList;
CreatedLine: TOrthoLine;
p1, p2: TDoublePoint;
SavedMoveWithRaise, SSGrid, SSN, SSG: Boolean;
SCSList: TSCSList;
begin
SavedMoveWithRaise := GMoveWithRaise;
GMoveWithRaise := False;
p1.x := GMouseDownPos.x;
p1.y := GMouseDOwnPos.y;
p1.z := 0;
p2.x := GMouseDownPos.x + 1;
p2.y := GMouseDOwnPos.y + 1;
p2.z := 0;
SSGrid := GCadForm.PCad.SnapToGrids;
SSN := GCadForm.PCad.SnapToNearPoint;
SSG := GCadForm.PCad.SnapToGuides;
GCadForm.PCad.SnapToGrids := False;
GCadForm.PCad.SnapToNearPoint := False;
GCadForm.PCad.SnapToGuides := False;
CreatedLine := CreateTraceByPoints(GCadForm.PCad, p1, p2);
CreatedLine.ActualZOrder[1] := 0;
TConnectorObject(CreatedLine.JoinConnector1).actualzOrder[1] := 0;
TConnectorObject(CreatedLine.JoinConnector2).MoveP(p1.x - p2.x, p1.y - p2.y, False, False);
CreatedLine.ActualZOrder[2] := GCadForm.FRoomHeight;
TConnectorObject(CreatedLine.JoinConnector2).actualzOrder[1] := GCadForm.FRoomHeight;
CreatedLine.LengthCalc;
CreatedLine.LineLength := CreatedLine.LengthCalc;
GCadForm.PCad.SnapToGrids := SSGrid;
GCadForm.PCad.SnapToNearPoint := SSN;
GCadForm.PCad.SnapToGuides := SSG;
GMoveWithRaise := SavedMoveWithRaise;
if GCadForm.cbManualCableTracingMode.Down then
begin
if F_NormBase.GSCSBase.SCSComponent <> nil then
begin
if F_NormBase.GSCSBase.SCSComponent.IsLine = biTrue then
begin
CopyComponentToSCSObject(CreatedLine.ID, F_NormBase.GSCSBase.SCSComponent.ID);
end;
end;
end;
end;
procedure TFSCS_Main.aCreateFloorRaiseDownExecute(Sender: TObject); procedure TFSCS_Main.aCreateFloorRaiseDownExecute(Sender: TObject);
var var
RaiseOnFigure: TConnectorObject; RaiseOnFigure: TConnectorObject;
@ -20087,9 +20147,8 @@ begin
//Tolik 11/07/2023 -- //Tolik 11/07/2023 --
//SaveCurrProjectToUndoFiles(true); //SaveCurrProjectToUndoFiles(true);
// //
prLists := GetAllProjNormLists; SaveUndoProjBefore3D;
SaveForProjectUndo(prLists, true, false, true); GIs3D := True;
prLists.Free;
// //
BeginProgress; BeginProgress;
if not Assigned(frm3D) then if not Assigned(frm3D) then
@ -21794,9 +21853,10 @@ begin
begin begin
G3DModelForProject := True; G3DModelForProject := True;
//Tolik 29/08/2025 -- //Tolik 29/08/2025 --
SaveUndoProjBefore3D;
GIs3D := True; GIs3D := True;
GisChangeFrom3D := False; GisChangeFrom3D := False;
SaveUndoProjBefore3D;
// //
BeginProgress; BeginProgress;
if not Assigned(frm3D) then if not Assigned(frm3D) then
@ -22107,6 +22167,7 @@ begin
end; end;
end; end;
SubstrateFileList.Free; SubstrateFileList.Free;
(*
if G3dUndoActList.Count > 0 then if G3dUndoActList.Count > 0 then
begin begin
j := G3dUndoActList.Count; j := G3dUndoActList.Count;
@ -22117,7 +22178,6 @@ begin
GCadForm.SCSUndoNormalList(true); GCadForm.SCSUndoNormalList(true);
dec(j); dec(j);
end; end;
{ {
for j := G3dUndoActList.Count - 1 downto 0 do for j := G3dUndoActList.Count - 1 downto 0 do
begin begin
@ -22126,6 +22186,8 @@ begin
end; end;
} }
end; end;
*)
FreeAndNil(G3dUndoList); // Tolik 18/07/2025 -- FreeAndNil(G3dUndoList); // Tolik 18/07/2025 --
FreeAndNil(G3dUndoActList); // Tolik 18/07/2025 -- FreeAndNil(G3dUndoActList); // Tolik 18/07/2025 --
// //

View File

@ -7112,12 +7112,14 @@ begin
FSCS_Main.pmCreateBFMagistral.Visible := True; FSCS_Main.pmCreateBFMagistral.Visible := True;
FSCS_Main.pmCreateBFMagistralUp.Visible := True; FSCS_Main.pmCreateBFMagistralUp.Visible := True;
FSCS_Main.pmCreateBFMagistralDown.Visible := True; FSCS_Main.pmCreateBFMagistralDown.Visible := True;
FSCS_Main.pmCreateFloorV.Visible := True;
end end
else else
begin begin
FSCS_Main.pmCreateBFMagistral.Visible := False; FSCS_Main.pmCreateBFMagistral.Visible := False;
FSCS_Main.pmCreateBFMagistralUp.Visible := False; FSCS_Main.pmCreateBFMagistralUp.Visible := False;
FSCS_Main.pmCreateBFMagistralDown.Visible := False; FSCS_Main.pmCreateBFMagistralDown.Visible := False;
FSCS_Main.pmCreateFloorV.Visible := False;
end; end;
// //
@ -11346,6 +11348,8 @@ var
SaveGCadRefreshFlag: boolean; SaveGCadRefreshFlag: boolean;
begin begin
Result := nil; Result := nil;
if Gis3D then //Tolik 30/08/2025 -- çàëî÷èòü, ïîêà þçàåòñÿ 3Ä âèä
exit;
//Tolik 16/08/2021 -- //Tolik 16/08/2021 --
GetPathToSCSCADDir; GetPathToSCSCADDir;
GetPathToSCSUndoDir; GetPathToSCSUndoDir;
@ -11422,18 +11426,33 @@ begin
end; end;
ListUndoAction := TListUndoAction.Create(aType, aSavePM); ListUndoAction := TListUndoAction.Create(aType, aSavePM);
if a3D then
begin
Count := G3dUndoList.Count;
SetUndoName := FUndoDir + '3D\'+ FCADListFileName + '_' + IntToStr(Count);
if not DirectoryExists(FUndoDir + '3D\') then
CreateDir(FUndoDir + '3D\');
end
else
begin
// çàïèñàòü ïîñëåäíåå èçìåíåíèå â ôàéë, íàçâàíèå â FUndoList // çàïèñàòü ïîñëåäíåå èçìåíåíèå â ôàéë, íàçâàíèå â FUndoList
Count := FSCSUndoList.Count; Count := FSCSUndoList.Count;
// SetUndoName := FUndoDir + FCADListName + IntTostr(FCADListIndex) + '_' + IntToStr(Count); // SetUndoName := FUndoDir + FCADListName + IntTostr(FCADListIndex) + '_' + IntToStr(Count);
//Tolik 18/07/2025 -- //Tolik 18/07/2025 --
{ if a3d then {if a3d then
SetUndoName := FUndoDir + '3D\'+ FCADListFileName + '_' + IntToStr(Count) SetUndoName := FUndoDir + '3D\'+ FCADListFileName + '_' + IntToStr(Count)
else} else}
SetUndoName := FUndoDir + FCADListFileName + '_' + IntToStr(Count); SetUndoName := FUndoDir + FCADListFileName + '_' + IntToStr(Count);
end;
// ñîõðàíèòü â ñïèñîê ôàéëîâ // ñîõðàíèòü â ñïèñîê ôàéëîâ
ListUndoAction.FCadFileName := SetUndoName; ListUndoAction.FCadFileName := SetUndoName;
ListUndoAction.FIndex := Count; ListUndoAction.FIndex := Count;
ListUndoAction.FIsProject := aIsProject; ListUndoAction.FIsProject := aIsProject;
if a3D then
G3dUndoList.Add(ListUndoAction)
else
FSCSUndoList.Add(ListUndoAction); FSCSUndoList.Add(ListUndoAction);
// ñîõðàíèòü â òåìïîâûé ôàéë // ñîõðàíèòü â òåìïîâûé ôàéë

View File

@ -1357,6 +1357,7 @@ type
Procedure CreateBFMagistralTr(aFull: Boolean = true; aDown: Boolean = False; aUp: Boolean = False; aCompon: TSCSComponent = nil); Procedure CreateBFMagistralTr(aFull: Boolean = true; aDown: Boolean = False; aUp: Boolean = False; aCompon: TSCSComponent = nil);
function GetAllProjNormLists: TList; // Tolik 29/08/2025 -- function GetAllProjNormLists: TList; // Tolik 29/08/2025 --
procedure SaveUndoProjBefore3D; // Tolik 29/08/2025 -- procedure SaveUndoProjBefore3D; // Tolik 29/08/2025 --
Procedure DeleteProjectUndoActions3D; // Tolik 30/08/2025 --
// //
const const
{$IF Defined(SCS_PANDUIT) or Defined(SCS_PE)} {$IF Defined(SCS_PANDUIT) or Defined(SCS_PE)}
@ -1774,6 +1775,34 @@ uses USCS_Main, Menus, U_main, U_MasterNewList, U_MasterNewListLite, U_AutoTrace
U_InputRadio, U_BaseConstants, U_InputRadio, U_BaseConstants,
cxSpinEdit, Printers, PCPanel, U_InputMark, U_PEAutotraceDialog{Tolik}, U_SCSClasses, U_MakeEditCrossConnection, U_DimLineDialog, U_ResourceReport; cxSpinEdit, Printers, PCPanel, U_InputMark, U_PEAutotraceDialog{Tolik}, U_SCSClasses, U_MakeEditCrossConnection, U_DimLineDialog, U_ResourceReport;
//Tolik 30/08/2025 -- ñáðîñèòü ñëåïîê ïðîåêòà äëÿ 3Ä
Procedure DeleteProjectUndoActions3D;
var ProjectUndoAction: TProjectUndoAction;
ListUndoAction: TListUndoAction;
Undo3DdirNam: String;
begin
Undo3DdirNam := GCadForm.FUndodir + '\3D\';
if DirectoryExists(Undo3DdirNam) then
FullRemoveDir(Undo3DdirNam, true, true);
if G3dUndoActList <> nil then
begin
While G3dUndoActList.Count > 0 do
begin
TProjectUndoAction(G3dUndoActList[0]).free;
G3dUndoActList.delete(0);
end;
end;
if G3dUndoList <> nil then
begin
while G3dUndoList.Count > 0 do
begin
TListUndoAction(G3dUndoList[0]).free;
G3dUndoList.delete(0);
end;
end;
end;
//Tolik 29/08/2025 -- //Tolik 29/08/2025 --
function GetAllProjNormLists: TList; // Tolik 29/08/2025 -- function GetAllProjNormLists: TList; // Tolik 29/08/2025 --
var i: integer; var i: integer;
@ -1794,7 +1823,6 @@ uses USCS_Main, Menus, U_main, U_MasterNewList, U_MasterNewListLite, U_AutoTrace
procedure SaveUndoProjBefore3D; procedure SaveUndoProjBefore3D;
var prLists: TList; var prLists: TList;
begin begin
prLists := GetAllProjNormLists; prLists := GetAllProjNormLists;
SaveForProjectUndo(prLists, true, false, true); SaveForProjectUndo(prLists, true, false, true);
prLists.Free; prLists.Free;
@ -1810,6 +1838,8 @@ uses USCS_Main, Menus, U_main, U_MasterNewList, U_MasterNewListLite, U_AutoTrace
p1, p2: TDoublePoint; p1, p2: TDoublePoint;
SavedMoveWithRaise, SSGrid, SSN, SSG: Boolean; SavedMoveWithRaise, SSGrid, SSN, SSG: Boolean;
SCSList: TSCSList; SCSList: TSCSList;
//11/09/2025
ObjParams: TObjectParams;
begin begin
CadList := TList.Create; CadList := TList.Create;
//Full //Full
@ -1897,6 +1927,24 @@ uses USCS_Main, Menus, U_main, U_MasterNewList, U_MasterNewListLite, U_AutoTrace
CreatedLine.ActualZOrder[2] := GCadForm.FRoomHeight; CreatedLine.ActualZOrder[2] := GCadForm.FRoomHeight;
TConnectorObject(CreatedLine.JoinConnector2).actualzOrder[1] := GCadForm.FRoomHeight; TConnectorObject(CreatedLine.JoinConnector2).actualzOrder[1] := GCadForm.FRoomHeight;
CreatedLine.Name := cCadClasses_Mes32;
SetNewObjectNameInPM(CreatedLine.ID, CreatedLine.Name);
ObjParams := GetFigureParams(CreatedLine.ID);
//11/09/2025--
CreatedLine.Name := ObjParams.Name;
CreatedLine.FIndex := ObjParams.MarkID;
CreatedLine.FIsVertical := True;
CreatedLine.CalculLength := CreatedLine.LengthCalc;
CreatedLine.LineLength := CreatedLine.CalculLength;
SetLineFigureLengthInPM(CreatedLine.ID, CreatedLine.LineLength);
CreatedLine.ReCreateCaptionsGroup(True, false);
CreatedLine.UpdateLengthTextBox(True, false);
CreatedLine.ReCreateNotesGroup(True);
CreatedLine.ShowCaptions := False;
CreatedLine.ShowNotes := False;
CreatedLine.IsShowBlock := False;
CreatedLine.LengthCalc; CreatedLine.LengthCalc;
CreatedLine.LineLength := CreatedLine.LengthCalc; CreatedLine.LineLength := CreatedLine.LengthCalc;
@ -48754,7 +48802,40 @@ begin
try try
SaveGCadRefreshFlag := GCanRefreshCad; SaveGCadRefreshFlag := GCanRefreshCad;
GCanRefreshCad := false; GCanRefreshCad := false;
if a3D then
begin
if G3dUndoActList = nil then
G3dUndoActList := TList.Create;
if G3dUndoList = nil then
G3dUndoList := TList.Create;
ProjectUndoAction := TProjectUndoAction.create;
SavedGCadForm := GCadForm;
for i := 0 to aLists.Count - 1 do
begin
vList := TF_CAD(aLists[i]);
GCadForm := vList;
ListUndoAction := nil; //#From Oleg# //14.09.2010
//
if vList.FListType = lt_Normal then
ListUndoAction := vList.SaveForUndoNormalList(uat_Floor, aSavePM, aIsProject, i, a3D);
if ListUndoAction <> nil then
begin
ListUndoAction.FProjectUndoAction := ProjectUndoAction;
LinkUndoObject := TLinkUndoObject.create;
LinkUndoObject.FCad := vList;
LinkUndoObject.FListUndoAction := ListUndoAction;
ProjectUndoAction.FLinkUndoObject.Add(LinkUndoObject);
end;
end;
GCadForm := SavedGCadForm;
G3dUndoActList.Add(ProjectUndoAction);
end
else
begin
if GUndoList = nil then if GUndoList = nil then
GUndoList := TList.Create; GUndoList := TList.Create;
ProjectUndoAction := TProjectUndoAction.create; ProjectUndoAction := TProjectUndoAction.create;
@ -48780,7 +48861,7 @@ begin
if vList.FListType = lt_ElScheme then if vList.FListType = lt_ElScheme then
ListUndoAction := vList.SaveForUndoELScheme(uat_Floor, aSavePM, aIsProject, i, a3d); ListUndoAction := vList.SaveForUndoELScheme(uat_Floor, aSavePM, aIsProject, i, a3d);
// ListUndoAction := vList.SaveForUndo(uat_Floor, aSavePM, aIsProject, i); // ListUndoAction := vList.SaveForUndo(uat_Floor, aSavePM, aIsProject, i);
// //
if ListUndoAction <> nil then if ListUndoAction <> nil then
begin begin
@ -48793,6 +48874,7 @@ begin
end; end;
GCadForm := SavedGCadForm; GCadForm := SavedGCadForm;
GUndoList.Add(ProjectUndoAction); GUndoList.Add(ProjectUndoAction);
end;
except except
on E: Exception do addExceptionToLogEx('U_Common.SaveForProjectUndo', E.Message); on E: Exception do addExceptionToLogEx('U_Common.SaveForProjectUndo', E.Message);
end; end;

View File

@ -3185,6 +3185,7 @@ const
cRenewRackDesign = 'Обновить дизайн шкафа?'; // Tolik 23/06/2021 -- cRenewRackDesign = 'Обновить дизайн шкафа?'; // Tolik 23/06/2021 --
F3dMmes1 = 'Левая клавиша мыши - вращение листа. Правая - перемещение.Скролл - увел./уменьш. (зум)'; F3dMmes1 = 'Левая клавиша мыши - вращение листа. Правая - перемещение.Скролл - увел./уменьш. (зум)';
F3dMmes2 = 'Недоступно в режиме просмотра "От первого лица"!'; // Tolik 08/12/2023 F3dMmes2 = 'Недоступно в режиме просмотра "От первого лица"!'; // Tolik 08/12/2023
F3dMmes3 = 'Применить изменения?'; //Tolik 30/08/2025 --
Trace_Mess = 'Задайте высоту трассы, которая будет использоваться по умолчанию, '; Trace_Mess = 'Задайте высоту трассы, которая будет использоваться по умолчанию, ';
Trace_Mess_1 = '(вы сможете её изменить в Настройках проекта CTRL-F2)'; Trace_Mess_1 = '(вы сможете её изменить в Настройках проекта CTRL-F2)';
Trace_Mess1 = 'Задайте высоту трассы'; Trace_Mess1 = 'Задайте высоту трассы';