void CPropertiesCanvas::OnPropertyGridChange( wxPropertyGridEvent& event ) { wxPGProperty* p = event.GetPropertyPtr(); Property* property = GetProperty(p); if(property == NULL)return; wxGetApp().CreateUndoPoint(); switch(property->get_property_type()){ case StringPropertyType: { wxString value; if (property->Evaluate(GetProperties(), event.GetPropertyValue().GetString(), value)) { (*(((PropertyString*)property)->m_callbackfunc))(value, ((PropertyString*)property)->m_object); } } break; case DoublePropertyType: { wxString value; if (property->Evaluate(GetProperties(), event.GetPropertyValue().GetString(), value)) { (*(((PropertyDouble*)property)->m_callbackfunc))(strtod(value.utf8_str(),NULL), ((PropertyDouble*)property)->m_object); } } break; case LengthPropertyType: { wxString value; if (property->Evaluate(GetProperties(), event.GetPropertyValue().GetString(), value)) { (*(((PropertyLength*)property)->m_callbackfunc))(strtod(value.utf8_str(),NULL) * wxGetApp().m_view_units, ((PropertyDouble*)property)->m_object); } } break; case IntPropertyType: { (*(((PropertyInt*)property)->m_callbackfunc))(event.GetPropertyValue().GetLong(), ((PropertyInt*)property)->m_object); } break; case ColorPropertyType: { wxVariant var = event.GetPropertyValue(); const wxColour* wcol = wxGetVariantCast(var,wxColour); HeeksColor col(wcol->Red(), wcol->Green(), wcol->Blue()); (*(((PropertyColor*)property)->m_callbackfunc))(col, ((PropertyColor*)property)->m_object); } break; case VertexPropertyType: { if(p->GetName()[0] == 'x'){ ((PropertyVertex*)property)->m_x[0] = event.GetPropertyValue().GetDouble(); if(((PropertyVertex*)property)->m_affected_by_view_units)((PropertyVertex*)property)->m_x[0] *= wxGetApp().m_view_units; } else if(p->GetName()[0] == 'y'){ ((PropertyVertex*)property)->m_x[1] = event.GetPropertyValue().GetDouble(); if(((PropertyVertex*)property)->m_affected_by_view_units)((PropertyVertex*)property)->m_x[1] *= wxGetApp().m_view_units; } else if(p->GetName()[0] == 'z'){ ((PropertyVertex*)property)->m_x[2] = event.GetPropertyValue().GetDouble(); if(((PropertyVertex*)property)->m_affected_by_view_units)((PropertyVertex*)property)->m_x[2] *= wxGetApp().m_view_units; } (*(((PropertyVertex*)property)->m_callbackfunc))(((PropertyVertex*)property)->m_x, ((PropertyVertex*)property)->m_object); } break; case TrsfPropertyType: { double pos[3]; extract(((PropertyTrsf*)property)->m_trsf.TranslationPart(), pos); gp_Dir xaxis(1, 0, 0); xaxis.Transform(((PropertyTrsf*)p)->m_trsf); gp_Dir yaxis(0, 1, 0); yaxis.Transform(((PropertyTrsf*)p)->m_trsf); double vertical_angle = 0; double horizontal_angle = 0; double twist_angle = 0; CoordinateSystem::AxesToAngles(xaxis, yaxis, vertical_angle, horizontal_angle, twist_angle); if(p->GetName()[0] == 'x'){ pos[0] = event.GetPropertyValue().GetDouble(); } else if(p->GetName()[0] == 'y'){ pos[1] = event.GetPropertyValue().GetDouble(); } else if(p->GetName()[0] == 'z'){ pos[2] = event.GetPropertyValue().GetDouble(); } else if(p->GetName()[0] == 'v'){ vertical_angle = event.GetPropertyValue().GetDouble(); } else if(p->GetName()[0] == 'h'){ horizontal_angle = event.GetPropertyValue().GetDouble(); } else if(p->GetName()[0] == 't'){ twist_angle = event.GetPropertyValue().GetDouble(); } CoordinateSystem::AnglesToAxes(vertical_angle, horizontal_angle, twist_angle, xaxis, yaxis); ((PropertyTrsf*)property)->m_trsf = make_matrix(make_point(pos), xaxis, yaxis); (*(((PropertyTrsf*)property)->m_callbackfunc))(((PropertyTrsf*)property)->m_trsf, ((PropertyTrsf*)property)->m_object); } break; case ChoicePropertyType: { (*(((PropertyChoice*)property)->m_callbackfunc))(event.GetPropertyValue().GetLong(), ((PropertyChoice*)property)->m_object); } break; case CheckPropertyType: { (*(((PropertyCheck*)property)->m_callbackfunc))(event.GetPropertyValue().GetBool(), ((PropertyCheck*)property)->m_object); } break; case ListOfPropertyType: { } break; case FilePropertyType: { (*(((PropertyFile*)property)->m_callbackfunc))(event.GetPropertyValue().GetString(), ((PropertyFile*)property)->m_object); } break; case DirectoryPropertyType: { (*(((PropertyDir*)property)->m_callbackfunc))(event.GetPropertyValue().GetString(), ((PropertyDir*)property)->m_object); } break; } wxGetApp().Changed(); }