问题描述
我正在尝试使用 Python 在 CATIA V5 上绘制草图。我使用 VB 制作的 Catia 宏。但错误仍然存在。我无法约束草图。 这是我的代码,以及我得到的错误:
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,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,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()
这是获得的错误:
Traceback (most recent call last):
File "C:\Users\Documents\CodeErreur.py",line 54,in <module>
tangence_beta = contraintes.AddBiEltCst(constants.catCstTypeTangency,droite_beta)
File "C:\Users\Anaconda3\lib\site-packages\win32com\client\__init__.py",line 178,in __getattr__
raise AttributeError(a)
AttributeError: catCstTypeTangency
我已经尝试过题目中的答案:Catia enumeration values when using Python。但这对我不起作用。你能帮我吗?
解决方法
catCstTypeTangency
不是 win32com.client.constants
的成员,因为它独立于 Catia。
如果您查看 CAA V5 Visual Basic 帮助,您可以找到约束类型和约束模式的枚举:
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
}
这意味着 catCstTypeTangency == 4
和 catCstModeDrivingDimension == 0
简单地使用这个:
tangence_beta = contraintes.AddBiEltCst(4,cercle_Jr,droite_beta)
tangence_beta.Mode = 0 # doesn't make sense for a tangency constrait