First commit

This commit is contained in:
Anatoly 2025-07-11 10:55:46 +03:00
parent 125a2f2a0b
commit 6d2b2f87ce
3 changed files with 136 additions and 14 deletions

View File

@ -3405,7 +3405,7 @@ object frm3D: Tfrm3D
Left = 100 Left = 100
Top = 57 Top = 57
Bitmap = { Bitmap = {
494C01013A00B000940210001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 494C01013A00B000DC0210001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
000000000000360000002800000040000000F0000000010020000000000000F0 000000000000360000002800000040000000F0000000010020000000000000F0
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000

View File

@ -660,6 +660,7 @@ type
procedure Move3DRaiseConnector(aObj: T3DConnector; dp: T3DPoint); procedure Move3DRaiseConnector(aObj: T3DConnector; dp: T3DPoint);
procedure Move3DBetweenRaiseConnector(aObj: T3DConnector; dp: T3DPoint); procedure Move3DBetweenRaiseConnector(aObj: T3DConnector; dp: T3DPoint);
procedure Move3DLine(aObj: T3DConnector; aLine: T3DLine; aPos: T3DPoint); procedure Move3DLine(aObj: T3DConnector; aLine: T3DLine; aPos: T3DPoint);
function CheckCanMoveConnector(aConn: T3DConnector; mp: T3DPoint): boolean; // Tolik 03/07/2025 -- ïðîâåðêà íå âûëåòèò ëè êîííåêòîð çà ïðåäåëû Êàäà, åñëè åãî çäåñü ïîäâèíóòü
procedure Trace3DConnector(aObj: TGLBaseSceneObject; dx, dy: Integer); procedure Trace3DConnector(aObj: TGLBaseSceneObject; dx, dy: Integer);
procedure Trace3DLine(aObj: TGLBaseSceneObject; dx, dy: Integer); procedure Trace3DLine(aObj: TGLBaseSceneObject; dx, dy: Integer);
@ -12524,11 +12525,16 @@ var
ComponNode, NewTraceNode, CadListNode, xScsNode: TTreeNode; ComponNode, NewTraceNode, CadListNode, xScsNode: TTreeNode;
LineToMove, xLine: T3dLine; LineToMove, xLine: T3dLine;
SCSObjList: TList; // ñïèñîê îáúåêòîâ, êîòîðûå íóæíî áóäåò ïåðåïàðñèòü SCSObjList: TList; // ñïèñîê îáúåêòîâ, êîòîðûå íóæíî áóäåò ïåðåïàðñèòü
SelObj: TGLBaseSceneObject; // save selection SelObjClassNAme: string; // save selection
IstubeSel: Boolean; // if is tube select on trace IstubeSel: Boolean; // if is tube select on trace
SelID: integer;
SelList: TList;
selCatalog: TSCSCatalog;
CameraPos: T3DPoint;
procedure SynchronizeCoordsToCad(aPoint: TDoublePoint; aSide: integer); procedure SynchronizeCoordsToCad(aPoint: TDoublePoint; aSide: integer);
var SCSConn: TConnectorObject; var SCSConn: TConnectorObject;
i: integer;
begin begin
if aSide = 1 then if aSide = 1 then
SCSConn := TConnectorObject(SCSLine.JoinConnector1) SCSConn := TConnectorObject(SCSLine.JoinConnector1)
@ -12539,19 +12545,54 @@ var
(CompareValue(SCSConn.ap1.y, aPoint.y) <> 0)) then (CompareValue(SCSConn.ap1.y, aPoint.y) <> 0)) then
SCSConn.Move(aPoint.x - SCSConn.ap1.x, aPoint.y - SCSConn.ap1.y); SCSConn.Move(aPoint.x - SCSConn.ap1.x, aPoint.y - SCSConn.ap1.y);
//ïî âûñîòå (òóò âîïðîñ... êàê ïîéäåò)... //ïî âûñîòå (òóò âîïðîñ... êàê ïîéäåò)...
// if CompareValue(SCSConn.ActualZOrder[1], aPoint.z) <> 0 then if CompareValue(SCSConn.ActualZOrder[1], aPoint.z) <> 0 then
begin
SCSConn.ActualZOrder[1] := aPoint.z;
SetConFigureCoordZInPM(SCSConn.ID, SCSConn.ActualZOrder[1]);
for i := 0 to SCSConn.JoinedOrtholinesList.Count - 1 do
begin
if TOrtholine(SCSConn.JoinedOrtholinesList[i]).JoinConnector1.ID = SCSConn.ID then
TOrtholine(SCSConn.JoinedOrtholinesList[i]).ActualZOrder[1] := aPoint.z
else
TOrtholine(SCSConn.JoinedOrtholinesList[i]).ActualZOrder[2] := aPoint.z;
TOrtholine(SCSConn.JoinedOrtholinesList[i]).CalculLength := TOrtholine(SCSConn.JoinedOrtholinesList[i]).LengthCalc;
TOrtholine(SCSConn.JoinedOrtholinesList[i]).LineLength := TOrtholine(SCSConn.JoinedOrtholinesList[i]).CalculLength;
SetLineFigureLengthInPM(TOrtholine(SCSConn.JoinedOrtholinesList[i]).ID, TOrtholine(SCSConn.JoinedOrtholinesList[i]).LineLength);
end;
end;
end; end;
begin begin
//Tolik 03/07/2025 -- Ïðîâåðêà íà âûëåò çà ïðåäåëû Êàäà
if ((not CheckCanMoveConnector(aLine.FJoinConnector1, adp)) or
(not CheckCanMoveConnector(aLine.FJoinConnector2, adp))) then
exit;
//
//26/06/2025 -- save selection //26/06/2025 -- save selection
SelObj := nil;
IstubeSel := False; IstubeSel := False;
SelId := -1;
CameraPos.x := GLSceneViewer.Camera.Position.X;
CameraPos.y := GLSceneViewer.Camera.Position.Y;
CameraPos.z := GLSceneViewer.Camera.Position.Z;
if FSelection.Count > 0 then if FSelection.Count > 0 then
SelObj := TGLBaseSceneObject(FSelection[i]); SelObjClassNAme := TObject(TTreeNode(TGLBaseSceneObject(FSelection[0]).TagObject).Data).ClassName;
if SelObj.TagObject <> nil then
if TGLBaseSceneObject(FSelection[0]).TagObject <> nil then
begin begin
if TObject(TTreeNode(SelObj.TagObject).Data).ClassName = 'T3DLineComponent' then if SelObjClassNAme = 'T3DLineComponent' then
IstubeSel := True; begin
if T3DLineComponent(TTreeNode(TGLBaseSceneObject(FSelection[0]).TagObject).Data).FSCSCompon <> nil then
SelID := T3DLineComponent(TTreeNode(TGLBaseSceneObject(FSelection[0]).TagObject).Data).FSCSCompon.ID;
end
else
if SelObjClassNAme = 'T3DLine' then
begin
if T3DLineComponent(TTreeNode(TGLBaseSceneObject(FSelection[0]).TagObject).Data).FSCSObject <> nil then
SelID := T3DLineComponent(TTreeNode(TGLBaseSceneObject(FSelection[0]).TagObject).Data).FSCSObject.ID;
end;
end; end;
DeselectGLObjectsT; // drop selection DeselectGLObjectsT; // drop selection
@ -12667,11 +12708,6 @@ var
//CAD //CAD
SavedGCadForm := GCadForm; SavedGCadForm := GCadForm;
GCadForm := TF_CAD(TPowerCad(TOrthoLine(aLine.FSCSObject).Owner).Owner); GCadForm := TF_CAD(TPowerCad(TOrthoLine(aLine.FSCSObject).Owner).Owner);
//Tolik 24/06/2025 --\
//Ñèíõðîíèçèðîâàòü êîîðäèíàòû ñ Êàäîì
SynchronizeCoordsToCad(aLine.FPoint1, 1);
SynchronizeCoordsToCad(aLine.FPoint2, 2);
//
//ñîçäàòü äâà íîâûõ êîííåêòîðà //ñîçäàòü äâà íîâûõ êîííåêòîðà
//îñíîâíàÿ ïðîáëåìà çäåñü.... //îñíîâíàÿ ïðîáëåìà çäåñü....
@ -12682,6 +12718,11 @@ var
aLine.FPoint2.x := Round2(aLine.FPoint2.x); aLine.FPoint2.x := Round2(aLine.FPoint2.x);
aLine.FPoint2.y := Round2(aLine.FPoint2.y); aLine.FPoint2.y := Round2(aLine.FPoint2.y);
aLine.FPoint2.z := Round2(aLine.FPoint2.z); aLine.FPoint2.z := Round2(aLine.FPoint2.z);
//Tolik 24/06/2025 --\
//Ñèíõðîíèçèðîâàòü êîîðäèíàòû ñ Êàäîì
SynchronizeCoordsToCad(aLine.FPoint1, 1);
SynchronizeCoordsToCad(aLine.FPoint2, 2);
// //
CreatedConn1 := TConnectorObject.Create(aLine.FPoint1.x, aLine.FPoint1.y, aLine.FPoint1.z, integer(GCadForm.PCad.Layers[2]),mydsNormal,GCadForm.PCad); CreatedConn1 := TConnectorObject.Create(aLine.FPoint1.x, aLine.FPoint1.y, aLine.FPoint1.z, integer(GCadForm.PCad.Layers[2]),mydsNormal,GCadForm.PCad);
@ -12888,7 +12929,6 @@ var
TObject(Obj3dList[i]).Free; TObject(Obj3dList[i]).Free;
end; end;
Obj3dList.Free;
//ñîáðàòü ÑÊÑ-îáúåêòû, êîòîðûå çàäåë ñäâèã //ñîáðàòü ÑÊÑ-îáúåêòû, êîòîðûå çàäåë ñäâèã
SCSObjList := TList.Create; SCSObjList := TList.Create;
@ -13032,8 +13072,46 @@ var
end; end;
//3D //3D
UpdateFaces(FaceList); UpdateFaces(FaceList);
//restore selection
SelList := TList.Create;
for i := 0 to SCSModelTree.Items.Count - 1 do
begin
if TObject(TTreeNode(SCSModelTree.Items[i]).data).classname = SelObjClassNAme then
begin
if SelObjClassNAme = 'T3DLineComponent' then
begin
if T3DLineComponent(TTreeNode(SCSModelTree.Items[i]).Data).FSCSCompon.ID = SelID then
begin
SelList.Add(T3DLineComponent(TTreeNode(SCSModelTree.Items[i]).Data).FGLObject);
break;
end;
end
else
if SelObjClassNAme = 'T3DLine' then
begin
if T3DLineComponent(TTreeNode(SCSModelTree.Items[i]).Data).FSCSObject.ID = SelID then
begin
SelList.Add(T3DLine(TTreeNode(SCSModelTree.Items[i]).Data).FGLObject);
break;
end;
end;
end;
end;
if SelList.Count > 0 then
SelectGLObjects(SelList);
FaceList.Free;
ObjList.Free;
Obj3dList.Free;
SelList.Free;
SCSObjList.Free;
//Tolik 01/07/2025 -- êàìåðó íà ìåñòî
GLSceneViewer.Camera.Position.X := CameraPos.x;
GLSceneViewer.Camera.Position.y := CameraPos.y;
GLSceneViewer.Camera.Position.z := CameraPos.z;
GCadForm := SavedGCadForm; GCadForm := SavedGCadForm;
end; end;
// //
begin begin
@ -23717,6 +23795,10 @@ begin
exit; exit;
xGLObject := nil; xGLObject := nil;
xConn := aObj; xConn := aObj;
//Tolik 03/07/2025 -- ïðîâåðêà íà âûëåò çà ïðåäåëû Êàäà
if not CheckCanMoveConnector(xConn, dp) then
exit;
//
if not CheckCanMoveConn(aObj) then if not CheckCanMoveConn(aObj) then
exit; exit;
// Tolik 26/04/2018 -- // Tolik 26/04/2018 --
@ -24962,6 +25044,45 @@ begin
LineCubeList.free; LineCubeList.free;
end; end;
function Tfrm3D.CheckCanMoveConnector(aConn: T3DConnector; mp: T3DPoint): Boolean; // Tolik 03/07/2025 -- ïðîâåðêà íå âûëåòèò ëè êîííåêòîð çà ïðåäåëû Êàäà, åñëè åãî çäåñü ïîäâèíóòü
var p: TDoublePoint;
SCSConn: TConnectorObject;
i: integer;
currPCad: TPowerCad;
begin
Result := True;
SCSConn := aConn.FSCSObject;
if SCSConn <> nil then
begin
currPcad := TPowerCad(SCSConn.Owner);
//âûëåòò âëåâî èëè ââåðõ
if CompareValue(Round2((aConn.FGLPoint.x + mp.x)/0.15), 0) = -1 then
begin
Result := False;
exit;
end;
if CompareValue(Round2((aConn.FGLPoint.z + mp.z)/0.15), 0) = -1 then
begin
Result := False;
exit;
end;
//âûëåò âïðàâî èëè âíèç
if CompareValue(Round2((aConn.FGLPoint.x + mp.x)/0.15), currPcad.WorkWidth) = 1 then
begin
Result := False;
exit;
end;
if CompareValue(Round2((aConn.FGLPoint.z + mp.z)/0.15), currPcad.WorkHeight) = 1 then
begin
Result := False;
exit;
end;
end;
end;
function Tfrm3D.IsConnectorMoved(aConn: T3DConnector): Boolean; function Tfrm3D.IsConnectorMoved(aConn: T3DConnector): Boolean;
var var
i: integer; i: integer;

1
readme.txt Normal file
View File

@ -0,0 +1 @@
тут до изменения UNDO перед 3Д, чтобы потом норм восстановить, так как придется внести слишком много изменений