summaryrefslogtreecommitdiffstats
path: root/kig/objects/vector_type.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kig/objects/vector_type.cpp')
-rw-r--r--kig/objects/vector_type.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/kig/objects/vector_type.cpp b/kig/objects/vector_type.cpp
new file mode 100644
index 00000000..d96be07b
--- /dev/null
+++ b/kig/objects/vector_type.cpp
@@ -0,0 +1,100 @@
+// Copyright (C) 2004 Dominique Devriese <devriese@kde.org>
+
+// This program 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 2
+// of the License, or (at your option) any later version.
+
+// This program 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 this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+// 02110-1301, USA.
+
+#include "vector_type.h"
+
+#include "point_imp.h"
+#include "other_imp.h"
+#include "bogus_imp.h"
+
+static const ArgsParser::spec argsspecVector[] =
+{
+ { PointImp::stype(), I18N_NOOP( "Construct a vector from this point" ),
+ I18N_NOOP( "Select the start point of the new vector..." ), true },
+ { PointImp::stype(), I18N_NOOP( "Construct a vector to this point" ),
+ I18N_NOOP( "Select the end point of the new vector..." ), true }
+};
+
+KIG_INSTANTIATE_OBJECT_TYPE_INSTANCE( VectorType )
+
+VectorType::VectorType()
+ : ObjectABType( "Vector", argsspecVector, 2 )
+{
+}
+
+VectorType::~VectorType()
+{
+}
+
+const VectorType* VectorType::instance()
+{
+ static const VectorType t;
+ return &t;
+}
+
+ObjectImp* VectorType::calc( const Coordinate& a, const Coordinate& b ) const
+{
+ return new VectorImp( a, b );
+}
+
+const ObjectImpType* VectorType::resultId() const
+{
+ return VectorImp::stype();
+}
+
+static const ArgsParser::spec argsspecVectorSum[] =
+{
+ { VectorImp::stype(), I18N_NOOP( "Construct the vector sum of this vector and another one." ),
+ I18N_NOOP( "Select the first of the two vectors of which you want to construct the sum..." ), false },
+ { VectorImp::stype(), I18N_NOOP( "Construct the vector sum of this vector and the other one." ),
+ I18N_NOOP( "Select the other of the two vectors of which you want to construct the sum..." ), false },
+ { PointImp::stype(), I18N_NOOP( "Construct the vector sum starting at this point." ),
+ I18N_NOOP( "Select the point to construct the sum vector in..." ), false }
+};
+
+KIG_INSTANTIATE_OBJECT_TYPE_INSTANCE( VectorSumType )
+
+VectorSumType::VectorSumType()
+ : ArgsParserObjectType( "VectorSum", argsspecVectorSum, 3 )
+{
+}
+
+VectorSumType::~VectorSumType()
+{
+}
+
+const VectorSumType* VectorSumType::instance()
+{
+ static const VectorSumType t;
+ return &t;
+}
+
+ObjectImp* VectorSumType::calc( const Args& args, const KigDocument& ) const
+{
+ if ( ! margsparser.checkArgs( args ) ) return new InvalidImp;
+
+ const VectorImp& a = *static_cast<const VectorImp*>( args[0] );
+ const VectorImp& b = *static_cast<const VectorImp*>( args[1] );
+ const PointImp& p = *static_cast<const PointImp*>( args[2] );
+
+ return new VectorImp( p.coordinate(), p.coordinate() + a.dir() + b.dir() );
+}
+
+const ObjectImpType* VectorSumType::resultId() const
+{
+ return VectorImp::stype();
+}