X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fbase%2Fpreview.cpp;fp=src%2Fbase%2Fpreview.cpp;h=0000000000000000000000000000000000000000;hb=9f6ad3fe0b9cb30115a5d38e8af3aebed0d70c08;hp=c108600a7371fc0b1c73529d16939ead232c7b49;hpb=43c13b052d069ba435277d93867380d00c04931f;p=architektonas diff --git a/src/base/preview.cpp b/src/base/preview.cpp deleted file mode 100644 index c108600..0000000 --- a/src/base/preview.cpp +++ /dev/null @@ -1,209 +0,0 @@ -// preview.cpp -// -// Part of the Architektonas Project -// Originally part of QCad Community Edition by Andrew Mustun -// Extensively rewritten and refactored by James L. Hammons -// Portions copyright (C) 2001-2003 RibbonSoft -// Copyright (C) 2010 Underground Software -// See the README and GPLv2 files for licensing and warranty information -// -// JLH = James L. Hammons -// -// Who When What -// --- ---------- ----------------------------------------------------------- -// JLH 05/21/2010 Added this text. :-) -// - -#include "preview.h" - -#include "entitycontainer.h" -#include "graphicview.h" -#include "information.h" -#include "paintinterface.h" -#include "settings.h" - -/** - * Constructor. - */ -Preview::Preview(EntityContainer * parent): EntityContainer(parent), - visible(false) -{ - settings.beginGroup("Appearance"); - maxEntities = settings.value("MaxPreview", 100).toInt(); - settings.endGroup(); -} - -/** - * Destructor. - */ -Preview::~Preview() -{ -} - -/** - * Adds an entity to this preview and removes any attributes / layer - * connectsions before that. - */ -void Preview::addEntity(Entity * entity) -{ - if (entity == NULL || entity->isUndone()) - return; - - // Only border preview for complex entities: - bool addBorder = false; - - if (entity->rtti() == RS2::EntityImage || entity->rtti() == RS2::EntityHatch - || entity->rtti() == RS2::EntityInsert) - { - addBorder = true; - } - else if (entity->isContainer() && entity->rtti() != RS2::EntitySpline) - { - if (entity->countDeep() > maxEntities - countDeep()) - addBorder = true; - } - - if (addBorder) - { - Vector min = entity->getMin(); - Vector max = entity->getMax(); - - Line * l1 = new Line(this, LineData(Vector(min.x, min.y), Vector(max.x, min.y))); - Line * l2 = new Line(this, LineData(Vector(max.x, min.y), Vector(max.x, max.y))); - Line * l3 = new Line(this, LineData(Vector(max.x, max.y), Vector(min.x, max.y))); - Line * l4 = new Line(this, LineData(Vector(min.x, max.y), Vector(min.x, min.y))); - - EntityContainer::addEntity(l1); - EntityContainer::addEntity(l2); - EntityContainer::addEntity(l3); - EntityContainer::addEntity(l4); - - delete entity; - entity = NULL; - } - else - { - entity->setLayer(NULL); - entity->setSelected(false); - entity->reparent(this); - entity->setPen(Pen(Color(255, 255, 255), RS2::Width00, RS2::SolidLine)); - EntityContainer::addEntity(entity); - } -} - -/** - * Clones the given entity and adds the clone to the preview. - */ -void Preview::addCloneOf(Entity * entity) -{ - if (!entity) - return; - - Entity * clone = entity->clone(); - addEntity(clone); -} - -/** - * Adds all entities from 'container' to the preview (unselected). - */ -void Preview::addAllFrom(EntityContainer & container) -{ - int c = 0; - - for(Entity * e=container.firstEntity(); e!=NULL; e=container.nextEntity()) - { - if (c < maxEntities) - { - Entity * clone = e->clone(); - clone->setSelected(false); - clone->reparent(this); - - c += clone->countDeep(); - addEntity(clone); - // clone might be NULL after this point - } - } -} - -/** - * Adds all selected entities from 'container' to the preview (unselected). - */ -void Preview::addSelectionFrom(EntityContainer & container) -{ - int c = 0; - - for(Entity * e=container.firstEntity(); e!=NULL; e=container.nextEntity()) - { - if (e->isSelected() && c < maxEntities) - { - Entity * clone = e->clone(); - clone->setSelected(false); - clone->reparent(this); - - c += clone->countDeep(); - addEntity(clone); - // clone might be NULL after this point - } - } -} - -/** - * Adds all entities in the given range and those which have endpoints in the - * given range to the preview. - */ -void Preview::addStretchablesFrom(EntityContainer & container, const Vector & v1, - const Vector & v2) -{ - int c = 0; - - for(Entity * e=container.firstEntity(); e!=NULL; e=container.nextEntity()) - { - if (e->isVisible() && e->rtti() != RS2::EntityHatch && (e->isInWindow(v1, v2) - || e->hasEndpointsWithinWindow(v1, v2)) && c < maxEntities) - { - Entity * clone = e->clone(); - //clone->setSelected(false); - clone->reparent(this); - - c += clone->countDeep(); - addEntity(clone); - // clone might be NULL after this point - } - } -} - -void Preview::SetOffset(Vector v) -{ - offset = v; -} - -Vector Preview::Offset(void) -{ - return offset; -} - -void Preview::SetVisible(bool visibility/*= true*/) -{ - visible = visibility; -} - -bool Preview::Visible(void) -{ - return visible; -} - -void Preview::Draw(GraphicView * view, PaintInterface * painter) -{ - if (isEmpty()) - return; - - painter->setPen(Pen(Color(60, 255, 80), RS2::Width00, RS2::SolidLine)); - painter->setOffset(offset); - - // We have to traverse the container ourselves, because RS_Container::draw() - // uses drawEntity() instead of drawEntityPlain()... - for(Entity * e=firstEntity(RS2::ResolveNone); e!=NULL; e=nextEntity(RS2::ResolveNone)) - view->drawEntityPlain(e); - - painter->setOffset(Vector(0, 0)); -}