Question oapiGetObjectType not returning bases

dumbo2007

Crazy about real time sims
Joined
Nov 29, 2009
Messages
675
Reaction score
0
Points
0
Location
India
Hi,

I have the code below to get an array of vessels and bases :

Code:
numVessels = 0;
    numBases  = 0;
    int numObj = oapiGetObjectCount();
    OBJHANDLE *hObj = new OBJHANDLE[numObj];    
    int objType = 0;
    char strObj[20];
    for (int i = 0; i < numObj; i++) {
        hObj[i] = oapiGetObjectByIndex (i);            
        objType = oapiGetObjectType(hObj[i]);
        switch(objType){
            case OBJTP_CBODY:
                break;
            case OBJTP_STAR:
                break;
            case OBJTP_PLANET:
                break;
            case OBJTP_VESSEL:
                oapiGetObjectName(hObj[i], strObj, 20);
                sprintf(output, "Bump: Vessel : %s added", strObj);oapiWriteLog(output);
                numVessels++;
                break;            
            case OBJTP_SURFBASE:
                oapiGetObjectName(hObj[i], strObj, 20);
                sprintf(output, "Bump: Base : %s added", strObj);oapiWriteLog(output);
                numBases++;
                break;        
            default:
                oapiWriteLog("Bump: Object not recognized during counting");
        }        
        
    }
But somehow I only get vessels, no bases. I am running the default Brighton Beach scenario with the Delta Glider, so at least Brighton Beach should have appeared. Anyone had such an issue before ?

---------- Post added at 01:52 PM ---------- Previous post was at 06:40 AM ----------

ok I solved it using a 2 step process :

Code:
numVessels = 0;
	numBases  = 0;
	int numObj = oapiGetObjectCount();
	OBJHANDLE *hObj = new OBJHANDLE[numObj];	
	int objType = 0;
	char strObj[20], strBase[20]; 

	for (int i = 0; i < numObj; i++) {
		hObj[i] = oapiGetObjectByIndex (i);			
		objType = oapiGetObjectType(hObj[i]);
		oapiGetObjectName(hObj[i], strObj, 20);		

		switch(objType){
			case OBJTP_CBODY:
				break;
			case OBJTP_STAR:
				break;
			case OBJTP_PLANET:
				sprintf(output, "Bump: Planet/Moon/Comet : %s added :", strObj);oapiWriteLog(output);
				numBases += oapiGetBaseCount(hObj[i]);
				break;
			case OBJTP_VESSEL:				
				sprintf(output, "Bump: Vessel : %s added", strObj);oapiWriteLog(output);
				numVessels++;
				break;			
			case OBJTP_SURFBASE:				
				sprintf(output, "Bump: Base : %s added", strObj);oapiWriteLog(output);
				numBases++;
				break;		
			default:
				oapiWriteLog("Bump: Object not recognized during counting");
		}		
		
	}

	//Get vessel dimensions	
	if(numVessels > 0){
		hVessel    = new OBJHANDLE[numVessels];
		vesselRadius = new double[numVessels];	
		for (int i = 0, j = 0; i < numObj; i++) {
			if (oapiGetObjectType(hObj[i]) == OBJTP_VESSEL){
				hVessel[j] = hObj[i];		
				vesselRadius[j] = oapiGetSize(hObj[i]);
				sprintf(output, "Bump: Object %d, Vessel %d, Radius: %f", i, j, vesselRadius[j]);oapiWriteLog(output);	
				j++;
			}			
		}
	}
	
	//Get base dimensions
	if(numBases > 0){
		hBase    = new OBJHANDLE[numBases];
		baseRadius = new double[numBases];	
		for (int i = 0, j = 0; i < numObj; i++) {
			if (oapiGetObjectType(hObj[i]) == OBJTP_PLANET){
				oapiGetObjectName(hObj[i], strObj, 20);	
				for(int k = 0; k < oapiGetBaseCount(hObj[i]); k++){
					hBase[j]  = oapiGetBaseByIndex(hObj[i], k);		
					baseRadius[j] = oapiGetSize(hObj[i]);	
					oapiGetObjectName(hBase[j], strBase, 20);	
					sprintf(output, "Bump: %d) Planet %s, Base %s, Radius: %f", j, strObj, strBase, baseRadius[j]);oapiWriteLog(output);
					j++;
				}
			}
		}
	}
 
Back
Top