mirror of
http://gitlab.expertsoft.com.ua/git/expertcad
synced 2026-01-12 00:45:40 +02:00
2513 lines
88 KiB
ObjectPascal
2513 lines
88 KiB
ObjectPascal
unit U_TrunkSCS;
|
|
|
|
interface
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, ExtCtrls, PCPanel, PCDrawBox, PCDrawing, DrawEngine, PowerCad, StdCtrls,
|
|
pcMsbar, ComCtrls, ToolWin, PCTypesUtils, DrawObjects, Menus, DlgBase, ExtDlgs,
|
|
PCLayerDlg, OleCtnrs, U_Common_Classes, buttons, PCgui, GuiStrings, Math, RichForm, Contnrs, U_ESCadClasess, FastStrings;
|
|
|
|
|
|
Type
|
|
TCADCrossObject = class(TMyObject)
|
|
private
|
|
FComponTypeSysName: String;
|
|
FComponNameMark: String;
|
|
FComponNameShort: String;
|
|
FID: Integer;
|
|
FObjectID: Integer;
|
|
FListID: Integer;
|
|
protected
|
|
FElements: TObjectList;
|
|
public
|
|
property ComponTypeSysName: String read FComponTypeSysName write FComponTypeSysName;
|
|
property ComponNameMark: String read FComponNameMark write FComponNameMark;
|
|
property ComponNameShort: String read FComponNameShort write FComponNameShort;
|
|
property Elements: TObjectList read FElements write FElements;
|
|
property ID: Integer read FID write FID;
|
|
property ObjectID: Integer read FObjectID write FObjectID;
|
|
property ListID: Integer read FListID write FListID;
|
|
|
|
procedure Assign(ACADCrossObject: TCADCrossObject);
|
|
procedure AssignOnlyCADCrossObject(ACADCrossObject: TCADCrossObject);
|
|
procedure AssignElements(AElements: TObjectList);
|
|
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
end;
|
|
|
|
TCADCrossObjectElement = class(TMyObject)
|
|
private
|
|
FNpp: String;
|
|
FCableCapacity: Integer; // Åìêîñòü êàáåëÿ
|
|
FCableNameMark: String;
|
|
FCableDiameter: Double;
|
|
FID: Integer;
|
|
FIDCADCrossObject: Integer;
|
|
//FIDInterface: Integer;
|
|
FIDComponent: Integer;
|
|
FSignType: Integer;
|
|
FConnectingTraceID: Integer;
|
|
// for CAD
|
|
FAngle: Double;
|
|
FInPointX: Double;
|
|
FInPointY: Double;
|
|
public
|
|
property Npp: String read FNpp write FNpp;
|
|
property CableCapacity: Integer read FCableCapacity write FCableCapacity;
|
|
property CableNameMark: String read FCableNameMark write FCableNameMark;
|
|
property CableDiameter: Double read FCableDiameter write FCableDiameter;
|
|
property ID: Integer read FID write FID;
|
|
property IDCADCrossObject: Integer read FIDCADCrossObject write FIDCADCrossObject;
|
|
//property IDInterface: Integer read FIDInterface write FIDInterface;
|
|
property IDComponent: Integer read FIDComponent write FIDComponent;
|
|
property SignType: Integer read FSignType write FSignType;
|
|
property ConnectingTraceID: Integer read FConnectingTraceID write FConnectingTraceID;
|
|
// for CAD
|
|
property Angle: Double read FAngle write FAngle;
|
|
property InPointX: Double read FInPointX write FInPointX;
|
|
property InPointY: Double read FInPointY write FInPointY;
|
|
|
|
procedure Assign(ACADCrossObjectElement: TCADCrossObjectElement);
|
|
constructor Create;
|
|
destructor destroy; override;
|
|
end;
|
|
|
|
procedure CreateCadCrossATS(aObject: TConnectorObject; aCadCrossObject: TCADCrossObject);
|
|
procedure ReCreateCadCrossATS(aListID, aObjectID: Integer; aCadCrossObject: TCADCrossObject);
|
|
function CheckCadCrossATSTextFields(aCadCrossObject: TCADCrossObject): Double;
|
|
|
|
procedure CreateCadDistribCab(aObject: TConnectorObject; aCadCrossObject: TCADCrossObject);
|
|
procedure ReCreateCadDistribCab(aListID, aObjectID: Integer; aCadCrossObject: TCADCrossObject);
|
|
function CheckCadDistribCabTextFields(aCadCrossObject: TCADCrossObject): Double;
|
|
|
|
function DrawTextToField(aFieldBnd: TDoubleRect; aText: TStringList; aCrossType: string; aTextColor: Integer; aTextWidth: Integer): TRichText;
|
|
// âðàùåíèå
|
|
procedure RotateTrunkObject(aObject: TConnectorObject; aAngleDegree: Double);
|
|
// ïåðåìåùåíèå
|
|
procedure AfterMoveTrunkObject(aObject: TConnectorObject; adeltax, adeltay: Double);
|
|
// óäàëåíèå
|
|
procedure DeleteTrunkObject(aObject: TConnectorObject);
|
|
// òðàññèðîâêà
|
|
Function TracingTrunkToEndPoint(ACurrentWS, AEndPoint: TConnectorObject; AID_Cable: Integer): Boolean;
|
|
// îïðåäåëèòü êàêóþá ïîçèöèþ èìååò äàííàÿ òðàññà
|
|
Function GetPosOfConnectingTrace(aListID, aObjectID: Integer): Integer;
|
|
// óäàëèòü ñâÿçóþùèå òðàññû
|
|
procedure DeleteConnectingTraces(aObject: TConnectorObject);
|
|
// ìîæíî ëè óäàëÿòü
|
|
function CheckCannotDelete(aFigure: TFigure): Boolean;
|
|
// ïîëó÷èòü ñâÿçóþùóþ òðàññó ïî ïîçèöèè
|
|
Function GetConnectingTraceByPos(aObject: TConnectorObject; aPos: Integer): TOrthoLine;
|
|
// ïåðåêîííåêòèòü ñâÿçóþùèå ïîñëå çåðêàëüíîãî îòîáðàæåíèÿ
|
|
procedure AfterMirrorTrunkObject(aObject: TConnectorObject);
|
|
// ïåðåìåñòèòü ñâÿçóþùèå òðàññû ïîñëå çåðêàëüíîãî îòîáðàæåíèÿ
|
|
procedure MoveMirrorLineForCrossATS(aLine: TLine; aAngle: Double);
|
|
procedure MoveMirrorLineForDistribCab(aLine: TLine; aAngle: Double);
|
|
// ïîëó÷èòü ñïèñîê âñåõ ñâÿçóþùèõ òðàññ îò îáúåêòà
|
|
function GetAllConnectingTraces(aObject: TConnectorObject): TList;
|
|
|
|
// Ðåäàêòèðîâàíèå èíòåðôåéñîâ
|
|
procedure ChangeCrossATSInterf(aListID, aObjectID: Integer; aCadCrossObject: TCADCrossObject);
|
|
procedure ChangeDistribCabInterf(aListID, aObjectID: Integer; aCadCrossObject: TCADCrossObject);
|
|
// åñòü ëè ýòà ñâÿçóþùàÿ â íîâîé ñòðóêòóðå
|
|
function ExistInNewTrunkStruct(aTrace: TOrthoLine; aElements: TObjectList): Boolean;
|
|
|
|
|
|
implementation
|
|
uses
|
|
U_Common, U_CAD, USCS_Main, U_Main, Types, U_BaseCommon, U_SCSComponent, U_SCSLists, U_Constants;
|
|
|
|
procedure CreateCadCrossATS(aObject: TConnectorObject; aCadCrossObject: TCADCrossObject);
|
|
var
|
|
i, j: integer;
|
|
LHandle: Integer;
|
|
FigGroup: TFigureGrpMod;
|
|
MarkSize: Double;
|
|
ColSize: Double;
|
|
RowSize: Double;
|
|
ColCount: Integer;
|
|
RowCount: Integer;
|
|
Mark: string;
|
|
w, h: Double;
|
|
BeginPoint: TDoublePoint;
|
|
Bnd: TDoubleRect;
|
|
FieldBnd: TDoubleRect;
|
|
StrFields: TStringList;
|
|
TextField: TRichText;
|
|
CadCrossObjectElement: TCADCrossObjectElement;
|
|
PointTo: TDoublePoint;
|
|
ConnectedLine: TOrthoLine;
|
|
ConnectedConn1, ConnectedConn2: TConnectorObject;
|
|
ObjParams: TObjectParams;
|
|
|
|
ObjectRect: TRectangle;
|
|
InterfRect: TRectangle;
|
|
Line: TLine;
|
|
PenStyle: TpenStyle;
|
|
PenColor: Integer;
|
|
PenWidth: Integer;
|
|
SendTextColor: Integer;
|
|
OldTick, NewTick, ResTime: Cardinal;
|
|
begin
|
|
try
|
|
aObject.ActualZOrder[1] := 0;
|
|
|
|
if aObject.FObjectType = 1 then
|
|
begin
|
|
if GCadForm.FPrintType = pt_Black then
|
|
begin
|
|
PenStyle := psDash;
|
|
PenColor := clBlack;
|
|
PenWidth := 2;
|
|
SendTextColor := clBlack;
|
|
end;
|
|
if GCadForm.FPrintType = pt_Color then
|
|
begin
|
|
PenStyle := psDash;
|
|
PenColor := clRed;
|
|
PenWidth := 1;
|
|
SendTextColor := clRed;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
PenWidth := 1;
|
|
PenStyle := psSolid;
|
|
PenColor := clBlack;
|
|
SendTextColor := clBlack;
|
|
end;
|
|
|
|
LHandle := GCadForm.PCad.GetLayerHandle(2);
|
|
FigGroup := TFigureGrpMod.create(LHandle, GCadForm.PCad);
|
|
BeginPoint := DoublePoint(-100, -100);
|
|
|
|
// Check Textes Widths
|
|
ColSize := CheckCadCrossATSTextFields(aCadCrossObject);
|
|
RowSize := 4;
|
|
Mark := aCadCrossObject.ComponNameMark;
|
|
ColCount := 4;
|
|
RowCount := aCadCrossObject.Elements.Count + 2;
|
|
w := ColSize * ColCount;
|
|
h := RowSize * RowCount;
|
|
// íà÷åðòèòü òàáëèöó
|
|
ObjectRect := TRectangle.create(BeginPoint.x, BeginPoint.y, BeginPoint.x + w, BeginPoint.y + h, 1, ord(psClear), clNone, ord(bsClear), clNone, LHandle, mydsNormal, GCadForm.PCad);
|
|
FigGroup.AddFigure(ObjectRect);
|
|
// âåðòèêàëè
|
|
for i := 1 to ColCount - 1 do
|
|
begin
|
|
Line := TLine.create(BeginPoint.x + ColSize * i, BeginPoint.y + RowSize,
|
|
BeginPoint.x + ColSize * i, BeginPoint.y + h, PenWidth, ord(PenStyle), PenColor, 0, LHandle, mydsNormal, GCadForm.PCad);
|
|
FigGroup.AddFigure(Line);
|
|
end;
|
|
// ãîðèçîíòàëè
|
|
for i := 0 to RowCount - 1 do
|
|
begin
|
|
InterfRect := TRectangle.create(BeginPoint.x, BeginPoint.y + RowSize * i, BeginPoint.x + w, BeginPoint.y + RowSize * (i + 1),
|
|
PenWidth, ord(PenStyle), PenColor, ord(bsClear), clNone, LHandle, mydsNormal, GCadForm.PCad);
|
|
FigGroup.AddFigure(InterfRect);
|
|
end;
|
|
// çàêèíóòü òåêñòîâûå ïîëÿ
|
|
// ìàðêèðîâêà
|
|
Bnd := FigGroup.GetBoundRect;
|
|
StrFields := TStringList.Create;
|
|
StrFields.Add(aCadCrossObject.ComponNameMark);
|
|
StrFields.Add(aCadCrossObject.ComponNameShort);
|
|
|
|
FieldBnd.Top := Bnd.Top - RowSize;
|
|
FieldBnd.Bottom := FieldBnd.Top + RowSize * 2;
|
|
FieldBnd.Left := Bnd.Left;
|
|
FieldBnd.Right := FieldBnd.Left + w;
|
|
TextField := DrawTextToField(FieldBnd, StrFields, ctsnCrossATS, SendTextColor, PenWidth);
|
|
|
|
FigGroup.AddFigure(TextField);
|
|
FreeAndNil(StrFields);
|
|
// øàïêà
|
|
for i := 0 to ColCount - 1 do
|
|
begin
|
|
StrFields := TStringList.Create;
|
|
if i = 0 then
|
|
begin
|
|
StrFields.Add(cTrunkSCS_Mes1);
|
|
StrFields.Add(cTrunkSCS_Mes2);
|
|
end;
|
|
if i = 1 then
|
|
begin
|
|
StrFields.Add(cTrunkSCS_Mes3);
|
|
StrFields.Add(cTrunkSCS_Mes4);
|
|
end;
|
|
if i = 2 then
|
|
begin
|
|
StrFields.Add(cTrunkSCS_Mes5);
|
|
StrFields.Add(cTrunkSCS_Mes6);
|
|
end;
|
|
if i = 3 then
|
|
begin
|
|
StrFields.Add(cTrunkSCS_Mes7);
|
|
StrFields.Add(cTrunkSCS_Mes8);
|
|
end;
|
|
FieldBnd.Top := Bnd.Top + RowSize;
|
|
FieldBnd.Bottom := FieldBnd.Top + RowSize;
|
|
FieldBnd.Left := Bnd.Left + ColSize * i;
|
|
FieldBnd.Right := FieldBnd.Left + ColSize;
|
|
TextField := DrawTextToField(FieldBnd, StrFields, ctsnCrossATS, SendTextColor, PenWidth);
|
|
|
|
FigGroup.AddFigure(TextField);
|
|
FreeAndNil(StrFields);
|
|
end;
|
|
|
|
// îñíîâíûå ïîëÿ
|
|
for i := 0 to aCadCrossObject.Elements.Count - 1 do
|
|
begin
|
|
CadCrossObjectElement := TCADCrossObjectElement(aCadCrossObject.Elements[i]);
|
|
if aObject.FObjectType = 1 then
|
|
begin
|
|
if GCadForm.FPrintType = pt_Black then
|
|
begin
|
|
PenWidth := 2;
|
|
SendTextColor := clBlack;
|
|
end;
|
|
if GCadForm.FPrintType = pt_Color then
|
|
begin
|
|
PenWidth := 1;
|
|
SendTextColor := clRed;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
if CadCrossObjectElement.FSignType = 1 then
|
|
begin
|
|
if GCadForm.FPrintType = pt_Black then
|
|
begin
|
|
PenWidth := 2;
|
|
SendTextColor := clBlack;
|
|
end;
|
|
if GCadForm.FPrintType = pt_Color then
|
|
begin
|
|
PenWidth := 1;
|
|
SendTextColor := clRed;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
PenWidth := 1;
|
|
SendTextColor := clBlack;
|
|
end;
|
|
end;
|
|
|
|
for j := 0 to ColCount - 1 do
|
|
begin
|
|
StrFields := TStringList.Create;
|
|
if j = 0 then
|
|
StrFields.Add(CadCrossObjectElement.Npp);
|
|
if j = 1 then
|
|
StrFields.Add(IntToStr(CadCrossObjectElement.CableCapacity));
|
|
if j = 2 then
|
|
StrFields.Add(CadCrossObjectElement.CableNameMark);
|
|
if j = 3 then
|
|
StrFields.Add(FormatFloat(ffMask, CadCrossObjectElement.CableDiameter));
|
|
|
|
FieldBnd.Top := Bnd.Top + RowSize * (i + 2);
|
|
FieldBnd.Bottom := FieldBnd.Top + RowSize;
|
|
FieldBnd.Left := Bnd.Left + ColSize * j;
|
|
FieldBnd.Right := FieldBnd.Left + ColSize;
|
|
TextField := DrawTextToField(FieldBnd, StrFields, ctsnCrossATS, SendTextColor, PenWidth);
|
|
|
|
FigGroup.AddFigure(TextField);
|
|
FreeAndNil(StrFields);
|
|
end;
|
|
|
|
end;
|
|
|
|
// Ñîçäàòü ñàì îáúåêò
|
|
aObject.DrawFigure := FigGroup;
|
|
Bnd := aObject.DrawFigure.GetBoundRect;
|
|
aObject.GrpSizeX := Bnd.Right - Bnd.Left;
|
|
aObject.GrpSizeY := Bnd.Bottom - Bnd.Top;
|
|
Bnd := ObjectRect.GetBoundRect;
|
|
RefreshCAD(GCadForm.PCad);
|
|
|
|
// ñîçäàòü îòðåçêè òðàññ ê íåìó
|
|
PointTo.x := Bnd.Left;
|
|
for i := 0 to aCadCrossObject.Elements.Count - 1 do
|
|
begin
|
|
// OldTick := GetTickCount;
|
|
PointTo.y := Bnd.Top + (RowSize * 2) + RowSize / 2;
|
|
PointTo.y := PointTo.y + RowSize * i;
|
|
|
|
// ñîçäàòü ïðèñîåäèíåííûé êîííåêòîð
|
|
ConnectedConn1 := TConnectorObject.Create(PointTo.x - 5, PointTo.y, 0, LHandle, mydsNormal, GCadForm.PCad);
|
|
ConnectedConn1.ConnectorType := ct_Clear;
|
|
GCadForm.PCad.AddCustomFigure (2, ConnectedConn1, False);
|
|
ConnectedConn1.Name := cTrunkSCS_Mes9;
|
|
SetNewObjectNameInPM(ConnectedConn1.ID, ConnectedConn1.Name);
|
|
ObjParams := GetFigureParams(ConnectedConn1.ID);
|
|
ConnectedConn1.Name := ObjParams.Name;
|
|
ConnectedConn1.FIndex := ObjParams.MarkID;
|
|
SetConFigureCoordZInPM(ConnectedConn1.ID, ConnectedConn1.ActualZOrder[1]);
|
|
|
|
ConnectedConn2 := TConnectorObject.Create(PointTo.x, PointTo.y, 0, LHandle, mydsNormal, GCadForm.PCad);
|
|
ConnectedConn2.ConnectorType := ct_Clear;
|
|
GCadForm.PCad.AddCustomFigure (2, ConnectedConn2, False);
|
|
ConnectedConn2.Name := cTrunkSCS_Mes9;
|
|
SetNewObjectNameInPM(ConnectedConn2.ID, ConnectedConn2.Name);
|
|
ObjParams := GetFigureParams(ConnectedConn2.ID);
|
|
ConnectedConn2.Name := ObjParams.Name;
|
|
ConnectedConn2.FIndex := ObjParams.MarkID;
|
|
SetConFigureCoordZInPM(ConnectedConn2.ID, ConnectedConn2.ActualZOrder[1]);
|
|
|
|
ConnectedLine := TOrthoLine.create(ConnectedConn1.ActualPoints[1].x, ConnectedConn1.ActualPoints[1].y, 0,
|
|
ConnectedConn2.ActualPoints[1].x, ConnectedConn2.ActualPoints[1].y, 0,
|
|
1, ord(PenStyle), clBlack, 0, LHandle, mydsNormal, GCadForm.PCad);
|
|
GCadForm.PCad.AddCustomFigure(2, ConnectedLine, False);
|
|
SetConFigureCoordZInPM(ConnectedLine.ID, ConnectedLine.ActualZOrder[1]);
|
|
ConnectedLine.SetJConnector1(TConnectorObject(ConnectedConn1));
|
|
ConnectedLine.SetJConnector2(TConnectorObject(ConnectedConn2));
|
|
|
|
// SnapConnectorToPointObject(ConnectedConn2, aObject, False);
|
|
|
|
ConnectedConn2.JoinedConnectorsList.Add(aObject);
|
|
aObject.JoinedConnectorsList.Add(ConnectedConn2);
|
|
DeleteObjectFromPM(ConnectedConn2.ID, ConnectedConn2.Name);
|
|
// Locks
|
|
|
|
ConnectedConn2.LockSelect := True;
|
|
ConnectedConn2.LockMove := True;
|
|
ConnectedConn2.LockModify := True;
|
|
ConnectedLine.FConnectingLine := True;
|
|
ConnectedLine.FConnectingPos := i;
|
|
TCADCrossObjectElement(aCadCrossObject.Elements[i]).ConnectingTraceID := ConnectedLine.ID;
|
|
|
|
// ResTime := GetTickCount - OldTick;
|
|
// ShowMessage(FloatToStr(ResTime));
|
|
end;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.CreateCadCrossATS', E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure CreateCadDistribCab(aObject: TConnectorObject; aCadCrossObject: TCADCrossObject);
|
|
var
|
|
i, j: integer;
|
|
LHandle: Integer;
|
|
FigGroup: TFigureGrpMod;
|
|
ColSize: Double;
|
|
TopSize: Double;
|
|
BottomSize: Double;
|
|
ColCount: Integer;
|
|
Mark: string;
|
|
w, h: Double;
|
|
BeginPoint: TDoublePoint;
|
|
Bnd: TDoubleRect;
|
|
TextField: TRichText;
|
|
StrFields: TStringList;
|
|
FieldBnd: TDoubleRect;
|
|
CadCrossObjectElement: TCADCrossObjectElement;
|
|
PointTo: TDoublePoint;
|
|
ConnectedLine: TOrthoLine;
|
|
ConnectedConn1, ConnectedConn2: TConnectorObject;
|
|
ObjParams: TObjectParams;
|
|
|
|
ObjectRect: TRectangle;
|
|
InterfRect: TRectangle;
|
|
Line: TLine;
|
|
PenStyle: TPenStyle;
|
|
PenColor: Integer;
|
|
PenWidth: Integer;
|
|
begin
|
|
try
|
|
if aObject.FObjectType = 1 then
|
|
begin
|
|
if GCadForm.FPrintType = pt_Black then
|
|
begin
|
|
PenWidth := 2;
|
|
PenStyle := psDash;
|
|
PenColor := clBlack;
|
|
end;
|
|
if GCadForm.FPrintType = pt_Color then
|
|
begin
|
|
PenWidth := 1;
|
|
PenStyle := psDash;
|
|
PenColor := clRed;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
PenWidth := 1;
|
|
PenStyle := psSolid;
|
|
PenColor := clBlack;
|
|
end;
|
|
|
|
LHandle := GCadForm.PCad.GetLayerHandle(2);
|
|
FigGroup := TFigureGrpMod.create(LHandle, GCadForm.PCad);
|
|
BeginPoint := DoublePoint(-100, -100);
|
|
|
|
ColSize := CheckCadDistribCabTextFields(aCadCrossObject);
|
|
TopSize := 8;
|
|
BottomSize := 3;
|
|
Mark := aCadCrossObject.ComponNameMark;
|
|
ColCount := aCadCrossObject.Elements.Count;
|
|
w := ColCount * ColSize;
|
|
h := TopSize + BottomSize;
|
|
ObjectRect := TRectangle.create(BeginPoint.x, BeginPoint.y, BeginPoint.x + w, BeginPoint.y + h, 1, ord(psClear), clNone, ord(bsClear), clNone, LHandle, mydsNormal, GCadForm.PCad);
|
|
FigGroup.AddFigure(ObjectRect);
|
|
|
|
// ãîðèçîíòàëè
|
|
InterfRect := TRectangle.create(BeginPoint.x, BeginPoint.y + TopSize, BeginPoint.x + w, BeginPoint.y + h,
|
|
PenWidth, ord(PenStyle), PenColor, ord(bsClear), clNone, LHandle, mydsNormal, GCadForm.PCad);
|
|
FigGroup.AddFigure(InterfRect);
|
|
// âåðòèêàëè
|
|
for i := 0 to ColCount - 1 do
|
|
begin
|
|
CadCrossObjectElement := TCADCrossObjectElement(aCadCrossObject.Elements[i]);
|
|
if aObject.FObjectType = 1 then
|
|
begin
|
|
if GCadForm.FPrintType = pt_Black then
|
|
begin
|
|
PenWidth := 2;
|
|
PenStyle := psDash;
|
|
PenColor := clBlack;
|
|
end;
|
|
if GCadForm.FPrintType = pt_Color then
|
|
begin
|
|
PenWidth := 1;
|
|
PenStyle := psDash;
|
|
PenColor := clRed;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
if CadCrossObjectElement.FSignType = 1 then
|
|
begin
|
|
if GCadForm.FPrintType = pt_Black then
|
|
begin
|
|
PenWidth := 2;
|
|
PenStyle := psDash;
|
|
PenColor := clBlack;
|
|
end;
|
|
if GCadForm.FPrintType = pt_Color then
|
|
begin
|
|
PenWidth := 1;
|
|
PenStyle := psDash;
|
|
PenColor := clRed;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
PenWidth := 1;
|
|
PenStyle := psSolid;
|
|
PenColor := clBlack;
|
|
end;
|
|
end;
|
|
|
|
InterfRect := TRectangle.create(BeginPoint.x + ColSize * i, BeginPoint.y, BeginPoint.x + ColSize * (i + 1), BeginPoint.y + TopSize,
|
|
PenWidth, ord(PenStyle), PenColor, ord(bsClear), clNone, LHandle, mydsNormal, GCadForm.PCad);
|
|
FigGroup.AddFigure(InterfRect);
|
|
end;
|
|
|
|
// çàêèíóòü òåêñòîâûå ïîëÿ
|
|
// ìàðêèðîâêà
|
|
Bnd := FigGroup.GetBoundRect;
|
|
StrFields := TStringList.Create;
|
|
StrFields.Add(aCadCrossObject.ComponNameMark);
|
|
StrFields.Add(aCadCrossObject.ComponNameShort);
|
|
|
|
FieldBnd.Top := Bnd.Top + TopSize;
|
|
FieldBnd.Bottom := FieldBnd.Top + BottomSize * 2;
|
|
FieldBnd.Left := Bnd.Left;
|
|
FieldBnd.Right := FieldBnd.Left + w;
|
|
TextField := DrawTextToField(FieldBnd, StrFields, ctsnDistributionCabinet, clBlack, 1);
|
|
FigGroup.AddFigure(TextField);
|
|
FreeAndNil(StrFields);
|
|
|
|
// ñîçäàòü ñàì îáúåêò
|
|
aObject.DrawFigure := FigGroup;
|
|
Bnd := aObject.DrawFigure.GetBoundRect;
|
|
aObject.GrpSizeX := Bnd.Right - Bnd.Left;
|
|
aObject.GrpSizeY := Bnd.Bottom - Bnd.Top;
|
|
Bnd := ObjectRect.GetBoundRect;
|
|
RefreshCAD(GCadForm.PCad);
|
|
|
|
// ñîçäàòü îòðåçêè òðàññ ê íåìó
|
|
PointTo.y := Bnd.Top;
|
|
for i := 0 to aCadCrossObject.Elements.Count - 1 do
|
|
begin
|
|
PointTo.x := Bnd.Left + ColSize / 2;
|
|
PointTo.x := PointTo.x + ColSize * i;
|
|
|
|
// ñîçäàòü ïðèñîåäèíåííûé êîííåêòîð
|
|
ConnectedConn1 := TConnectorObject.Create(PointTo.x, PointTo.y - 5, 0, LHandle, mydsNormal, GCadForm.PCad);
|
|
ConnectedConn1.ConnectorType := ct_Clear;
|
|
GCadForm.PCad.AddCustomFigure (2, ConnectedConn1, False);
|
|
ConnectedConn1.Name := cTrunkSCS_Mes9;
|
|
SetNewObjectNameInPM(ConnectedConn1.ID, ConnectedConn1.Name);
|
|
ObjParams := GetFigureParams(ConnectedConn1.ID);
|
|
ConnectedConn1.Name := ObjParams.Name;
|
|
ConnectedConn1.FIndex := ObjParams.MarkID;
|
|
SetConFigureCoordZInPM(ConnectedConn1.ID, ConnectedConn1.ActualZOrder[1]);
|
|
|
|
ConnectedConn2 := TConnectorObject.Create(PointTo.x, PointTo.y, 0, LHandle, mydsNormal, GCadForm.PCad);
|
|
ConnectedConn2.ConnectorType := ct_Clear;
|
|
GCadForm.PCad.AddCustomFigure (2, ConnectedConn2, False);
|
|
ConnectedConn2.Name := cTrunkSCS_Mes9;
|
|
SetNewObjectNameInPM(ConnectedConn2.ID, ConnectedConn2.Name);
|
|
ObjParams := GetFigureParams(ConnectedConn2.ID);
|
|
ConnectedConn2.Name := ObjParams.Name;
|
|
ConnectedConn2.FIndex := ObjParams.MarkID;
|
|
SetConFigureCoordZInPM(ConnectedConn2.ID, ConnectedConn2.ActualZOrder[1]);
|
|
|
|
ConnectedLine := TOrthoLine.create(ConnectedConn1.ActualPoints[1].x, ConnectedConn1.ActualPoints[1].y, 0,
|
|
ConnectedConn2.ActualPoints[1].x, ConnectedConn2.ActualPoints[1].y, 0,
|
|
1, ord(PenStyle), clBlack, 0, LHandle, mydsNormal, GCadForm.PCad);
|
|
GCadForm.PCad.AddCustomFigure(2, ConnectedLine, False);
|
|
SetConFigureCoordZInPM(ConnectedLine.ID, ConnectedLine.ActualZOrder[1]);
|
|
ConnectedLine.SetJConnector1(TConnectorObject(ConnectedConn1));
|
|
ConnectedLine.SetJConnector2(TConnectorObject(ConnectedConn2));
|
|
|
|
// SnapConnectorToPointObject(ConnectedConn2, aObject, False);
|
|
|
|
ConnectedConn2.JoinedConnectorsList.Add(aObject);
|
|
aObject.JoinedConnectorsList.Add(ConnectedConn2);
|
|
DeleteObjectFromPM(ConnectedConn2.ID, ConnectedConn2.Name);
|
|
|
|
// Locks
|
|
ConnectedConn2.LockSelect := True;
|
|
ConnectedConn2.LockMove := True;
|
|
ConnectedConn2.LockModify := True;
|
|
|
|
ConnectedLine.FConnectingLine := True;
|
|
ConnectedLine.FConnectingPos := i;
|
|
// ñîõðàíèòü ÈÄ ñâÿçóþùåé òðàññû
|
|
TCADCrossObjectElement(aCadCrossObject.Elements[i]).ConnectingTraceID := ConnectedLine.ID;
|
|
end;
|
|
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.CreateCadDistribCab', E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure ReCreateCadCrossATS(aListID, aObjectID: Integer; aCadCrossObject: TCADCrossObject);
|
|
var
|
|
i, j: integer;
|
|
LHandle: Integer;
|
|
FigGroup: TFigureGrpMod;
|
|
MarkSize: Double;
|
|
ColSize: Double;
|
|
RowSize: Double;
|
|
ColCount: Integer;
|
|
RowCount: Integer;
|
|
Mark: string;
|
|
w, h: Double;
|
|
BeginPoint, CP: TDoublePoint;
|
|
Bnd: TDoubleRect;
|
|
FieldBnd: TDoubleRect;
|
|
StrFields: TStringList;
|
|
TextField: TRichText;
|
|
CadCrossObjectElement: TCADCrossObjectElement;
|
|
vList: TF_CAD;
|
|
vObject: TConnectorObject;
|
|
vMirrored: Boolean;
|
|
ElementsRects: TList;
|
|
getAngle: Double;
|
|
|
|
ObjectRect: TRectangle;
|
|
InterfRect: TRectangle;
|
|
Line, Line1, Line2: TLine;
|
|
PenStyle: TpenStyle;
|
|
PenColor: Integer;
|
|
PenWidth: Integer;
|
|
SendTextColor: Integer;
|
|
begin
|
|
try
|
|
vList := GetListByID(aListID);
|
|
if vList = nil then
|
|
Exit;
|
|
vObject := TConnectorObject(GetFigureByID(vList, aObjectID));
|
|
if vObject = nil then
|
|
Exit;
|
|
|
|
ElementsRects := TList.Create;
|
|
vMirrored := vObject.FMirrored;
|
|
if vObject.FObjectType = 1 then
|
|
begin
|
|
if GCadForm.FPrintType = pt_Black then
|
|
begin
|
|
PenWidth := 2;
|
|
PenStyle := psDash;
|
|
PenColor := clBlack;
|
|
SendTextColor := clBlack;
|
|
end;
|
|
if GCadForm.FPrintType = pt_Color then
|
|
begin
|
|
PenWidth := 1;
|
|
PenStyle := psDash;
|
|
PenColor := clRed;
|
|
SendTextColor := clRed;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
PenWidth := 1;
|
|
PenStyle := psSolid;
|
|
PenColor := clBlack;
|
|
SendTextColor := clBlack;
|
|
end;
|
|
|
|
LHandle := vList.PCad.GetLayerHandle(2);
|
|
FigGroup := TFigureGrpMod.create(LHandle, vList.PCad);
|
|
BeginPoint := DoublePoint(-100, -100);
|
|
|
|
// Check Textes Widths
|
|
ColSize := CheckCadCrossATSTextFields(aCadCrossObject);
|
|
RowSize := 4;
|
|
Mark := aCadCrossObject.ComponNameMark;
|
|
ColCount := 4;
|
|
RowCount := aCadCrossObject.Elements.Count + 2;
|
|
w := ColSize * ColCount;
|
|
h := RowSize * RowCount;
|
|
|
|
// íà÷åðòèòü òàáëèöó
|
|
ObjectRect := TRectangle.create(BeginPoint.x, BeginPoint.y, BeginPoint.x + w, BeginPoint.y + h, 1, ord(psClear), clNone, ord(bsClear), clNone, LHandle, mydsNormal, vList.PCad);
|
|
FigGroup.AddFigure(ObjectRect);
|
|
// âåðòèêàëè
|
|
for i := 1 to ColCount - 1 do
|
|
begin
|
|
Line := TLine.create(BeginPoint.x + ColSize * i, BeginPoint.y + RowSize,
|
|
BeginPoint.x + ColSize * i, BeginPoint.y + h, PenWidth, ord(PenStyle), PenColor, 0, LHandle, mydsNormal, vList.PCad);
|
|
FigGroup.AddFigure(Line);
|
|
end;
|
|
|
|
// ãîðèçîíòàëè
|
|
for i := 0 to RowCount - 1 do
|
|
begin
|
|
InterfRect := TRectangle.create(BeginPoint.x, BeginPoint.y + RowSize * i, BeginPoint.x + w, BeginPoint.y + RowSize * (i + 1),
|
|
PenWidth, ord(PenStyle), PenColor, ord(bsClear), clNone, LHandle, mydsNormal, GCadForm.PCad);
|
|
FigGroup.AddFigure(InterfRect);
|
|
if i >= 2 then
|
|
ElementsRects.Add(InterfRect);
|
|
end;
|
|
Line := TLine.create(BeginPoint.x, BeginPoint.y + RowSize * RowCount,
|
|
BeginPoint.x + w, BeginPoint.y + RowSize * RowCount, PenWidth, ord(PenStyle), clBlack, 0, LHandle, mydsNormal, vList.PCad);
|
|
FigGroup.AddFigure(Line);
|
|
ElementsRects.Add(Line);
|
|
|
|
// çàêèíóòü òåêñòîâûå ïîëÿ
|
|
// ìàðêèðîâêà
|
|
Bnd := FigGroup.GetBoundRect;
|
|
StrFields := TStringList.Create;
|
|
StrFields.Add(aCadCrossObject.ComponNameMark);
|
|
StrFields.Add(aCadCrossObject.ComponNameShort);
|
|
|
|
FieldBnd.Top := Bnd.Top - RowSize;
|
|
FieldBnd.Bottom := FieldBnd.Top + RowSize * 2;
|
|
FieldBnd.Left := Bnd.Left;
|
|
FieldBnd.Right := FieldBnd.Left + w;
|
|
TextField := DrawTextToField(FieldBnd, StrFields, ctsnCrossATS, SendTextColor, PenWidth);
|
|
FigGroup.AddFigure(TextField);
|
|
FreeAndNil(StrFields);
|
|
// øàïêà
|
|
for i := 0 to ColCount - 1 do
|
|
begin
|
|
StrFields := TStringList.Create;
|
|
if vMirrored then
|
|
begin
|
|
if i = 3 then
|
|
begin
|
|
StrFields.Add(cTrunkSCS_Mes1);
|
|
StrFields.Add(cTrunkSCS_Mes2);
|
|
end;
|
|
if i = 2 then
|
|
begin
|
|
StrFields.Add(cTrunkSCS_Mes3);
|
|
StrFields.Add(cTrunkSCS_Mes4);
|
|
end;
|
|
if i = 1 then
|
|
begin
|
|
StrFields.Add(cTrunkSCS_Mes5);
|
|
StrFields.Add(cTrunkSCS_Mes6);
|
|
end;
|
|
if i = 0 then
|
|
begin
|
|
StrFields.Add(cTrunkSCS_Mes7);
|
|
StrFields.Add(cTrunkSCS_Mes8);
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
if i = 0 then
|
|
begin
|
|
StrFields.Add(cTrunkSCS_Mes1);
|
|
StrFields.Add(cTrunkSCS_Mes2);
|
|
end;
|
|
if i = 1 then
|
|
begin
|
|
StrFields.Add(cTrunkSCS_Mes3);
|
|
StrFields.Add(cTrunkSCS_Mes4);
|
|
end;
|
|
if i = 2 then
|
|
begin
|
|
StrFields.Add(cTrunkSCS_Mes5);
|
|
StrFields.Add(cTrunkSCS_Mes6);
|
|
end;
|
|
if i = 3 then
|
|
begin
|
|
StrFields.Add(cTrunkSCS_Mes7);
|
|
StrFields.Add(cTrunkSCS_Mes8);
|
|
end;
|
|
end;
|
|
FieldBnd.Top := Bnd.Top + RowSize;
|
|
FieldBnd.Bottom := FieldBnd.Top + RowSize;
|
|
FieldBnd.Left := Bnd.Left + ColSize * i;
|
|
FieldBnd.Right := FieldBnd.Left + ColSize;
|
|
TextField := DrawTextToField(FieldBnd, StrFields, ctsnCrossATS, SendTextColor, PenWidth);
|
|
FigGroup.AddFigure(TextField);
|
|
FreeAndNil(StrFields);
|
|
end;
|
|
// îñíîâíûå ïîëÿ
|
|
for i := 0 to aCadCrossObject.Elements.Count - 1 do
|
|
begin
|
|
CadCrossObjectElement := TCADCrossObjectElement(aCadCrossObject.Elements[i]);
|
|
if vObject.FObjectType = 1 then
|
|
begin
|
|
if GCadForm.FPrintType = pt_Black then
|
|
begin
|
|
PenWidth := 2;
|
|
SendTextColor := clBlack;
|
|
end;
|
|
if GCadForm.FPrintType = pt_Color then
|
|
begin
|
|
PenWidth := 1;
|
|
SendTextColor := clRed;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
if CadCrossObjectElement.FSignType = 1 then
|
|
begin
|
|
if GCadForm.FPrintType = pt_Black then
|
|
begin
|
|
PenWidth := 2;
|
|
SendTextColor := clBlack;
|
|
end;
|
|
if GCadForm.FPrintType = pt_Color then
|
|
begin
|
|
PenWidth := 1;
|
|
SendTextColor := clRed;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
PenWidth := 1;
|
|
SendTextColor := clBlack;
|
|
end;
|
|
end;
|
|
for j := 0 to ColCount - 1 do
|
|
begin
|
|
StrFields := TStringList.Create;
|
|
if vMirrored then
|
|
begin
|
|
if j = 3 then
|
|
StrFields.Add(CadCrossObjectElement.Npp);
|
|
if j = 2 then
|
|
StrFields.Add(IntToStr(CadCrossObjectElement.CableCapacity));
|
|
if j = 1 then
|
|
StrFields.Add(CadCrossObjectElement.CableNameMark);
|
|
if j = 0 then
|
|
StrFields.Add(FormatFloat(ffMask, CadCrossObjectElement.CableDiameter));
|
|
end
|
|
else
|
|
begin
|
|
if j = 0 then
|
|
StrFields.Add(CadCrossObjectElement.Npp);
|
|
if j = 1 then
|
|
StrFields.Add(IntToStr(CadCrossObjectElement.CableCapacity));
|
|
if j = 2 then
|
|
StrFields.Add(CadCrossObjectElement.CableNameMark);
|
|
if j = 3 then
|
|
StrFields.Add(FormatFloat(ffMask, CadCrossObjectElement.CableDiameter));
|
|
end;
|
|
|
|
FieldBnd.Top := Bnd.Top + RowSize * (i + 2);
|
|
FieldBnd.Bottom := FieldBnd.Top + RowSize;
|
|
FieldBnd.Left := Bnd.Left + ColSize * j;
|
|
FieldBnd.Right := FieldBnd.Left + ColSize;
|
|
TextField := DrawTextToField(FieldBnd, StrFields, ctsnCrossATS, SendTextColor, PenWidth);
|
|
FigGroup.AddFigure(TextField);
|
|
FreeAndNil(StrFields);
|
|
end;
|
|
|
|
end;
|
|
|
|
// Ñîçäàòü ñàì îáúåêò
|
|
FigGroup.Rotate(vObject.FDrawFigureAngle, vObject.ActualPoints[1]);
|
|
RemoveInFigureGrp(vObject.DrawFigure);
|
|
vObject.DrawFigure := FigGroup;
|
|
Bnd := vObject.DrawFigure.GetBoundRect;
|
|
vObject.GrpSizeX := Bnd.Right - Bnd.Left;
|
|
vObject.GrpSizeY := Bnd.Bottom - Bnd.Top;
|
|
RefreshCAD(vList.PCad);
|
|
|
|
// çàïîëíèòü ñòðóêòóðó
|
|
for i := 0 to aCadCrossObject.Elements.Count - 1 do
|
|
begin
|
|
CadCrossObjectElement := TCADCrossObjectElement(aCadCrossObject.Elements[i]);
|
|
InterfRect := TRectangle(ElementsRects[i]);
|
|
if vMirrored then
|
|
begin
|
|
CP.x := (InterfRect.ap2.x + InterfRect.ap3.x) / 2;
|
|
CP.y := (InterfRect.ap2.y + InterfRect.ap3.y) / 2;
|
|
getAngle := GetLineAngle(InterfRect.ap2, InterfRect.ap1);
|
|
getAngle := getAngle * pi / 180;
|
|
end
|
|
else
|
|
begin
|
|
CP.x := (InterfRect.ap1.x + InterfRect.ap4.x) / 2;
|
|
CP.y := (InterfRect.ap1.y + InterfRect.ap4.y) / 2;
|
|
getAngle := GetLineAngle(InterfRect.ap1, InterfRect.ap2);
|
|
getAngle := getAngle * pi / 180;
|
|
end;
|
|
CadCrossObjectElement.InPointX := CP.x;
|
|
CadCrossObjectElement.InPointY := CP.y;
|
|
CadCrossObjectElement.Angle := getAngle;
|
|
end;
|
|
FreeAndNil(ElementsRects);
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.ReCreateCadCrossATS', E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure ReCreateCadDistribCab(aListID, aObjectID: Integer; aCadCrossObject: TCADCrossObject);
|
|
var
|
|
i, j: integer;
|
|
LHandle: Integer;
|
|
FigGroup: TFigureGrpMod;
|
|
ColSize: Double;
|
|
TopSize: Double;
|
|
BottomSize: Double;
|
|
ColCount: Integer;
|
|
Mark: string;
|
|
w, h: Double;
|
|
BeginPoint, CP: TDoublePoint;
|
|
Bnd: TDoubleRect;
|
|
|
|
TextField: TRichText;
|
|
StrFields: TStringList;
|
|
FieldBnd: TDoubleRect;
|
|
CadCrossObjectElement: TCADCrossObjectElement;
|
|
vList: TF_CAD;
|
|
vObject: TConnectorObject;
|
|
vMirrored: Boolean;
|
|
ElementsRects: TList;
|
|
getAngle: Double;
|
|
|
|
ObjectRect: TRectangle;
|
|
InterfRect: TRectangle;
|
|
Line, Line1, Line2: TLine;
|
|
PenWidth: Integer;
|
|
PenStyle: TPenStyle;
|
|
PenColor: Integer;
|
|
begin
|
|
try
|
|
vList := GetListByID(aListID);
|
|
if vList = nil then
|
|
Exit;
|
|
vObject := TConnectorObject(GetFigureByID(vList, aObjectID));
|
|
if vObject = nil then
|
|
Exit;
|
|
|
|
ElementsRects := TList.Create;
|
|
vMirrored := vObject.FMirrored;
|
|
|
|
if vObject.FObjectType = 1 then
|
|
begin
|
|
if GCadForm.FPrintType = pt_Black then
|
|
begin
|
|
PenWidth := 2;
|
|
PenStyle := psDash;
|
|
PenColor := clBlack;
|
|
end;
|
|
if GCadForm.FPrintType = pt_Color then
|
|
begin
|
|
PenWidth := 1;
|
|
PenStyle := psDash;
|
|
PenColor := clRed;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
PenWidth := 1;
|
|
PenStyle := psSolid;
|
|
PenColor := clBlack;
|
|
end;
|
|
|
|
LHandle := vList.PCad.GetLayerHandle(2);
|
|
FigGroup := TFigureGrpMod.create(LHandle, vList.PCad);
|
|
BeginPoint := DoublePoint(-100, -100);
|
|
|
|
ColSize := CheckCadDistribCabTextFields(aCadCrossObject);
|
|
TopSize := 8;
|
|
BottomSize := 3;
|
|
Mark := aCadCrossObject.ComponNameMark;
|
|
ColCount := aCadCrossObject.Elements.Count;
|
|
w := ColCount * ColSize;
|
|
h := TopSize + BottomSize;
|
|
ObjectRect := TRectangle.create(BeginPoint.x, BeginPoint.y, BeginPoint.x + w, BeginPoint.y + h, 1, ord(psClear), clNone, ord(bsClear), clNone, LHandle, mydsNormal, vList.PCad);
|
|
FigGroup.AddFigure(ObjectRect);
|
|
|
|
// ãîðèçîíòàëè
|
|
if vMirrored then
|
|
begin
|
|
InterfRect := TRectangle.create(BeginPoint.x, BeginPoint.y, BeginPoint.x + w, BeginPoint.y + BottomSize,
|
|
PenWidth, ord(PenStyle), PenColor, ord(bsClear), clNone, LHandle, mydsNormal, GCadForm.PCad);
|
|
end
|
|
else
|
|
begin
|
|
InterfRect := TRectangle.create(BeginPoint.x, BeginPoint.y + TopSize, BeginPoint.x + w, BeginPoint.y + h,
|
|
PenWidth, ord(PenStyle), PenColor, ord(bsClear), clNone, LHandle, mydsNormal, GCadForm.PCad);
|
|
end;
|
|
FigGroup.AddFigure(InterfRect);
|
|
|
|
// âåðòèêàëè
|
|
for i := 0 to ColCount - 1 do
|
|
begin
|
|
CadCrossObjectElement := TCADCrossObjectElement(aCadCrossObject.Elements[i]);
|
|
if vObject.FObjectType = 1 then
|
|
begin
|
|
if GCadForm.FPrintType = pt_Black then
|
|
begin
|
|
PenWidth := 2;
|
|
PenStyle := psDash;
|
|
PenColor := clBlack;
|
|
end;
|
|
if GCadForm.FPrintType = pt_Color then
|
|
begin
|
|
PenWidth := 1;
|
|
PenStyle := psDash;
|
|
PenColor := clRed;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
if CadCrossObjectElement.FSignType = 1 then
|
|
begin
|
|
if GCadForm.FPrintType = pt_Black then
|
|
begin
|
|
PenWidth := 2;
|
|
PenStyle := psDash;
|
|
PenColor := clBlack;
|
|
end;
|
|
if GCadForm.FPrintType = pt_Color then
|
|
begin
|
|
PenWidth := 1;
|
|
PenStyle := psDash;
|
|
PenColor := clRed;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
PenWidth := 1;
|
|
PenStyle := psSolid;
|
|
PenColor := clBlack;
|
|
end;
|
|
end;
|
|
if vMirrored then
|
|
begin
|
|
InterfRect := TRectangle.create(BeginPoint.x + ColSize * i, BeginPoint.y + BottomSize, BeginPoint.x + ColSize * (i + 1), BeginPoint.y + h,
|
|
PenWidth, ord(PenStyle), PenColor, ord(bsClear), clNone, LHandle, mydsNormal, GCadForm.PCad);
|
|
end
|
|
else
|
|
begin
|
|
InterfRect := TRectangle.create(BeginPoint.x + ColSize * i, BeginPoint.y, BeginPoint.x + ColSize * (i + 1), BeginPoint.y + TopSize,
|
|
PenWidth, ord(PenStyle), PenColor, ord(bsClear), clNone, LHandle, mydsNormal, GCadForm.PCad);
|
|
end;
|
|
FigGroup.AddFigure(InterfRect);
|
|
ElementsRects.Add(InterfRect);
|
|
end;
|
|
|
|
// çàêèíóòü òåêñòîâûå ïîëÿ
|
|
// ìàðêèðîâêà
|
|
Bnd := FigGroup.GetBoundRect;
|
|
StrFields := TStringList.Create;
|
|
|
|
if vMirrored then
|
|
begin
|
|
StrFields.Add(aCadCrossObject.ComponNameShort);
|
|
StrFields.Add(aCadCrossObject.ComponNameMark);
|
|
FieldBnd.Top := Bnd.Top - BottomSize;
|
|
FieldBnd.Bottom := FieldBnd.Top + BottomSize * 2;
|
|
end
|
|
else
|
|
begin
|
|
StrFields.Add(aCadCrossObject.ComponNameMark);
|
|
StrFields.Add(aCadCrossObject.ComponNameShort);
|
|
FieldBnd.Top := Bnd.Top + TopSize;
|
|
FieldBnd.Bottom := FieldBnd.Top + BottomSize * 2;
|
|
end;
|
|
FieldBnd.Left := Bnd.Left;
|
|
FieldBnd.Right := FieldBnd.Left + w;
|
|
TextField := DrawTextToField(FieldBnd, StrFields, ctsnDistributionCabinet, clBlack, 1);
|
|
FigGroup.AddFigure(TextField);
|
|
FreeAndNil(StrFields);
|
|
|
|
FigGroup.Rotate(vObject.FDrawFigureAngle, vObject.ActualPoints[1]);
|
|
// ñîçäàòü ñàì îáúåêò
|
|
RemoveInFigureGrp(vObject.DrawFigure);
|
|
vObject.DrawFigure := FigGroup;
|
|
Bnd := vObject.DrawFigure.GetBoundRect;
|
|
vObject.GrpSizeX := Bnd.Right - Bnd.Left;
|
|
vObject.GrpSizeY := Bnd.Bottom - Bnd.Top;
|
|
RefreshCAD(vList.PCad);
|
|
|
|
// çàïîëíèòü ñòðóêòóðó
|
|
for i := 0 to aCadCrossObject.Elements.Count - 1 do
|
|
begin
|
|
CadCrossObjectElement := TCADCrossObjectElement(aCadCrossObject.Elements[i]);
|
|
InterfRect := TRectangle(ElementsRects[i]);
|
|
if vMirrored then
|
|
begin
|
|
CP.x := (InterfRect.ap4.x + InterfRect.ap3.x) / 2;
|
|
CP.y := (InterfRect.ap4.y + InterfRect.ap3.y) / 2;
|
|
getAngle := GetLineAngle(InterfRect.ap4, InterfRect.ap1);
|
|
getAngle := getAngle * pi / 180;
|
|
end
|
|
else
|
|
begin
|
|
CP.x := (InterfRect.ap1.x + InterfRect.ap2.x) / 2;
|
|
CP.y := (InterfRect.ap1.y + InterfRect.ap2.y) / 2;
|
|
getAngle := GetLineAngle(InterfRect.ap1, InterfRect.ap4);
|
|
getAngle := getAngle * pi / 180;
|
|
end;
|
|
CadCrossObjectElement.InPointX := CP.x;
|
|
CadCrossObjectElement.InPointY := CP.y;
|
|
CadCrossObjectElement.Angle := getAngle;
|
|
end;
|
|
FreeAndNil(ElementsRects);
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.ReCreateCadDistribCab', E.Message);
|
|
end;
|
|
end;
|
|
|
|
function DrawTextToField(aFieldBnd: TDoubleRect; aText: TStringList; aCrossType: string; aTextColor: Integer; aTextWidth: Integer): TRichText;
|
|
var
|
|
i: integer;
|
|
LHandle: Integer;
|
|
TextField: TRichText;
|
|
FieldCP: TDoublePoint;
|
|
TM: TTextMetric;
|
|
xCanvas: TMetafileCanvas;
|
|
h, w: double;
|
|
HalfField: double;
|
|
HalfText: double;
|
|
ModCount: Integer;
|
|
TextSize: Integer;
|
|
TextStyle: TFontStyles;
|
|
TextColor: Integer;
|
|
delta: double;
|
|
|
|
begin
|
|
try
|
|
Result := nil;
|
|
if aText.Count > 1 then
|
|
delta := 0.5
|
|
else
|
|
delta := 0;
|
|
if aCrossType = ctsnCrossATS then
|
|
begin
|
|
TextSize := GCadForm.FCrossATSFontSize;
|
|
if aTextWidth > 1 then
|
|
begin
|
|
TextStyle := [fsBold];
|
|
end
|
|
else
|
|
begin
|
|
if GCadForm.FCrossATSFontBold then
|
|
TextStyle := [fsBold]
|
|
else
|
|
TextStyle := [];
|
|
end;
|
|
end;
|
|
if aCrossType = ctsnDistributionCabinet then
|
|
begin
|
|
TextSize := GCadForm.FDistribCabFontSize;
|
|
if GCadForm.FDistribCabFontBold then
|
|
TextStyle := [fsBold]
|
|
else
|
|
TextStyle := [];
|
|
end;
|
|
|
|
TextColor := aTextColor;
|
|
LHandle := GCadForm.PCad.GetLayerHandle(2);
|
|
FieldCP.x := (aFieldBnd.Left + aFieldBnd.Right) / 2;
|
|
FieldCP.y := (aFieldBnd.Top + aFieldBnd.Bottom) / 2;
|
|
TextField := TRichText.create(-100, -100, -100, -100, 1, ord(psSolid), clBlack, ord(bsClear), clNone,
|
|
LHandle, mydsNormal, GCadForm.PCad);
|
|
TextField.re.Font.Name := GCadForm.FFontName;
|
|
TextField.re.Font.Size := TextSize;
|
|
TextField.re.Font.Style := TextStyle;
|
|
TextField.re.Font.Color := TextColor;
|
|
TextField.re.Lines.Clear;
|
|
for i := 0 to aText.Count - 1 do
|
|
begin
|
|
aText[i] := FastReplace(aText[i],#13#10,' ');
|
|
TextField.re.Lines.Add(aText[i]);
|
|
end;
|
|
|
|
// GCadForm.PCad.AddCustomFigure(1, TextField, False);
|
|
// RefreshCAD(GCadForm.PCad);
|
|
// ïîëó÷èòü ñâîéñòâà
|
|
// Tolik -- 13/01/2017
|
|
TextField.ttMetaFile:= TMetaFile.Create;
|
|
TextField.ttMetafile.Enhanced := True;
|
|
//
|
|
xCanvas := TMetafileCanvas.Create(TextField.ttMetaFile, 0);
|
|
xCanvas.Font.Name := TextField.re.Font.Name;
|
|
xCanvas.Font.Size := TextField.re.Font.Size;
|
|
xCanvas.Font.Style := TextField.re.Font.Style;
|
|
GetTextMetrics(xCanvas.Handle, TM);
|
|
if TextField.re.Lines.Count > 1 then
|
|
h := TM.tmHeight / 4 * TextField.re.Lines.Count + 1
|
|
else
|
|
h := TM.tmHeight / 4 * TextField.re.Lines.Count;
|
|
w := 0;
|
|
for i := 0 to TextField.re.Lines.Count - 1 do
|
|
begin
|
|
if w < xCanvas.TextWidth(TextField.Re.Lines[i]) then
|
|
w := xCanvas.TextWidth(TextField.Re.Lines[i]);
|
|
end;
|
|
w := (w + 3) / 4 ;
|
|
FreeAndNil(xCanvas);
|
|
TextField.ttMetaFile.Free;
|
|
// ïåðåñîçäàòü ñ íîâûìè ñâîéñòâàìè
|
|
if TextField <> nil then
|
|
begin
|
|
// GCadForm.PCad.Figures.Remove(TextField);
|
|
FreeAndNil(TextField);
|
|
end;
|
|
TextField := TRichText.create(-100, -100, -100 + w, -100 + h, 1, ord(psSolid), clBlack, ord(bsClear), clNone,
|
|
LHandle, mydsNormal, GCadForm.PCad);
|
|
TextField.re.Font.Name := GCadForm.FFontName;
|
|
TextField.re.Font.Size := TextSize;
|
|
TextField.re.Font.Style := TextStyle;
|
|
TextField.re.Font.Color := TextColor;
|
|
|
|
TextField.Re.Alignment := TAlignment(2);
|
|
|
|
TextField.re.Lines.Clear;
|
|
for i := 0 to aText.Count - 1 do
|
|
begin
|
|
aText[i] := FastReplace(aText[i],#13#10,' ');
|
|
TextField.re.Lines.Add(aText[i]);
|
|
end;
|
|
|
|
TextField.Move(FieldCP.x - TextField.CenterPoint.x, (FieldCP.y - TextField.CenterPoint.y) + delta);
|
|
Result := TextField;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.DrawTextToField', E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure RotateTrunkObject(aObject: TConnectorObject; aAngleDegree: Double);
|
|
var
|
|
i, j, k: integer;
|
|
PointObject: TConnectorObject;
|
|
AngleRad: Double;
|
|
AngleDeg: Double;
|
|
Bnd: TDoubleRect;
|
|
FFigure: TFigure;
|
|
CurrCaptionAngle: Double;
|
|
HelpLine: TLine;
|
|
HelpLinesList1: TList;
|
|
HelpLinesList2: TList;
|
|
x1, x2, y1, y2: double;
|
|
JoinedConn: TConnectorObject;
|
|
JoinedLine: TOrthoLine;
|
|
OtherConn: TConnectorObject;
|
|
LHandle: Integer;
|
|
OldPos, NewPos: TDoublePoint;
|
|
OtherConnsMoved: TList;
|
|
begin
|
|
try
|
|
// ñîõðàíèòü ïîçèöèè ïðèñîåäèíåííûõ êîííåêòîðîâ
|
|
LHandle := GCadForm.PCad.GetLayerHandle(2);
|
|
HelpLinesList1 := TList.create;
|
|
HelpLinesList2 := TList.create;
|
|
for i := 0 to aObject.JoinedConnectorsList.Count - 1 do
|
|
begin
|
|
JoinedConn := TConnectorObject(aObject.JoinedConnectorsList[i]);
|
|
x1 := aObject.ActualPoints[1].x;
|
|
y1 := aObject.ActualPoints[1].y;
|
|
x2 := JoinedConn.ActualPoints[1].x;
|
|
y2 := JoinedConn.ActualPoints[1].y;
|
|
HelpLine := TLine.create(x1, y1, x2, y2, 1, ord(psClear), clNone, 0, LHandle, mydsNormal, GCadForm.PCad);
|
|
HelpLinesList1.Add(HelpLine);
|
|
// ïðîòèâîïîëîæíûå êîííåêòîðû
|
|
for j := 0 to JoinedConn.JoinedOrtholinesList.Count - 1 do
|
|
begin
|
|
JoinedLine := TOrthoLine(JoinedConn.JoinedOrtholinesList[j]);
|
|
if JoinedLine.JoinConnector1 <> JoinedConn then
|
|
begin
|
|
x2 := JoinedLine.JoinConnector1.ActualPoints[1].x;
|
|
y2 := JoinedLine.JoinConnector1.ActualPoints[1].y;
|
|
HelpLine := TLine.create(x1, y1, x2, y2, 1, ord(psClear), clNone, 0, LHandle, mydsNormal, GCadForm.PCad);
|
|
HelpLinesList2.Add(HelpLine);
|
|
end;
|
|
if JoinedLine.JoinConnector2 <> JoinedConn then
|
|
begin
|
|
x2 := JoinedLine.JoinConnector2.ActualPoints[1].x;
|
|
y2 := JoinedLine.JoinConnector2.ActualPoints[1].y;
|
|
HelpLine := TLine.create(x1, y1, x2, y2, 1, ord(psClear), clNone, 0, LHandle, mydsNormal, GCadForm.PCad);
|
|
HelpLinesList2.Add(HelpLine);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
AngleRad := aAngleDegree / 180 * pi;
|
|
aObject.Rotate(AngleRad, aObject.ActualPoints[1]);
|
|
aObject.DrawFigure.Rotate(AngleRad, aObject.CenterPoint);
|
|
aObject.FDrawFigureAngle := aObject.FDrawFigureAngle + AngleRad;
|
|
if aObject.FDrawFigureAngle >= 2 * pi then
|
|
aObject.FDrawFigureAngle := aObject.FDrawFigureAngle - 2 * pi;
|
|
Bnd := aObject.DrawFigure.GetBoundRect;
|
|
aObject.GrpSizeX := Bnd.Right - Bnd.Left;
|
|
aObject.GrpSizeY := Bnd.Bottom - Bnd.Top;
|
|
//
|
|
if aObject.FCaptionsViewType = cv_Right then
|
|
CurrCaptionAngle := 0;
|
|
if aObject.FCaptionsViewType = cv_Down then
|
|
CurrCaptionAngle := 90;
|
|
if aObject.FCaptionsViewType = cv_Left then
|
|
CurrCaptionAngle := 180;
|
|
if aObject.FCaptionsViewType = cv_Up then
|
|
CurrCaptionAngle := 270;
|
|
CurrCaptionAngle := CurrCaptionAngle + 180;
|
|
CurrCaptionAngle := round(CurrCaptionAngle) mod 360;
|
|
if (CurrCaptionAngle >= 0) and (CurrCaptionAngle <= 45) then
|
|
aObject.FCaptionsViewType := cv_Right
|
|
else
|
|
if (CurrCaptionAngle > 45) and (CurrCaptionAngle < 135) then
|
|
aObject.FCaptionsViewType := cv_Down
|
|
else
|
|
if (CurrCaptionAngle >= 135) and (CurrCaptionAngle <= 225) then
|
|
aObject.FCaptionsViewType := cv_Left
|
|
else
|
|
if (CurrCaptionAngle > 225) and (CurrCaptionAngle < 315) then
|
|
aObject.FCaptionsViewType := cv_Up
|
|
else
|
|
if (CurrCaptionAngle >= 315) and (CurrCaptionAngle <= 360) then
|
|
aObject.FCaptionsViewType := cv_Right;
|
|
//
|
|
RefreshCAD(GCadForm.PCad);
|
|
aObject.ReCreateCaptionsGroup(false, false);
|
|
|
|
// ïåðåìåñòèòü òðàññû íà íîâûå ïîçèöèè
|
|
for i := 0 to HelpLinesList1.Count - 1 do
|
|
begin
|
|
// ïðèñîåäèíåííûå êîííåêòîðû
|
|
HelpLine := TLine(HelpLinesList1[i]);
|
|
JoinedConn := TConnectorObject(aObject.JoinedConnectorsList[i]);
|
|
OldPos := HelpLine.ActualPoints[2];
|
|
HelpLine.Rotate(AngleRad, HelpLine.ActualPoints[1]);
|
|
NewPos := HelpLine.ActualPoints[2];
|
|
JoinedConn.Move(NewPos.x - OldPos.x, NewPos.y - OldPos.y);
|
|
FreeAndNil(HelpLine);
|
|
end;
|
|
FreeAndNil(HelpLinesList1);
|
|
|
|
// ïåðåìåñòèòü òðàññû íà íîâûå ïîçèöèè
|
|
OtherConnsMoved := TList.Create;
|
|
for i := 0 to HelpLinesList2.Count - 1 do
|
|
begin
|
|
HelpLine := TLine(HelpLinesList2[i]);
|
|
JoinedConn := TConnectorObject(aObject.JoinedConnectorsList[i]);
|
|
OldPos := HelpLine.ActualPoints[2];
|
|
HelpLine.Rotate(AngleRad, HelpLine.ActualPoints[1]);
|
|
NewPos := HelpLine.ActualPoints[2];
|
|
for j := 0 to JoinedConn.JoinedOrtholinesList.Count - 1 do
|
|
begin
|
|
JoinedLine := TOrthoLine(JoinedConn.JoinedOrtholinesList[j]);
|
|
if JoinedLine.JoinConnector1 <> JoinedConn then
|
|
begin
|
|
if CheckNoFigureInList(JoinedLine.JoinConnector1, OtherConnsMoved) then
|
|
begin
|
|
JoinedLine.JoinConnector1.Move(NewPos.x - OldPos.x, NewPos.y - OldPos.y);
|
|
OtherConnsMoved.Add(JoinedLine.JoinConnector1);
|
|
end;
|
|
end;
|
|
if JoinedLine.JoinConnector2 <> JoinedConn then
|
|
begin
|
|
if CheckNoFigureInList(JoinedLine.JoinConnector2, OtherConnsMoved) then
|
|
begin
|
|
JoinedLine.JoinConnector2.Move(NewPos.x - OldPos.x, NewPos.y - OldPos.y);
|
|
OtherConnsMoved.Add(JoinedLine.JoinConnector2);
|
|
end;
|
|
end;
|
|
end;
|
|
FreeAndNil(HelpLine);
|
|
end;
|
|
FreeAndNil(HelpLinesList2);
|
|
FreeAndNil(OtherConnsMoved);
|
|
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.RotateTrunkObject', E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure AfterMoveTrunkObject(aObject: TConnectorObject; adeltax, adeltay: Double);
|
|
var
|
|
i, j: Integer;
|
|
JoinedConn: TConnectorObject;
|
|
JoinedLine: TOrthoLine;
|
|
OtherConn: TConnectorObject;
|
|
MovedList: TList;
|
|
MovedConn: TConnectorObject;
|
|
begin
|
|
try
|
|
MovedList := TList.Create;
|
|
for i := 0 to aObject.JoinedConnectorsList.Count - 1 do
|
|
begin
|
|
JoinedConn := TConnectorObject(aObject.JoinedConnectorsList[i]);
|
|
for j := 0 to JoinedConn.JoinedOrtholinesList.Count - 1 do
|
|
begin
|
|
JoinedLine := TOrthoLine(JoinedConn.JoinedOrtholinesList[j]);
|
|
if JoinedLine.JoinConnector1 <> JoinedConn then
|
|
begin
|
|
if TConnectorObject(JoinedLine.JoinConnector1).JoinedConnectorsList.Count = 0 then
|
|
MovedConn := TConnectorObject(JoinedLine.JoinConnector1)
|
|
else
|
|
MovedConn := TConnectorObject(TConnectorObject(JoinedLine.JoinConnector1).JoinedConnectorsList[0]);
|
|
if CheckNoFigureInList(MovedConn, MovedList) then
|
|
MovedList.Add(MovedConn);
|
|
end;
|
|
if JoinedLine.JoinConnector2 <> JoinedConn then
|
|
begin
|
|
if TConnectorObject(JoinedLine.JoinConnector2).JoinedConnectorsList.Count = 0 then
|
|
MovedConn := TConnectorObject(JoinedLine.JoinConnector2)
|
|
else
|
|
MovedConn := TConnectorObject(TConnectorObject(JoinedLine.JoinConnector2).JoinedConnectorsList[0]);
|
|
if CheckNoFigureInList(MovedConn, MovedList) then
|
|
MovedList.Add(MovedConn);
|
|
end;
|
|
end;
|
|
end;
|
|
for i := 0 to MovedList.Count - 1 do
|
|
begin
|
|
OtherConn := TConnectorObject(MovedList[i]);
|
|
if not OtherConn.Selected then
|
|
OtherConn.Move(adeltax, adeltay);
|
|
end;
|
|
FreeAndNil(MovedList);
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.AfterMoveTrunkObject', E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure DeleteTrunkObject(aObject: TConnectorObject);
|
|
var
|
|
i, j: integer;
|
|
JoinedConn: TConnectorObject;
|
|
JoinedLine: TOrthoLine;
|
|
ConnectingTraces: TList;
|
|
begin
|
|
ConnectingTraces := nil; // Tolik 21/05/2018 --
|
|
try
|
|
if aObject.AsEndPoint then
|
|
begin
|
|
GEndPoint := nil;
|
|
GListWithEndPoint := nil;
|
|
end;
|
|
ConnectingTraces := GetAllConnectingTraces(aObject);
|
|
for i := 0 to ConnectingTraces.Count - 1 do
|
|
begin
|
|
JoinedLine := TOrthoLine(ConnectingTraces[i]);
|
|
JoinedLine.Delete;
|
|
end;
|
|
|
|
aObject.Deleted := True;
|
|
//Tolik
|
|
TF_CAD(TPowerCad(TConnectorObject(aObject).Owner).Owner).FRemFigures.Add(aObject);
|
|
//GCadForm.FRemFigures.Add(aObject);
|
|
//
|
|
if Assigned(aObject.CaptionsGroup) then
|
|
aObject.CaptionsGroup.Delete;
|
|
if Assigned(aObject.NotesGroup) then
|
|
aObject.NotesGroup.Delete;
|
|
if Assigned(aObject.DrawFigure) then
|
|
aObject.DrawFigure.Delete;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.DeleteTrunkObject', E.Message);
|
|
end;
|
|
ConnectingTraces.free; // Tolik 21/05/2018 --
|
|
end;
|
|
|
|
Function TracingTrunkToEndPoint(ACurrentWS, AEndPoint: TConnectorObject; AID_Cable: Integer): Boolean;
|
|
var
|
|
i, j: integer;
|
|
ComponID: Integer;
|
|
isConnected: Boolean;
|
|
IDLine: Integer;
|
|
IDPos: Integer;
|
|
AllTrace: TList;
|
|
SetLinesList: TIntList;
|
|
SetLinesPos: TIntList;
|
|
Counts: Integer;
|
|
JoinedConn: TConnectorObject;
|
|
CadCrossObject: TCadCrossObject;
|
|
begin
|
|
try
|
|
Result := False;
|
|
if ACurrentWS.ConnectorType = ct_Clear then
|
|
begin
|
|
AllTrace := GetAllTraceInCAD(AEndPoint, ACurrentWS);
|
|
// âûäåëèòü òðàññó
|
|
if AllTrace <> nil then
|
|
begin
|
|
for i := 0 to AllTrace.Count - 1 do
|
|
TFigure(AllTrace[i]).Select;
|
|
|
|
DisableMarking; //15.01.2011 - Îòêëþ÷àåì ãåíåðàöèþ ìàðêèðîâêè äëÿ êàáåëÿ
|
|
try
|
|
// ñêîïèðîâàòü êàáåëü òóäà
|
|
for i := 0 to AllTrace.Count - 1 do
|
|
ComponID := CopyComponentToSCSObject(TFigure(AllTrace[i]).ID, AID_Cable);
|
|
finally
|
|
EnableMarking;
|
|
end;
|
|
|
|
// óáðàòü âûäåëåíèå òðàññû
|
|
for i := 0 to AllTrace.Count - 1 do
|
|
TFigure(AllTrace[i]).DeSelect;
|
|
//
|
|
SetLinesList := TIntList.Create;
|
|
SetLinesPos := TIntList.Create;
|
|
for i := 0 to AllTrace.Count - 1 do
|
|
begin
|
|
IDLine := TFigure(AllTrace[i]).ID;
|
|
SetLinesList.Add(IDLine);
|
|
if CheckFigureByClassName(TFigure(AllTrace[i]), cTOrthoLine) then
|
|
begin
|
|
IDPos := TOrthoLine(AllTrace[i]).FConnectingPos;
|
|
end
|
|
else
|
|
IDPos := -1;
|
|
SetLinesPos.Add(IDPos);
|
|
end;
|
|
isConnected := ConnectObjectsInPMByWay(SetLinesList, nil, nil, SetLinesPos);
|
|
if SetLinesList <> nil then
|
|
FreeAndNil(SetLinesList);
|
|
if SetLinesPos <> nil then
|
|
FreeAndNil(SetLinesPos);
|
|
if AllTrace <> nil then
|
|
FreeAndNil(AllTrace);
|
|
Result := True;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
ACurrentWS.FDisableTracing := True;
|
|
|
|
for Counts := 0 to ACurrentWS.JoinedConnectorsList.Count - 1 do
|
|
begin
|
|
JoinedConn := TConnectorObject(ACurrentWS.JoinedConnectorsList[Counts]);
|
|
AllTrace := GetAllTraceInCAD(AEndPoint, JoinedConn);
|
|
|
|
// âûäåëèòü òðàññó
|
|
if AllTrace <> nil then
|
|
begin
|
|
// äîêèíóòü ñàì îáúåêò-èñòî÷íèê
|
|
AllTrace.Add(ACurrentWS);
|
|
for i := 0 to AllTrace.Count - 1 do
|
|
TFigure(AllTrace[i]).Select;
|
|
|
|
DisableMarking; //15.01.2011 - Îòêëþ÷àåì ãåíåðàöèþ ìàðêèðîâêè äëÿ êàáåëÿ
|
|
try
|
|
// ñêîïèðîâàòü êàáåëü òóäà
|
|
for i := 0 to AllTrace.Count - 1 do
|
|
ComponID := CopyComponentToSCSObject(TFigure(AllTrace[i]).ID, AID_Cable);
|
|
finally
|
|
EnableMarking;
|
|
end;
|
|
|
|
// óáðàòü âûäåëåíèå òðàññû
|
|
for i := 0 to AllTrace.Count - 1 do
|
|
TFigure(AllTrace[i]).DeSelect;
|
|
//
|
|
SetLinesList := TIntList.Create;
|
|
SetLinesPos := TIntList.Create;
|
|
for i := 0 to AllTrace.Count - 1 do
|
|
begin
|
|
IDLine := TFigure(AllTrace[i]).ID;
|
|
SetLinesList.Add(IDLine);
|
|
if CheckFigureByClassName(TFigure(AllTrace[i]), cTOrthoLine) then
|
|
begin
|
|
IDPos := TOrthoLine(AllTrace[i]).FConnectingPos;
|
|
end
|
|
else
|
|
IDPos := -1;
|
|
SetLinesPos.Add(IDPos);
|
|
end;
|
|
|
|
isConnected := ConnectObjectsInPMByWay(SetLinesList, nil, nil, SetLinesPos);
|
|
|
|
if SetLinesList <> nil then
|
|
FreeAndNil(SetLinesList);
|
|
if SetLinesPos <> nil then
|
|
FreeAndNil(SetLinesPos);
|
|
if AllTrace <> nil then
|
|
FreeAndNil(AllTrace);
|
|
Result := True;
|
|
end;
|
|
end;
|
|
ACurrentWS.FDisableTracing := False;
|
|
end;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.TracingTrunkToEndPoint', E.Message);
|
|
end;
|
|
end;
|
|
|
|
Function GetPosOfConnectingTrace(aListID, aObjectID: Integer): Integer;
|
|
var
|
|
vList: TF_CAD;
|
|
vLine: TOrthoLine;
|
|
begin
|
|
try
|
|
Result := -1;
|
|
vList := GetListByID(aListID);
|
|
if vList <> nil then
|
|
begin
|
|
vLine := TOrthoLine(GetFigureByID(vList, aObjectID));
|
|
if vLine <> nil then
|
|
begin
|
|
Result := vLine.FConnectingPos;
|
|
end;
|
|
end;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.GetPosOfConnectingTrace', E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure DeleteConnectingTraces(aObject: TConnectorObject);
|
|
var
|
|
i, j: Integer;
|
|
JoinedConn: TConnectorObject;
|
|
JoinedLine: TOrthoLine;
|
|
ConnectingTraces: TList;
|
|
begin
|
|
try
|
|
ConnectingTraces := TList.Create;
|
|
for i := 0 to aObject.JoinedConnectorsList.Count - 1 do
|
|
begin
|
|
JoinedConn := TConnectorObject(aObject.JoinedConnectorsList[i]);
|
|
for j := 0 to JoinedConn.JoinedOrtholinesList.Count - 1 do
|
|
begin
|
|
JoinedLine := TOrthoLine(JoinedConn.JoinedOrtholinesList[j]);
|
|
if JoinedLine.FConnectingLine then
|
|
ConnectingTraces.Add(JoinedLine);
|
|
end;
|
|
end;
|
|
for i := 0 to ConnectingTraces.Count - 1 do
|
|
begin
|
|
JoinedLine := TOrthoLine(ConnectingTraces[i]);
|
|
JoinedLine.Delete;
|
|
end;
|
|
FreeAndNil(ConnectingTraces);
|
|
RefreshCAD(GCadForm.Pcad);
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.DeleteConnectingTraces', E.Message);
|
|
end;
|
|
end;
|
|
|
|
function CheckCannotDelete(aFigure: TFigure): Boolean;
|
|
var
|
|
i: Integer;
|
|
Conn: TConnectorObject;
|
|
Line: TOrthoLine;
|
|
begin
|
|
try
|
|
Result := False;
|
|
if CheckFigureByClassName(aFigure, cTOrthoLine) then
|
|
begin
|
|
Line := TOrthoLine(aFigure);
|
|
if Line.FConnectingLine then
|
|
Result := True;
|
|
end
|
|
else
|
|
if CheckFigureByClassName(aFigure, cTConnectorObject) then
|
|
begin
|
|
Conn := TConnectorObject(aFigure);
|
|
for i := 0 to Conn.JoinedOrtholinesList.Count - 1 do
|
|
if TOrthoLine(Conn.JoinedOrtholinesList[i]).FConnectingLine then
|
|
Result := True;
|
|
end;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.CheckCannotDelete', E.Message);
|
|
end;
|
|
end;
|
|
|
|
Function GetConnectingTraceByPos(aObject: TConnectorObject; aPos: Integer): TOrthoLine;
|
|
var
|
|
i, j: Integer;
|
|
JoinedConn: TConnectorObject;
|
|
JoinedLine: TOrthoLine;
|
|
begin
|
|
try
|
|
Result := nil;
|
|
for i := 0 to aObject.JoinedConnectorsList.Count - 1 do
|
|
begin
|
|
JoinedConn := TConnectorObject(aObject.JoinedConnectorsList[i]);
|
|
for j := 0 to JoinedConn.JoinedOrtholinesList.Count - 1 do
|
|
begin
|
|
JoinedLine := TOrthoLine(JoinedConn.JoinedOrtholinesList[j]);
|
|
if JoinedLine.FConnectingLine then
|
|
begin
|
|
if JoinedLine.FConnectingPos = aPos then
|
|
begin
|
|
Result := JoinedLine;
|
|
Exit;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.GetConnectingTraceByPos', E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure AfterMirrorTrunkObject(aObject: TConnectorObject);
|
|
var
|
|
i, j, k: integer;
|
|
PointObject: TConnectorObject;
|
|
AngleRad: Double;
|
|
AngleDeg: Double;
|
|
Bnd: TDoubleRect;
|
|
FFigure: TFigure;
|
|
CurrCaptionAngle: Double;
|
|
HelpLine: TLine;
|
|
HelpLinesList1: TList;
|
|
HelpLinesList2: TList;
|
|
x1, x2, y1, y2: double;
|
|
JoinedConn: TConnectorObject;
|
|
JoinedLine: TOrthoLine;
|
|
OtherConn: TConnectorObject;
|
|
LHandle: Integer;
|
|
OldPos, NewPos: TDoublePoint;
|
|
OtherConnsMoved: TList;
|
|
begin
|
|
try
|
|
// ñîõðàíèòü ïîçèöèè ïðèñîåäèíåííûõ êîííåêòîðîâ
|
|
LHandle := GCadForm.PCad.GetLayerHandle(2);
|
|
HelpLinesList1 := TList.create;
|
|
HelpLinesList2 := TList.create;
|
|
for i := 0 to aObject.JoinedConnectorsList.Count - 1 do
|
|
begin
|
|
JoinedConn := TConnectorObject(aObject.JoinedConnectorsList[i]);
|
|
x1 := aObject.ActualPoints[1].x;
|
|
y1 := aObject.ActualPoints[1].y;
|
|
x2 := JoinedConn.ActualPoints[1].x;
|
|
y2 := JoinedConn.ActualPoints[1].y;
|
|
HelpLine := TLine.create(x1, y1, x2, y2, 1, ord(psClear), clNone, 0, LHandle, mydsNormal, GCadForm.PCad);
|
|
HelpLinesList1.Add(HelpLine);
|
|
// ïðîòèâîïîëîæíûå êîííåêòîðû
|
|
for j := 0 to JoinedConn.JoinedOrtholinesList.Count - 1 do
|
|
begin
|
|
JoinedLine := TOrthoLine(JoinedConn.JoinedOrtholinesList[j]);
|
|
if JoinedLine.JoinConnector1 <> JoinedConn then
|
|
begin
|
|
x2 := JoinedLine.JoinConnector1.ActualPoints[1].x;
|
|
y2 := JoinedLine.JoinConnector1.ActualPoints[1].y;
|
|
HelpLine := TLine.create(x1, y1, x2, y2, 1, ord(psClear), clNone, 0, LHandle, mydsNormal, GCadForm.PCad);
|
|
HelpLinesList2.Add(HelpLine);
|
|
end;
|
|
if JoinedLine.JoinConnector2 <> JoinedConn then
|
|
begin
|
|
x2 := JoinedLine.JoinConnector2.ActualPoints[1].x;
|
|
y2 := JoinedLine.JoinConnector2.ActualPoints[1].y;
|
|
HelpLine := TLine.create(x1, y1, x2, y2, 1, ord(psClear), clNone, 0, LHandle, mydsNormal, GCadForm.PCad);
|
|
HelpLinesList2.Add(HelpLine);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
// ïåðåìåñòèòü òðàññû íà íîâûå ïîçèöèè
|
|
for i := 0 to HelpLinesList1.Count - 1 do
|
|
begin
|
|
// ïðèñîåäèíåííûå êîííåêòîðû
|
|
HelpLine := TLine(HelpLinesList1[i]);
|
|
JoinedConn := TConnectorObject(aObject.JoinedConnectorsList[i]);
|
|
OldPos := HelpLine.ActualPoints[2];
|
|
if aObject.FTrunkName = ctsnCrossATS then
|
|
MoveMirrorLineForCrossATS(HelpLine, aObject.FDrawFigureAngle);
|
|
if aObject.FTrunkName = ctsnDistributionCabinet then
|
|
MoveMirrorLineForDistribCab(HelpLine, aObject.FDrawFigureAngle);
|
|
NewPos := HelpLine.ActualPoints[2];
|
|
JoinedConn.Move(NewPos.x - OldPos.x, NewPos.y - OldPos.y);
|
|
FreeAndNil(HelpLine);
|
|
end;
|
|
FreeAndNil(HelpLinesList1);
|
|
|
|
// ïåðåìåñòèòü òðàññû íà íîâûå ïîçèöèè
|
|
OtherConnsMoved := TList.Create;
|
|
for i := 0 to HelpLinesList2.Count - 1 do
|
|
begin
|
|
HelpLine := TLine(HelpLinesList2[i]);
|
|
JoinedConn := TConnectorObject(aObject.JoinedConnectorsList[i]);
|
|
OldPos := HelpLine.ActualPoints[2];
|
|
if aObject.FTrunkName = ctsnCrossATS then
|
|
MoveMirrorLineForCrossATS(HelpLine, aObject.FDrawFigureAngle);
|
|
if aObject.FTrunkName = ctsnDistributionCabinet then
|
|
MoveMirrorLineForDistribCab(HelpLine, aObject.FDrawFigureAngle);
|
|
NewPos := HelpLine.ActualPoints[2];
|
|
for j := 0 to JoinedConn.JoinedOrtholinesList.Count - 1 do
|
|
begin
|
|
JoinedLine := TOrthoLine(JoinedConn.JoinedOrtholinesList[j]);
|
|
if JoinedLine.JoinConnector1 <> JoinedConn then
|
|
begin
|
|
if CheckNoFigureInList(JoinedLine.JoinConnector1, OtherConnsMoved) then
|
|
begin
|
|
JoinedLine.JoinConnector1.Move(NewPos.x - OldPos.x, NewPos.y - OldPos.y);
|
|
OtherConnsMoved.Add(JoinedLine.JoinConnector1);
|
|
end;
|
|
end;
|
|
if JoinedLine.JoinConnector2 <> JoinedConn then
|
|
begin
|
|
if CheckNoFigureInList(JoinedLine.JoinConnector2, OtherConnsMoved) then
|
|
begin
|
|
JoinedLine.JoinConnector2.Move(NewPos.x - OldPos.x, NewPos.y - OldPos.y);
|
|
OtherConnsMoved.Add(JoinedLine.JoinConnector2);
|
|
end;
|
|
end;
|
|
end;
|
|
FreeAndNil(HelpLine);
|
|
end;
|
|
FreeAndNil(HelpLinesList2);
|
|
FreeAndNil(OtherConnsMoved);
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.AfterMirrorTrunkObject', E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure MoveMirrorLineForCrossATS(aLine: TLine; aAngle: Double);
|
|
var
|
|
Point: TDoublePoint;
|
|
mLine1, mLine2, a1, a2, b1, b2, c1, c2, interX, interY : Double;
|
|
begin
|
|
try
|
|
if (DoubleCMP(aAngle, 0) or DoubleCMP(aAngle, pi) or DoubleCMP(aAngle, 2 * pi)) then
|
|
begin
|
|
Point.x := aLine.ActualPoints[2].x + (aLine.ActualPoints[1].x - aLine.ActualPoints[2].x) * 2;
|
|
Point.y := aLine.ActualPoints[2].y;
|
|
end
|
|
else if (DoubleCMP(aAngle, pi / 2) or DoubleCMP(aAngle, 3 * pi / 2)) then
|
|
begin
|
|
Point.x := aLine.ActualPoints[2].x;
|
|
Point.y := aLine.ActualPoints[2].y + (aLine.ActualPoints[1].y - aLine.ActualPoints[2].y) * 2;
|
|
end
|
|
else
|
|
begin
|
|
mLine1 := (aLine.ActualPoints[1].y - aLine.ActualPoints[2].y) / (aLine.ActualPoints[1].x - aLine.ActualPoints[2].x);
|
|
|
|
a1 := -1 * mLine1;
|
|
b1 := 1;
|
|
c1 := mLine1 * aLine.ActualPoints[1].x - aLine.ActualPoints[1].y;
|
|
|
|
mline2 := -1 / mLine1;
|
|
|
|
a2 := -1 * mLine2;
|
|
b2 := 1;
|
|
c2 := mLine2 * aLine.ActualPoints[2].x - aLine.ActualPoints[2].y;
|
|
|
|
interX := (c2 * b1 - c1 * b2) / (a1 * b2 - b1 * a2);
|
|
interY := (c1 * a2 - a1 * c2) / (a1 * b2 - b1 * a2);
|
|
|
|
Point.x := 2 * InterX - aLine.ActualPoints[2].x;
|
|
Point.y := 2 * InterY - aLine.ActualPoints[2].y;
|
|
end;
|
|
aLine.ActualPoints[2] := Point;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.MoveMirrorLineForCrossATS', E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure MoveMirrorLineForDistribCab(aLine: TLine; aAngle: Double);
|
|
var
|
|
Point: TDoublePoint;
|
|
mLine1, mLine2, a1, a2, b1, b2, c1, c2, interX, interY : Double;
|
|
begin
|
|
try
|
|
if (DoubleCMP(aAngle, pi / 2) or DoubleCMP(aAngle, 3 * pi / 2)) then
|
|
begin
|
|
Point.x := aLine.ActualPoints[2].x + (aLine.ActualPoints[1].x - aLine.ActualPoints[2].x) * 2;
|
|
Point.y := aLine.ActualPoints[2].y;
|
|
end
|
|
else if (DoubleCMP(aAngle, 0) or DoubleCMP(aAngle, pi) or DoubleCMP(aAngle, 2 * pi)) then
|
|
begin
|
|
Point.x := aLine.ActualPoints[2].x;
|
|
Point.y := aLine.ActualPoints[2].y + (aLine.ActualPoints[1].y - aLine.ActualPoints[2].y) * 2;
|
|
end
|
|
else
|
|
begin
|
|
mLine1 := (aLine.ActualPoints[1].y - aLine.ActualPoints[2].y) / (aLine.ActualPoints[1].x - aLine.ActualPoints[2].x);
|
|
|
|
a1 := -1 * mLine1;
|
|
b1 := 1;
|
|
c1 := mLine1 * aLine.ActualPoints[1].x - aLine.ActualPoints[1].y;
|
|
|
|
mline2 := -1 / mLine1;
|
|
|
|
a2 := -1 * mLine2;
|
|
b2 := 1;
|
|
c2 := mLine2 * aLine.ActualPoints[2].x - aLine.ActualPoints[2].y;
|
|
|
|
interX := (c2 * b1 - c1 * b2) / (a1 * b2 - b1 * a2);
|
|
interY := (c1 * a2 - a1 * c2) / (a1 * b2 - b1 * a2);
|
|
|
|
Point.x := 2 * InterX - aLine.ActualPoints[2].x;
|
|
Point.y := 2 * InterY - aLine.ActualPoints[2].y;
|
|
end;
|
|
aLine.ActualPoints[2] := Point;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.MoveMirrorLineForDistribCab', E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure ChangeCrossATSInterf(aListID, aObjectID: Integer; aCadCrossObject: TCADCrossObject);
|
|
var
|
|
i, j: Integer;
|
|
Trace: TOrthoLine;
|
|
OldConnectingTraces: TList;
|
|
vList: TF_CAD;
|
|
vObject: TConnectorObject;
|
|
CADCrossObjectElement: TCADCrossObjectElement;
|
|
|
|
LHandle: Integer;
|
|
PenStyle: TpenStyle;
|
|
PointTo: TDoublePoint;
|
|
ConnectedLine: TOrthoLine;
|
|
ConnectedConn1, ConnectedConn2: TConnectorObject;
|
|
ObjParams: TObjectParams;
|
|
|
|
SetToAngle: Double;
|
|
SetToPoints: TDoublePoint;
|
|
setdeltax, setdeltay: double;
|
|
begin
|
|
BeginProgress;
|
|
try
|
|
vList := GetListByID(aListID);
|
|
if vList = nil then
|
|
Exit;
|
|
vObject := TConnectorObject(GetFigureByID(vList, aObjectID));
|
|
if vObject = nil then
|
|
Exit;
|
|
OldConnectingTraces := GetAllConnectingTraces(vObject);
|
|
|
|
ReCreateCadCrossATS(aListID, aObjectID, aCadCrossObject);
|
|
|
|
for i := 0 to OldConnectingTraces.Count - 1 do
|
|
begin
|
|
Trace := TOrthoLine(OldConnectingTraces[i]);
|
|
if not ExistInNewTrunkStruct(Trace, aCadCrossObject.Elements) then
|
|
Trace.Delete;
|
|
end;
|
|
RefreshCAD(vList.PCad);
|
|
|
|
LHandle := vList.PCad.GetLayerHandle(2);
|
|
|
|
for i := 0 to aCadCrossObject.Elements.Count - 1 do
|
|
begin
|
|
CADCrossObjectElement := TCADCrossObjectElement(aCadCrossObject.Elements[i]);
|
|
SetToAngle := CADCrossObjectElement.Angle;
|
|
SetToPoints.x := CADCrossObjectElement.InPointX;
|
|
SetToPoints.y := CADCrossObjectElement.InPointY;
|
|
// áûë äîáàâëåí - ñîçäàòü ñâÿçóþùóþ
|
|
if CADCrossObjectElement.ConnectingTraceID = -1 then
|
|
begin
|
|
if CadCrossObjectElement.FSignType = 1 then
|
|
PenStyle := psDash
|
|
else
|
|
PenStyle := psSolid;
|
|
PointTo.x := -100;
|
|
PointTo.y := -100;
|
|
|
|
ConnectedConn1 := TConnectorObject.Create(PointTo.x - 5, PointTo.y, 0, LHandle, mydsNormal, vList.PCad);
|
|
ConnectedConn1.ConnectorType := ct_Clear;
|
|
vList.PCad.AddCustomFigure (2, ConnectedConn1, False);
|
|
ConnectedConn1.Name := cTrunkSCS_Mes9;
|
|
SetNewObjectNameInPM(ConnectedConn1.ID, ConnectedConn1.Name);
|
|
ObjParams := GetFigureParams(ConnectedConn1.ID);
|
|
ConnectedConn1.Name := ObjParams.Name;
|
|
ConnectedConn1.FIndex := ObjParams.MarkID;
|
|
SetConFigureCoordZInPM(ConnectedConn1.ID, ConnectedConn1.ActualZOrder[1]);
|
|
|
|
ConnectedConn2 := TConnectorObject.Create(PointTo.x, PointTo.y, 0, LHandle, mydsNormal, vList.PCad);
|
|
ConnectedConn2.ConnectorType := ct_Clear;
|
|
vList.PCad.AddCustomFigure (2, ConnectedConn2, False);
|
|
ConnectedConn2.Name := cTrunkSCS_Mes9;
|
|
SetNewObjectNameInPM(ConnectedConn2.ID, ConnectedConn2.Name);
|
|
ObjParams := GetFigureParams(ConnectedConn2.ID);
|
|
ConnectedConn2.Name := ObjParams.Name;
|
|
ConnectedConn2.FIndex := ObjParams.MarkID;
|
|
SetConFigureCoordZInPM(ConnectedConn2.ID, ConnectedConn2.ActualZOrder[1]);
|
|
|
|
ConnectedLine := TOrthoLine.create(ConnectedConn1.ActualPoints[1].x, ConnectedConn1.ActualPoints[1].y, 0,
|
|
ConnectedConn2.ActualPoints[1].x, ConnectedConn2.ActualPoints[1].y, 0,
|
|
1, ord(PenStyle), clBlack, 0, LHandle, mydsNormal, vList.PCad);
|
|
vList.PCad.AddCustomFigure(2, ConnectedLine, False);
|
|
SetConFigureCoordZInPM(ConnectedLine.ID, ConnectedLine.ActualZOrder[1]);
|
|
ConnectedLine.SetJConnector1(TConnectorObject(ConnectedConn1));
|
|
ConnectedLine.SetJConnector2(TConnectorObject(ConnectedConn2));
|
|
SnapConnectorToPointObject(ConnectedConn2, vObject, False);
|
|
// Locks
|
|
ConnectedConn2.LockSelect := True;
|
|
ConnectedConn2.LockMove := True;
|
|
ConnectedConn2.LockModify := True;
|
|
|
|
ConnectedLine.FConnectingLine := True;
|
|
ConnectedLine.FConnectingPos := i;
|
|
TCADCrossObjectElement(aCadCrossObject.Elements[i]).ConnectingTraceID := ConnectedLine.ID;
|
|
ConnectedLine.Rotate(SetToAngle, ConnectedLine.ActualPoints[1]);
|
|
setdeltax := ConnectedLine.ActualPoints[2].x - ConnectedLine.JoinConnector2.ActualPoints[1].x;
|
|
setdeltay := ConnectedLine.ActualPoints[2].y - ConnectedLine.JoinConnector2.ActualPoints[1].y;
|
|
ConnectedLine.Rotate(- SetToAngle, ConnectedLine.ActualPoints[1]);
|
|
ConnectedLine.JoinConnector2.Move(setdeltax, setdeltay);
|
|
end
|
|
else
|
|
// íàéòè è ïîìåñòèòü íà íóæíûþ ïîçèöèþ
|
|
begin
|
|
ConnectedLine := TOrthoLine(GetFigureByID(vList, CADCrossObjectElement.ConnectingTraceID));
|
|
end;
|
|
// !!!
|
|
if ConnectedLine <> nil then
|
|
begin
|
|
setdeltax := SetToPoints.x - ConnectedLine.JoinConnector2.ActualPoints[1].x;
|
|
setdeltay := SetToPoints.y - ConnectedLine.JoinConnector2.ActualPoints[1].y;
|
|
ConnectedLine.JoinConnector1.Move(setdeltax, setdeltay);
|
|
ConnectedLine.JoinConnector2.Move(setdeltax, setdeltay);
|
|
ConnectedLine.FConnectingPos := i;
|
|
end;
|
|
end;
|
|
if OldConnectingTraces <> nil then
|
|
FreeAndNil(OldConnectingTraces);
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.ChangeCrossATSInterf', E.Message);
|
|
end;
|
|
EndProgress;
|
|
end;
|
|
|
|
procedure ChangeDistribCabInterf(aListID, aObjectID: Integer; aCadCrossObject: TCADCrossObject);
|
|
var
|
|
i, j: Integer;
|
|
Trace: TOrthoLine;
|
|
OldConnectingTraces: TList;
|
|
OldAngle: Double;
|
|
vList: TF_CAD;
|
|
vObject: TConnectorObject;
|
|
vConnectingTrace: TOrthoLine;
|
|
CADCrossObjectElement: TCADCrossObjectElement;
|
|
|
|
LHandle: Integer;
|
|
PenStyle: TPenStyle;
|
|
PointTo: TDoublePoint;
|
|
ConnectedLine: TOrthoLine;
|
|
ConnectedConn1, ConnectedConn2: TConnectorObject;
|
|
ObjParams: TObjectParams;
|
|
|
|
SetToAngle: Double;
|
|
SetToPoints: TDoublePoint;
|
|
setdeltax, setdeltay: double;
|
|
begin
|
|
BeginProgress;
|
|
try
|
|
vList := GetListByID(aListID);
|
|
if vList = nil then
|
|
Exit;
|
|
vObject := TConnectorObject(GetFigureByID(vList, aObjectID));
|
|
if vObject = nil then
|
|
Exit;
|
|
OldConnectingTraces := GetAllConnectingTraces(vObject);
|
|
|
|
ReCreateCadDistribCab(aListID, aObjectID, aCadCrossObject);
|
|
|
|
for i := 0 to OldConnectingTraces.Count - 1 do
|
|
begin
|
|
Trace := TOrthoLine(OldConnectingTraces[i]);
|
|
if not ExistInNewTrunkStruct(Trace, aCadCrossObject.Elements) then
|
|
Trace.Delete;
|
|
end;
|
|
RefreshCAD(vList.PCad);
|
|
|
|
LHandle := vList.PCad.GetLayerHandle(2);
|
|
for i := 0 to aCadCrossObject.Elements.Count - 1 do
|
|
begin
|
|
CADCrossObjectElement := TCADCrossObjectElement(aCadCrossObject.Elements[i]);
|
|
SetToAngle := CADCrossObjectElement.Angle;
|
|
SetToPoints.x := CADCrossObjectElement.InPointX;
|
|
SetToPoints.y := CADCrossObjectElement.InPointY;
|
|
// áûë äîáàâëåí - ñîçäàòü ñâÿçóþùóþ
|
|
if CADCrossObjectElement.ConnectingTraceID = -1 then
|
|
begin
|
|
if CadCrossObjectElement.FSignType = 1 then
|
|
PenStyle := psDash
|
|
else
|
|
PenStyle := psSolid;
|
|
PointTo.x := -100;
|
|
PointTo.y := -100;
|
|
|
|
// ñîçäàòü ïðèñîåäèíåííûé êîííåêòîð
|
|
ConnectedConn1 := TConnectorObject.Create(PointTo.x - 5, PointTo.y, 0, LHandle, mydsNormal, vList.PCad);
|
|
ConnectedConn1.ConnectorType := ct_Clear;
|
|
vList.PCad.AddCustomFigure (2, ConnectedConn1, False);
|
|
ConnectedConn1.Name := cTrunkSCS_Mes9;
|
|
SetNewObjectNameInPM(ConnectedConn1.ID, ConnectedConn1.Name);
|
|
ObjParams := GetFigureParams(ConnectedConn1.ID);
|
|
ConnectedConn1.Name := ObjParams.Name;
|
|
ConnectedConn1.FIndex := ObjParams.MarkID;
|
|
SetConFigureCoordZInPM(ConnectedConn1.ID, ConnectedConn1.ActualZOrder[1]);
|
|
|
|
ConnectedConn2 := TConnectorObject.Create(PointTo.x, PointTo.y, 0, LHandle, mydsNormal, vList.PCad);
|
|
ConnectedConn2.ConnectorType := ct_Clear;
|
|
vList.PCad.AddCustomFigure (2, ConnectedConn2, False);
|
|
ConnectedConn2.Name := cTrunkSCS_Mes9;
|
|
SetNewObjectNameInPM(ConnectedConn2.ID, ConnectedConn2.Name);
|
|
ObjParams := GetFigureParams(ConnectedConn2.ID);
|
|
ConnectedConn2.Name := ObjParams.Name;
|
|
ConnectedConn2.FIndex := ObjParams.MarkID;
|
|
SetConFigureCoordZInPM(ConnectedConn2.ID, ConnectedConn2.ActualZOrder[1]);
|
|
|
|
ConnectedLine := TOrthoLine.create(ConnectedConn1.ActualPoints[1].x, ConnectedConn1.ActualPoints[1].y, 0,
|
|
ConnectedConn2.ActualPoints[1].x, ConnectedConn2.ActualPoints[1].y, 0,
|
|
1, ord(PenStyle), clBlack, 0, LHandle, mydsNormal, vList.PCad);
|
|
vList.PCad.AddCustomFigure(2, ConnectedLine, False);
|
|
SetConFigureCoordZInPM(ConnectedLine.ID, ConnectedLine.ActualZOrder[1]);
|
|
ConnectedLine.SetJConnector1(TConnectorObject(ConnectedConn1));
|
|
ConnectedLine.SetJConnector2(TConnectorObject(ConnectedConn2));
|
|
SnapConnectorToPointObject(ConnectedConn2, vObject, False);
|
|
// Locks
|
|
ConnectedConn2.LockSelect := True;
|
|
ConnectedConn2.LockMove := True;
|
|
ConnectedConn2.LockModify := True;
|
|
|
|
ConnectedLine.FConnectingLine := True;
|
|
ConnectedLine.FConnectingPos := i;
|
|
TCADCrossObjectElement(aCadCrossObject.Elements[i]).ConnectingTraceID := ConnectedLine.ID;
|
|
ConnectedLine.Rotate(SetToAngle, ConnectedLine.ActualPoints[1]);
|
|
setdeltax := ConnectedLine.ActualPoints[2].x - ConnectedLine.JoinConnector2.ActualPoints[1].x;
|
|
setdeltay := ConnectedLine.ActualPoints[2].y - ConnectedLine.JoinConnector2.ActualPoints[1].y;
|
|
ConnectedLine.Rotate(- SetToAngle, ConnectedLine.ActualPoints[1]);
|
|
ConnectedLine.JoinConnector2.Move(setdeltax, setdeltay);
|
|
end
|
|
else
|
|
// íàéòè è ïîìåñòèòü íà íóæíûþ ïîçèöèþ
|
|
begin
|
|
ConnectedLine := TOrthoLine(GetFigureByID(vList, CADCrossObjectElement.ConnectingTraceID));
|
|
end;
|
|
// !!!
|
|
if ConnectedLine <> nil then
|
|
begin
|
|
setdeltax := SetToPoints.x - ConnectedLine.JoinConnector2.ActualPoints[1].x;
|
|
setdeltay := SetToPoints.y - ConnectedLine.JoinConnector2.ActualPoints[1].y;
|
|
ConnectedLine.JoinConnector1.Move(setdeltax, setdeltay);
|
|
ConnectedLine.JoinConnector2.Move(setdeltax, setdeltay);
|
|
ConnectedLine.FConnectingPos := i;
|
|
end;
|
|
|
|
end;
|
|
if OldConnectingTraces <> nil then
|
|
FreeAndNil(OldConnectingTraces);
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.ChangeDistribCabInterf', E.Message);
|
|
end;
|
|
EndProgress;
|
|
end;
|
|
|
|
function ExistInNewTrunkStruct(aTrace: TOrthoLine; aElements: TObjectList): Boolean;
|
|
var
|
|
i, j: integer;
|
|
begin
|
|
try
|
|
Result := False;
|
|
for i := 0 to aElements.Count - 1 do
|
|
begin
|
|
if aTrace.ID = TCADCrossObjectElement(aElements[i]).ConnectingTraceID then
|
|
begin
|
|
Result := True;
|
|
Break;
|
|
end;
|
|
end;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.ExistInNewTrunkStruct', E.Message);
|
|
end;
|
|
end;
|
|
|
|
function GetAllConnectingTraces(aObject: TConnectorObject): TList;
|
|
var
|
|
i, j: Integer;
|
|
JoinedConn: TConnectorObject;
|
|
JoinedTrace: TOrthoLine;
|
|
begin
|
|
try
|
|
Result := TList.Create;
|
|
for i := 0 to aObject.JoinedConnectorsList.Count - 1 do
|
|
begin
|
|
JoinedConn := TConnectorObject(aObject.JoinedConnectorsList[i]);
|
|
for j := 0 to JoinedConn.JoinedOrtholinesList.Count - 1 do
|
|
begin
|
|
JoinedTrace := TOrthoLine(JoinedConn.JoinedOrtholinesList[j]);
|
|
if JoinedTrace.FConnectingLine then
|
|
Result.Add(JoinedTrace);
|
|
end;
|
|
end;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.GetAllConnectingTraces', E.Message);
|
|
end;
|
|
end;
|
|
|
|
function CheckCadCrossATSTextFields(aCadCrossObject: TCADCrossObject): Double;
|
|
var
|
|
MarkSize: Double;
|
|
i, j: Integer;
|
|
MinWidth: Double;
|
|
CadCrossObjectElement: TCADCrossObjectElement;
|
|
LHandle: Integer;
|
|
TextField: TRichText;
|
|
StrText: String;
|
|
TM: TTextMetric;
|
|
xCanvas: TMetafileCanvas;
|
|
w, w1, w2: double;
|
|
begin
|
|
try
|
|
MinWidth := 6;
|
|
MarkSize := 0;
|
|
Result := MinWidth;
|
|
LHandle := GCadForm.PCad.GetLayerHandle(1);
|
|
|
|
// Check Mark ==============================================================
|
|
TextField := TRichText.create(-100, -100, -100, -100, 1, ord(psSolid), clBlack, ord(bsClear), clNone,
|
|
LHandle, mydsNormal, GCadForm.PCad);
|
|
TextField.re.Font.Name := GCadForm.FFontName;
|
|
TextField.re.Font.Size := GCadForm.FCrossATSFontSize;
|
|
TextField.re.Font.Style := [fsBold];
|
|
TextField.re.Lines.Clear;
|
|
aCadCrossObject.ComponNameMark := FastReplace(aCadCrossObject.ComponNameMark,#13#10,' ');
|
|
TextField.re.Lines.Add(aCadCrossObject.ComponNameMark);
|
|
aCadCrossObject.ComponNameShort := FastReplace(aCadCrossObject.ComponNameShort,#13#10,' ');
|
|
TextField.re.Lines.Add(aCadCrossObject.ComponNameShort);
|
|
// Tolik -- 13/01/2017
|
|
TextField.ttMetaFile:= TMetaFile.Create;
|
|
TextField.ttMetafile.Enhanced := True;
|
|
//
|
|
xCanvas := TMetafileCanvas.Create(TextField.ttMetafile, 0);
|
|
xCanvas.Font.Name := TextField.re.Font.Name;
|
|
xCanvas.Font.Size := TextField.re.Font.Size;
|
|
xCanvas.Font.Style := TextField.re.Font.Style;
|
|
GetTextMetrics(xCanvas.Handle, TM);
|
|
w1 := xCanvas.TextWidth(TextField.Re.Lines[0]);
|
|
w1 := (w1 + 3) / 4;
|
|
w2 := xCanvas.TextWidth(TextField.Re.Lines[1]);
|
|
w2 := (w2 + 3) / 4;
|
|
MarkSize := Max(w1, w2);
|
|
FreeAndNil(xCanvas);
|
|
TextField.ttMetaFile.Free;
|
|
if TextField <> nil then
|
|
FreeAndNil(TextField);
|
|
|
|
// Check Fileds
|
|
for i := 0 to aCadCrossObject.Elements.Count - 1 do
|
|
begin
|
|
CadCrossObjectElement := TCADCrossObjectElement(aCadCrossObject.Elements[i]);
|
|
// NPP
|
|
StrText := CadCrossObjectElement.Npp;
|
|
TextField := TRichText.create(-100, -100, -100, -100, 1, ord(psSolid), clBlack, ord(bsClear), clNone,
|
|
LHandle, mydsNormal, GCadForm.PCad);
|
|
TextField.re.Font.Name := GCadForm.FFontName;
|
|
TextField.re.Font.Size := GCadForm.FCrossATSFontSize;
|
|
TextField.re.Font.Style := [fsBold];
|
|
TextField.re.Lines.Clear;
|
|
StrText := FastReplace(StrText,#13#10,' ');
|
|
TextField.re.Lines.Add(StrText);
|
|
// Tolik -- 13/01/2017
|
|
TextField.ttMetaFile := TMetaFile.Create;
|
|
TextField.ttMetafile.Enhanced := True;
|
|
//
|
|
xCanvas := TMetafileCanvas.Create(TextField.ttMetafile, 0);
|
|
xCanvas.Font.Name := TextField.re.Font.Name;
|
|
xCanvas.Font.Size := TextField.re.Font.Size;
|
|
xCanvas.Font.Style := TextField.re.Font.Style;
|
|
GetTextMetrics(xCanvas.Handle, TM);
|
|
w := xCanvas.TextWidth(TextField.Re.Lines[0]);
|
|
w := (w + 3) / 4;
|
|
FreeAndNil(xCanvas);
|
|
if TextField <> nil then
|
|
FreeAndNil(TextField);
|
|
if w > Result then
|
|
Result := w;
|
|
// CableCapacity
|
|
StrText := IntToStr(CadCrossObjectElement.CableCapacity);
|
|
TextField := TRichText.create(-100, -100, -100, -100, 1, ord(psSolid), clBlack, ord(bsClear), clNone,
|
|
LHandle, mydsNormal, GCadForm.PCad);
|
|
TextField.re.Font.Name := GCadForm.FFontName;
|
|
TextField.re.Font.Size := GCadForm.FCrossATSFontSize;
|
|
TextField.re.Font.Style := [fsBold];
|
|
TextField.re.Lines.Clear;
|
|
StrText := FastReplace(StrText,#13#10,' ');
|
|
TextField.re.Lines.Add(StrText);
|
|
// Tolik -- 13/01/2017
|
|
TextField.ttMetaFile := TMetaFile.Create;
|
|
TextField.ttMetafile.Enhanced := True;
|
|
//
|
|
xCanvas := TMetafileCanvas.Create(TextField.ttMetafile, 0);
|
|
xCanvas.Font.Name := TextField.re.Font.Name;
|
|
xCanvas.Font.Size := TextField.re.Font.Size;
|
|
xCanvas.Font.Style := TextField.re.Font.Style;
|
|
GetTextMetrics(xCanvas.Handle, TM);
|
|
w := xCanvas.TextWidth(TextField.Re.Lines[0]);
|
|
w := (w + 3) / 4;
|
|
FreeAndNil(xCanvas);
|
|
TextField.ttMetaFile.Free;
|
|
if TextField <> nil then
|
|
FreeAndNil(TextField);
|
|
if w > Result then
|
|
Result := w;
|
|
// CableNameMark
|
|
StrText := CadCrossObjectElement.CableNameMark;
|
|
TextField := TRichText.create(-100, -100, -100, -100, 1, ord(psSolid), clBlack, ord(bsClear), clNone,
|
|
LHandle, mydsNormal, GCadForm.PCad);
|
|
TextField.re.Font.Name := GCadForm.FFontName;
|
|
TextField.re.Font.Size := GCadForm.FCrossATSFontSize;
|
|
TextField.re.Font.Style := [fsBold];
|
|
TextField.re.Lines.Clear;
|
|
StrText := FastReplace(StrText,#13#10,' ');
|
|
TextField.re.Lines.Add(StrText);
|
|
// Tolik -- 13/01/2017
|
|
TextField.ttMetaFile := TMetaFile.Create;
|
|
TextField.ttMetafile.Enhanced := True;
|
|
//
|
|
xCanvas := TMetafileCanvas.Create(TextField.ttMetafile, 0);
|
|
xCanvas.Font.Name := TextField.re.Font.Name;
|
|
xCanvas.Font.Size := TextField.re.Font.Size;
|
|
xCanvas.Font.Style := TextField.re.Font.Style;
|
|
GetTextMetrics(xCanvas.Handle, TM);
|
|
w := xCanvas.TextWidth(TextField.Re.Lines[0]);
|
|
w := (w + 3) / 4;
|
|
FreeAndNil(xCanvas);
|
|
TextField.ttMetaFile.Free;
|
|
if TextField <> nil then
|
|
FreeAndNil(TextField);
|
|
if w > Result then
|
|
Result := w;
|
|
// CableDiametr
|
|
StrText := FormatFloat(ffMask, CadCrossObjectElement.CableDiameter);
|
|
TextField := TRichText.create(-100, -100, -100, -100, 1, ord(psSolid), clBlack, ord(bsClear), clNone,
|
|
LHandle, mydsNormal, GCadForm.PCad);
|
|
TextField.re.Font.Name := GCadForm.FFontName;
|
|
TextField.re.Font.Size := GCadForm.FCrossATSFontSize;
|
|
TextField.re.Font.Style := [fsBold];
|
|
TextField.re.Lines.Clear;
|
|
StrText := FastReplace(StrText,#13#10,' ');
|
|
TextField.re.Lines.Add(StrText);
|
|
// Tolik -- 13/01/2017
|
|
TextField.ttMetaFile := TMetaFile.Create;
|
|
TextField.ttMetafile.Enhanced := True;
|
|
//
|
|
xCanvas := TMetafileCanvas.Create(TextField.ttMetafile, 0);
|
|
xCanvas.Font.Name := TextField.re.Font.Name;
|
|
xCanvas.Font.Size := TextField.re.Font.Size;
|
|
xCanvas.Font.Style := TextField.re.Font.Style;
|
|
GetTextMetrics(xCanvas.Handle, TM);
|
|
w := xCanvas.TextWidth(TextField.Re.Lines[0]);
|
|
w := (w + 3) / 4;
|
|
FreeAndNil(xCanvas);
|
|
TextField.ttMetaFile.Free;
|
|
if TextField <> nil then
|
|
FreeAndNil(TextField);
|
|
if w > Result then
|
|
Result := w;
|
|
end;
|
|
// correct to MarkSize
|
|
if MarkSize > Result * 4 then
|
|
begin
|
|
Result := MarkSize / 4;
|
|
end;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkdSCS.CheckCadCrossATSTextFields', E.Message);
|
|
end;
|
|
end;
|
|
|
|
function CheckCadDistribCabTextFields(aCadCrossObject: TCADCrossObject): Double;
|
|
var
|
|
MarkSize: Double;
|
|
i, j: Integer;
|
|
CadCrossObjectElement: TCADCrossObjectElement;
|
|
LHandle: Integer;
|
|
TextField: TRichText;
|
|
StrText: String;
|
|
TM: TTextMetric;
|
|
xCanvas: TMetafileCanvas;
|
|
w, w1, w2: double;
|
|
ColCount: Integer;
|
|
begin
|
|
try
|
|
Result := 4;
|
|
MarkSize := 0;
|
|
LHandle := GCadForm.PCad.GetLayerHandle(1);
|
|
|
|
// Check Mark ==============================================================
|
|
TextField := TRichText.create(-100, -100, -100, -100, 1, ord(psSolid), clBlack, ord(bsClear), clNone,
|
|
LHandle, mydsNormal, GCadForm.PCad);
|
|
TextField.re.Font.Name := GCadForm.FFontName;
|
|
TextField.re.Font.Size := GCadForm.FDistribCabFontSize;
|
|
TextField.re.Font.Style := [fsBold];
|
|
TextField.re.Lines.Clear;
|
|
aCadCrossObject.ComponNameMark := FastReplace(aCadCrossObject.ComponNameMark,#13#10,' ');
|
|
TextField.re.Lines.Add(aCadCrossObject.ComponNameMark);
|
|
aCadCrossObject.ComponNameShort := FastReplace(aCadCrossObject.ComponNameShort,#13#10,' ');
|
|
TextField.re.Lines.Add(aCadCrossObject.ComponNameShort);
|
|
// Tolik -- 13/01/2017
|
|
TextField.ttMetaFile := TMetaFile.Create;
|
|
TextField.ttMetafile.Enhanced := True;
|
|
//
|
|
xCanvas := TMetafileCanvas.Create(TextField.ttMetaFile, 0);
|
|
xCanvas.Font.Name := TextField.re.Font.Name;
|
|
xCanvas.Font.Size := TextField.re.Font.Size;
|
|
xCanvas.Font.Style := TextField.re.Font.Style;
|
|
GetTextMetrics(xCanvas.Handle, TM);
|
|
w1 := xCanvas.TextWidth(TextField.Re.Lines[0]);
|
|
w1 := (w1 + 3) / 4;
|
|
w2 := xCanvas.TextWidth(TextField.Re.Lines[1]);
|
|
w2 := (w2 + 3) / 4;
|
|
MarkSize := Max(w1, w2);
|
|
FreeAndNil(xCanvas);
|
|
TextField.ttMetaFile.Free;
|
|
if TextField <> nil then
|
|
FreeAndNil(TextField);
|
|
//
|
|
ColCount := aCadCrossObject.Elements.Count;
|
|
if MarkSize > Result * ColCount then
|
|
begin
|
|
Result := MarkSize / ColCount;
|
|
end;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('U_TrunkSCS.CheckCadDistribCabTextFields', E.Message);
|
|
end;
|
|
end;
|
|
|
|
{ TCadCrossObject }
|
|
|
|
procedure TCADCrossObject.Assign(ACADCrossObject: TCADCrossObject);
|
|
begin
|
|
try
|
|
AssignOnlyCADCrossObject(ACADCrossObject);
|
|
AssignElements(ACADCrossObject.FElements);
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('TCADCrossObject.Assign', E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure TCADCrossObject.AssignElements(AElements: TObjectList);
|
|
var
|
|
i: Integer;
|
|
CADCrossObjectElement: TCADCrossObjectElement;
|
|
begin
|
|
try
|
|
FElements.Clear;
|
|
for i := 0 to AElements.Count - 1 do
|
|
begin
|
|
CADCrossObjectElement := TCADCrossObjectElement.Create;
|
|
CADCrossObjectElement.Assign(TCADCrossObjectElement(AElements[i]));
|
|
FElements.Add(CADCrossObjectElement);
|
|
end;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('TCADCrossObject.AssignElements', E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure TCADCrossObject.AssignOnlyCADCrossObject(ACADCrossObject: TCADCrossObject);
|
|
begin
|
|
try
|
|
FComponTypeSysName := ACADCrossObject.FComponTypeSysName;
|
|
FComponNameMark := ACADCrossObject.FComponNameMark;
|
|
FComponNameShort := ACADCrossObject.FComponNameShort;
|
|
FID := ACADCrossObject.FID;
|
|
FObjectID := ACADCrossObject.FObjectID;
|
|
FListID := ACADCrossObject.FListID;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('TCADCrossObject.AssignOnlyCADCrossObject', E.Message);
|
|
end;
|
|
end;
|
|
|
|
constructor TCadCrossObject.Create;
|
|
begin
|
|
inherited;
|
|
try
|
|
FComponTypeSysName := '';
|
|
FComponNameMark := '';
|
|
FComponNameShort := '';
|
|
FID := -1;
|
|
FObjectID := -1;
|
|
FListID := -1;
|
|
FElements := TObjectList.Create(true);
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('TCadCrossObject.Create', E.Message);
|
|
end;
|
|
end;
|
|
|
|
destructor TCADCrossObject.Destroy;
|
|
begin
|
|
try
|
|
FreeAndNil(FElements);
|
|
inherited;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('TCADCrossObject.Destroy', E.Message);
|
|
end;
|
|
end;
|
|
|
|
{ TCADCrossObjectElement }
|
|
|
|
procedure TCADCrossObjectElement.Assign(ACADCrossObjectElement: TCADCrossObjectElement);
|
|
begin
|
|
try
|
|
FNpp := ACADCrossObjectElement.FNpp;
|
|
FCableCapacity := ACADCrossObjectElement.FCableCapacity;
|
|
FCableNameMark := ACADCrossObjectElement.FCableNameMark;
|
|
FCableDiameter := ACADCrossObjectElement.FCableDiameter;
|
|
FID := ACADCrossObjectElement.FID;
|
|
FIDCADCrossObject := ACADCrossObjectElement.FIDCADCrossObject;
|
|
//FIDInterface := ACADCrossObjectElement.FIDInterface;
|
|
FIDComponent := ACADCrossObjectElement.FIDComponent;
|
|
FSignType := ACADCrossObjectElement.FSignType;
|
|
FConnectingTraceID := ACADCrossObjectElement.FConnectingTraceID;
|
|
FAngle := ACADCrossObjectElement.FAngle;
|
|
FInPointX := ACADCrossObjectElement.FInPointX;
|
|
FInPointY := ACADCrossObjectElement.FInPointY;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('TCADCrossObjectElement.Assign', E.Message);
|
|
end;
|
|
end;
|
|
|
|
constructor TCADCrossObjectElement.Create;
|
|
begin
|
|
inherited;
|
|
try
|
|
FNpp := '';
|
|
FCableCapacity := 0;
|
|
FCableNameMark := '';
|
|
FCableDiameter := 0;
|
|
|
|
FID := -1;
|
|
FIDCADCrossObject := -1;
|
|
//FIDInterface := -1;
|
|
FIDComponent := -1;
|
|
FSignType := oitDefault;
|
|
|
|
FConnectingTraceID := -1;
|
|
FAngle := 0;
|
|
FInPointX := 0;
|
|
FInPointY := 0;
|
|
except
|
|
on E: Exception do AddExceptionToLogEx('TCADCrossObjectElement.Create', E.Message);
|
|
end;
|
|
end;
|
|
|
|
destructor TCADCrossObjectElement.destroy;
|
|
begin
|
|
inherited;
|
|
end;
|
|
end.
|