| 5717877 | Object-oriented data access framework system | Orton | 345/348 | |
| 5760786 | Simultaneous constructive solid geometry (CSG) modeling for multiple objects | Marks et al. | 345/441 | |
| 5767854 | Multidimensional data display and manipulation system and methods for using same | Anwar | 345/355 | |
| 5861889 | Three dimensional computer graphics tool facilitating movement of displayed object | Wallace | 345/433 | |
| 5867399 | System and method for creating and validating structural description of electronic system from higher-level and behavior-oriented description | Rostoker | 364/489 | |
| 5883639 | Visual software engineering system and method for developing visual prototypes and for connecting user code to them | Walton et al. | 345/473 | |
| 5889528 | Manipulation of branching graphic structures using inverse kinematics | Zhao | 345/436 | |
| 5900870 | Object-oriented computer user interface | Malone | 345/333 | |
| 5961541 | Orthopedic apparatus for walking and rehabilitating disabled persons including tetraplegic persons and for facilitating and stimulating the revival of comatose patients through the use of electronic and virtual reality units | Ferrati | 607/49 | |
| 5999179 | Platform independent computer network management client | Kekic | 345/349 | |
| 6016147 | Method and system for interactively determining and displaying geometric relationships between three dimensional objects based on predetermined geometric constraints and position of an input device | Gantt | 345/420 | |
| 6025841 | Method for managing simultaneous display of multiple windows in a graphical user interface | Finkelstein | 345/342 | |
| 6040639 | Circuit for improved load transient response in power supplies | Van Eldik | 345/433 | |
| 6040839 | Referencing system and method for three-dimensional objects displayed on a computer generated display | Van Eldick | 345/433 | |
| 6067572 | Extrinsically influenced near-optimal path apparatus and method | Jensen | 709/241 | |
| 6078329 | Virtual object display apparatus and method employing viewpoint updating for realistic movement display in virtual reality | Umeki | 345/419 | |
| 6233571 | Method and apparatus for indexing, searching and displaying data | Egger | 707/4 |
1. Field of the Invention
The present invention relates generally to computer systems providing mechanical emulation functions. More particularly, the invention pertains to a method and apparatus for providing mechanical emulation in an object oriented computing environment where position commands are received from components linked with displayed graphical objects of the computer system.
2. Description of the Prior Art
Graphical user interfaces employing an object-oriented programming paradigm are commonly used in application programs such as word processing and database programs, as well as other graphic desktop applications. A graphical user interface provides manipulable graphical objects such as icons, windows, and various controls that can be used to control underlying software or hardware represented by the graphical objects. Typically, a user interacts with the graphical user interface using a graphical pointer that is controlled by a pointing device, such as a mouse or trackball, to accomplish conventional drag and drop techniques and other graphical object manipulations.
The conventional object-oriented, graphical user interface provides an effective manner to monitor and control underlying components represented by the graphical objects. However, applications that display animation or graphical movement between connected components have required the assistance of computer programmers and specially designed custom software. Examples of such applications are computer simulation programs, mechanical emulation programs, and user display or control applications that graphically display moving components of an automated process. Accordingly, these programs are typically difficult and expensive to develop making them generally unavailable to many industries and possible applications.
As will be described in greater detail hereinafter, the method and apparatus of the present invention solves the aforementioned problems by employing an object oriented paradigm to represent connectable graphical objects and employs a number of novel features that render it highly advantageous over the prior art.
Accordingly, it is an object of this invention to provide a system and method for connecting and displaying graphical objects to provide mechanical emulation.
Another object of this invention is to provide an improved graphical user interface for connecting graphical objects for mechanical emulation applications where the graphical objects are associated with components of an automated or computer-controlled process.
Still another object of this invention is to provide object dragging and dropping techniques for connecting and manipulating graphical objects.
Yet another object of this invention is to provide a method and apparatus which can be easily used by systems engineers or designers to provide mechanical emulation having graphical objects virtually connected to one another in a graphical computing environment without having to rely upon the assistance of computer programmers and specially designed custom software.
To achieve the foregoing and other objectives, and in accordance with the purposes of the present invention a method and apparatus of operatively joining graphical objects are provided for graphically monitoring an automated process having a plurality of different types of computer-monitored components. The graphical objects are displayed on a computer display device of a computer system which includes the display device, a processor, and memory for storing the graphical objects.
The graphical objects are operatively connected to one another such that movement of a representation of one of the graphical objects on a display screen correspondingly affects the movement of a representation of another one of the graphical objects. Each of the graphical objects is typically associated with one of the computer-monitored components through data linking. Data is received from the automated process which represents position changes of the computer-monitored components. Properties of the graphical objects are updated with the data allowing the representations of graphical objects to move in response.
In accordance with an aspect of the invention, each pair of graphical objects is operatively connected to one another through an anchor point. One of the pair of graphical objects has an anchor property corresponding to rotation of the respective graphical object's representation about the anchor point.
In accordance with another aspect of the invention, the graphical objects are configured by dragging and dropping the graphical objects in a graphical window of the display screen step in response to position commands from a user interface. The graphical objects are positioned in a desired orientation relative to one another. In one preferred embodiment, the graphical objects are positioned and anchored to one another to represent physical proximity factors and physical connection factors between the different types of computer-monitored components or sub-components thereof Other objects, features and advantages of the invention will become more readily apparent upon reference to the following description when taken in conjunction with the accompanying drawings, which drawings illustrate several embodiments of the invention.
In the drawings:
The present invention generally relates to joining and manipulating graphical objects, as later described, on a computer display screen. The invention may be run on a variety of computers or computing systems including personal computers, mainframe systems, and distributed computing environments.
In the following description, numerous specific details are set forth in order to provide a thorough understanding of the present invention. It will be obvious, however, to one skilled in the art that the present invention may be practiced without many of these specific details. In other instances, well-known structures, circuits, and programming techniques have not been shown in detail in order not to unnecessarily obscure the present invention.
Referring to
The RAM
The pointer or mouse
Object oriented programming paradigms and characteristics relating to encapsulation, inheritance, and polymorphism are well known in the computer programming arts. Accordingly, for brevity, various conventional techniques and terminology have been omitted. Further information and details about these subjects, as well as C++ and OLE, may be obtained from “Inside Visual C++” by David J. Kruglinski, 1996, Microsoft Press, and “Inside OLE 2 ” by Kraig Brockschmidt, 1994, Microsoft Press, both of which are hereby incorporated by reference.
Referring to
Referring to
Referring to
Once grouped, a graphical object is formed. It should be noted that the graphical objects will also be referred to herein simply as objects. A graphical object is typically a collection of object primitives. Whatever happens to a graphical object or parent graphical object, as a group, occurs to all its children. In the preferred embodiment, each graphical object is defined as follows:
CDrawObj
CRectObj
CTextObj
CPolyobj
CProgrammable
CComplexObj
CActiveXObj
The CRectObj is an object defining a rectangle. The CTextObj is an object defining a text-based box or window and CPolyObj is an object defining a polygon type shape. The CRectObj, CTextObj and CPolyObj are configured similarly to those corresponding objects that one would find independently in Windows C++ programming or through the use of MS VBA.
CProgrammable is an object that includes anchor, spin, and rotation attributes to the CDrawObj and will be described later in more detail. CProgrammable includes CComplexOBj which is an array of CDrawObjs that provides the ability and complexity of allowing the CDrawObj to be comprised of other CDrawObjs or groups thereof. The functionality of CProgrammable with respect to anchor, spin or rotation is an important part of the present invention. In another embodiment, for example, the CDrawObj graphical object could comprise only one or more of these CProgrammable elements without the other text or geometric based objects.
Each graphical object
The Anchor property specifies the angle, in degrees, that an object can move relative to its anchor point. Its exemplary syntax is shown as:
where the Object is a required portion corresponding to the graphical object being evaluated and the double portion is an optional numeric value expressing degrees. Preferably, this value is in the range of 0 to 360 degrees.
The AnchorLock property specifies whether the anchored object maintains its original angle while rotating with its parent object. Its exemplary syntax is shown as:
where the Object is a required portion corresponding to the graphical object being evaluated and the boolean portion is an optional boolean expression that specifies whether to lock an anchor point. With the setting of the boolean to true, the anchored object's angle changes relative to its parent object. With the setting of the boolean to false, the anchored object maintains its original angle as it rotates with its parent object.
The AnchorLockAutoReturn property returns the value of the Anchor property to its original design value. Its exemplary syntax is shown as:
where the Object is a required portion corresponding to the graphical object being evaluated and the boolean portion is an optional boolean expression that specifies whether to reset the original value of the Anchor property. With the setting of the boolean to true, the anchor point position is reset to its original value. With the setting of the boolean to false, the anchor point position remains at its current value.
The AnchorX property specifies the horizontal distance between the center of the object and its anchor point. Its exemplary syntax is shown as:
where the Object is a required portion corresponding to the graphical object being evaluated and the double portion is an optional numeric expression specifying distance. The AnchorX property is expressed in twips. If the AnchorX value is positive, the anchor point is set to the right of the object's center point. If the AnchorX value is negative, the anchor point is set to the left of the object's center point. If the object is spun or rotated, or its anchor is moved, the AnchorX value of the object changes accordingly.
The AnchorY property specifies the vertical distance between the center of the object and its anchor point. Its exemplary syntax is shown as:
where the Object is a required portion corresponding to the graphical object being evaluated and the double portion is an optional numeric expression specifying distance. The AnchorY property is expressed in twips. If the AnchorY value is positive, the anchor point is set below the object's center point. If the AnchorY value is negative, the anchor point is set above the object's center point. If the object is spun or rotated, or its anchor is moved, the AnchorX value of the object changes accordingly.
The Rotation property specifies the degree of rotation of an object around its center. Its exemplary syntax is shown as:
where the Object is a required portion corresponding to the graphical object being evaluated and the double portion is an optional numeric expression specifying degree of angle. In a preferred embodiment, the value of the Rotation property can only be set during runtime. The Rotation property is expressed in twips and the value of this property changes as the object is moved left or right by the user or by code. Preferably, this value is in the range of 0 to 360 degrees.
The RotationX property specifies the distance between the center of the object and its rotation point. Its exemplary syntax is shown as:
where the Object is a required portion corresponding to the graphical object being evaluated and the double portion is an optional numeric expression specifying distance. The RotationX property is expressed in twips. If the RotationX value is positive, the rotation point is set to the right of the object's center point. If the RotationX value is negative, the rotation point is set to the left of the object's center point. If the object is spun or rotated, or its rotation point is moved, the RotationX value of the object changes accordingly.
The RotationY property specifies the distance between the center of the object and its rotation point. Its exemplary syntax is shown as:
where the Object is a required portion corresponding to the graphical object being evaluated and the double portion is an optional numeric expression specifying distance. The RotationY property is expressed in twips. If the RotationY value is positive, the rotation point is below the object's center point. If the RotationY value is negative, the rotation point is set above the object's center point. If the object is spun or rotated, or its rotation point is moved, the RotationY value of the object changes accordingly.
To add further functionality, a graphic object may also include any of the additional properties as follows: BackColor() as Color, returns or sets the background color of a graphic; ForeColor() as Color, returns or sets the foreground color of a graphic; Height() as Double, returns or sets the dimensions of a graphic; HsliderEnd() as Double, returns or sets the horizontal end position of a graphics slider of the type known in the art; HsliderEndValue() as Double, returns or sets the maximum value of the graphics slider; HsliderMouseEnabled() as Boolean, returns or sets a value indicating whether the graphics slider is enabled; HsliderStart() as Double, returns or sets the horizontal start position of the graphics slider; HsliderStartValue() as Double, returns or sets the minimum value of the graphics slider; HsliderSteps() as Double, returns or sets the amount of change to the HsliderValue property setting when the user clicks the area between the scroll graphic and the HsliderEnd property; HsliderValue() as Double, returns or sets the current position of the scroll bar, whose return value is between the values for the HsliderEndValue and HsliderStartValue properties; Left() as Double, returns or sets the distance between the internal left edge of a graphical object and the left edge of its container; Spin() as Double, returns or sets the rotation angle from the center of the graphical object; Top() as Double, returns or sets the distance between the internal top edge of a graphic and the top edge of its container; Visible() as Boolean; returns or sets a value indicating whether a graphical object is visible or hidden; VsliderEnd() as Double, returns or sets the vertical end position of the graphics slider, VsliderEndValue() as Double, returns or sets the maximum vertical value of the graphics slider; VsliderMouseEnabled() as Boolean, returns or sets a value indicating whether the graphics slider is enabled; VsliderStart() as Double, returns or sets the vertical start position of the graphics slider; VsliderStartValue() as Double, returns or sets the minimum vertical value of the graphics slider; VsliderSteps() as Double, returns or sets the amount of change to the VsliderValue property setting when the user clicks the area between the scroll graphic and the VsliderEnd property; VsliderValue() as Double, returns or sets the current position of the scroll bar, whose return value is between the values for the VsliderEndValue and VsliderStartValue properties; and Width() as Double, returns or sets the dimensions of a graphical object.
A graphical object may be composed of several other objects anchored together. When one of the several other objects is rotated or moved, it is necessary to execute a process in which the other connected objects are informed of the move and are also moved in accordance with the manner of connection. In a preferred embodiment, this functionality is achieved by a process that scans all aspects of the connections of an object to form a collection. Whenever an action is performed on one part or child of a parent object, that same action is broadcast through the collection of objects that make up that one object. In the preferred embodiment illustrated in
void CProgrammable::AddAnchorPartners(CDrawObjList& olselection, BOOL bChildrenOnly, CDrawObjList* olNonRigidParents )
It should be understood that all of the C++ pseudocode examples herein could be written in other languages. Further, in the programming arts there are numerous ways that the functionality of object anchoring could be implemented, such as by using different data structures, alternative object linking procedures, lookup tables or linked lists.
The olNonRigidParents provides a list of items that are connected to an object where the AnchorLock property is turned off. The data structure olSelection provides the list of attached objects in the exemplary embodiment. Referring to
The list olSelection can be built as follows:
CDrawObjList olselection;
olSelection.AddTail(this);
AddAnchorPartners(olSelection);
The AddTail function used above adds a new object into a collection at the end of the list. In the preferred embodiment described herein, rigid partners refers to two objects anchored together. The one object that is anchored to another has its AnchorLock flag set to True. If the AnchorLock property of an object is set to True, then it is considered rigid. If it is set to False, it is considered nonridig. Movement of rigid and nonrigid objects with respect to the AnchorLock property occurs differently as will be described later in further detail.
To find the objects anchored to a particular object at step
| if( m_pAnchorTo && (!bChildrenOnly) ) | |
| { | |
| if (olNonRigidParents==NULL) | |
| { | |
| if( !olSelection.Find(m_pAnchorTo) ) | |
| { | |
| // not in selection | |
| olSelection.AddTail (m_pAnchorTo); | |
| m_pAnchorTo−>AddAnchorPartners (olSelection, | |
| bChildrenOnly, olNonRigidParents); | |
| } | |
| } else | |
| { | |
| // only add rigid object | |
| if(m_bAnchorLock) | |
| { | |
| if( !olSelection.Find(m_pAnchorTo) ) | |
| { | |
| // not in selection yet | |
| olSelection.AddTail (m_pAnchorTo); | |
| m_pAnchorTo- | |
| >AddAnchorPartners (olSelection, bChildrenOnly, olNonRigidParents); | |
| } | |
| } else | |
| { | |
| // not rigid! just collect | |
| if( !olNonRigidParents−>Find(m_pAnchorTo) ) | |
| { | |
| olNonRigidParents−>AddTail (m_pAnchorTo); | |
| } | |
| } | |
| } | |
| } | |
To find the objects anchored from a particular object at step
| //check for children | |
| int cnt = m_arAnchorFrom.Getsize( ); | |
| for(int i=0; i<cnt i++) | |
| { | |
| if(olNonRigidParents==NULL) | |
| { | |
| // traditional implementation, collect everything | |
| if( !olSelection.Find(m_arAnchorFrom[i]) ) | |
| { | |
| // not in selection yet | |
| olSelection.AddTail (m_arAnchorFrom[i]); | |
| m_arAnchorFrom[i]- | |
| >AddAnchorPartners (olSelection, bChildrenOnly, olNonRigidParents); | |
| } | |
| } else | |
| { | |
| // only add rigid children | |
| if(m_arAnchorFrom[i]−>m_bAnchorLock) | |
| { | |
| if( !olSelection.Find(m_arAnchorFrom[i]) ) | |
| { | |
| // not in selection yet | |
| olSelection.AddTail(m_arAnchorFrom[i]); | |
| m_arAnchorFrom[i]- | |
| >AddAnchorPartners (olSelection, bChildrenOnly, olNonRigidParents); | |
| } | |
| } else | |
| { | |
| // not rigid! just collect | |
| if( !olNonRigidParents−>Find(m_arAnchorFrom[i]) | |
| } | |
| { | |
| olNonRigidParents- | |
| >AddTail (m_arAnchorFrom[i]); | |
| } | |
| } | |
| } | |
| } | |
| } | |
In the user interface described later, when a user links two objects, the user will have selected a first object and a second object. After actuating the linking or anchoring process, the first object's m
As previously discussed, once the connection tree is stored in a collection, the appropriate operations or movements on the sub-parts or objects of a complex object can be performed. Through the use of recursion, the ability to reach the finite atomic object is accomplished. When moving an object, as described later in further detail, all the objects anchored to it are moved accordingly.
In one preferred embodiment, before performing operations on these objects, the initial design state of the objects is saved at step
| pos = olSelection.GetHeadPosition( ); | |
| while(pos) | |
| { | |
| pC = (CProgrammable*) olSelection.GetNext(pos); | |
| if (!pC−>m_bWasDesignStateSaved) | |
| { | |
| pC−>SaveDesignState () ; | |
| pC−>m_bwasDesignStateSaved = TRUE; | |
| } | |
| } | |
After the design state has been saved, various rotate, spin, and movement functions can be performed to the objects at step
In summary, one embodiment of the foregoing method of manipulating and displaying graphical objects on the computer display device of the system includes the step of first creating a graphical object in an object-oriented environment and storing the graphical object in the memory of the computer system. The graphical object may be comprised of a plurality of child graphical objects where the graphical object and each of the child graphical objects has at least one property corresponding to the orientation of a representation of the respective graphical object, such as the Anchor property. Next, the graphical object is scanned by traversing through each of the child graphical objects to form a connection tree having initial values of each property of the respective graphical objects. The connection tree being preferably stored in the memory of the system. In operation, a value of the property of the graphical object will become altered from the initial value which corresponds to a change in the position of the representation of the graphical object. The representation of the graphical object will be graphically displayed on the display device by traversing through the connection tree to broadcast the altered value of the graphical object to each of the child graphical objects, recalculating the value of each property of the child graphical objects based on its initial value and the altered value of the graphical object, and displaying the representation of the graphical object including its child graphical objects on the display device with the recalculated values.
During operation of the system as previously described, it will be appreciated that the various graphical objects created will change positions relative to one another. When ending a presently running program or application, the graphical objects and the values of their present properties can be retained in the conventional manner of saving the various information to disk. However, the data structures of the graphical objects include linked lists. The pointers of these linked lists existing at the time the application or program is running are not saved to disk. Without this information, objects later reloaded and reassembled would not have the proper orientation of their graphical representations.
In a preferred embodiment illustrated in
Server and Networking
The server or data addin
In one embodiment shown in
It should be appreciated that the server could be configured in a number of manners. The server could include a separate processor operating remote from the container application with the information being transferred across the communication lines. Additionally, the server could be software based, such as RSLinx™ produced by Rockwell Software, Inc. of West Allis, Wis., installed within the same computing device that is operating the container application along with an associated I/O module or card of conventional type. As a further example, the server could be an OLE for Process Control (OPC™) server which provides a standardized mechanism to provide data from a data source, communicate the data to an application, and update the data therebetween.
An exemplary communication network of conventional design is implemented herein. The choice of network will be typically based on the type of system application. In
In an industrial automation or other time-sensitive applications, the representations or graphical images of the graphical objects are updated in substantially real-time to reflect the changes in position attributes which are represented as values of particular variables. Referring to
Referring now to
The interface
The properties window
The project explorer window
With respect to creating graphical objects
Referring now to
In this particular example, Graphic2
In one preferred embodiment, anchoring involves selecting both objects in an appropriate order to designate which object is being anchored to the other. Next, the anchoring function is actuated, such as by clicking the anchor icon
In a preferred embodiment, the anchor point can be changed at design time or at runtime. At design time, the anchor point is changed by changing the value of the horizontal distance by the AnchorX property or the value of the vertical distance by the AnchorY. The AnchorX and AnchorY properties were previously discussed and may be modified directly by the user during design time through access to the properties window
Referring to
Once the graphical objects have been anchored to one another, one can apply the necessary code or use the appropriate controls to move one of those objects at runtime. For example, a slider tool from the toolbox
Private Sub RSSlider1
Graphic2. Anchor =Value
End Sub
Accordingly, during runtime, movement of the graphical slider switch by the user with the mouse
In the preferred embodiment described above, the rotation point of an object can also be changed at design time or at runtime. The rotation point of an object represents the location around which an object is rotated. At design time or runtime, the rotation point can be changed by changing the value of the horizontal distance by the RotationX property or the value of the vertical distance by the RotationY property. These properties were previously discussed and may be modified directly by the user during design time through access to the properties window
One can also apply the necessary code or server association to rotate an object at runtime, similar to the Anchor controls previously described. As previously described and illustrated in
Interface
Referring to
During execution of Page1 from the container application
Since Graphic3 has pivoted from its anchor point
Through the foregoing example, the mechanical emulation created by the graphical objects can be appreciated. Further, for example, the robotic device
Accordingly, it can be seen that the method for joining graphical objects displayed on the graphical window of the display screen of the present invention allows movement of one of the graphical objects to correspondingly move another one of the graphical objects joined or anchored therewith. In the preferred method or system, the computer system is operated in an object-oriented environment. First and second graphical objects are provided with a representation of them being dragged in the graphical window in response to position commands from a user interface coupled with the computer system to position the representations in a desired orientation relative to one another. The first and second graphical objects are operatively joined or anchored at an anchor point. Each graphical object has an anchor property corresponding to the graphical object's position relative to its anchor point.
The method or system of graphically monitoring an automated process having a plurality of different types of computer-monitored or physical components can be summarized in one preferred embodiment by the following. First and second graphical objects are provided and operatively connected to one another such that movement of a representation of one of the graphical objects on the display screen correspondingly affects the movement of the other representation. Each of the first and second graphical objects are associated or linked with one of the plurality of different types of computer-monitored components. Data is received from the automated process where the data represents position or state changes of the computer-monitored components.
In another embodiment, the graphical objects are selected from a library database. Further, the representations of the selected objects may have a graphical shape corresponding to physical attributes or a general appearance of the computer-monitored components. Where the system is to provide mechanical emulation for user display or control purposes, during design time the user will determine a relationship between the two computer-monitored components or sub-components thereof based on a physical proximity factor and a physical connection factor. The physical proximity factor corresponds to distance or orientation between the components or the lapped relationship between. The physical connection factor relates to the manner of mechanical connection, such as a pivot point. These relationships may be inherently known by the user, obtained from visual or measured inspection of the components by the user, or among other ways, obtained from review of the component's specifications. Accordingly, once the first and second graphical objects have been created or retrieved, their representations may be graphically displaying on the display device with the physical proximity factor being represented with the orientation of the representations of the first and second graphical objects relative to one another. In some cases this may require positioning the graphical objects in lapped relationship. The physical connection factor is represented with positioning and implementing an anchor point through the anchoring process, as previously discussed, which serves to operatively connect the representations of the first and second graphical objects from that point, as well as provide a pivot point, if desired.
The physical components may correspond to actual physical components that the user may examine. Alternatively, the physical components may relate to known components having known relationships with one another or may relate only exist in a virtual sense in a proposed design to be modeled or simulated with graphical objects of the present invention.
Referring back to the previous discussion where data is received from the automated process, predetermined properties of the first and second graphical objects are then updated with the data. These properties are predetermined in the preferred embodiment by nature of their association in the data linking process. The representations of the first and second graphical objects are displayed and then moved in response to updating the predetermined properties with the data as it is received.
With respect to the use of the term “automated process,” it should be noted that this term used herein refers to those processes or system that are automated with respect to the general meaning of the term, as well as those systems that are automated through the use of some network or computer sharing or distribution of information, but not to say that all human observation, effort, or decision making has been eliminated. For example, a factory automation process may include a conveyor system or production line having a series of workstations. A user display for monitoring the factory automation process may have being configured in accordance with the teachings of the present invention where components of the process are represented and linked with graphical objects. However, the fact that some workstations or aspects of the process are not completely automated in the system does not prevent the ability of the user display from representing some of the process or its state of present operation through mechanical emulation of the accessible components of the process.
Although the invention has been described by reference to some embodiments it is not intended that the novel device be limited thereby, but that modifications thereof are intended to be included as falling within the broad scope and spirit of the foregoing disclosure, the following claims and the appended drawings.