[OBD SDK Connect Update 8] - modifying Structural Elements with Open Building SDK (STFC-Api)

Hello,

I need to change some Properties of a Steel Beam Element in Open Building Designer Update 8 using the C-Api "stfc-api"..

Until now I've been able to read the "LinearMember" out of the EditElementHandle and to change some Properties in it using 

following Code:

virtual StatusInt _OnElementModify(EditElementHandleR eehSteelBeam) override
	{

		StatusInt statusInt;



		MSElementDescrP elmDescrP = eehSteelBeam .GetElementDescrP();

		STFLinearMemberList* linearMemberListP=mdlSTFLinearMemberList_constructFromDescr(elmDescrP , false);	//SUCCESS
		if (!linearMemberListP)return ERROR;

		STFLinearMember* linearMemberP=mdlSTFLinearMemberList_getLinearMember		(			linearMemberListP		);	//SUCCESS
		if (!linearMemberP)return ERROR;

		DPoint3d pP = { 0,0,0 };
		DPoint3d pQ = { 0,0,0 };
		mdlSTFLinearMember_getPQPoints(linearMemberP,&pP, &pQ);	//SUCCESS
		pQ.z += 2000000;
		statusInt=      mdlSTFLinearMember_setPQPoints(linearMemberP, &pP, &pQ);	//SUCCESS


		statusInt=mdlSTFLinearMember_save(linearMemberP, false);			//ERROR: 32768
		//statusInt = mdlSTFLinearMember_replaceInDgn(linearMemberP);		////ERROR: 32768



		mdlSTFLinearMemberList_free(&linearMemberListP);

		return SUCCESS;

But when I try to save it to the DGN It allways brings The ErrorSatus (StatusInt) = 32768 and nothing happens.

I tried "mdlSTFLinearMember_replaceInDgn" , "mdlSTFLinearMember_save" and "mdlSTFLinearMember_addToDgnExt" but nothing is working.

Hopefully there is sombody out there with some experience with the Open Building SDK.

Many thanks in advance for your efforts

Greetings

Manuel Höger

Softwareentwicklung | mhoeger@cadcom.de           
Tel: +49 30 - 53 63 62 – 44 | Mobil: +49 162 - 53 18 640

cadcom® Systemhaus GmbH
Stralauer Platz 33 | Kontorhaus |10243 Berlin
Tel: +49 30 - 53 63 62 – 0 | Fax: +49 30 - 53 63 62 - 30
www.cadcom.de

  • Sorry my fault, Was too late yesterday... I missed to change this function. Now it works perfectly.

    Wonderful! Thanks.

    Maybe you have some more additional Function hints about placing Architectural (TriForma) Elements like a ladder or other parametric cell Elements (I try to place a Parametric (CEL) cell.? This would be so nice! 

    [OBD SDK C++ Update 9] Placing Triforma Element with "Loadables" - OpenBuildings | AECOsim | Speedikon | Forum - OpenBuildings | AECOsim | Speedikon - Bentley Communities

  • Wonderful, I will take a look at placing parametric cells with API

  • Not the normal parametric Cells, but the user defined Catalog Element Cells. Defined as "Paradef:Cel(Parametric)" in Calalog Manager. Just for clarity!

    Tanks again and in advance! 

  • Hi Mykolas,

    Is it possible that you send me the rest of the mdlstfstructuralmember_ header signatures? I want to create a structural member as well and at the moment I'm doing this with a dotnet workaround. This is not very satisfying.

    Greetings

    Manu

  • Here it is

    TFAPI_EXPOSE void mdlSTFStructuralMemberClass_freeMem
    (
    void* pMem 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMemberList_constructFromCurveDescr
    (
    STFStructuralMemberList* pThis,    
    MSElementDescr*          pDescr,   
    DgnModelRefP             pModelRef 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_initialize
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_initFromElementDescr
    (
    STFStructuralMember* pThis, 
    MSElementDescr*      pDescr 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_copeWithDefaults
    (
    STFStructuralMember* pThis,     
    STFStructuralMember* pThat,     
    bool                 cutAtStart 
    );
    
    TFAPI_EXPOSE STFStructuralMemberList* mdlSTFStructuralMemberList_constructFromElementDescr
    (
    MSElementDescr* pDescr 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setRotation
    (
    STFStructuralMember* pThis,   
    double               rotation 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setRotationDegrees
    (
    STFStructuralMember* pThis,   
    double               rotation 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_getRotation
    (
    STFStructuralMember const* pThis,    
    double*                    pRotation 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_getRotationDegrees
    (
    STFStructuralMember const* pThis,    
    double*                    pRotation 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setPlacementPoint
    (
    STFStructuralMember* pThis,         
    int                  placementPoint 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_getPlacementPoint
    (
    STFStructuralMember const* pThis,          
    int*                       pPlacementPoint 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_getInsertOffset
    (
    STFStructuralMember const* pThis,    
    double*                    pOffsetX, 
    double*                    pOffsetY  
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setInsertOffset
    (
    STFStructuralMember* pThis,   
    double               offsetX, 
    double               offsetY  
    );
    
    TFAPI_EXPOSE bool mdlSTFStructuralMember_isMirrored
    (
    STFStructuralMember const* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setMirror
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_resetMirror
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setSlope
    (
    STFStructuralMember* pThis, 
    double               slope  
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setPQPoints
    (
    STFStructuralMember* pThis, 
    DPoint3d*            pP,    
    DPoint3d*            pQ     
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_getPQPoints
    (
    STFStructuralMember* pThis, 
    DPoint3d*            pP,    
    DPoint3d*            pQ     
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setFullCrossSection
    (
    STFStructuralMember* pThis,          
    WChar const*         fullSectionName 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setCrossSection
    (
    STFStructuralMember* pThis,      
    int                  shapeType,  
    WChar const*         shapeClass, 
    WChar const*         sectionName 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setPSSection
    (
    STFStructuralMember* pThis,   
    STFPSSection const*  pSection 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_getCrossSection
    (
    STFStructuralMember const* pThis,       
    STFPSSectionList**         pSectionList 
    );
    
    TFAPI_EXPOSE bool mdlSTFStructuralMember_hasFireproofing
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE MSElementDescr* mdlSTFStructuralMember_getFireproofingElement
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setCatalogItem
    (
    STFStructuralMember* pThis,       
    TFCatalogItemList*   pCatalogItem 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setCatalogItem2
    (
    STFStructuralMember* pThis,                 
    WChar const*         pDataGroupType,        
    WChar const*         pDataGroupItem,        
    bool                 updatePartFamilyValues 
    );
    
    TFAPI_EXPOSE TFCatalogItemList* mdlSTFStructuralMember_getCatalogItem
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_initNamedProperties
    (
    STFStructuralMember* pThis, 
    TFWStringList const* pType, 
    TFWStringList const* pName  
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_getNamedPropertyValue
    (
    STFStructuralMember const* pThis,      
    TFWStringList const*       pPropName,  
    bool                       bDuplicate, 
    TFWStringList**            ppPropValue 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setNamedPropertyValue
    (
    STFStructuralMember* pThis,     
    TFWStringList const* pPropName, 
    TFWStringList const* pPropValue 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setPartNameAndFamily
    (
    STFStructuralMember* pThis,      
    TFWStringList const* pPartName,  
    TFWStringList const* pPartFamily 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setPartFamily
    (
    STFStructuralMember* pThis,      
    TFWStringList const* pPartFamily 
    );
    
    TFAPI_EXPOSE TFWStringList* mdlSTFStructuralMember_getPartFamily
    (
    STFStructuralMember const* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setPartName
    (
    STFStructuralMember* pThis,    
    TFWStringList const* pPartName 
    );
    
    TFAPI_EXPOSE TFWStringList* mdlSTFStructuralMember_getPartName
    (
    STFStructuralMember const* pThis 
    );
    
    TFAPI_EXPOSE TFWStringList* mdlSTFStructuralMember_getMaterialName
    (
    STFStructuralMember const* pThis 
    );
    
    TFAPI_EXPOSE TFWStringList* mdlSTFStructuralMember_getMaterialGrade
    (
    STFStructuralMember const* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_initStructuralDataFromPart
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setTypeString
    (
    STFStructuralMember* pThis,      
    WChar const*         pTypeString 
    );
    (
    STFStructuralMember* pThis,        
    int                  stringNumber, 
    WChar const*         str           
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setMark
    (
    STFStructuralMember* pThis, 
    WChar const*         pMark  
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setMaterial
    (
    STFStructuralMember* pThis, 
    WChar const*         pName, 
    WChar const*         pGrade 
    );
    
    TFAPI_EXPOSE MSElementDescr* mdlSTFStructuralMember_createElementWritten
    (
    STFStructuralMember* pThis,    
    DgnModelRefP         pModelRef 
    );
    
    TFAPI_EXPOSE MSElementDescr* mdlSTFStructuralMember_createElement
    (
    STFStructuralMember const* pThis,    
    DgnModelRefP               pModelRef 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_swap
    (
    STFStructuralMember* pThis, 
    STFStructuralMember* pThat  
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_duplicate
    (
    STFStructuralMember*      pThis, 
    STFStructuralMemberList** ppCopy 
    );
    
    TFAPI_EXPOSE STFStructuralMemberList* mdlSTFStructuralMember_getGeometryAtFraction
    (
    STFStructuralMember* pThis, 
    double               start, 
    double               end    
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_replaceInModel
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_updateWithObdDataInModel
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE bool mdlSTFStructuralMember_hasStructuralDataAttached
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE TFFormRecipeList* mdlSTFStructuralMember_getTFFormRecipeList
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE STFStructuralMemberList* mdlSTFStructuralMemberList_getNext
    (
    STFStructuralMemberList* pThis 
    );
    
    TFAPI_EXPOSE void mdlSTFStructuralMemberList_free
    (
    STFStructuralMemberList** ppThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMemberList_setNext
    (
    STFStructuralMemberList* pThis, 
    STFStructuralMemberList* pNext  
    );
    
    TFAPI_EXPOSE STFStructuralMemberList* mdlSTFStructuralMemberList_construct
    (
    void 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMemberList_construct2
    (
    STFStructuralMemberList** ppThis,           
    STFStructuralMember*      pStructuralMember 
    );
    
    TFAPI_EXPOSE STFStructuralMemberList* mdlSTFStructuralMemberList_getLast
    (
    STFStructuralMemberList* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMemberList_append
    (
    STFStructuralMemberList** ppThis,     
    STFStructuralMemberList*  pAppendList 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMemberList_addMember
    (
    STFStructuralMemberList** ppThis,           
    STFStructuralMember*      pStructuralMember 
    );
    
    TFAPI_EXPOSE STFStructuralMember* mdlSTFStructuralMemberList_getStructuralMember
    (
    STFStructuralMemberList* pThis 
    );
    
    TFAPI_EXPOSE STFStructuralMemberList* mdlSTFStructuralMemberList_duplicate
    (
    STFStructuralMemberList* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMemberList_prepend
    (
    STFStructuralMemberList** ppThis, 
    STFStructuralMemberList*  pAdd    
    );
    
    TFAPI_EXPOSE void mdlSTFStructuralMemberList_insertList
    (
    STFStructuralMemberList* pThis,  
    STFStructuralMemberList* pInsert 
    );
    
    TFAPI_EXPOSE STFStructuralMemberList* mdlSTFStructuralMemberList_unlinkNode
    (
    STFStructuralMemberList** ppThis, 
    STFStructuralMemberList*  pRemove 
    );
    
    TFAPI_EXPOSE int mdlSTFStructuralMemberList_getIndex
    (
    STFStructuralMemberList const* pThis,  
    STFStructuralMemberList const* pSearch 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMemberList_reverse
    (
    STFStructuralMemberList** ppThis 
    );
    
    TFAPI_EXPOSE STFStructuralMemberList* mdlSTFStructuralMemberList_getNode
    (
    STFStructuralMemberList* pThis, 
    int                      index  
    );
    
    TFAPI_EXPOSE int mdlSTFStructuralMemberList_getCount
    (
    STFStructuralMemberList const* pThis 
    );
    
    TFAPI_EXPOSE STFStructuralMemberList* mdlSTFStructuralMemberList_constructFromFilePos
    (
    ULong        filePos,  
    DgnModelRefP pModelRef 
    );
    
    TFAPI_EXPOSE DgnModelRefP mdlSTFStructuralMember_getModelRef
    (
    STFStructuralMember const* pThis 
    );
    
    TFAPI_EXPOSE TFIdList* mdlSTFStructuralMember_getFireProofingIdList
    (
    STFStructuralMember const* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setFireProofingIdList
    (
    STFStructuralMember* pThis,  
    TFIdList*            pIdList 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_reWriteFireProofingIdListToFile
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_replaceInDgn
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setStructuralPropertyByName
    (
    STFStructuralMember* pThis, 
    WChar const*         name,  
    WChar const*         value  
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_cope
    (
    STFStructuralMember* pThis,           
    STFStructuralMember* pThat,           
    bool                 cutAtStart,      
    int                  layout,          
    int                  edgeLayout,      
    double               flangeClearance, 
    double               webClearance,    
    double               radiusCorner     
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_copeRich
    (
    STFStructuralMember* pThis,       
    STFStructuralMember* pThat,       
    bool                 cutAtStart,  
    int                  layout,      
    int                  edgeLayout,  
    double               topOutside,  
    double               topEdge,     
    double               topInside,   
    double               downOutside, 
    double               downEdge,    
    double               downInside,  
    double               web,         
    double               radius       
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_delete
    (
    STFStructuralMember* pThis 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_setSymbology
    (
    STFStructuralMember* pThis,     
    TFSymbology*         pSymbology 
    );
    
    TFAPI_EXPOSE StatusInt mdlSTFStructuralMember_getOrientationVectors
    (
    STFStructuralMember const* pThis,    
    DVec3d*                    pXVec,    
    DVec3d*                    pYVec,    
    DVec3d*                    pZVec,    
    DgnModelRefP               pModelRef 
    );