python_autuocad_填充函数

本文详细探讨了如何使用Python编程语言与AutoCAD进行交互,专注于填充功能的实现。通过Python脚本,我们可以控制AutoCAD进行复杂的图形填充操作,提升设计效率。文章深入解析了相关API的使用,并提供了实例代码,帮助读者理解并应用到实际项目中。
部署运行你感兴趣的模型镜像

在这里插入图片描述

#! /bin/python3

import pythoncom
import array,math
import numpy as np
import comtypes.client,win32com.client
from pyautocad import APoint,Autocad
##到根对象
Dispatch_w32c = win32com.client.Dispatch("AutoCAD.Application")
#aa = Autocad(create_if_not_exists=True)
doc=Dispatch_w32c.ActiveDocument
# docUt = doc.Utility
ms = doc.ModelSpace
# docUt.Prompt("w32c---cad\n")
print(doc.Name)

def vtpt(x,y,z=0):
   return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x,y,z))
def vtfloat(lst):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, lst)
def vtobj(obj):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, obj)

##转换数据---cad,#图元添加、画电线
# 画线
def draw_line(point1 = vtpt(0,0),point2 = vtpt(280,0)):
    point0=ms.AddPoint(point1)
    #画线
    line = ms.AddLine(point1, point2)
    #画圆0
    Circle0=ms.AddCircle(point1,50)

#画第2个

def draw_fang():
    # 画多边形
    pnts = [100+150, -50, 0,
            100+150, 50, 0,
            -100+150, 50, 0,
            -100+150, -50, 0,
            -120+150,-60,0]
    # pnts = [100, -50, 0, 100, 50, 0, -100, 50, 0, -100, -50, 0]
    pnts = vtfloat(pnts)
    obj = ms.AddPolyLine(pnts)
    obj.Closed = True
    return obj


def draw_Circledraw(center2 = vtpt(40, 0, 0),radius2 = 10):
    """
    画图
    :param center2:
    :param radius2:
    :return:
    """
    obj = ms.AddCircle(center2, radius2)
    return obj

def draw_hatch(obj):
    """
    填充
    :param obj:
    :return:
    """
    outerLoop2=[]
    outerLoop2.append (obj)
    outerLoop2 =  vtobj(outerLoop2)

    #hatch_格式
    patternName = "ANSI31"
    PatternType = 0
    bAssociativity = True
    hatchObj2 = ms.AddHatch(PatternType, patternName, bAssociativity)
    hatchObj2.AppendOuterLoop (outerLoop2)
    hatchObj2.Evaluate()# 填充计算,图案吻合于边界。

#
# acad = win32com.client.Dispatch("AutoCAD.Application")
# def find_draw_hatch():
#     for entity in acad.ActiveDocument.ModelSpace:
#         name = entity.EntityName
#         # print(name)
#         # if name == 'AcDbBlockReference':
#         if name == 'AcDbCircle':
#             # dir(name)
#             # print(name)
#             draw_hatch(name)

def main():
    draw_line()

    #填充1
    center2 = vtpt(0, 0, 0)  # 圆心
    radius2 = 10  # 半径
    obj = draw_Circledraw(center2, radius2)  # 画图
    draw_hatch(obj)  # 填充

    #填充2
    center2 = vtpt(33, 0, 0)# 圆心
    radius2 = 10#半径
    obj=draw_Circledraw(center2,radius2)#画图
    draw_hatch(obj)#填充
	
	#填充3
    obj=draw_fang()
    draw_hatch(obj)  # 填充
    # find_draw_hatch()
f __name__ == '__main__':
    main()
    #感谢千云山庄# https://blog.youkuaiyun.com/weixin_44126907/article/details/90312312?spm=1001.2014.3001.5502

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值