Archicad C++ API
About Archicad add-on development using the C++ API.

Problem creating camera

Anonymous
Not applicable
Hello,

I am in the process of porting my APX over to the 6.1 API using ArchiCAD v9.

My problem is with code that used to create a 3d camera that looks down over my plan. I can't see any reason why it should not work in v9 but I get an APIERR_BADINDEX every time.

I'm not too worried about most of the values I just want a camera that shows a 3d floorplan ie. a single frame above the house facing down. In v7 I just set camSetIndex to 1 and it worked fine.

memset(&element, 0, sizeof(API_Element));
element.header.typeID = API_CamSetID;
element.camset.camType = API_PersCamera;
strcpy(element.camset.name, "test");
element.camset.u.perspPars.openedPath = true;
element.camset.u.perspPars.bezierPath = false;
element.camset.u.perspPars.smoothTarget = false;
element.camset.u.perspPars.pen = 1;
element.camset.u.perspPars.inFrames = 0;
element.camset.active = false;
err = ACAPI_Element_Create(&element, NULL);
if(err == noErr) {
camSetIndex = element.header.index;
memset(&element, 0, sizeof(API_Element));
element.header.typeID = API_CameraID;
element.camera.camSetIndex = camSetIndex;
element.camera.camType = API_PersCamera;
element.camera.u.perspCam.pen = 1;
element.camera.u.perspCam.active = true;
element.camera.u.perspCam.persp.cameraZ = 30;
element.camera.u.perspCam.persp.distance = 10;
element.camera.u.perspCam.persp.viewCone = 90.0 * DEGRAD;
element.camera.u.perspCam.persp.azimuth = 270.0 * DEGRAD;
element.camera.u.perspCam.persp.rollAngle = 270 * DEGRAD;
element.camera.u.perspCam.persp.pos.x = centerX;
element.camera.u.perspCam.persp.pos.y = centerY;
element.camera.u.perspCam.persp.sunAltitude = 50.0 * DEGRAD;
element.camera.u.perspCam.persp.sunAzumuth = 240.0
element.camera.u.perspCam.persp.target.x = centerX;
element.camera.u.perspCam.persp.target.y = centerY;
element.camera.u.perspCam.persp.targetZ = 0.0
err = ACAPI_Element_Create(&element, NULL);
if(err != noErr)
{
// err is APIERR_BADINDEX
}
}
3 REPLIES 3
Ralph Wessel
Mentor
adambutler wrote:
My problem is with code that used to create a 3d camera that looks down over my plan. I can't see any reason why it should not work in v9 but I get an APIERR_BADINDEX every time.
Are you initialising the undo session before creating the camera element? i.e. ACAPI_OpenUndoableSession and ACAPI_CloseUndoableSession.
Ralph Wessel BArch
Anonymous
Not applicable
yes, and the camset gets created fine
Anonymous
Not applicable
I found the problem. AC9 requires me to set prevCam to -1.

Thanks,
Adam