Vítejte !   Přihlášení | Registrace
Hlavní menu
CATIA fórum.cz
Novinky
Seriál CATIA
Obecně o CAD
Novinky ze světa DS
Makra pro CATIA V5
Diskuse
Vytvořit téma
Koncepty
Seznam oblíbených
Soukromé zprávy
Pravidla
Live CHAT
VIP žádost
Základy Catia
Ke stažení
Doporučujeme
Pracovní příležitosti
Reklama a kampaně
O fóru
Nápověda

Umisteni prvku Text with leader

UživatelPříspěvek
Fojman

Poslat zprávu | Profil
Datum: 27.2. 2012 | Zobrazeno: 10845x
Konfigurace CATIA:

Text dotazu:
Ahoj, jsem zacatecnik a co se tyce maker zatim tapu. Rad bych si udelal makro ktere by na vsechny body (napr. Bod_1, Bod_2 atd.) v geometrical setu pripojilo Text with leader odpovidajici nazvu kazdeho jednotliveho bodu a byl umisten na souradnicich odpovidajici umisteni kazdeho bodu (napr. x+10,y+10).

Neco jsem zkousel vymyslet, ale s programovanim zacim a nerozumim co predstavuje v Catia Scriptu HybridBody a HybridShape - rad bych pochopil princip a ne nekde stahnul reseni. Trochu umim zaklady ActionScriptu co se pouziva ve Flashi, ale bojuju tady bojuju s tridami, objekty, metodami, atd. Je toho na zacatku nejak moc:)

pokud nahraju makro, tak se vybrany bod vybere podle nazvu, ale ja bych rad vyuzil cyklus a vybiral body jinak nez pres nazev.


Sub CATMain()

Set partDocument1 = CATIA.ActiveDocument

Set part1 = partDocument1.Part

Set annotationSets1 = part1.AnnotationSets
Set annotationSet1 = annotationSets1.Add("ISO_TRN")
Set hybridBodies1 = part1.HybridBodies
Set hybridBody1 = hybridBodies1.Item("Importovane body")
Set hybridShapes1 = hybridBody1.HybridShapes
Set hybridShapePointCoord1 = hybridShapes1.Item("Point_01")
Set reference1 = part1.CreateReferenceFromObject(hybridShapePointCoord1)
Set userSurfaces1 = part1.UserSurfaces
Set userSurface1 = userSurfaces1.Generate(reference1)

Dim bSTR1
bSTR1 = part1.Name

Set annotationFactory1 = annotationSet1.AnnotationFactory

Set annotation1 = annotationFactory1.CreateEvoluateText(userSurface1, 10, 10, 0.000000, True)
annotation1.Text.Text = hybridShapePointCoord1.Name

part1.Update

End Sub


V posledni procedure kde se tvori vlastni text je umisteni (10,10), ale ja bych rad pouzil neco ve stylu hybridShapePointCoord1.x + 10, hybridShapePointCoord1.y + 10.
Napr. ve Flash ActionScriptu jdou umistovat objekty pomoci zapisu napr. objekt._x = 120, objekt._y = 33.

Diky za vysvetleni a komentare.

Ing Jan Cinert

Poslat zprávu | Profil
[#2642] | Publikováno: 27.02. 2012 - 20:46
Možností je víc, pokud budete mít body pro vytvoření anotací v jednom setu, šel bych na to asi takhle:

1. vybrat set s body (uživatel)
2. vybrat všechny body v tomto setu
3a. pokud bude bod typu PointCoord, získat z něj souřadnice
3b. pokud půjde o jiný bod, bude se muset provést měření a souřadnice vytáhnout z něho
4. vytvořit anotaci podle souřadnic

Pokud budou body v různých setech, měly by mít nějaký prefix, a pak by se dalo použít vyhledávání.


Kód by vypadal asi takhle (CATScript, otevřený CATPart):

' selekce

Set oPart = CATIA.ActiveDocument.Part
Set oSelection = CATIA.ActiveDocument.Selection
oSelection.Clear

' uzivatel vybere Set s body
Dim Filter(0)
Filter(0) = "HybridBody"
Status = oSelection.SelectElement2(Filter, "Vyberte Set s body...", False)

' ukonceni pri stisku Esc
If Status = "Cancel" Then
Exit Sub
End If

Set oHybridBody = oSelection.Item(1).Value

oSelection.Clear

oSelection.Add(oHybridBody)

' vyhledame vsechny body ve vybranem setu
oSelection.Search(".Point; in")

' pokud jsme nejaky bod nalezli
If oSelection.Count >= 1 Then

oSPAWB = CATIA.ActiveDocument.GetWorkbench("SPA Workbench")
Dim oCoordinates(2)

' projdeme vsechny nalezene body
For i = 1 To oSelection.Count

' mereni bodu
Set oRef = oPart.CreateReferenceFromObject(oSelection.Item(i).Value)
Set oMeasurable = oSPAWB.GetMeasurable(oRef)
oMeasurable.GetPoint oCoordinates

' v poli oCoordinates jsou souradnice bodu
x = oCoordinates(0)
atd

' a nakonec vytvorite anotaci podle toho co se vam nahralo
Next
End If


Je to jen pro inspiraci, jde to i jinak. :-)

Fojman

Poslat zprávu | Profil
[#2644] | Publikováno: 28.02. 2012 - 08:38
Mnohokrat dekuji za pomoc, funguje to skvele. Jen tam byla chybka u ("SPA Workbench") misto ("SPAWorkbench"), ale to uz opravdu nebyl problem upravit. Bohuzel ted mi to v textu anotacich zobrazuje oznaceni reference tak jak si ho Catie vytvorila. (annotation1.Text.Text = hybridShapePointCoord1.Name). Potreboval bych tam dostat vsude nazev bodu - jeho Feature Name. Bohuzel nevim jakym prikazem tento nazev vyvolam. Prosim o pomoc a jeste jednou dekuji!!!


Sub CATMain()


' selekce

Set oPart = CATIA.ActiveDocument.Part

Set oSelection = CATIA.ActiveDocument.Selection

oSelection.Clear

' uzivatel vybere Set s body

Dim Filter(0)

Filter(0) = "HybridBody"

Status = oSelection.SelectElement2(Filter, "Vyberte Set s body...", False)

' ukonceni pri stisku Esc

If Status = "Cancel" Then

Exit Sub

End If

Set oHybridBody = oSelection.Item(1).Value

oSelection.Clear
oSelection.Add(oHybridBody)

' vyhledame vsechny body ve vybranem setu

oSelection.Search(".Point; in")

' pokud jsme nejaky bod nalezli
If oSelection.Count >= 1 Then

Set oSPAWB = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")

Dim oCoordinates(2)


' projdeme vsechny nalezene body

For i = 1 To oSelection.Count


' mereni bodu

Set oRef = oPart.CreateReferenceFromObject(oSelection.Item(i).Value)

Set oMeasurable = oSPAWB.GetMeasurable(oRef)

oMeasurable.GetPoint oCoordinates



' v poli oCoordinates jsou souradnice bodu

x = oCoordinates(0)
y = oCoordinates(1)
z = oCoordinates(2)



' anotace
Set annotationSets1 = oPart.AnnotationSets
Set annotationSet1 = annotationSets1.Add("ISO_TRN")
Set hybridBodies1 = oPart.HybridBodies
Set hybridBody1 = hybridBodies1.Item("Importovane body")
Set hybridShapes1 = hybridBody1.HybridShapes
Set hybridShapePointCoord1 = oRef
Set userSurfaces1 = oPart.UserSurfaces
Set userSurface1 = userSurfaces1.Generate(oRef)



Dim bSTR1

bSTR1 = oPart.Name


Set annotationFactory1 = annotationSet1.AnnotationFactory
Set annotation1 = annotationFactory1.CreateEvoluateText(userSurface1,(x-20), (y-40), 0, True)
annotation1.Text.Text = hybridShapePointCoord1.Name 'Tady potrebuju prirazovat nazev bodu



oPart.Update

Next

End If

End Sub

Ing Jan Cinert

Poslat zprávu | Profil
[#2645] | Publikováno: 28.02. 2012 - 10:58
Objekt Point je de facto oSelection.Item(i).Value, takže jeho název je oSelection.Item(i).Value.Name.

PS: Jedna chyba je na to, že jsem to psal z hlavy, celkem dobré skóre. :-)



Uživatel nepřihlášen

Pro zobrazení obsahu stránky / provedení akce (vytvoření nového téma, napsání odpovědi do diskuse apod.) musíte být přihlášeni.