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

Chyba při GetPointsOnCurve

Kompletní přehled příspěvků v tématu Chyba při GetPointsOnCurve řazený podle data jejich publikace na fóru.

UživatelPříspěvek
charlie0

Poslat zprávu | Profil
Datum: 20.3. 2013 | Zobrazeno: 9810x
Konfigurace CATIA:

Text dotazu:
Dobrý den,

Pokouším se pomocí funkce GetPointsOnCurve zjistit krajní body křivky(průsečíku roviny a plochy), ale právě na této funkci mi to hází následující chybu:

Compile error: Function or interface marked as restricted, or the function uses an Automation type not supported in VisualBasic.

Nedaří se mi zjistit, čím to může být, no hold nejsem žádný expert.
Část kódu je zde:

Sub KrajniBody()


Dim objPart As Part
Dim objHShape As HybridShape
Dim objHShapeRef As Reference
Dim reference1, reference7 As Reference
Dim Krivka(8) As Variant

Set objPart = CATIA.ActiveDocument.Part

'první bod z „oblast“

Set objHShapePt1 = objPart.HybridBodies.Item("oblast").HybridShapes.Item(1)
Set objHShapePt1Ref = objPart.CreateReferenceFromObject(objHShapePt1)

Set hybridShapeFactory1 = objPart.HybridShapeFactory

'první plocha z „sklo“

Set objHShape = objPart.HybridBodies.Item("sklo").HybridShapes.Item(1)
Set objHShapeRef = objPart.CreateReferenceFromObject(objHShape)

'novy Set

Set hybridBodies1 = objPart.HybridBodies
Set HybridBody1 = hybridBodies1.Add()

'plocha YZ

Set originElements1 = objPart.OriginElements
Set hybridShapePlaneExplicit1 = originElements1.PlaneYZ
Set reference1 = objPart.CreateReferenceFromObject(hybridShapePlaneExplicit1)


Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
Set TheMeasurable = TheSPAWorkbench.GetMeasurable(reference1)

'ofSet roviny YZ

Set hybridShapePlaneOffset1 = hybridShapeFactory1.AddNewPlaneOffset(reference1, 100, True)
HybridBody1.AppendHybridShape hybridShapePlaneOffset1

'intersection roviny s plochou = krivka

Set hybridShapeIntersection1 = hybridShapeFactory1.AddNewIntersection(hybridShapePlaneOffset1, objHShape)

HybridBody1.AppendHybridShape hybridShapeIntersection1

'ulozeni souradnic krajnich bodu intersectionu Do Krivka

Set reference7 = objPart.CreateReferenceFromObject(hybridShapeIntersection1)
Set TheMeasurable = TheSPAWorkbench.GetMeasurable(reference7)
TheMeasurable.'bold'>GetPointsOnCurve Krivka

objPart.Update

End Sub


Díky za odpovědi.
Karel

Ing Jan Cinert

Poslat zprávu | Profil
[#3750] | Publikováno: 20.03. 2013 - 23:08
Zkuste deklarovat promennou krivka jen jako Krivka(8) bez udání typu, ten Variant většinou takhle zlobí. Obecně je lepší u pole neudávat typ, pak je to bez problémů.
Michal

Poslat zprávu | Profil
[#3752] | Publikováno: 21.03. 2013 - 07:11
Ještě bych zkusil změnit deklaraci
Dim reference1, reference7 As Reference
na
Dim reference1 As Reference
Dim reference7 As Reference
VB nepodporuje deklaraci jak v C. Umožňuje to napsat i zkompilovat, ale výsledek je myslím takový, že pouze první proměnná je daného typu a ostatní jsou jako variant.
Třeba to pomůže.
Ing Jan Cinert

Poslat zprávu | Profil
[#3754] | Publikováno: 21.03. 2013 - 17:34
Tak toho jsem si ani nevšiml, ale je to pravda, deklarovaný typ platí jen pro první proměnnou.
charlie0

Poslat zprávu | Profil
[#3755] | Publikováno: 22.03. 2013 - 07:02
Bohužel ani to nepomáhá. Ještě jsem hledal na internetu a nešel jsem varianty s příkazem Call TheMeasurable.GetPointsOnCurve Krivka
a různé kombinace se závorkami GetPointsOnCurve Krivka() nebo GetPointsOnCurve(Krivka). Ale ani to nezabralo.
Michal

Poslat zprávu | Profil
[#3765] | Publikováno: 25.03. 2013 - 15:40
ještě jeden nápad, zkusil bych přehodit update partu

Set hybridShapeIntersection1 = hybridShapeFactory1.AddNewIntersection(hybridShapePlaneOffset1, objHShape)

call HybridBody1.AppendHybridShape(hybridShapeIntersection1)
'bold'>call objPart.Update
'ulozeni souradnic krajnich bodu intersectionu Do Krivka

Set reference7 = objPart.CreateReferenceFromObject(hybridShapeIntersection1)
Set TheMeasurable = TheSPAWorkbench.GetMeasurable(reference7)
call TheMeasurable.GetPointsOnCurve(Krivka)

nejsem si jistý, ale není náhodou reference7 nothing, když nedojde k updatu?

a vlastně ještě druhý nápad. Jakého typu je TheMeasurable? Zkuste ho deklarovat jako variant.
Ing Jan Cinert

Poslat zprávu | Profil
[#3766] | Publikováno: 26.03. 2013 - 09:41
Přehozený update by to mohl být, ale většinou mu vadí, když při vytváření reference objekt není vložen ve stromu. To, že není updatovaný, nebývá příčinou chyby.

Pokud se vrátím k chybové hlášce - přesně tohle se objevuje, když se Selection deklaruje jako Selection - zde se jedná o chybu v API (zajímavé, že v .NET je to v pořádku) a musí se deklarovat jako typ Variant.

V typu TheMeasurable to ale funguje i s typem Measurable.
charlie0

Poslat zprávu | Profil
[#3767] | Publikováno: 26.03. 2013 - 18:06
Díky, pomohly obě změny dohromady tj.
TheMeasurable As Variant
a zmena updatu. Jednotlivě ne.

Jaký je rozdíl volání funkce s přikazem Call ... a bez něj ?
Michal

Poslat zprávu | Profil
[#3770] | Publikováno: 27.03. 2013 - 08:07
není mezi tím žádný rozdíl. Já to používám, přijde mi kód přehlednější.


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.