public void UpdateFromSelection(SelectionMgr swSelMgr, ref AttributeDef mdefattr_chbody)
{
// Fetch current properties from the selected part(s) (i.e. ChBody in C::E)
for (int isel = 1; isel <= swSelMgr.GetSelectedObjectCount2(-1); isel++)
if ((swSelectType_e)swSelMgr.GetSelectedObjectType3(isel, -1) == swSelectType_e.swSelCOMPONENTS)
{
//Component2 swPart = (Component2)swSelMgr.GetSelectedObject6(isel, -1);
Component2 swPart = swSelMgr.GetSelectedObjectsComponent3(isel, -1);
ModelDoc2 swPartModel = (ModelDoc2)swPart.GetModelDoc2();
Component2 swPartcorr = swPartModel.Extension.GetCorresponding(swPart);// ***TODO*** for instanced parts? does not work...
swPartcorr = swPart; // ***TODO***
if (swPartModel.GetType() == (int)swDocumentTypes_e.swDocASSEMBLY)
{
if (swPart.Solving == (int)swComponentSolvingOption_e.swComponentFlexibleSolving)
{
System.Windows.Forms.MessageBox.Show("Fexible assemblies not supported as ChBody (set as Rigid?)");
return;
}
if (swPart.Solving == (int)swComponentSolvingOption_e.swComponentRigidSolving)
{
System.Windows.Forms.MessageBox.Show("Setting props to rigid assembly as ChBody");
AssemblyDoc swAssemblyDoc = (AssemblyDoc)swPartModel;
swPart.Select(false);
swAssemblyDoc.EditAssembly();
swAssemblyDoc.EditRebuild();
//return;
}
}
// fetch SW attribute with Chrono parameters for ChBody
SolidWorks.Interop.sldworks.Attribute myattr = null;
if (swPartcorr != null)
myattr = (SolidWorks.Interop.sldworks.Attribute)swPart.FindAttribute(mdefattr_chbody, 0);
if (myattr == null)
{
// if not already added to part, create and attach it
//System.Windows.Forms.MessageBox.Show("Create data");
myattr = mdefattr_chbody.CreateInstance5(swPartModel, swPartcorr, "Chrono::ChBody_data", 0, (int)swInConfigurationOpts_e.swAllConfiguration);
swPartModel.ForceRebuild3(false); // needed, but does not work...
//swPartModel.Rebuild((int)swRebuildOptions_e.swRebuildAll); // needed but does not work...
if (myattr.GetEntityState((int)swAssociatedEntityStates_e.swIsEntityInvalid))
System.Windows.Forms.MessageBox.Show("swIsEntityInvalid!");
if (myattr.GetEntityState((int)swAssociatedEntityStates_e.swIsEntitySuppressed))
System.Windows.Forms.MessageBox.Show("swIsEntitySuppressed!");
if (myattr.GetEntityState((int)swAssociatedEntityStates_e.swIsEntityAmbiguous))
System.Windows.Forms.MessageBox.Show("swIsEntityAmbiguous!");
if (myattr.GetEntityState((int)swAssociatedEntityStates_e.swIsEntityDeleted))
System.Windows.Forms.MessageBox.Show("swIsEntityDeleted!");
}
Set_collision_on(Convert.ToBoolean(((Parameter)myattr.GetParameter(
"collision_on")).GetDoubleValue()));
Set_friction(((Parameter)myattr.GetParameter(
"friction")).GetDoubleValue());
Set_rolling_friction(((Parameter)myattr.GetParameter(
"rolling_friction")).GetDoubleValue());
Set_spinning_friction(((Parameter)myattr.GetParameter(
"spinning_friction")).GetDoubleValue());
Set_restitution(((Parameter)myattr.GetParameter(
"restitution")).GetDoubleValue());
Set_collision_envelope(((Parameter)myattr.GetParameter(
"collision_envelope")).GetDoubleValue());
Set_collision_margin(((Parameter)myattr.GetParameter(
"collision_margin")).GetDoubleValue());
Set_collision_family((int)((Parameter)myattr.GetParameter(
"collision_family")).GetDoubleValue());
// fetch SW attribute with Chrono parameters for ChConveyor
/*
SolidWorks.Interop.sldworks.Attribute myattr_conv = (SolidWorks.Interop.sldworks.Attribute)swPart.FindAttribute(defattr_chconveyor, 0);
if (myattr_conv == null)
{
// if not already added to part, create and attach it
//myattr_conv = defattr_chconveyor.CreateInstance5(swPartModel, swPart, "Chrono::ChConveyor_data", 0, (int)swInConfigurationOpts_e.swThisConfiguration);
}
*/
/*
// fetch SW attribute with Chrono parameters for ChConveyor (if any!)
SolidWorks.Interop.sldworks.Attribute myattr_conveyor = (SolidWorks.Interop.sldworks.Attribute)swPart.FindAttribute(defattr_chconveyor, 0);
if (myattr_conveyor != null)
{
show_conveyor_params = true;
Set_conveyor_speed(((Parameter)myattr_conveyor.GetParameter(
"conveyor_speed")).GetDoubleValue());
}
*/
}
}