751x
004789
2020-10-23

Domanda

Come posso creare un sistema di coordinate definito dall'utente tramite l'interfaccia COM e quindi assegnarlo a un vincolo esterno nodale?


Risposta:

Per la programmazione tramite l'interfaccia COM, un supporto nodale ha le proprietà "ReferenceSystem" e "UserDefinedReferenceSystem". "Sistema di riferimento" consente di definire il tipo di sistema di coordinate definito dall'utente (ad esempio, "Ruotato" o "Sistema di coordinate") e, a seconda del tipo selezionato, questo tipo viene definito tramite "Sistema di riferimento definito dall'utente".

Nell'esempio seguente, è stato impostato il tipo "Sistema di coordinate" ed è stato creato anche un sistema di coordinate definito dall'utente:

//crea un sistema di coordinate definito dall'utente
iGuideObjects iGuide = iModel.GetGuideObjects();

//elimina l'accogliente n. 2
UserCoordinateSystem[]csList = iGuide.GetCoordinateSystems();
if (csList.Lunghezza > 1)
{
for (int i = 0; i < csList.Lunghezza; ++i)
{
if (csList[i].No == 2)
{
iGuide.PrepareModification();
iGuide.DeleteObjects(GuideObjectType.CoordinateSystemObject, "2");
iGuide.FinishModification();
}
}
}

//definisce il nuovo accogliente nr. 2
UserCoordinateSystem uCs = new UserCoordinateSystem();
uCs.Name = "prova";
uCs.Comment = "prova";
uCs.No = 2;
uCs.IsValid = true;

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

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

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

//imposta l'accogliente n. 2
iGuide.PrepareModification();
iGuide.SetCoordinateSystem(uCs);
iGuide.FinishModification();

//crea un vincolo esterno nodale con cosy definito dall'utente
NodalSupport ns = new NodalSupport();

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

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

ns.Comment = "definito dall'utente accogliente";
ns.NodeList = "1";
ns.ReferenceSystem = ReferenceSystemType.UserDefinedSystemType;

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

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

Per poter creare il sistema di coordinate, è necessaria l'interfaccia per gli oggetti guida: 'IGuidaOggetti'. Con la funzione "EliminaOggetto()", un sistema di coordinate esistente di Numero 2 viene prima eliminato e ne viene creato uno nuovo con "SetCoordinateSystem()". Si prega di notare il blocco "Prepara/Finire-Modifica" per essere in grado di trasferire il nuovo elemento.

Il vincolo esterno del nodo viene trasferito tramite l'interfaccia "IModelData". Anche in questo caso, è richiesto il blocco "Prepara/Finisci-Modifica".