Catia sketch constraints using python

Viewed 216

I am trying to draw a sketch on CATIA V5 from Python. I use Catia macros made in VB. But an error persists. I can't constrain the sketch. Here is my code, and the error I got:

from win32com.client import constants, Dispatch
import math as m

# Binding python session into CATIA
CATIA = Dispatch("CATIA.Application")
#Création du document
mon_document_piece = CATIA.Documents.Add("Part")
ma_piece = mon_document_piece.Part
mes_corps_de_piece = ma_piece.Bodies

#Définition de l'objet de travail
corps_de_travail = mes_corps_de_piece.Item("Corps principal")
ma_piece.InWorkObject = corps_de_travail
mes_esquisses = corps_de_travail.Sketches
#Choix de l'élément de référence pour crer l'esquisse, ici le plan XY
ma_reference = ma_piece.originElements.PlaneYZ
mon_esquisse = mes_esquisses.Add(ma_reference)

#Définir l'objet de travail
ma_piece.InWorkObject = mon_esquisse
#Edition de l'esquisse
ma_construction2D = mon_esquisse.OpenEdition()
droite_A = ma_construction2D.CreateLine(A/2, 0 , A/2, Ddia+A)
droite_Ddia = ma_construction2D.CreateLine(0, Ddia/2 , Ddia+A, Ddia/2)
cercle_Jr = ma_construction2D.CreateClosedCircle(A/2-Jr,Ddia/2-Jr,Jr)
droite_beta = ma_construction2D.CreateLine(0, 0 ,L, 0)
contraintes = mon_esquisse.Constraints
tangence_beta = contraintes.AddBiEltCst(constants.catCstTypeTangency, cercle_Jr, droite_beta)
tangence_beta.Mode = constants.catCstModeDrivingDimension
      
#Sortie de l'esquisse
mon_esquisse.CloseEdition()

ma_piece.Update()

And here is the error obtained:

Traceback (most recent call last):

  File "C:\Users\Documents\CodeErreur.py", line 54, in <module>
    tangence_beta = contraintes.AddBiEltCst(constants.catCstTypeTangency, cercle_Jr, droite_beta)

  File "C:\Users\Anaconda3\lib\site-packages\win32com\client\__init__.py", line 178, in __getattr__
    raise AttributeError(a)

AttributeError: catCstTypeTangency

I have already tried the answers in the topic: Catia enumeration values when using Python. But it doesen't work for me. Can you help me please ?

1 Answers

catCstTypeTangency is not a member of win32com.client.constants because it's independent from Catia.

If you take a look at the CAA V5 Visual Basic help, you can find the enum for the constraint types and the constraint modes:

enum CatConstraintType {
  catCstTypeReference,
  catCstTypeDistance,
  catCstTypeOn,
  catCstTypeConcentricity,
  catCstTypeTangency,
  catCstTypeLength,
  catCstTypeAngle,
  catCstTypePlanarAngle,
  catCstTypeParallelism,
  catCstTypeAxisParallelism,
  catCstTypeHorizontality,
  catCstTypePerpendicularity,
  catCstTypeAxisPerpendicularity,
  catCstTypeVerticality,
  catCstTypeRadius,
  catCstTypeSymmetry,
  catCstTypeMidPoint,
  catCstTypeEquidistance,
  catCstTypeMajorRadius,
  catCstTypeMinorRadius,
  catCstTypeSurfContact,
  catCstTypeLinContact,
  catCstTypePoncContact,
  catCstTypeChamfer,
  catCstTypeChamferPerpend,
  catCstTypeAnnulContact,
  catCstTypeCylinderRadius,
  catCstTypeStContinuity,
  catCstTypeStDistance,
  catCstTypeSdContinuity,
  catCstTypeSdShape
}

enum CatConstraintMode {
  catCstModeDrivingDimension,
  catCstModeDrivenDimension
}

That means catCstTypeTangency == 4 and catCstModeDrivingDimension == 0

Simply use this:

tangence_beta = contraintes.AddBiEltCst(4, cercle_Jr, droite_beta)
tangence_beta.Mode = 0  # doesn't make sense for a tangency constrait
Related