Skip to content

Commit

Permalink
Improved numberOfTriangles calculation.
Browse files Browse the repository at this point in the history
  • Loading branch information
erikbuck committed Oct 2, 2012
1 parent e4ac91e commit 7ca273a
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 27 deletions.
1 change: 0 additions & 1 deletion COLLADAViewer2/COLLADA/COLLADANode.m
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,4 @@ - (NSSet *)subnodes;
return _subnodes;
}


@end
10 changes: 5 additions & 5 deletions COLLADAViewer2/COLLADA/COLLADARoot.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@
NSMutableDictionary *materials;
@property (strong, nonatomic)
NSMutableDictionary *effects;
//@property (strong, nonatomic)
// NSMutableDictionary *meshes;
@property (nonatomic, readonly)
@property (strong, nonatomic, readonly)
NSNumber *numberOfVertices;
@property (nonatomic, readonly)
@property (strong, nonatomic, readonly)
NSNumber *numberOfTriangles;
@property (nonatomic, readonly)
@property (strong, nonatomic, readonly)
NSNumber *numberOfTextures;

- (NSUInteger)calculateNumberOfTriangles;

@end
137 changes: 116 additions & 21 deletions COLLADAViewer2/COLLADA/COLLADARoot.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,114 @@
//

#import "COLLADARoot.h"
#import "COLLADANode.h"
#import "COLLADAInstance.h"
#import "COLLADAMeshGeometry.h"
#import "COLLADAInstanceGeometry.h"
#import "AGLKMesh.h"


/////////////////////////////////////////////////////////////////
//
@implementation COLLADAMeshGeometry (triangleCountingAdditions)

/////////////////////////////////////////////////////////////////
//
- (NSUInteger)calculateNumberOfTrianglesWithRoot:
(COLLADARoot *)aRoot;
{
NSUInteger result = 0;

for(NSDictionary *currentCommand in self.mesh.self.commands)
{
// 3 indices are needed for each triangle
result += [[currentCommand objectForKey:@"numberOfIndices"]
unsignedIntegerValue] / 3;
}

return result;
}

@end


/////////////////////////////////////////////////////////////////
//
@implementation COLLADAInstance (triangleCountingAdditions)

/////////////////////////////////////////////////////////////////
//
- (NSUInteger)calculateNumberOfTrianglesWithRoot:
(COLLADARoot *)aRoot;
{
id referencedNode =
[aRoot.nodes objectForKey:self.url];

return [referencedNode
calculateNumberOfTrianglesWithRoot:aRoot];
}

@end


@implementation COLLADAInstanceGeometry (triangleCountingAdditions)

/////////////////////////////////////////////////////////////////
//
- (NSUInteger)calculateNumberOfTrianglesWithRoot:
(COLLADARoot *)aRoot;
{
id referencedGeometry =
[aRoot.geometries objectForKey:self.url];

return [referencedGeometry
calculateNumberOfTrianglesWithRoot:aRoot];
}

@end


/////////////////////////////////////////////////////////////////
//
@implementation COLLADANode (triangleCountingAdditions)

/////////////////////////////////////////////////////////////////
//
- (NSUInteger)calculateNumberOfTrianglesWithRoot:
(COLLADARoot *)aRoot;
{
NSUInteger result = 0;

for(COLLADAInstance *instance in self.instances)
{
result += [instance
calculateNumberOfTrianglesWithRoot:aRoot];
}

for(COLLADANode *subnode in self.subnodes)
{
result += [subnode
calculateNumberOfTrianglesWithRoot:aRoot];
}

return result;
}

@end


/////////////////////////////////////////////////////////////////
//
@interface COLLADARoot ()

@property (strong, nonatomic, readwrite)
NSNumber *numberOfTriangles;

@end


/////////////////////////////////////////////////////////////////
//
@implementation COLLADARoot

/////////////////////////////////////////////////////////////////
Expand All @@ -29,28 +133,32 @@ - (id)init

/////////////////////////////////////////////////////////////////
//
- (NSNumber *)numberOfVertices;
- (NSUInteger)calculateNumberOfTriangles;
{
NSInteger result = 0;
NSUInteger result = 0;

for(COLLADAMeshGeometry *meshGeometry in self.geometries.allValues)
for(COLLADANode *scene in self.visualScenes.allValues)
{
result += [meshGeometry.mesh numberOfIndices];
result += [scene calculateNumberOfTrianglesWithRoot:self];
}

return [NSNumber numberWithUnsignedInteger:result];
self.numberOfTriangles =
[NSNumber numberWithUnsignedInteger:result];

return result;
}


/////////////////////////////////////////////////////////////////
//
- (NSNumber *)numberOfTriangles;
- (NSNumber *)numberOfVertices;
{
NSInteger result = 0;

for(COLLADAMeshGeometry *meshGeometry in self.geometries.allValues)
for(COLLADAMeshGeometry *meshGeometry in
self.geometries.allValues)
{
result += [meshGeometry.mesh numberOfIndices] / 3;
result += [meshGeometry.mesh numberOfIndices];
}

return [NSNumber numberWithUnsignedInteger:result];
Expand Down Expand Up @@ -143,17 +251,4 @@ - (NSMutableDictionary *)effects;
return _effects;
}


/////////////////////////////////////////////////////////////////
//
//- (NSMutableDictionary *)meshes;
//{
// if(nil == _meshes)
// {
// _meshes = [NSMutableDictionary dictionary];
// }
//
// return _meshes;
//}

@end
1 change: 1 addition & 0 deletions COLLADAViewer2/CVDocument.m
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ - (void)appendRootParsedFromCOLLADAFileAtURL:(NSURL *)aURL

[self appendRoot:coladaParser.root];
[coladaParser.root loadImages];
[coladaParser.root calculateNumberOfTriangles];

[self updateChangeCount:NSChangeReadOtherContents];
}
Expand Down

0 comments on commit 7ca273a

Please sign in to comment.