751x
004789
2020-10-23

Pergunta

Como é que posso criar um sistema de coordenadas definido pelo utilizador através da interface COM e depois atribuí-lo a um apoio nodal?


Resposta:

Um apoio nodal tem as propriedades "ReferenceSystem" e "UserDefinedReferenceSystem" ao programar com a interface COM. A propriedade "ReferenceSystem" permite definir o tipo de sistema de coordenadas definido pelo utilizador (por exemplo, "Rodado" ou "Sistema de coordenadas"). Dependendo do que foi selecionado, o tipo é então definido através de "UserDefinedReferenceSystem".

No exemplo a seguir, foi selecionado o tipo "Sistema de coordenadas" e também criado um sistema de coordenadas definido pelo utilizador:

// create user defined coordinate system
IGuideObjects iGuide = iModel.GetGuideObjects();

// delete cosy No 2
UserCoordinateSystem[] csList = iGuide.GetCoordinateSystems();
if (csList.Length > 1)
{
for (int i = 0; i < csList.Length; ++i)
{
if (csList[i].No == 2)
{
iGuide.PrepareModification();
iGuide.DeleteObjects(GuideObjectType.CoordinateSystemObject, "2");
iGuide.FinishModification();
}
}
}

// define new cosy No 2
UserCoordinateSystem uCs = new UserCoordinateSystem();
uCs.Name = "test";
uCs.Comment = "test";
uCs.No = 2;
uCs.IsValid = true;

uCs.Origin.X = 1;
uCs.Origin.Y = 0;
uCs.Origin.Z = 1;

uCs.Point1.X = 2;
uCs.Point1.Y = 0;
uCs.Point1.Z = 1;

uCs.Point2.X = 1;
uCs.Point2.Y = 1;
uCs.Point2.Z = 2;

// set cosy No 2
iGuide.PrepareModification();
iGuide.SetCoordinateSystem(uCs);
iGuide.FinishModification();

// create nodal support with user defined cosy
NodalSupport ns = new NodalSupport();

ns.SupportConstantX = -1;
ns.SupportConstantY = -1;
ns.SupportConstantZ = -1;

ns.RestraintConstantX = -1;
ns.RestraintConstantY = 0;
ns.RestraintConstantZ = -1;

ns.Comment = "user defined cosy";
ns.NodeList = "1";
ns.ReferenceSystem = ReferenceSystemType.UserDefinedSystemType;

ns.UserDefinedReferenceSystem.ObjectNo = 2;
ns.UserDefinedReferenceSystem.Type = UserDefinedAxisSystemType.DefinedCoordinateSystemType;

iModData.PrepareModification();
iModData.SetNodalSupport(ns);
iModData.FinishModification();

Para poder criar o sistema de coordenadas, é necessária a interface para os objetos auxiliares: 'IGuideObjects'. Com a função "DeleteObjects ()", é eliminado um sistema de coordenadas existente com o número 2 e é criado um novo com "SetCoordinateSystem ()". Tenha em atenção o bloco "Prepare/Finish-Modification" para poder transferir o novo elemento.

O apoio nodal é transferido através da interface "IModelData". O bloco "Prepare/Finish-Modification" também será necessário aqui.