All Types
Name | Unit | Description |
---|---|---|
PLQTAgglomerationArray | uLazQuadTree | PLQTAgglomerationArray, an pointer to an array of TLazQuadTreeAgglomerationRec |
TLineRectInteraction | uLazQuadTreeGeometry | TLineRectInteraction defines the three possible interactions between a line and a rectangle. |
TLQTAgglomerationArray | uLazQuadTree | TLQTAgglomerationArray an array of TLazQuadTreeAgglomerationRec |
TLQTAgglomerationEnumerationCallBack | uLazQuadTree | TLQTAgglomerationEnumerationCallBack is used in the Agglomeration Enumeration and is called for every build agglomeration Parameters ANode contains the operated node. ATreeAgglomerationRec contains the agglomerated data for this node AUserData is passed unchanged from the function call and may be used by the callback-function to identify data, avoiding the usage of global variable. |
TLQTCreateNodeEvent | uLazQuadTree | TLQTCreateNodeEvent An Event which has to return a new created QuadNode. This event could be used to insert derived nodes into the QuadTree. Parameter AOwner the tree where the node belongs to. AParentNode the parent node (if Assigned, otherwise RootNode) ALQTRect the NodeRectangle (see ANodeToken) for an important remark. ANodeToken if the parameter is 0 then the function has to create an node by the provided information in the passed Owner and ParentNode. The function may decide to return Nil, in this case the caller will create a default Node. If the parameter is not 0 then the value is derived from DefaultLQTNodeToken = $81780000, with a different value at the lower two bytes. In this case the passed value comes from a Stream which is about to be read and the value identify the class which has to be created. In this case the function has to create a class, which is able to read the data from the stream. If this is not possible return Nil Result the creeated class. If the ANodeToken is 0 then Nil will be fine, else the stream reading process ends with an Exception. |
TLQTDynDoubleArr | uLazQuadTreeGeometry | TLQTDynDoubleArr an ordinary dynamic double array, to allow out parameters to set the length within the called function |
TLQTGetItemCaptionEvent | uLazQuadTree | TLQTGetItemCaptionEvent An event which can return a Caption (title, descriptive string) of the item. If the item has not such a Caption than the result shlould return false Return True if the Caption is valid, False if not. |
TLQTGetItemCoordEvent | uLazQuadTree | TLQTGetItemCoordEvent An event which has to return an X and a Y Coordinate for the given ItemIndex. Return True if the return values AX and AY are valid, False if not. |
TLQTGetItemRectEvent | uLazQuadTree | TLQTGetItemRectEvent An event which may return an Rect which contains the entire item. If the item has no Rect, the Event should return false. Return True if the return value AItemRect is valid, False if not. |
TLQTGetNodeChildRectEvent | uLazQuadTree | TLQTGetNodeChildRectEvent This event is called whenever a queried ChildRect Size is variable, e.g. not fixed by other childrens positions. It allows to modify the suggested ChildRect. The purpose is to shift the borders between the newly created children so that a uniform distribution of the items between the nodes are possible. If using non point items (e.g. Shapes of countries, tracks) a good selection of borders, help to avoid inefficent long list of Items at a high level. On a globe, the 0°-Longitude crosses a long list of countries, which by default all will be placed on the root node. By moving the division to -25° this could be reduced to one country. Caution: Asking the AParentNode for other ChildRects may cause a recursive call of this event! Asking the ParentNode for its NodeRect is always possible since this Rect is fixed. The parameters AChangeAllowedTop, ... , ...Left indicates, which of the field of the AChildRect could be modified. Modification of the not allowed fields are ignored. |
TLQTItemEnumerationCallBack | uLazQuadTree | TLQTItemEnumerationCallBack This event is used in the enumeration function. It will be called for each found Item. Parameters Sender is the tree to which the node belongs ANode contains the found node. ANodeItem contains the Item. ANodeItemIndex contains the index of the ANodeItem in the NodeItems-Array. AUserData is passed unchanged from the function call and may be used by the callback-function to identify data, avoiding the usage of global variable. |
TLQTNodeChildLocation | uLazQuadTree | TLQTNodeChildLocation the Index of the four ChildNodes |
TLQTNodeEnumerationCallBack | uLazQuadTree | TLQTNodeEnumerationCallBack This event/callback is used in the enumeration functions. It will be called for each found Node. Parameters Sender is the tree to which the node belongs ANode contains the found node. AUserData is passed unchanged from the function call and may be used by the callback-function to identify data, avoiding the usage of global variable. |
TLQTPointArr | uLazQuadTreeGeometry | TLQTPointArr contains 0 to some TLQTPoint records |
TLQTReadStreamItemEvent | uLazQuadTree | TLQTReadStreamItemEvent The event is used within the tree stream reading method. An event which has to read an Object from the given Stream. Depending from the Tree.OwnsObjects property the returned object has to be a real created object (True) or arbitrary data (False). The first DWord of the Stream contains a UserValue <> 0 that describes the following data. Most common is this an UserID where the User code knows what Object to create. The second DWord of the Stream contains the length of the remaining data. If this value is 0, no bytes are following. |
TLQTRectArray | uLazQuadTreeGeometry | TLQTRectArray an open array of TLQTRect |
TLQTRectOverlapKind | uLazQuadTreeGeometry | TLazQuadNodeAreaOverlap kind of overlapping between two rectangles A and B Overlapping: None Partly Inside Equal Fully +–+ +—+ +—–+ +—+ +—–+ |A | | A+–+ |A+-+ | | a | |B... | +–+ +–+ +- |B | | |B| | | B | | .a. | |B | +–+ | +-+ | +—+ | ... | +–+ +—- + +—- + |
TLQTWorldModel | uLazQuadTreeGeometry | TLQTWorldModel This unit covers three world models: flat, cylindrical and toroidal. *On a flat world* - Rectangles could be up to infinity size. Using infinity is not recommended, due to several limitations. - Two rectangles may form only one single overlapping area. - A straight line is defined by it's two points, a Polyline is performed by a an ordered list of points, a Polygon is closed by the last point of a line having the same value as the first. *On a cylindrical world* - Rectangles could be up to infinity size. Using infinity is not recommended, due to several limitations. - Rectangles could pass the right and left border of the world, by extent on the opposite part of the world. Since (as defined) the upper-left corner is always above and left from the bottom-right corner, a rectangle (following the world map example as above) with left = +5 and right = -3 is valid. Starting with X = 5 and increasing the value to move right(!) until X = 179, we will soon pass 180 = -180 and traveling further until the right(!) border at -3. - Two rectangles may form one or two overlapping areas. Under which circumstances a secondary overlapping area exists? Example: The Y-Axis could be ignored in the explanation, assuming that the height of the two rectangles are same as the world heights. The rectangle A covers: Dublin (X: -7) to Hamburg (X: +10). The rectangle B covers: Amsterdam (X: +5) to Liverpool (X: -3). Be aware that the rectangle B is very long and reaches around the east-west-border. So there exists one overlapping area from Dublin (X: -7) to Liverpool (X: -3) and a second one from Amsterdam (X: +5) to Hamburg (X: +10). Dublin Liverp. Amstd. Hamburg -180 =========== -7 == -3 ===== +5 ==== +10 ================ 180 Rect A AAAAAAAAAAAAAAAAAAAAAAAAAA Rect B BBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB Overlap 1 11111111111 Overlap 2 22222222 - A straight line is defined by it's two points, a Polygon is performed by a an ordered list of points. WARNING: In contrast to rectangles, lines between two points can not pass the world's border! It is not possible to create straight lines (and subsequently polygons) passing the worlds border like the rectangles above. This is caused by the fact, that e.g. a line between New York and Sydney could be drawn in two ways, one across Africa, one across the Pacific Ocean. While on a single line it would be possible to define that the first point should be always left of the second point, this approach failed in polygons. To avoid any ambiguity, line points are only allowed to be within range of the world's extension. Thus polygons are also not allowed to pass the east-west-border. Forming the rectangle B in the example above by a polygon, it is necesarry to define two separate polygons. *On a toroid-World* the capabilities of the cylindrical-World are extent in the Y-axis (Top to Bottom). - Rectangles could pass the top and bottom border of the world, by extent on the opposite part of the world. - Two rectangles may form up to four overlapping rectangles Example: Diagram 1 shows Rectangle A: (Left, Top, Right, Bottom) 2,2, 7,7 Diagram 2 shows Rectangle B: (Left, Top, Right, Bottom) 6,6, 3,3 0123456789 0123456789 0123456789 0123456789 +———-+ +———-+ +———-+ +———-+ 0 | | 0 |BBB BBBB| 0 |... ....| 0 | | 1 | | 1 |BBB BBBB| 1 |... ....| 1 | | 2 | AAAAA | 2 |BBB BBBB| 2 |..1***2...| 2 | 1 2 | 3 | AAAAA | 3 | | 3 | ***** | 3 | | 4 | AAAAA | 4 | | 4 | ***** | 4 | | 5 | AAAAA | 5 | | 5 | ***** | 5 | | 6 | AAAAA | 6 |BBB BBBB| 6 |..3***4...| 6 | 3 4 | 7 | AAAAA | 7 |BBB BBBB| 7 |... ....| 7 | | 8 | | 8 |BBB BBBB| 8 |... ....| 8 | | 9 | | 9 |BBB BBBB| 9 |... ....| 9 | | +———-+ +———-+ +———-+ +———-+ Diagram 1 Diagram 2 Diagram 3 Diagram 4 Be aware that going from the upper-left corner (6,6) of the rectangle B to the lower right corner, after reaching the point 9,9 (the lower right corner of the world), the next more right an more downward(!) point is the overflow to 0,0, which is the upper left corner of the world! Diagram 3 shows all rectangles (A = '*', B = '.' and the four overlapping rectangles '1' to '4'. Diagram 4 only the overlapping rectangles '1' to '4'. - The limitations of Lines and Polygons are the same as for the cylindrical world! |
TLQTWriteStreamItemEvent | uLazQuadTree | TLQTWriteStreamItemEvent The event is used within the tree stream reading method. An event which has to write an Object to the given Stream. The data is user dependend, but has to follow the general rule of writing data into the .lqtf-File. The first DWord that is written to the Stream mus be an UserID which allows the User code to reconstruct the data on the read procedure. The second DWord will contain the dta length of the remaining data. To ease the write process this value is calculated by the caller, but the space must reserved, by writing an DWord value 0 |
Generated by PasDoc 0.16.0.