Changeset 128 for trunk/UTrack.pas
- Timestamp:
- May 1, 2023, 11:21:30 AM (12 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/UTrack.pas
r122 r128 5 5 uses 6 6 Classes, SysUtils, Math, Generics.Collections, UGeometric, DOM, XMLRead, 7 XMLWrite, UXMLUtils ;7 XMLWrite, UXMLUtils, UItems; 8 8 9 9 type … … 22 22 function GetVector: TVector; 23 23 procedure Move(Distance: Double); 24 procedure LoadFromXmlNode(Node: TDOMNode; Points: TTrackPoints); 25 procedure SaveToXmlNode(Node: TDOMNode); 24 26 end; 25 27 26 28 { TTrackPoint } 27 29 28 TTrackPoint = class 30 TTrackPoint = class(TItem) 29 31 OwnerPoint: TObject; 30 32 Position: TPoint; 31 //PositionShift: TPoint;32 33 PositionDesigned: TPoint; 33 34 Pending: Boolean; … … 50 51 function GetDistance: Integer; 51 52 52 procedure LoadFromXmlNode(Node: TDOMNode); 53 procedure SaveToXmlNode(Node: TDOMNode); 53 class function GetClassSysName: string; override; 54 procedure LoadFromXmlNode(Node: TDOMNode); override; 55 procedure SaveToXmlNode(Node: TDOMNode); override; 54 56 constructor Create; 55 57 destructor Destroy; override; … … 58 60 { TTrackPoints } 59 61 60 TTrackPoints = class(T ObjectList<TTrackPoint>)62 TTrackPoints = class(TItems<TTrackPoint>) 61 63 Track: TTrack; 62 function AddNew: TTrackPoint; 63 procedure LoadFromXmlNode(Node: TDOMNode); 64 procedure SaveToXmlNode(Node: TDOMNode); 64 class function GetClassSysName: string; override; 65 function CreateItem: TTrackPoint; override; 65 66 end; 66 67 67 68 { TTrackLink } 68 69 69 TTrackLink = class 70 TTrackLink = class(TItem) 70 71 Points: TTrackPoints; 71 72 Shift: TPoint; 72 procedure LoadFromXmlNode(Node: TDOMNode); 73 procedure SaveToXmlNode(Node: TDOMNode); 73 class function GetClassSysName: string; override; 74 procedure LoadFromXmlNode(Node: TDOMNode); override; 75 procedure SaveToXmlNode(Node: TDOMNode); override; 74 76 constructor Create; 75 77 destructor Destroy; override; … … 78 80 { TTrackLinks } 79 81 80 TTrackLinks = class(TObjectList<TTrackLink>) 82 TTrackLinks = class(TItems<TTrackLink>) 83 class function GetClassSysName: string; override; 81 84 function SearchPoints(Point1, Point2: TTrackPoint): TTrackLink; 82 function AddNew: TTrackLink;83 procedure LoadFromXmlNode(Node: TDOMNode);84 procedure SaveToXmlNode(Node: TDOMNode);85 85 end; 86 86 87 87 { TTrack } 88 88 89 TTrack = class 89 TTrack = class(TItem) 90 90 Points: TTrackPoints; 91 91 Links: TTrackLinks; … … 96 96 constructor Create; 97 97 destructor Destroy; override; 98 procedure LoadFromXmlNode(Node: TDOMNode); 99 procedure SaveToXmlNode(Node: TDOMNode); 98 class function GetClassSysName: string; override; 99 procedure LoadFromXmlNode(Node: TDOMNode); override; 100 procedure SaveToXmlNode(Node: TDOMNode); override; 100 101 end; 101 102 … … 192 193 end; 193 194 195 procedure TTrackPosition.LoadFromXmlNode(Node: TDOMNode; Points: TTrackPoints); 196 begin 197 RelPos := ReadDouble(Node, 'RelPos', RelPos); 198 BaseTrackPoint := Points.FindById(ReadInteger(Node, 'BaseTrackPoint', 0)); 199 end; 200 201 procedure TTrackPosition.SaveToXmlNode(Node: TDOMNode); 202 begin 203 WriteDouble(Node, 'RelPos', RelPos); 204 if Assigned(BaseTrackPoint) then 205 WriteInteger(Node, 'BaseTrackPoint', BaseTrackPoint.Id) 206 else WriteInteger(Node, 'BaseTrackPoint', 0) 207 end; 208 194 209 { TTrackLinks } 210 211 class function TTrackLinks.GetClassSysName: string; 212 begin 213 Result := 'Links'; 214 end; 195 215 196 216 function TTrackLinks.SearchPoints(Point1, Point2: TTrackPoint): TTrackLink; … … 207 227 end; 208 228 209 function TTrackLinks.AddNew: TTrackLink;210 begin211 Result := TTrackLink.Create;212 end;213 214 procedure TTrackLinks.LoadFromXmlNode(Node: TDOMNode);215 var216 Node2: TDOMNode;217 NewItem: TTrackLink;218 begin219 Node2 := Node.FirstChild;220 while Assigned(Node2) and (Node2.NodeName = 'Link') do begin221 NewItem := TTrackLink.Create;222 NewItem.LoadFromXmlNode(Node2);223 Add(NewItem);224 Node2 := Node2.NextSibling;225 end;226 end;227 228 procedure TTrackLinks.SaveToXmlNode(Node: TDOMNode);229 var230 I: Integer;231 Node2: TDOMNode;232 begin233 for I := 0 to Count - 1 do begin;234 Node2 := Node.OwnerDocument.CreateElement('Link');235 Node.AppendChild(Node2);236 Items[I].SaveToXmlNode(Node2);237 end;238 end;239 240 229 { TTrackPoints } 241 230 242 function TTrackPoints.AddNew: TTrackPoint; 243 begin 244 Result := TTrackPoint.Create; 231 class function TTrackPoints.GetClassSysName: string; 232 begin 233 Result := 'Points'; 234 end; 235 236 function TTrackPoints.CreateItem: TTrackPoint; 237 begin 238 Result := inherited; 245 239 Result.Track := Track; 246 end;247 248 procedure TTrackPoints.LoadFromXmlNode(Node: TDOMNode);249 var250 Node2: TDOMNode;251 NewItem: TTrackPoint;252 begin253 Node2 := Node.FirstChild;254 while Assigned(Node2) and (Node2.NodeName = 'Point') do begin255 NewItem := TTrackPoint.Create;256 NewItem.LoadFromXmlNode(Node2);257 Add(NewItem);258 Node2 := Node2.NextSibling;259 end;260 end;261 262 procedure TTrackPoints.SaveToXmlNode(Node: TDOMNode);263 var264 I: Integer;265 Node2: TDOMNode;266 begin267 for I := 0 to Count - 1 do begin;268 Node2 := Node.OwnerDocument.CreateElement('Point');269 Node.AppendChild(Node2);270 Items[I].SaveToXmlNode(Node2);271 end;272 240 end; 273 241 … … 288 256 end; 289 257 258 class function TTrack.GetClassSysName: string; 259 begin 260 Result := 'Track'; 261 end; 262 290 263 procedure TTrack.LoadFromXmlNode(Node: TDOMNode); 291 begin 292 Points.LoadFromXmlNode(Node); 293 Links.LoadFromXmlNode(Node); 264 var 265 NewNode: TDOMNode; 266 begin 267 NewNode := Node.FindNode(DOMString(TTrackPoints.GetClassSysName)); 268 if Assigned(NewNode) then 269 Points.LoadFromXmlNode(NewNode); 270 271 NewNode := Node.FindNode(DOMString(TTrackLinks.GetClassSysName)); 272 if Assigned(NewNode) then 273 Links.LoadFromXmlNode(NewNode); 294 274 end; 295 275 296 276 procedure TTrack.SaveToXmlNode(Node: TDOMNode); 297 begin 298 Points.SaveToXmlNode(Node); 299 Links.SaveToXmlNode(Node); 277 var 278 NewNode: TDOMNode; 279 begin 280 Points.RebuildItemsId; 281 Links.RebuildItemsId; 282 283 NewNode := Node.OwnerDocument.CreateElement(DOMString(TTrackPoints.GetClassSysName)); 284 Node.AppendChild(NewNode); 285 Points.SaveToXmlNode(NewNode); 286 287 NewNode := Node.OwnerDocument.CreateElement(DOMString(TTrackLinks.GetClassSysName)); 288 Node.AppendChild(NewNode); 289 Links.SaveToXmlNode(NewNode); 300 290 end; 301 291 … … 322 312 P1 := Points[Index1].PositionDesigned; 323 313 P2 := Points[Index2].PositionDesigned; 324 NewTrackPoint := Points. AddNew;314 NewTrackPoint := Points.CreateItem; 325 315 Delta := Point(P2.X - P1.X, P2.Y - P1.Y); 326 316 if Abs(Delta.X) > Abs(Delta.Y) then begin … … 357 347 { TTrackLink } 358 348 349 class function TTrackLink.GetClassSysName: string; 350 begin 351 Result := 'Link'; 352 end; 353 359 354 procedure TTrackLink.LoadFromXmlNode(Node: TDOMNode); 360 355 begin 361 356 inherited; 362 357 end; 363 358 364 359 procedure TTrackLink.SaveToXmlNode(Node: TDOMNode); 365 360 begin 366 361 inherited; 367 362 end; 368 363 … … 416 411 417 412 // Add new link to both self and connected track point 418 NewLink := Track.Links. AddNew;413 NewLink := Track.Links.CreateItem; 419 414 NewLink.Points.Add(TrackPoint); 420 415 NewLink.Points.Add(Self); … … 530 525 end; 531 526 527 class function TTrackPoint.GetClassSysName: string; 528 begin 529 Result := 'Point'; 530 end; 531 532 532 procedure TTrackPoint.LoadFromXmlNode(Node: TDOMNode); 533 533 begin 534 inherited; 534 535 Position.X := ReadInteger(Node, 'PositionX', Position.X); 535 536 Position.Y := ReadInteger(Node, 'PositionY', Position.Y); 537 PositionDesigned.X := ReadInteger(Node, 'PositionDesignedX', PositionDesigned.X); 538 PositionDesigned.Y := ReadInteger(Node, 'PositionDesignedY', PositionDesigned.Y); 536 539 end; 537 540 538 541 procedure TTrackPoint.SaveToXmlNode(Node: TDOMNode); 539 542 begin 543 inherited; 540 544 WriteInteger(Node, 'PositionX', Position.X); 541 545 WriteInteger(Node, 'PositionY', Position.Y); 546 WriteInteger(Node, 'PositionDesignedX', PositionDesigned.X); 547 WriteInteger(Node, 'PositionDesignedY', PositionDesigned.Y); 542 548 end; 543 549 … … 554 560 FreeAndNil(NeighLinks); 555 561 FreeAndNil(NeighPoints); 562 Track := nil; 563 OwnerPoint := nil; 556 564 inherited; 557 565 end;
Note:
See TracChangeset
for help on using the changeset viewer.