/*==================================================================*\ FILE : UserDimensionChange.c PURPOSE : Example of dimensions. HISTORY.. DATE BUILD AUTHOR MODIFICATIONS 04-Dec-97 H-02-02 ljl $$1 Created \*==================================================================*/ /*------------------------------------------------------------------*\ Pro/Toolkit includes \*------------------------------------------------------------------*/ #include #include #include #include #include /*------------------------------------------------------------------*\ Application includes \*------------------------------------------------------------------*/ #include /*==================================================================*\ FUNCTION : UserDimensionChange() PURPOSE : Change a selected model dimension. \*==================================================================*/ int UserDimensionChange() { ProMdl model ; /* current model */ ProSelection *p_sel_feat ; /* selected feature */ ProSelection *p_sel_dim ; /* selected dimension */ ProModelitem feat_mdlitem ; /* feature Modelitem */ ProModelitem dim_mdlitem ; /* dimension Modelitem */ ProFeature feature ; /* selected feature */ int n_sel_feat ; /* no. of selected features */ int n_sel_dim ; /* no. of selected dims */ ProName msg_file ; /* message file */ int err ; /* return status */ int *dim_ids ; /* pointer to dim id array */ int num_dims ; /* size of dim id array */ int i ; /* counter */ PRODIMENSION dim ; /* dimension struct */ double newdimval ; /* user-entered dim value */ ProCharLine str1 ; /* message string */ ProStringToWstring(msg_file, "msg_ugfund.txt") ; /*------------------------------------------------------------------*\ Check for a model. \*------------------------------------------------------------------*/ err = ProMdlCurrentGet(&model); ERROR_CHECK("UserDimensionChange()", "ProMdlCurrentGet()", err); if (err != PRO_TK_NO_ERROR) { ProMessageDisplay(msg_file, "USER %0s", "Error getting current model."); return(err) ; } /*------------------------------------------------------------------*\ Get a feature to modify. \*------------------------------------------------------------------*/ ProMessageDisplay(msg_file, "USER %0s", "Select a feature."); err = ProSelect("feature", 1, NULL, NULL, NULL, NULL, &p_sel_feat, &n_sel_feat) ; ERROR_CHECK("UserDimensionChange()", "ProSelect()", err); if ( err != PRO_TK_NO_ERROR ) { ProMessageDisplay(msg_file, "USER %0s", "Error or abort during selection.") ; return(err) ; } err = ProSelectionModelitemGet(p_sel_feat[0], &feat_mdlitem) ; ERROR_CHECK("UserDimensionChange()", "ProSelectionModelitemGet()", err); err = ProGeomitemFeatureGet( (ProGeomitem *) &feat_mdlitem, &feature) ; ERROR_CHECK("UserDimensionChange()", "ProGeomitemFeatureGet()", err); /*------------------------------------------------------------------*\ Get the dimension ids for the feature. \*------------------------------------------------------------------*/ num_dims = prodb_get_feat_dim_ids( (Prohandle) model, feature.id, &dim_ids) ; ERROR_CHECK("UserDimensionChange()", "prodb_get_feat_dim_ids()", num_dims); /*------------------------------------------------------------------*\ Display the feature dimensions. \*------------------------------------------------------------------*/ for (i = 0; i < num_dims; i++) { err = prodim_display_dimension( (Prohandle) model, NULL, dim_ids[i], NULL, NULL, NULL) ; } /*------------------------------------------------------------------*\ Get the dimension to be changed. \*------------------------------------------------------------------*/ ProMessageDisplay(msg_file, "USER %0s", "Select a dimension."); err = ProSelect("dimension", 1, NULL, NULL, NULL, NULL, &p_sel_dim, &n_sel_dim) ; ERROR_CHECK("UserDimensionChange()", "ProSelect()", err); if ( err != PRO_TK_NO_ERROR ) { ProMessageDisplay(msg_file, "USER %0s", "Error or abort during selection.") ; return(err) ; } err = ProSelectionModelitemGet(p_sel_dim[0], &dim_mdlitem) ; ERROR_CHECK("UserDimensionChange()", "ProSelectionModelitemGet()", err); err = prodim_get_dimension( (Prohandle) model, dim_mdlitem.id, PRO_DIM_PARAM, &dim ) ; ERROR_CHECK("UserDimensionChange()", "prodim_get_dimension()", err); /*------------------------------------------------------------------*\ Change the dimension. \*------------------------------------------------------------------*/ sprintf(str1, "Dimension value: %lf ... Enter new value: ", dim.value) ; ProMessageDisplay(msg_file, "USER %0s", str1) ; ProMessageDoubleRead(NULL, &newdimval) ; dim.value = newdimval ; err = prodim_set_and_display_dim( (Prohandle) model, dim_mdlitem.id, &dim) ; ERROR_CHECK("UserDimensionChange()", "prodim_set_and_display_dim()", err); ProMessageDisplay(msg_file, "USER %0s", "Dimension changed. Regenerate model to see changes."); return(PRO_TK_NO_ERROR) ; }