Hallo,
Ich möchte irgendwie die Richtung einer selektierten Linie dem Anwender (Aw.) anzeigen. Diese Richtung brauche ich, um einen Parallelitäts-Constraint zwischen zwei Teilen zu erzeugen.
Was ich vor habe: Aw. selektiert eine Linie bzw. Edge mit dem SelectElement Befehl.
Das Makro erzeugt einen neuen Open-Body, legt einen ersten PointOnCurve mit Ratio 0, legt einen zweiten PointOnCurve mit Ratio 1 und erzeugt dann einen Pfeil vom ersten bis zum zweiten Punkt (Richtung).
Aw. wird gefragt, ob diese Richtung passt. Wenn ja, erzeugt das Makro den Constraint und löscht den OpenBody, sonst ändert es die ConstraintOrientation.
Mein Problem:
Um einen PointOnCurve zu erzeugen, brauche ich eine Referenz. Es ist kein Problem diese Referenz zu erzeugen, wenn das selektierte Element eine Linie ist (create reference from object). Aber wenn das selektierte Element eine Edge ist, dann geht das CreateReference nicht. Wahrscheinlich muss ich CreateReferenceFromBRepName benutzen. Wenn ich aber CreateReferenceFromName benutze, macht er die Referenz, aber dann geht das HybridFactory.AddNewPointOnCurveFromPercent nicht !!!!
Beispiel (geht aber nicht):
Sub test()
Set mySel = CATIA.ActiveDocument.Selection
Set opart = CATIA.ActiveDocument.Part
Dim stype(0)
stype(0) = "CATBaseDispatch"
mySel.Clear
Status = mySel.SelectElement(stype, "Select a Line or an Edge.", False)
Set osel = mySel.Item(1)
mySel.EndSelectElement
Set reference1 = opart.CreateReferenceFromName(osel.reference.DisplayName)
Set hsf = opart.HybridShapeFactory
'Ab hier gibts Probleme
Set hybridShapePointOnCurve1 = hsf.AddNewPointOnCurveFromPercent(reference1, 0, False)
End Sub
Beispiel (Aufgezeichnet, funktioniert):
Das Problem ist, dass ich so ein CreateReferenceFromBRepName nicht erzeugen kann, weil ich nicht weiss, in welches Feature das selektierte Element gehört.
Sub CATMain()
Set partDocument1 = CATIA.ActiveDocument
Set part1 = partDocument1.Part
Set hybridShapeFactory1 = part1.HybridShapeFactory
Set body1 = part1.Bodies.Item("PartBody")
Set body2 = part1.HybridBodies.Item("Open_body.1")
Set shapes1 = body1.Shapes
Set pad1 = shapes1.Item("Pad.1")
Set reference1 = part1.CreateReferenceFromBRepName("REdge:(Edge:(Face:(Brp:(Pad.1;0:(Brp:(Sketch.1;1)));None:());Face:(Brp:(Pad.1;2);None:());None:(Limits1:();Limits2:()));WithPermanentBody;Without BuildError;WithSelectingFeatureSupport)", pad1)
Set hybridShapePointOnCurve1 = hybridShapeFactory1.AddNewPointOnCurveFromPercent(reference1, 0.0, False)
body2.AppendHybridShape hybridShapePointOnCurve1
part1.InWorkObject = hybridShapePointOnCurve1
part1.Update
End Sub
Hat jemand eine Ahnung, wie ich dieses Problem lösen kann? Vielleicht gibt es andere Möglichkeiten, um dem Aw. eine Richtung anzuzeigen.
Vielen vielen Dank im Vorraus !!!
Christoph
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP