From 6d2b2f87cef01e5a3b310e6ad3b5c9a713bae3c3 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Fri, 11 Jul 2025 10:55:46 +0300 Subject: [PATCH] First commit --- POWERCAD30/UNITS/form3d.dfm | 2 +- POWERCAD30/UNITS/form3d.pas | 147 ++++++++++++++++++++++++++++++++---- readme.txt | 1 + 3 files changed, 136 insertions(+), 14 deletions(-) create mode 100644 readme.txt diff --git a/POWERCAD30/UNITS/form3d.dfm b/POWERCAD30/UNITS/form3d.dfm index 38981b5..5055772 100644 --- a/POWERCAD30/UNITS/form3d.dfm +++ b/POWERCAD30/UNITS/form3d.dfm @@ -3405,7 +3405,7 @@ object frm3D: Tfrm3D Left = 100 Top = 57 Bitmap = { - 494C01013A00B000940210001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 494C01013A00B000DC0210001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 000000000000360000002800000040000000F0000000010020000000000000F0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 diff --git a/POWERCAD30/UNITS/form3d.pas b/POWERCAD30/UNITS/form3d.pas index bebb7be..c763276 100644 --- a/POWERCAD30/UNITS/form3d.pas +++ b/POWERCAD30/UNITS/form3d.pas @@ -660,6 +660,7 @@ type procedure Move3DRaiseConnector(aObj: T3DConnector; dp: T3DPoint); procedure Move3DBetweenRaiseConnector(aObj: T3DConnector; dp: 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 Trace3DLine(aObj: TGLBaseSceneObject; dx, dy: Integer); @@ -12524,11 +12525,16 @@ var ComponNode, NewTraceNode, CadListNode, xScsNode: TTreeNode; LineToMove, xLine: T3dLine; SCSObjList: TList; // список объектов, которые нужно будет перепарсить - SelObj: TGLBaseSceneObject; // save selection + SelObjClassNAme: string; // save selection IstubeSel: Boolean; // if is tube select on trace + SelID: integer; + SelList: TList; + selCatalog: TSCSCatalog; + CameraPos: T3DPoint; procedure SynchronizeCoordsToCad(aPoint: TDoublePoint; aSide: integer); var SCSConn: TConnectorObject; + i: integer; begin if aSide = 1 then SCSConn := TConnectorObject(SCSLine.JoinConnector1) @@ -12539,19 +12545,54 @@ var (CompareValue(SCSConn.ap1.y, aPoint.y) <> 0)) then 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; begin + //Tolik 03/07/2025 -- Проверка на вылет за пределы Када + if ((not CheckCanMoveConnector(aLine.FJoinConnector1, adp)) or + (not CheckCanMoveConnector(aLine.FJoinConnector2, adp))) then + exit; + // + //26/06/2025 -- save selection - SelObj := nil; 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 - SelObj := TGLBaseSceneObject(FSelection[i]); - if SelObj.TagObject <> nil then + SelObjClassNAme := TObject(TTreeNode(TGLBaseSceneObject(FSelection[0]).TagObject).Data).ClassName; + + if TGLBaseSceneObject(FSelection[0]).TagObject <> nil then begin - if TObject(TTreeNode(SelObj.TagObject).Data).ClassName = 'T3DLineComponent' then - IstubeSel := True; + if SelObjClassNAme = 'T3DLineComponent' then + 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; DeselectGLObjectsT; // drop selection @@ -12667,11 +12708,6 @@ var //CAD SavedGCadForm := GCadForm; 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.y := Round2(aLine.FPoint2.y); 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); @@ -12888,7 +12929,6 @@ var TObject(Obj3dList[i]).Free; end; - Obj3dList.Free; //собрать СКС-объекты, которые задел сдвиг SCSObjList := TList.Create; @@ -13032,8 +13072,46 @@ var end; //3D 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; + end; // begin @@ -23717,6 +23795,10 @@ begin exit; xGLObject := nil; xConn := aObj; + //Tolik 03/07/2025 -- проверка на вылет за пределы Када + if not CheckCanMoveConnector(xConn, dp) then + exit; + // if not CheckCanMoveConn(aObj) then exit; // Tolik 26/04/2018 -- @@ -24962,6 +25044,45 @@ begin LineCubeList.free; 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; var i: integer; diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..3a5bf6f --- /dev/null +++ b/readme.txt @@ -0,0 +1 @@ +тут РґРѕ изменения UNDO перед 3Р”, чтобы потом РЅРѕСЂРј восстановить, так как придется внести слишком РјРЅРѕРіРѕ изменений \ No newline at end of file