Ipelib
ipe::Object Class Referenceabstract

#include <ipeobject.h>

Inherited by ipe::Group, ipe::Image, ipe::Path, ipe::Reference, and ipe::Text.

Public Types

enum  Type {
  EGroup , EPath , EText , EImage ,
  EReference
}

Public Member Functions

virtual ~Object ()=0
virtual void accept (Visitor &visitor) const =0
virtual Objectclone () const =0
virtual GroupasGroup ()
virtual const GroupasGroup () const
virtual TextasText ()
virtual PathasPath ()
virtual ImageasImage ()
virtual ReferenceasReference ()
virtual Type type () const =0
virtual TPinned pinned () const
void setPinned (TPinned pin)
TTransformations transformations () const
void setTransformations (TTransformations trans)
virtual void setMatrix (const Matrix &matrix)
const Matrixmatrix () const
virtual bool setAttribute (Property prop, Attribute value)
virtual Attribute getAttribute (Property prop) const noexcept
void setCustom (Attribute value)
Attribute getCustom () const noexcept
virtual void saveAsXml (Stream &stream, String layer) const =0
virtual void draw (Painter &painter) const =0
virtual void drawSimple (Painter &painter) const =0
virtual double distance (const Vector &v, const Matrix &m, double bound) const =0
virtual void addToBBox (Rect &box, const Matrix &m, bool cp) const =0
virtual void snapVtx (const Vector &mouse, const Matrix &m, Vector &pos, double &bound) const
virtual void snapCtl (const Vector &mouse, const Matrix &m, Vector &pos, double &bound) const
virtual void snapBnd (const Vector &mouse, const Matrix &m, Vector &pos, double &bound) const
virtual void checkStyle (const Cascade *sheet, AttributeSeq &seq) const

Protected Member Functions

 Object ()
 Object (const AllAttributes &attr)
 Object (const Object &rhs)
 Object (const XmlAttributes &attr)
void saveAttributesAsXml (Stream &stream, String layer) const

Static Protected Member Functions

static void checkSymbol (Kind kind, Attribute attr, const Cascade *sheet, AttributeSeq &seq)

Protected Attributes

Matrix iMatrix
Attribute iCustom
TPinned iPinned: 8
TTransformations iTransformations: 8

Detailed Description

Base class for all Ipe objects, composite or leaf.

All objects are derived from this class. It provides functionality common to all objects, and carries the standard attributes.

All Object's provide a constant time copy constructor (and a virtual Object::clone() method). Objects of non-constant size realize this by separating the implementation and using reference counting. In particular, copying a composite object does not create new copies of the components.

Object has only three attributes: the transformation matrix, the pinning status, and the allowed transformations.

If an object is pinned, it cannot be moved at all (or only in the non-pinned direction) from the Ipe user interface.

Restricting the allowed transformations works somewhat differently: It doesn't stop transformations being applied to the object, but they only effect the position of the reference point (the origin of the object coordinate system), and (if transformations() == ETransformationsRigidMotions) the orientation of the object coordinate system.

Member Enumeration Documentation

◆ Type

Enumerator
EGroup 
EPath 
EText 
EImage 
EReference 

Constructor & Destructor Documentation

◆ ~Object()

Object::~Object ( )
pure virtual

Pure virtual destructor.

◆ Object() [1/4]

◆ Object() [2/4]

Object::Object ( const AllAttributes & attr)
explicitprotected

Create object by taking pinning/transforming from attr and setting identity matrix.

References iCustom, ipe::AllAttributes::iPinned, iPinned, ipe::AllAttributes::iTransformations, iTransformations, and ipe::Attribute::UNDEFINED().

◆ Object() [3/4]

Object::Object ( const Object & rhs)
protected

Copy constructor.

References iCustom, iMatrix, iPinned, iTransformations, and Object().

◆ Object() [4/4]

Member Function Documentation

◆ accept()

virtual void ipe::Object::accept ( Visitor & visitor) const
pure virtual

◆ clone()

virtual Object * ipe::Object::clone ( ) const
pure virtual

Make a copy of this object (constant-time).

Implemented in ipe::Group, ipe::Image, ipe::Path, ipe::Reference, and ipe::Text.

References Object().

Referenced by ipe::Symbol::operator=(), and ipe::Symbol::Symbol().

◆ asGroup() [1/2]

Group * Object::asGroup ( )
virtual

Return pointer to this object if it is an Group, nullptr otherwise.

Reimplemented in ipe::Group.

Referenced by ipe::PdfWriter::createPageView().

◆ asGroup() [2/2]

const Group * Object::asGroup ( ) const
virtual

Return pointer to this object if it is an Group, nullptr otherwise.

Reimplemented in ipe::Group.

◆ asText()

Text * Object::asText ( )
virtual

Return pointer to this object if it is an Text, nullptr otherwise.

Reimplemented in ipe::Text.

◆ asPath()

Path * Object::asPath ( )
virtual

Return pointer to this object if it is an Path, nullptr otherwise.

Reimplemented in ipe::Path.

◆ asImage()

Image * Object::asImage ( )
virtual

Return pointer to this object if it is an Image , nullptr otherwise.

Reimplemented in ipe::Image.

◆ asReference()

Reference * Object::asReference ( )
virtual

Return pointer to this object if it is an Ref, nullptr otherwise.

Reimplemented in ipe::Reference.

◆ type()

virtual Type ipe::Object::type ( ) const
pure virtual

◆ pinned()

TPinned Object::pinned ( ) const
virtual

Return pinning mode of the object.

Reimplemented in ipe::Group.

References iPinned.

Referenced by getAttribute(), ipe::Group::pinned(), ipe::Group::push_back(), and ipe::TransformTool::TransformTool().

◆ setPinned()

void Object::setPinned ( TPinned pin)

Set pinning mode of the object.

References iPinned.

◆ transformations()

◆ setTransformations()

void Object::setTransformations ( TTransformations trans)

Set allowed transformations of the object.

References iTransformations.

Referenced by ipe::Text::setAttribute().

◆ setMatrix()

void Object::setMatrix ( const Matrix & matrix)
virtual

Set the transformation matrix.

Don't use this on an Object in a Page, because it wouldn't invalidate its bounding box. Call Page::transform instead.

Reimplemented in ipe::Path.

References iMatrix, and matrix().

Referenced by ipe::Path::setMatrix(), and ipe::Page::transform().

◆ matrix()

◆ setAttribute()

◆ getAttribute()

Attribute Object::getAttribute ( Property prop) const
virtualnoexcept

Get setting of an attribute of this object.

If object does not have this attribute, returnes "undefined" attribute.

Reimplemented in ipe::Group, ipe::Image, ipe::Path, ipe::Reference, and ipe::Text.

References ipe::EPropPinned, ipe::EPropTransformations, iTransformations, pinned(), and ipe::Attribute::UNDEFINED().

Referenced by ipe::Group::getAttribute(), ipe::Image::getAttribute(), ipe::Path::getAttribute(), ipe::Reference::getAttribute(), and ipe::Text::getAttribute().

◆ setCustom()

void Object::setCustom ( Attribute value)

Set the 'custom' attribute (not used by Ipe, for users and ipelets)

References iCustom, and ipe::Attribute::isString().

◆ getCustom()

Attribute Object::getCustom ( ) const
noexcept

Return value of the 'custom' attribute.

References iCustom.

◆ saveAsXml()

virtual void ipe::Object::saveAsXml ( Stream & stream,
String layer ) const
pure virtual

Save the object in XML format.

Implemented in ipe::Group, ipe::Image, ipe::Path, ipe::Reference, and ipe::Text.

References saveAsXml().

Referenced by saveAsXml(), and ipe::Page::saveSelection().

◆ draw()

◆ drawSimple()

virtual void ipe::Object::drawSimple ( Painter & painter) const
pure virtual

Draw simple version for selecting and transforming.

Implemented in ipe::Group, ipe::Image, ipe::Path, ipe::Reference, and ipe::Text.

References drawSimple().

Referenced by drawSimple(), and ipe::Reference::drawSimple().

◆ distance()

virtual double ipe::Object::distance ( const Vector & v,
const Matrix & m,
double bound ) const
pure virtual

Return distance of transformed object to point v. If larger than bound, can just return bound.

Implemented in ipe::Group, ipe::Image, ipe::Path, ipe::Reference, and ipe::Text.

References distance().

Referenced by distance(), and ipe::Page::distance().

◆ addToBBox()

virtual void ipe::Object::addToBBox ( Rect & box,
const Matrix & m,
bool cp ) const
pure virtual

Extend box to include the object transformed by m.

For objects in a page, don't call this directly. The Page caches the bounding box of each object, so it is far more efficient to call Page::bbox.

Control points that lie outside the visual object are included if cp is true.

If called with an empty box and cp == false, the result of this function is a tight bounding box for the object, with a little leeway in case the boundary is determined by a spline (it has to be approximated to perform this operation).

Implemented in ipe::Group, ipe::Image, ipe::Path, ipe::Reference, and ipe::Text.

References addToBBox(), checkStyle(), checkSymbol(), Object(), saveAttributesAsXml(), snapBnd(), snapCtl(), and snapVtx().

Referenced by addToBBox().

◆ snapVtx()

void Object::snapVtx ( const Vector & mouse,
const Matrix & m,
Vector & pos,
double & bound ) const
virtual

Compute vertex snapping position for transformed object.

Looks only for positions closer than bound. If successful, modify pos and bound. The default implementation does nothing.

Reimplemented in ipe::Group, ipe::Path, and ipe::Reference.

Referenced by addToBBox(), and ipe::Page::snapVtx().

◆ snapCtl()

void Object::snapCtl ( const Vector & mouse,
const Matrix & m,
Vector & pos,
double & bound ) const
virtual

Compute control point snapping position for transformed object.

Looks only for positions closer than bound. If successful, modify pos and bound. The default implementation does nothing.

Reimplemented in ipe::Group, ipe::Image, ipe::Path, and ipe::Text.

Referenced by addToBBox(), and ipe::Page::snapCtl().

◆ snapBnd()

void Object::snapBnd ( const Vector & mouse,
const Matrix & m,
Vector & pos,
double & bound ) const
virtual

Compute boundary snapping position for transformed object.

Looks only for positions closer than bound. If successful, modify pos and bound. The default implementation does nothing.

Reimplemented in ipe::Group, ipe::Path, and ipe::Reference.

Referenced by addToBBox(), and ipe::Page::snapBnd().

◆ checkStyle()

void Object::checkStyle ( const Cascade * sheet,
AttributeSeq & seq ) const
virtual

Check all symbolic attributes.

Reimplemented in ipe::Group, ipe::Path, ipe::Reference, and ipe::Text.

Referenced by addToBBox(), and ipe::Document::checkStyle().

◆ saveAttributesAsXml()

◆ checkSymbol()

void Object::checkSymbol ( Kind kind,
Attribute attr,
const Cascade * sheet,
AttributeSeq & seq )
staticprotected

Check whether attribute is either absolute or defined in the style sheet cascade sheet. Add attr to seq if this is not the case.

References ipe::Cascade::findDefinition(), and ipe::Attribute::isSymbolic().

Referenced by addToBBox(), ipe::Path::checkStyle(), ipe::Reference::checkStyle(), and ipe::Text::checkStyle().

Member Data Documentation

◆ iMatrix

Matrix ipe::Object::iMatrix
protected

◆ iCustom

Attribute ipe::Object::iCustom
protected

◆ iPinned

TPinned ipe::Object::iPinned
protected

◆ iTransformations


The documentation for this class was generated from the following files: