/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /*====================================================================*\ FILE : PTMechExCopy.c PURPOSE : Test Pro/TOOLKIT functions for Mechanica \*====================================================================*/ /*--------------------------------------------------------------------*\ Pro/Toolkit includes -- include this first \*--------------------------------------------------------------------*/ #include <ProMechMaterialOrient.h> #include <ProUtil.h> #include <ProMessage.h> #include <PTMechExamples.h> /*=============================================================*\ FUNCTION: PTMechExMatOrient PURPOSE: Add csys material orientation item \*=============================================================*/ ProError PTMechExMatOrient() { ProName tk_matorient_wname; ProMechItem tk_constraint_item; ProMechMaterialOrientData orient_data; ProMechMaterialOrientCsys csys_data; ProMechStatus mech_status; int n_sels; ProSelection *sels; ProModelitem mech_item; ProMdl matorient_part; ProMechGeomref csys; ProMechMaterialOrientRotation rotation = {1.0, 2.0, 3.0}; PTMechExGeomRef csys_ref; status = ProMdlCurrentGet(&matorient_part); PT_TEST_LOG_SUCC ("ProMdlCurrentGet"); /*--------------------------------------------------------------------*\ Select csys \*--------------------------------------------------------------------*/ status = ProMessageDisplay(msgfile, "PTMechEx Select csys", msgbuf); PT_TEST_LOG_SUCC("ProMessageDisplay()"); status =ProSelect ("csys", 1, NULL, NULL, NULL, NULL, &sels, &n_sels); PT_TEST_LOG_SUCC ("ProSelect()"); status = ProSelectionModelitemGet (sels[0], &mech_item); PT_TEST_LOG_SUCC ("ProSelectionModelitemGet()"); /*--------------------------------------------------------------------*\ Creating Surface Type Projected Closest-axis Mat. Orientation. \*--------------------------------------------------------------------*/ csys_ref.type = PRO_MECH_COORD_SYSTEM; csys_ref.subtype = PRO_MECH_CSYS_CARTESIAN; csys_ref.id = mech_item.id ; csys_ref.path = NULL; /*--------------------------------------------------------------------*\ Create new mech item \*--------------------------------------------------------------------*/ status = ProMechitemCreate ((ProSolid) matorient_part, PRO_SIMULATION_MATL_ORIENT, &tk_constraint_item); PT_TEST_LOG_SUCC ("ProMechitemCreate"); ProStringToWstring(tk_matorient_wname,"tk_created_mat_orient"); status = ProMechitemNameSet ( &tk_constraint_item, tk_matorient_wname); PT_TEST_LOG_SUCC ("ProMechitemNameSet"); /*--------------------------------------------------------------------*\ Set the Material orient Description \*--------------------------------------------------------------------*/ status = ProMechmaterialorientDescriptionSet (&tk_constraint_item, L"Mat Orient - Srf Type - Proj Closest axis"); PT_TEST_LOG_SUCC ("ProMechmaterialorientDescriptionSet"); /*--------------------------------------------------------------------*\ Allocate new Material oriention \*--------------------------------------------------------------------*/ status = ProMechmaterialorientdataAlloc (&orient_data); PT_TEST_LOG_SUCC ("ProMechmaterialorientdataAlloc"); /*--------------------------------------------------------------------*\ Set the Material oriention data object type \*--------------------------------------------------------------------*/ status = ProMechmaterialorientdataObjecttypeSet (orient_data, PRO_MECH_MATLORI_SURFACE); PT_TEST_LOG_SUCC ("ProMechmaterialorientdataObjecttypeSet"); /*--------------------------------------------------------------------*\ Allocate csys data \*--------------------------------------------------------------------*/ status = ProMechmaterialorientcsysAlloc (&csys_data); PT_TEST_LOG_SUCC ("ProMechmaterialorientcsysAlloc"); /*--------------------------------------------------------------------*\ Create references \*--------------------------------------------------------------------*/ status = PTMechExGeomReferenceCreate (&csys_ref, &csys); PT_TEST_LOG_SUCC ("PTMechExConstraintCreate"); /*--------------------------------------------------------------------*\ Poppulate csys data \*--------------------------------------------------------------------*/ status = ProMechmaterialorientcsysCsysSet (csys_data, csys); PT_TEST_LOG_SUCC ("ProMechmaterialorientcsysCsysSet"); status = ProMechmaterialorientcsysProjectiontypeSet (csys_data, PRO_MECH_MATLORI_CSYS_PROJ_CLOSEST); PT_TEST_LOG_SUCC ("ProMechmaterialorientcsysProjectiontypeSet"); /*--------------------------------------------------------------------*\ Poppulate Material orient data \*--------------------------------------------------------------------*/ status = ProMechmaterialorientdataCsysdataSet (orient_data, csys_data); PT_TEST_LOG_SUCC ("ProMechmaterialorientdataCsysdataSet"); status = ProMechmaterialorientdataSurfacerotationSet ( orient_data, rotation[2]); PT_TEST_LOG_SUCC ("ProMechmaterialorientdataSurfacerotationSet"); /*--------------------------------------------------------------------*\ Set the Material orient data to the new constraint \*--------------------------------------------------------------------*/ status = ProMechmaterialorientDataSet (&tk_constraint_item, orient_data); PT_TEST_LOG_SUCC ("ProMechmaterialorientDataSet"); status = ProMechitemUpdateComplete ( &tk_constraint_item); PT_TEST_LOG_SUCC ("ProMechitemUpdateComplete"); status = ProMechitemStatusGet ( &tk_constraint_item, &mech_status); PT_TEST_LOG_SUCC ("ProMechitemStatusGet"); /*--------------------------------------------------------------------*\ Print Message from the result \*--------------------------------------------------------------------*/ if (mech_status == PRO_MECH_ACTIVE) { status = ProMessageDisplay(msgfile, "PTMechEx Material orientation created successfully"); PT_TEST_LOG_SUCC("ProMessageDisplay()"); } else { status = ProMessageDisplay(msgfile, "PTMechEx Material orientation creation failed"); PT_TEST_LOG_SUCC("ProMessageDisplay()"); } return PRO_TK_NO_ERROR; }