使用pyautocad调用AddHatch时遇COM错误(-2147352571)求解决方案
问题解决:pyautocad中AddHatch的COM类型不匹配错误
错误原因
你遇到的COM Error: (-2147352571, 'Type mismatch.', ...)错误,核心是两个问题:
- AddHatch参数顺序完全错误:原代码错误地将拾取点作为第二个参数传入,但AutoCAD的AddHatch方法第二个参数应为填充图案名称,而非坐标点。
- 缺少填充必需的封闭边界:AutoCAD的填充操作必须依赖已存在的封闭图形(如闭合多段线),无边界直接传拾取点无法触发填充逻辑。
修正后的代码
import pyautocad from pyautocad import APoint import comtypes acad = pyautocad.Autocad() # 1. 创建封闭的矩形边界(填充必须基于封闭图形) points = [APoint(0, 0), APoint(10, 0), APoint(10, 5), APoint(0, 5), APoint(0, 0)] # 首尾重合确保封闭 polyline = acad.model.AddLwpolyline(points) polyline.Closed = True # 显式设置多段线为封闭状态 # 2. 正确调用AddHatch创建填充 try: # AddHatch参数说明: # pattern_type: 0=预定义图案, 1=用户定义, 2=自定义 # pattern_name: 填充图案名称(如"SOLID"为实心填充) # associative: 是否关联填充(True=填充随边界变化自动更新) hatch = acad.model.AddHatch(0, "SOLID", True) # 将矩形边界添加为填充的外边界 hatch.AppendOuterLoop([polyline.ObjectID]) # 生成填充效果 hatch.Evaluate() except comtypes.COMError as e: print(f"COM Error: {e}")
关键修正点
- 确保边界封闭:通过首尾点重合或
polyline.Closed = True保证图形是封闭的,这是填充的必要前提。 - 修正参数顺序:严格按照
pattern_type→pattern_name→associative的顺序传入参数,避免类型不匹配。 - 绑定填充边界:通过
AppendOuterLoop方法将封闭图形的ObjectID传入,明确告诉AutoCAD需要填充的区域,而非直接传拾取点。
内容的提问来源于stack exchange,提问作者raghu raj
相关产品推荐
相关产品推荐

