src/ldtypes.cpp

changeset 455
c5d14d112034
parent 447
b2bd8fb41781
child 458
cb360f4d8979
--- a/src/ldtypes.cpp	Sat Aug 17 11:48:27 2013 +0300
+++ b/src/ldtypes.cpp	Sun Aug 18 15:33:00 2013 +0300
@@ -29,17 +29,16 @@
 List<LDObject*> g_LDObjects;
 
 // =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
 // LDObject constructors
+// -----------------------------------------------------------------------------
 LDObject::LDObject() :
 	m_hidden (false),
 	m_selected (false),
 	m_parent (null),
 	m_file (null),
 	qObjListEntry (null),
-	m_glinit (false) {
-	
+	m_glinit (false)
+{
 	// Determine ID
 	int32 id = 1; // 0 is invalid
 	
@@ -51,9 +50,11 @@
 	g_LDObjects << this;
 }
 
+// =============================================================================
 // Default implementations for LDObject's virtual methods. These should never be
 // actually called, for a subclass-less LDObject should never come into existance.
 // These exist only to satisfy the linker.
+// -----------------------------------------------------------------------------
 LDObject::Type LDObject::getType() const {
 	return LDObject::Unidentified;
 }
@@ -79,6 +80,7 @@
 }
 
 // =============================================================================
+// -----------------------------------------------------------------------------
 void LDObject::setVertexCoord (int i, Axis ax, double value) {
 	vertex v = getVertex (i);
 	v[ax] = value;
@@ -88,10 +90,13 @@
 LDErrorObject::LDErrorObject() {}
 
 // =============================================================================
+// -----------------------------------------------------------------------------
 str LDCommentObject::raw() {
 	return fmt ("0 %1", text);
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 str LDSubfileObject::raw() {
 	str val = fmt ("1 %1 %2 ", color(), position());
 	val += transform().stringRep();
@@ -100,6 +105,8 @@
 	return val;
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 str LDLineObject::raw() {
 	str val = fmt ("2 %1", color());
 	
@@ -109,6 +116,8 @@
 	return val;
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 str LDTriangleObject::raw() {
 	str val = fmt ("3 %1", color());
 	
@@ -118,6 +127,8 @@
 	return val;
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 str LDQuadObject::raw() {
 	str val = fmt ("4 %1", color());
 	
@@ -127,6 +138,8 @@
 	return val;
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 str LDCondLineObject::raw() {
 	str val = fmt ("5 %1", color());
 	
@@ -137,21 +150,26 @@
 	return val;
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 str LDErrorObject::raw() {
 	return contents;
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 str LDVertexObject::raw() {
 	return fmt ("0 !LDFORGE VERTEX %1 %2", color(), pos);
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 str LDEmptyObject::raw() {
 	return "";
 }
 
 // =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
+// -----------------------------------------------------------------------------
 const char* LDBFCObject::statements[] = {
 	"CERTIFY CCW",
 	"CCW",
@@ -170,8 +188,7 @@
 }
 
 // =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
+// -----------------------------------------------------------------------------
 List<LDTriangleObject*> LDQuadObject::splitToTriangles() {
 	// Create the two triangles based on this quadrilateral:
 	// 0---3       0---3    3
@@ -193,8 +210,7 @@
 }
 
 // =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
+// -----------------------------------------------------------------------------
 void LDObject::replace (LDObject* other) {
 	long idx = getIndex();
 	assert (idx != -1);
@@ -207,8 +223,7 @@
 }
 
 // =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
+// -----------------------------------------------------------------------------
 void LDObject::swap (LDObject* other) {
 	for (LDObject*& obj : *file()) {
 		if (obj == this)
@@ -220,11 +235,15 @@
 	file()->addToHistory (new SwapHistory (id(), other->id()));
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 LDLineObject::LDLineObject (vertex v1, vertex v2) {
 	setVertex (0, v1);
 	setVertex (1, v2);
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 LDObject::~LDObject() {
 	// Remove this object from the selection array if it is there.
 	for (ulong i = 0; i < g_win->sel().size(); ++i)
@@ -242,8 +261,7 @@
 }
 
 // =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
+// -----------------------------------------------------------------------------
 static void transformObject (LDObject* obj, matrix transform, vertex pos, short parentcolor) {
 	switch (obj->getType()) {
 	case LDObject::Line:
@@ -279,8 +297,7 @@
 }
 
 // =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
+// -----------------------------------------------------------------------------
 List<LDObject*> LDSubfileObject::inlineContents (bool deep, bool cache) {
 	List<LDObject*> objs, objcache;
 
@@ -335,8 +352,7 @@
 }
 
 // =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
+// -----------------------------------------------------------------------------
 long LDObject::getIndex() const {
 #ifndef RELEASE
 	assert (file() != null);
@@ -350,8 +366,7 @@
 }
 
 // =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
+// -----------------------------------------------------------------------------
 void LDObject::moveObjects (List<LDObject*> objs, const bool up) {
 	if (objs.size() == 0)
 		return;
@@ -391,6 +406,8 @@
 		g_win->R()->compileObject (obj);
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 str LDObject::typeName (LDObject::Type type) {
 	LDObject* obj = LDObject::getDefault (type);
 	str name = obj->typeName();
@@ -399,8 +416,7 @@
 }
 
 // =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
+// -----------------------------------------------------------------------------
 str LDObject::objectListContents (const List<LDObject*>& objs) {
 	bool firstDetails = true;
 	str text = "";
@@ -436,6 +452,7 @@
 }
 
 // =============================================================================
+// -----------------------------------------------------------------------------
 LDObject* LDObject::topLevelParent() {
 	if (!parent())
 		return this;
@@ -449,6 +466,7 @@
 }
 
 // =============================================================================
+// -----------------------------------------------------------------------------
 LDObject* LDObject::next() const {
 	long idx = getIndex();
 	assert (idx != -1);
@@ -460,6 +478,7 @@
 }
 
 // =============================================================================
+// -----------------------------------------------------------------------------
 LDObject* LDObject::prev() const {
 	long idx = getIndex();
 	assert (idx != -1);
@@ -471,45 +490,55 @@
 }
 
 // =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
+// -----------------------------------------------------------------------------
 void LDObject::move (vertex vect)    { (void) vect; }
 void LDEmptyObject::move (vertex vect)     { (void) vect; }
 void LDBFCObject::move (vertex vect)       { (void) vect; }
 void LDCommentObject::move (vertex vect)   { (void) vect; }
 void LDErrorObject::move (vertex vect) { (void) vect; }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 void LDVertexObject::move (vertex vect) {
 	pos += vect;
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 void LDSubfileObject::move (vertex vect) {
 	setPosition (position() + vect);
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 void LDLineObject::move (vertex vect) {
 	for (short i = 0; i < 2; ++i)
 		setVertex (i, getVertex (i) + vect);
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 void LDTriangleObject::move (vertex vect) {
 	for (short i = 0; i < 3; ++i)
 		setVertex (i, getVertex (i) + vect);
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 void LDQuadObject::move (vertex vect) {
 	for (short i = 0; i < 4; ++i)
 		setVertex (i, getVertex (i) + vect);
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 void LDCondLineObject::move (vertex vect) {
 	for (short i = 0; i < 4; ++i)
 		setVertex (i, getVertex (i) + vect);
 }
 
 // =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
+// -----------------------------------------------------------------------------
 #define CHECK_FOR_OBJ(N) \
 	if (type == LDObject::N) \
 		return new LD##N##Object;
@@ -531,14 +560,15 @@
 }
 
 // =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
+// -----------------------------------------------------------------------------
 void LDObject::invert() {}
 void LDBFCObject::invert() {}
 void LDEmptyObject::invert() {}
 void LDCommentObject::invert() {}
 void LDErrorObject::invert() {}
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 void LDTriangleObject::invert() {
 	// Triangle goes 0 -> 1 -> 2, reversed: 0 -> 2 -> 1.
 	// Thus, we swap 1 and 2.
@@ -549,6 +579,8 @@
 	return;
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 void LDQuadObject::invert() {
 	// Quad: 0 -> 1 -> 2 -> 3
 	// rev:  0 -> 3 -> 2 -> 1
@@ -558,6 +590,8 @@
 	setVertex (3, tmp);
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 void LDSubfileObject::invert() {
 	// Subfiles are inverted when they're prefixed with
 	// a BFC INVERTNEXT statement. Thus we need to toggle this status.
@@ -583,6 +617,8 @@
 	file()->insertObj (idx, bfc);
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 static void invertLine (LDObject* line) {
 	// For lines, we swap the vertices. I don't think that a
 	// cond-line's control points need to be swapped, do they?
@@ -602,6 +638,7 @@
 void LDVertexObject::invert() {}
 
 // =============================================================================
+// -----------------------------------------------------------------------------
 LDLineObject* LDCondLineObject::demote() {
 	LDLineObject* repl = new LDLineObject;
 	
@@ -614,6 +651,8 @@
 	return repl;
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 LDObject* LDObject::fromID (int id) {
 	for (LDObject* obj : g_LDObjects)
 		if (obj->id() == id)
@@ -623,6 +662,7 @@
 }
 
 // =============================================================================
+// -----------------------------------------------------------------------------
 str LDOverlayObject::raw() {
 	return fmt ("0 !LDFORGE OVERLAY %1 %2 %3 %4 %5 %6",
 		filename(), camera(), x(), y(), width(), height());
@@ -638,6 +678,7 @@
 // Hook the set accessors of certain properties to this changeProperty function.
 // It takes care of history management so we can capture low-level changes, this
 // makes history stuff work out of the box.
+// -----------------------------------------------------------------------------
 template<class T> void changeProperty (LDObject* obj, T* ptr, const T& val) {
 	if (obj->file()) {
 		long idx = obj->getIndex();
@@ -650,6 +691,8 @@
 		*ptr = val;
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 READ_ACCESSOR (short, LDObject::color) {
 	return m_color;
 }
@@ -658,6 +701,8 @@
 	changeProperty (this, &m_color, val);
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 const vertex& LDObject::getVertex (int i) const {
 	return m_coords[i];
 }
@@ -666,6 +711,8 @@
 	changeProperty (this, &m_coords[i], vert);
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 READ_ACCESSOR (vertex, LDMatrixObject::position) {
 	return m_position;
 }
@@ -674,6 +721,8 @@
 	changeProperty (linkPointer(), &m_position, val);
 }
 
+// =============================================================================
+// -----------------------------------------------------------------------------
 READ_ACCESSOR (matrix, LDMatrixObject::transform) {
 	return m_transform;
 }

mercurial