Muchas gracias, Rafael. Por la pronta respuesta de mi anterior post, me sirvio para dar con la soluciona a mi problema.
Estoy interesado en crear un detector optico y otro inductivo a partir de una malla de mi creacion.
He visto que creaste este tipo de detectores, el problema es que no puedo acceder a ellos desde el editor de componentes, y de esa manera ver el codigo fuente de su funcionamiento para adaptarlo a mi malla.
Podria encontrar informacion de C++ de XNA 2.0. que me sirviese. ¿Las funciones que usa el Machine Simulator en C++, son sacadas de XNA 2.0, o las has creado tu?
Estoy creando una simulacion de una estacion de aprendizaje de Festo (MPS), y me gustaria que fuese lo mas fidedigna posible a la original.
Un saludo, y gracias por tu ayuda.
Para detectar WorkParts simulando el funcionamiento de un sensor óptico o inductivo, Machines Simulator ofrece dicersas funciones algunas de ellas son:
int WorkPartCollisionId(int id);
Description: Returns the WorkPart Id number that collides with the id box component.
Example: int selWp = Editor.WorkPartCollisionId(1);
int WorkPartRayColId(int id, Vector3 pos, Vector3 target);
Description: Returns the WorkPart Id number that collides with a Ray form the id box component, with pos Vecctor position and target direction.
Example: int selWp = Editor.WorkPartRayColId(1, new Vector3(0.5f, 0, 0.2f), Vector3.Up);
int WorkPartDistRayColId(int id, Vector3 pos, Vector3 target, float distance);
Description: Returns the WorkPart Id number that collides with a Ray form the id box component, with pos Vecctor position, target direction and the distance is equal or lower than distance.
Example: int selWp = Editor.WorkPartDistRayColId(1, new Vector3(1.0f, 0, 0.2f), Vector3.Up, 0.5f);
Puedes ver algún ejemplo en el UserDefinedComponent VerticalGantry, este elemento tiene un dectector en la parte del electroimán para detectar cuando una pieza está en el area de captura:
if(IO.GetOutput("Active_Magnet"))
{
if(!part)
searchPart = box[9].WorkPartDistRayCol(box[9].body.Position, box[9].body.Orientation.Forward, detect);
if(searchPart != null)
{
part = true;
IO.SetInput("Part_Detected", true);
TakePart();
}
}
else
{
if(searchPart != null)
{
searchPart.body.EnableBody();
searchPart = null;
IO.SetInput("Part_Detected", false);
part = false;
}
}
Espero que te sirva de ayuda.
Saludos.