// // Node.h // TikZiT // // Copyright 2010 Aleks Kissinger. All rights reserved. // // // This file is part of TikZiT. // // TikZiT is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // TikZiT is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with TikZiT. If not, see . // // Node : store the data associated with a node. #import #import "NodeStyle.h" #import "GraphElementData.h" @class GraphElementProperty; @class Shape; @class Transformer; /*! @class Node @brief A graph node, with associated location and style data. */ @interface Node : NSObject { NSPoint point; NodeStyle *style; NSString *name; NSString *label; GraphElementData *data; } /*! @property shape @brief The shape to use @detail This is a convenience property that resolves the shape name from the style, and uses a circle if there is no style. This property is NOT KVO-compliant */ @property (readonly) Shape *shape; /*! @property point @brief The point where this node is located. */ @property (assign) NSPoint point; /*! @property style @brief The style of this node. */ @property (retain) NodeStyle *style; /*! @property name @brief The name of this node. This is a temporary name and may change between successive TikZ outputs. */ @property (copy) NSString *name; /*! @property label @brief The latex label that appears on this node. */ @property (copy) NSString *label; /*! @property data @brief Associated extra data. */ @property (copy) GraphElementData *data; // KVC methods - (void) insertObject:(GraphElementProperty*)gep inDataAtIndex:(NSUInteger)index; - (void) removeObjectFromDataAtIndex:(NSUInteger)index; - (void) replaceObjectInDataAtIndex:(NSUInteger)index withObject:(GraphElementProperty*)gep; /*! @brief Initialize a new node with the given point. @param p a point. @result A node. */ - (id)initWithPoint:(NSPoint)p; /*! @brief Initialize a new node at (0,0). @result A node. */ - (id)init; /*! @brief Composes the shape transformer with another transformer @param t The transform to apply before the shape transform @result A transformer that first maps according to t, then according to -shapeTransformer. */ - (Transformer*) shapeTransformerFromTransformer:(Transformer*)t; /*! @brief A transformer that may be used to convert the shape to the right position and scale */ - (Transformer*) shapeTransformer; /*! @brief The bounding rect in the given co-ordinate system @detail This is the bounding rect of the shape (after being suitably translated and scaled). The label is not considered. @param shapeTrans The mapping from graph co-ordinates to the required co-ordinates @result The bounding rectangle */ - (NSRect) boundsUsingShapeTransform:(Transformer*)shapeTrans; /*! @brief The bounding rect in graph co-ordinates @detail This is the bounding rect of the shape (after being suitably translated and scaled). The label is not considered. */ - (NSRect) boundingRect; /*! @brief Try to attach a style of the correct name from the given style list. @param styles an array of styles. @result YES if successfully attached, NO otherwise. */ - (BOOL)attachStyleFromTable:(NSArray*)styles; /*! @brief Set node properties from GraphElementData. */ - (void)updateData; /*! @brief Set properties of this node to match the given node. @param nd a node to mimic. */ - (void)setPropertiesFromNode:(Node *)nd; /*! @brief Compare a node to another node using a lex ordering on coordinates. @param nd another node. @result A comparison result. */ - (NSComparisonResult)compareTo:(id)nd; /*! @brief Factory method to construct a node with the given point. @param p a point. @result A node. */ + (Node*)nodeWithPoint:(NSPoint)p; /*! @brief Factory method to construct a node at (0,0). @result A node. */ + (Node*)node; @end // vi:ft=objc:noet:ts=4:sts=4:sw=4