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

Makro - Vytvorenie referencie z bodov zo skice pre vytvorenie geometrie valca

UživatelPříspěvek
Andrej Verný

Poslat zprávu | Profil
Datum: 15.7. 2013 | Zobrazeno: 11251x
Konfigurace CATIA:

Text dotazu:
Zdravím už dlchšiu dobu si neviem dať rady s funkciou CreateReferencefromBrepName.

Ide o jednoduché makro na vytvorenie valcovej plochy kde stredy valcových plôch sú vytvorené v Sketch.1. Tuná mám problem , že ako vytvoriť referenciu na jednotlivé body.
Skúšal som si nahrať makro (Record Macro) a nerozumiem automaticky vytvorenému výberu BREP-u.
Makro som doplnil potom jednoduchou slučkou, kedže v Sketch.1 je viacej bodov. (v Sketch.1 nie je žiadna iná geometria. )

Po ubehnuti makra nájde všetky body a aj vytorí geometrie pre všetky body. Len jednoducho update neprebehne a po ukonceni makra vydim,ze geometria ma prislusny vertex a aj smer. Po rozkliknuti hlási ale chybu

Edges or face not found
Re-select the edge or faces on current geometry






-------------------- SLUCKA PRE BODY ---------


Dim SGEO As GeometricElements
Set SGEO = Sketch1.GeometricElements


For i = 1 To SGEO.Count

Dim reference2 As Reference
Set reference2 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:(Sketch.1;SGEO.Item.Value);None:(Limits1:();Limits2:();+1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", sketch1)



Dim hybridShapeCylinder1 As HybridShapeCylinder
Set hybridShapeCylinder1 = hybridShapeFactory1.AddNewCylinder(reference2, 20#, 27#, 18#, hybridShapeDirection1)


Alebo existuje nejaka iná možnosť (ludsky čitateľnejsšia )ako vytvoriť referencie z bodov s skici

Prečo práve BorderFVertex:(BEdge:?
A nie len Vertex?

ďakujem za odpoveď

Michal

Poslat zprávu | Profil
[#4004] | Publikováno: 16.07. 2013 - 07:08
Zdravím,

S BRepName je to vždycky trochu problém. Proč je tam BorderFVertex a ne jen Vertex to nevím. Jednou je tam BorderFVertex, tak to jinak nebude.

Zkusil bych nejdřív vytvořit referenci pomocí funkce CreateReferenceFromObject. Někdy ale referenci nejde takto vytvořit, tak se musí použít BRepName.
Když si nahraješ makro vícekrát s různými body (nejlépe si je nějak pojmenovat, aby se lišily) tak se dá v řetězci najít, co je všude stejné a kde se dosazuje jméno daného bodu. Potom se dá řetězec vytvořit programově a použít ho ve funkci CreateReferencoFromBRepName. Ale už se mi stalo, že ani po vytvoření řetězce se mi nepodařilo vytvořit referenci nebo se řetězec nedal ani vytvořit.
V tvém případě bych řekl, že se bude měnit Sketch.1, SGEO.Item.Value a sketch1 na konci řetězce.

Michal
Andrej Verný

Poslat zprávu | Profil
[#4005] | Publikováno: 16.07. 2013 - 07:42
No neskúšal som meniť body, ale keď miesto SGEO.Item.Value napíšem číslo, tak to na príslušnom bode spraví gemetriu valcovej plochy (číslo môže byť od jedna do celkového počtu bodov ). Takže premenná je viac menej jasná.
Len už nejako so slučkou mi to nejde :|

Ako si ešte myslel "Když si nahraješ makro vícekrát s různými body (nejlépe si je nějak pojmenovat, aby se lišily) ". Ako rôzne body? (mám z makra vytvorených viacero variant či už pomocou manuálneho výberu alebo automatického rozpoznania , ale všetko bolo z 3D bodov , takže som sa dostal k vytvoreniu zo skice a tuna sa neviem vymotať). A ani knižka od Zithena mi nejako nepomáha.
Michal

Poslat zprávu | Profil
[#4006] | Publikováno: 16.07. 2013 - 08:08
Tak říkal si, že procházíš body v cyklu.
Nejdřív si nahraj makro pro jeden bod, potom pro druhý atd. a porovnej si řetězec v BRepName, aby si zjistil v čem se liší.
Andrej Verný

Poslat zprávu | Profil
[#4007] | Publikováno: 16.07. 2013 - 09:17
Tak som si to prešiel s troma bodmi zo skice a jediná premenná je tak ako som spomínal vyššie. čiže Sketch.1;1 . Kde číslo 1 je pri inom vertexe nahradené čislom 2, atď.

Set reference2 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:(Sketch.1;1);None:(Limits1:();Limits2:();+1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", sketch1)


A je zaujímavé,že aj keď zadefinujem nejakú premennú číslom tak to nefunguje. V príklade je PNum . A pritom keď miesto Pnum, dam priamo číslo jedna, tak to vytvorí bez problémov.


'-------------------- SLUCKA PRE BODY ---------

Dim SGEO As GeometricElements
Set SGEO = sketch1.GeometricElements


'For i = 1 To SGEO.Count
Dim PNum As Integer
PNum = 1
MsgBox PNum

Dim reference2 As Reference
Set reference2 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:'bold'>(Sketch.1;PNum);None:(Limits1:();Limits2:();+1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", sketch1)

Dim hybridShapeCylinder1 As HybridShapeCylinder
Set hybridShapeCylinder1 = hybridShapeFactory1.AddNewCylinder(reference2, 20#, 27#, 18#, hybridShapeDirection1)



hybridBody1.AppendHybridShape hybridShapeCylinder1
'Next 'i

part1.InWorkObject = hybridShapeCylinder1

part1.Update


V čom je háčik? Vie niekto?
Michal

Poslat zprávu | Profil
[#4008] | Publikováno: 16.07. 2013 - 12:59
Asi si trochu nerozumíme.
máš řetězec
"BorderFVertex:(BEdge:(Brp:(Sketch.1;PNum);None:(Limits1:();Limits2:();+1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)"

tzn. PNum se teď bere jako kus stringu. Nedosadí se za PNum 1, 2 atd.
musíš si ten řetězec složit nějak takto ->
"BorderFVertex:(BEdge:(Brp:(" & JmenoSketche & ";" & Cstr(PNum) & ");None:(Limits1:();Limits2:();+1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)"

nejsem si jistý jestli ti to teď pojede, myslím, že ještě se musí pošéfovat uvozovky. Když tak bych zkusil pohledat nějaké makro.
Andrej Verný

Poslat zprávu | Profil
[#4009] | Publikováno: 16.07. 2013 - 14:57
Meno Sketchu sa nemení, pretože mám len jednu skicu s viacerými bodmi.

Tak som doplnil makro ešte o nejake riadky, aby som sa vyhol vybratiu AbsoluteAxis v sketchi ako elementu.
Zmenil som aj retazec (podľa Michala...ktorému Ďakujem za nakopnutie ... ), BrepName ... Uspech je ale len viac ako polovicny. Pretože v skici je 5 bodov. Ono ich aj všetky nájde a správne identifikuje ale uspešne vykreslí iba 4 valcové plochy z 5. Pri tej poslednej hlási rovnaku chybu ako pred tým. Takže trošku som sa posunul, ale nerozumiem, prečo nevykreslí aj posledný valec.

tu je kompletné makro :
podmineky sú - Mať vytvorený Gemetrical Set.1 a v ňom je Sketch s ľubovolným počtom bodov.


Sub CATMain()

Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument

Dim part1 As Part
Set part1 = partDocument1.Part

Dim hybridShapeFactory1 As HybridShapeFactory
Set hybridShapeFactory1 = part1.HybridShapeFactory

Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies

Dim hybridBody1 As HybridBody
Set hybridBody1 = hybridBodies1.Item("Geometrical Set.1")

Dim hybridShapes1 As HybridShapes
Set hybridShapes1 = hybridBody1.HybridShapes

Dim hybridShapeLinePtDir1 As HybridShapeLinePtDir
Set hybridShapeLinePtDir1 = hybridShapes1.Item("Line.1")

Dim reference1 As Reference
Set reference1 = part1.CreateReferenceFromObject(hybridShapeLinePtDir1)

Dim hybridShapeDirection1 As HybridShapeDirection
Set hybridShapeDirection1 = hybridShapeFactory1.AddNewDirection(reference1)

Dim sketches1 As Sketches
Set sketches1 = hybridBody1.HybridSketches

Dim sketch1 As sketch
Set sketch1 = sketches1.Item("Sketch.1")

'-------------------- SLUCKA PRE BODY ---------


Dim geos As GeometricElements
Set geos = sketch1.GeometricElements
Dim geoA As GeometricElement
Dim geo As GeometricElement

For i = 1 To geos.Count
If geos.Item(i).GeometricType = catGeoTypePoint2D Then

Set geo = geos.Item(i)
MsgBox geo.Name ' vypis elemntu geometrie v skici s ktorou sa pracuje

Dim PNum
PNum = CStr(i)
MsgBox PNum ' vypis cisla geometrie , pre referenciu Do BREP


Dim reference2 As Reference
Set reference2 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:(Sketch.1;" & (PNum) & ");None:(Limits1:();Limits2:();+1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", sketch1)

Dim hybridShapeCylinder1 As HybridShapeCylinder
Set hybridShapeCylinder1 = hybridShapeFactory1.AddNewCylinder(reference2, 20#, 27#, 18#, hybridShapeDirection1)

hybridBody1.AppendHybridShape hybridShapeCylinder1
End If
Next 'i

part1.InWorkObject = hybridShapeCylinder1

part1.Update
MsgBox "Vytvorenych bolo : " & geo.Count


End Sub

Andrej Verný

Poslat zprávu | Profil
[#4010] | Publikováno: 17.07. 2013 - 08:16
Takže na chybu som už prišiel, treba len zkorigovat čislo PNum. Tzn .dohodiť else statement s korekciou čísla PNum.
Dakujem ešte raz Michalovi za nakopnutie a pomoc.

Ešte sa spýtam, že prečo práve takýto zápis musí byť :

....(BEdge:(Brp:(Sketch.1;'bold'> " & (PNum) & " )....



lebo logicky by malo stačiť

....(BEdge:(Brp:(Sketch.1;'bold'>PNum)....



prečo tie & a " ? Alebo to je v rámci VB niečo čo by som si mal doštudovať?

dík
Michal

Poslat zprávu | Profil
[#4012] | Publikováno: 19.07. 2013 - 08:46
No ono & se používá na spojení řetězců, např:
Dim s1 as string
dim s2 as string
dim s3 as string

s1 = "abraka"
s2 = "dabra"
s3 = s1 & " " & s2

debug.print s3

ve vysledku bude "abraka dabra"

takže právě logicky musíš udělat zřetězení, protože
debug.print (BEdge:(Brp:(Sketch.1;PNum) ti vypíše (BEdge:(Brp:(Sketch.1;PNum)
PNum je v tomto případě kus řetězce, nikoli hodnota tvojí proměnné.
kdežto
debug.print (BEdge:(Brp:(Sketch.1; " & (PNum) & " ) ti vypíše např
(BEdge:(Brp:(Sketch.1;1) pokud PNum = 1, prostě do řetězce vložíš hodnotu proměnné PNum
Ing Jan Cinert

Poslat zprávu | Profil
[#4015] | Publikováno: 20.07. 2013 - 21:06
Zdravím, taky si přihodím do vlákna. S BRep elementy jsem se několikrát pěkně navztekal, je to podle mě loterie - jednou to jde, jednou ne, protože ta syntaxe názvu elementu je naprosto šílená.

Já bych použil manuální výběr bodů ve skicáři - typ vertex se dá dobře filtrovat. Body načíst do výběru, ten pak postupně procházet a body používat přímo pro vytvoření geometrie a nedělat z nich reference. Catie si to nechá podstrčit i bez vytvoření reference.
Andrej Verný

Poslat zprávu | Profil
[#4018] | Publikováno: 22.07. 2013 - 08:36
Michalovi ešte raz dík za vysvetlenie.
Skúsim ešte aj variantu s manuálnym vyberom bodov zo skice. - dík za tip.


Andrej Verný

Poslat zprávu | Profil
[#4034] | Publikováno: 02.08. 2013 - 12:27
Tak len informačne pre čitateľov tejto témy.
Spravil som to podla p.Cinerta (body načítané do výberu bez vytvárania referencie), ale s tým, že body sa vyberajú automaticky a nie ručne. Ručne vyberám iba smer Valcovej plochy.
Ďakujem ešte raz prispievateľom v tejto téme za pomoc a usmernenie.




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.