CelestiaBody.mm
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:3k
源码类别:

OpenGL

开发平台:

Visual C++

  1. //
  2. //  CelestiaBody.mm
  3. //  celestia
  4. //
  5. //  Created by Bob Ippolito on Sat Jun 08 2002.
  6. //  Copyright (C) 2007, Celestia Development Team
  7. //
  8. #import "CelestiaBody.h"
  9. #import "CelestiaBody_PrivateAPI.h"
  10. #import "CelestiaVector_PrivateAPI.h"
  11. #import "NSString_ObjCPlusPlus.h"
  12. @implementation CelestiaBody(PrivateAPI)
  13. -(CelestiaBody*)initWithBody:(Body*)b
  14. {
  15.     self = [super init];
  16.     _data = [[NSValue alloc] initWithBytes:reinterpret_cast<void*>(&b) objCType:@encode(Body*)];
  17.     return self;
  18. }
  19. -(Body*)body
  20. {
  21.     return reinterpret_cast<Body*>([_data pointerValue]);
  22. }
  23. @end
  24. @implementation CelestiaBody
  25. -(void)dealloc
  26. {
  27.     if (_data != nil) {
  28.         [_data release];
  29.         _data = nil;
  30.     }
  31.     [super dealloc];
  32. }
  33. -(NSString*)classification
  34. {
  35.     switch ([self body]->getClassification())
  36.     {
  37.         case (Body::Planet):
  38.             return NSLocalizedString(@"Planet",@"");
  39.             break;
  40.         case (Body::Moon):
  41.             return NSLocalizedString(@"Moon",@"");
  42.             break;
  43.         case (Body::Asteroid):
  44.             return NSLocalizedString(@"Asteroid",@"");
  45.             break;
  46.         case (Body::Comet):
  47.             return NSLocalizedString(@"Comet",@"");
  48.             break;
  49.         case (Body::Spacecraft):
  50.             return NSLocalizedString(@"Spacecraft",@"");
  51.             break;
  52.         default:
  53.             break;
  54.     }
  55.     return NSLocalizedString(@"Unknown",@"");
  56. }
  57. -(NSString *)name
  58. {
  59.     return [NSString stringWithStdString:[self body]->getName(true)];
  60. }
  61. -(NSNumber *)radius
  62. {
  63.     return [NSNumber numberWithFloat:[self body]->getRadius()];
  64. }
  65. -(NSNumber *)mass
  66. {
  67.     return [NSNumber numberWithFloat:[self body]->getMass()];
  68. }
  69. -(NSNumber *)albedo
  70. {
  71.     return [NSNumber numberWithFloat:[self body]->getAlbedo()];
  72. }
  73. -(CelestiaVector*)orientation
  74. {
  75.     return [CelestiaVector vectorWithQuatf:[self body]->getOrientation()];
  76. }
  77. -(void)setOrientation:(CelestiaVector*)q
  78. {
  79.     [self body]->setOrientation([q quatf]);
  80. }
  81. -(void)setName:(NSString*)s
  82. {
  83.     // Body::setName method is now private
  84.     //[self body]->setName([s stdString]);
  85. }
  86. -(void)setMass:(NSNumber*)m
  87. {
  88.     [self body]->setMass([m floatValue]);
  89. }
  90. -(void)setAlbedo:(NSNumber*)a
  91. {
  92.     [self body]->setAlbedo([a floatValue]);
  93. }
  94. -(CelestiaVector*)astrocentricPosition:(NSNumber*)n
  95. {
  96.     return [CelestiaVector vectorWithPoint3d:[self body]->getAstrocentricPosition([n doubleValue])];
  97. }
  98. -(CelestiaVector*)equatorialToBodyFixed:(NSNumber*)n
  99. {
  100.     return [CelestiaVector vectorWithQuatd:[self body]->getEquatorialToBodyFixed([n doubleValue])];
  101. }
  102. -(CelestiaVector*)eclipticToEquatorial:(NSNumber*)n
  103. {
  104.     return [CelestiaVector vectorWithQuatd:[self body]->getEclipticToEquatorial([n doubleValue])];
  105. }
  106. -(CelestiaVector*)eclipticToBodyFixed:(NSNumber*)n
  107. {
  108.     return [CelestiaVector vectorWithQuatd:[self body]->getEclipticToBodyFixed([n doubleValue])];
  109. }
  110. -(NSArray*)alternateSurfaceNames
  111. {
  112.     NSMutableArray *result = nil;
  113.     std::vector<std::string>* altSurfaces = [self body]->getAlternateSurfaceNames();
  114.     if (altSurfaces)
  115.     {
  116.         result = [NSMutableArray array];
  117.         if (altSurfaces->size() > 0)
  118.         {
  119.             for (unsigned int i = 0; i < altSurfaces->size(); ++i)
  120.             {
  121.                 [result addObject: [NSString stringWithStdString: (*altSurfaces)[i].c_str()]];
  122.             }
  123.         }
  124.         delete altSurfaces;
  125.     }
  126.     return result;
  127. }
  128. @end