/* ====================================================================== Interface() XPanels Interface. Called when the user presses the "Options" button. ====================================================================== */ int Atmosphere::Interface( int version, LWInterface *local, void *serverData ) { UNUSED(serverData); UNUSED(version); if ( !txedf ) return AFUNC_BADGLOBAL; LWXPanelHint hint[] = { XpLABEL( 0, "VFog Settings" ), XpBUTNOTIFY( ID_TXBT, XPanelInterface::LWXPanelBtnClickFunc ), XpSTRLIST( ID_RES, quality ), XpSTRLIST( ID_MARCH, render ), XpGROUP_( ID_GGRP ), XpH( ID_HI ), XpH( ID_LO ), XpH( ID_FA ), XpH( ID_DEN ), XpEND, XpGROUP_( ID_SGRP ), XpH( ID_LUM ), XpH( ID_OPA ), XpH( ID_BCK ), XpH( ID_COL ), XpEND, XpGROUP_( ID_RGRP ), XpH( ID_RES ), XpH( ID_TXTR ), XpH( ID_TXBT ), XpEND, XpENABLE_( ID_MARCH ), XpH( ID_RGRP ), XpEND, XpENABLE_MAP_( ID_BCK, bckMap ), XpH( ID_COL ), XpEND, XpMIN( ID_LUM, 0 ), XpMAX( ID_LUM, 1 ), XpMIN( ID_OPA, 0 ), XpMAX( ID_OPA, 1 ), XpMIN( ID_FA, 0 ), XpMAX( ID_FA, 1 ), XpEND }; // end hint[] CreateViewXPanel (ctrl_list, data_descrip, hint); // FINE because the callback it is in our class LW_XPanel.setUserData(this, ID_TXBT); local->panel = LW_XPanel.getID(); local->options = NULL; local->command = NULL; return AFUNC_OK; }
static LWXPanelID SuperQ_Panel( sqData *tool ) { static LWXPanelDataDesc def[] = { { XID_SID, "Sides", "integer" }, { XID_SEG, "Segments", "integer" }, { XID_TYPE, "Shape", "integer" }, { XID_AXIS, "Axis", "integer" }, { XID_CEN, "Center", "distance3" }, { XID_RAD, "Size", "distance3" }, { XID_DIAM, "Hole Size", "distance" }, { XID_BF1, "Top Bulge", "float" }, { XID_BF2, "Side Bulge", "float" }, { XID_ACTI, "--hidden--", "integer" }, { XID_UVS, "Make UVs", "integer" }, { 0 } }; static LWXPanelControl con[] = { { XID_SID, "Sides", "integer" }, { XID_SEG, "Segments", "integer" }, { XID_TYPE, "Shape", "iPopChoice" }, { XID_AXIS, "Axis", "axis" }, { XID_CEN, "Center", "distance3" }, { XID_RAD, "Size", "distance3" }, { XID_DIAM, "Hole Size", "distance" }, { XID_BF1, "Top Bulge", "float" }, { XID_BF2, "Side Bulge", "float" }, { XID_ACTI, "--hidden--", "integer" }, { XID_UVS, "Make UVs", "iBoolean" }, { 0 } }; static LWXPanelHint hint[] = { XpDELETE( XID_ACTI ), XpSTRLIST( XID_TYPE, shapeNames ), XpENABLEMSG_( XID_ACTI, "Tool is currently inactive." ), XpH( XID_SID ), XpH( XID_SEG ), XpH( XID_AXIS ), XpH( XID_CEN ), XpH( XID_RAD ), XpH( XID_BF1 ), XpH( XID_BF2 ), XpH( XID_DIAM ), XpH( XID_TYPE ), XpH( XID_UVS ), XpEND, XpENABLEMSG_( XID_TYPE, "Ellipsoids don't have a hole!" ), XpH( XID_DIAM ), XpEND, XpMIN( XID_SID, 2 ), XpMAX( XID_SID, 256 ), XpMIN( XID_SEG, 2 ), XpMAX( XID_SEG, 256 ), XpMIN( XID_BF1, 0 ), XpMIN( XID_BF2, 0 ), XpEND }; LWXPanelID pan; pan = xpanf->create( LWXP_VIEW, con ); if ( !pan ) return NULL; xpanf->describe( pan, def, SuperQ_Get, SuperQ_Set ); xpanf->hint( pan, 0, hint ); return pan; }
static LWXPanelID get_panel( AtmosphereData *dat ) { static LWXPanelControl ctrl_list[] = { { ID_MARCH, "Render Type", "iPopChoice" }, { ID_HI, "Top", "distance" }, { ID_LO, "Bottom", "distance" }, { ID_FA, "Falloff", "percent" }, { ID_DEN, "Nominal Distance", "distance" }, { ID_LUM, "Luminosity", "percent" }, { ID_OPA, "Opacity", "percent" }, { ID_BCK, "Use Backdrop Color", "iBoolean" }, { ID_COL, "Color", "color" }, { ID_RES, "Quality", "iPopChoice" }, { ID_TXTR, "Use Texture", "iBoolean" }, { ID_TXBT, "Edit Texture", "vButton" }, { 0 } }; static LWXPanelDataDesc data_descrip[] = { { ID_MARCH, "Render Type", "integer" }, { ID_HI, "Top", "distance" }, { ID_LO, "Bottom", "distance" }, { ID_FA, "Falloff", "percent" }, { ID_DEN, "Nominal Distance", "distance" }, { ID_LUM, "Luminosity", "percent" }, { ID_OPA, "Opacity", "percent" }, { ID_BCK, "Use Backdrop Color", "integer" }, { ID_COL, "Color", "color" }, { ID_RES, "Quality", "integer" }, { ID_TXTR, "Use Texture", "integer" }, { ID_TXBT, "Edit Texture", NULL }, { 0 }, }; static char *quality[] = { "Very Low", "Low", "Medium", "Good", "Very Good", NULL }; static char *render[] = { "Fast Fog", "Ray Marcher", NULL }; static int bckMap[] = { 1, 0 }; static LWXPanelHint hint[] = { XpLABEL( 0, "VFog Settings" ), XpDESTROYNOTIFY( destroy_notify ), XpBUTNOTIFY( ID_TXBT, button_event ), XpSTRLIST( ID_RES, quality ), XpSTRLIST( ID_MARCH, render ), XpGROUP_( ID_GGRP ), XpH( ID_HI ), XpH( ID_LO ), XpH( ID_FA ), XpH( ID_DEN ), XpEND, XpGROUP_( ID_SGRP ), XpH( ID_LUM ), XpH( ID_OPA ), XpH( ID_BCK ), XpH( ID_COL ), XpEND, XpGROUP_( ID_RGRP ), XpH( ID_RES ), XpH( ID_TXTR ), XpH( ID_TXBT ), XpEND, XpENABLE_( ID_MARCH ), XpH( ID_RGRP ), XpEND, XpENABLE_MAP_( ID_BCK, bckMap ), XpH( ID_COL ), XpEND, XpMIN( ID_LUM, 0 ), XpMAX( ID_LUM, 1 ), XpMIN( ID_OPA, 0 ), XpMAX( ID_OPA, 1 ), XpMIN( ID_FA, 0 ), XpMAX( ID_FA, 1 ), XpEND }; LWXPanelID panel; panel = xpanf->create( LWXP_VIEW, ctrl_list ); if ( panel ) { xpanf->describe( panel, data_descrip, ui_get, ui_set ); xpanf->hint( panel, 0, hint ); xpanf->viewInst( panel, dat ); xpanf->setData( panel, ID_TXBT, dat ); xpanf->setData( panel, 0, dat ); if ( !dat->txedID ) dat->txedID = txedf->subscribe( "FogTexture", TEF_ALL - TEF_USEBTN, NULL, NULL, NULL, NULL ); } return panel; }
/* ====================================================================== Interface() ====================================================================== */ int hotdm::Interface( long version, LWInterface *local, void *serverData ) { UNUSED(version); UNUSED(serverData); static LWXPanelControl ctrl[] = { {ID_RESO, "Resolution", "iSliderText"}, {ID_GLSC, "Global Scale", "distance-env"}, {ID_WAVH, "Wave Height", "distance-env"}, {ID_SWAV, "Shortest Wave", "distance-env"}, {ID_DCHP, "Use Choppiness", "iBoolean"}, {ID_CHOP, "Choppiness", "distance-env"}, {ID_WSPD, "Wind Speed (m/s)", "float-env"}, {ID_WDIR, "Wind Direction (º)", "angle-env"}, {ID_WALG, "Wind Align", "float-env"}, {ID_DREF, "Damp Reflections", "float-env"}, {ID_ODEP, "Ocean Depth", "distance-env"}, {ID_SEED, "Seed", "integer"}, {ID_INTP, "Catmull-Rom Interpolation", "iBoolean"}, {ID_PRES, "Presets", "vPopCmd"}, /* This DOESNT work for displacement plugins, But left the code to see how other controls can be done */ // {ID_NORM, "Do Normals", "iBoolean"}, // {ID_JACB, "Jacobian", "iBoolean"}, { 0 } }; static LWXPanelDataDesc desc[] = { {ID_RESO, "Resolution", "integer"}, {ID_GLSC, "Global Scale", "distance-env"}, {ID_WAVH, "Wave Height", "distance-env"}, {ID_SWAV, "Shortest Wave", "distance-env"}, {ID_DCHP, "Use Choppiness", "integer"}, {ID_CHOP, "Choppiness", "distance-env"}, {ID_WSPD, "Wind Speed (m/s)", "float-env"}, {ID_WDIR, "Wind Direction (º)", "angle-env"}, {ID_WALG, "Wind Align", "float-env"}, {ID_DREF, "Damp Reflections", "float-env"}, {ID_ODEP, "Ocean Depth", "distance-env"}, {ID_SEED, "Seed", "integer"}, {ID_INTP, "Catmull-Rom Interpolation", "integer"}, {ID_PRES, "Presets", "integer"}, /* This DOESNT work for displacement plugins, But left the code to see how other controls can be done */ // {ID_NORM, "Do Normals", "integer"}, // {ID_JACB, "Jacobian", "integer"}, { 0 } }; static LWXPanelHint hints[] = { XpLABEL( 0, "HOT Ocean Toolkit" ), // Enable Use Choppiness and Chopinnes controls XpENABLE_(ID_DCHP),XpH(ID_CHOP),XpEND, /* This DOESNT work for displacement plugins, But left the code to see how other controls can be done */ // XpENABLE_MAP_(ID_DCHP, nrm_map), XpH(ID_NORM),XpEND, XpDIVADD( ID_GLSC ), //Separator after Global Scale XpDIVADD( ID_SWAV ), XpDIVADD( ID_CHOP ), XpDIVADD( ID_WALG ), XpDIVADD( ID_ODEP ), XpDIVADD( ID_INTP ), XpMIN( ID_RESO, 1 ), // Resolution XpMAX( ID_RESO, 12 ), XpSTEP( ID_RESO, 1 ), XpMIN( ID_GLSC, 0 ), // Global Scale XpMAX( ID_GLSC, 5000000 ), XpSTEP( ID_GLSC, 1 ), XpMIN( ID_WAVH, 0 ), // Wave Height XpMAX( ID_WAVH, 5000 ), XpSTEP( ID_WAVH, 1 ), XpMIN( ID_SWAV, 0 ), // Shortest Wave XpMAX( ID_SWAV, 500 ), XpSTEP( ID_SWAV, 1 ), XpMIN( ID_CHOP, 0 ), // Choppiness XpMAX( ID_CHOP, 50 ), XpSTEP( ID_CHOP, 1 ), XpMIN( ID_WSPD, 0 ), // Wind Speed XpMAX( ID_WSPD, 50000 ), XpSTEP( ID_WSPD, 1 ), XpMIN( ID_WALG, 0 ), // Wind Align XpMAX( ID_WALG, 10 ), XpSTEP( ID_WALG, 1 ), XpMIN( ID_DREF, 0 ), // Damp Reflections XpMAX( ID_DREF, 1 ), XpSTEP( ID_DREF, 1 ), XpMIN( ID_ODEP, 0 ), // Ocean Depth XpMAX( ID_ODEP, 50000 ), XpSTEP( ID_ODEP, 1 ), XpEND }; // end hint[] CreateViewXPanel (ctrl, desc, hints); Preset.Setup(LW_XPanel, ID_PRES); local->panel = LW_XPanel.getID(); return AFUNC_OK; }