Python 如何从几何图形快速创建大型dxf

Python 如何从几何图形快速创建大型dxf,python,cad,dxf,Python,Cad,Dxf,我有一个2D模式,由大约1000万个圆圈组成,以列表的形式存储 [[x,y,半径],[x,y,半径],…] 我想把它转换成DXF(一种常见的CAD文件格式)。我试过了,但都很慢。(如果我从较小的测试中推断,dxfwrite需要约12小时,ezdxf需要约4小时。) 有没有什么方法可以更快地做到这一点 (列表一开始是用Python编写的,但我不介意导出到文本文件,然后使用不同的程序。)对于圆形,您可以使用简单的DXF R12格式,只需一个实体部分: 0 SECTION 2 ENTITIES

我有一个2D模式,由大约1000万个圆圈组成,以列表的形式存储

[[x,y,半径],[x,y,半径],…]

我想把它转换成DXF(一种常见的CAD文件格式)。我试过了,但都很慢。(如果我从较小的测试中推断,dxfwrite需要约12小时,ezdxf需要约4小时。)

有没有什么方法可以更快地做到这一点


(列表一开始是用Python编写的,但我不介意导出到文本文件,然后使用不同的程序。)

对于圆形,您可以使用简单的DXF R12格式,只需一个实体部分:

  0
SECTION
  2
ENTITIES
  0
CIRCLE
  8
0
 10
{x-coord}
 20
{y-coord}
 40
{radius}
  0
ENDSEC
  0
EOF
以下Python脚本在CAD工作站上在不到一分钟的时间内创建一个包含10.000.000个圆圈的DXF文件。AutoCAD需要不到3分钟的时间打开它,但AutoCAD不再响应

from random import random

MAX_X_COORD = 1000.0
MAX_Y_COORD = 1000.0
MAX_R = 1.0
CIRCLE_COUNT = 10000000

def dxf_circle(x, y, r):
    return "0\nCIRCLE\n8\n0\n10\n{x:.3f}\n20\n{y:.3f}\n40\n{r:.2f}\n".format(x=x, y=y, r=r)

with open("circles.dxf", 'wt') as f:
    f.write("0\nSECTION\n2\nENTITIES\n")
    for i in range(CIRCLE_COUNT):
        f.write(dxf_circle(MAX_X_COORD*random(), MAX_Y_COORD*random(), MAX_R*random()))
    f.write("0\nENDSEC\n0\nEOF\n")

对于仅圆,您可以使用简单的DXF R12格式,仅使用实体部分:

  0
SECTION
  2
ENTITIES
  0
CIRCLE
  8
0
 10
{x-coord}
 20
{y-coord}
 40
{radius}
  0
ENDSEC
  0
EOF
以下Python脚本在CAD工作站上在不到一分钟的时间内创建一个包含10.000.000个圆圈的DXF文件。AutoCAD需要不到3分钟的时间打开它,但AutoCAD不再响应

from random import random

MAX_X_COORD = 1000.0
MAX_Y_COORD = 1000.0
MAX_R = 1.0
CIRCLE_COUNT = 10000000

def dxf_circle(x, y, r):
    return "0\nCIRCLE\n8\n0\n10\n{x:.3f}\n20\n{y:.3f}\n40\n{r:.2f}\n".format(x=x, y=y, r=r)

with open("circles.dxf", 'wt') as f:
    f.write("0\nSECTION\n2\nENTITIES\n")
    for i in range(CIRCLE_COUNT):
        f.write(dxf_circle(MAX_X_COORD*random(), MAX_Y_COORD*random(), MAX_R*random()))
    f.write("0\nENDSEC\n0\nEOF\n")

对于仅圆,您可以使用简单的DXF R12格式,仅使用实体部分:

  0
SECTION
  2
ENTITIES
  0
CIRCLE
  8
0
 10
{x-coord}
 20
{y-coord}
 40
{radius}
  0
ENDSEC
  0
EOF
以下Python脚本在CAD工作站上在不到一分钟的时间内创建一个包含10.000.000个圆圈的DXF文件。AutoCAD需要不到3分钟的时间打开它,但AutoCAD不再响应

from random import random

MAX_X_COORD = 1000.0
MAX_Y_COORD = 1000.0
MAX_R = 1.0
CIRCLE_COUNT = 10000000

def dxf_circle(x, y, r):
    return "0\nCIRCLE\n8\n0\n10\n{x:.3f}\n20\n{y:.3f}\n40\n{r:.2f}\n".format(x=x, y=y, r=r)

with open("circles.dxf", 'wt') as f:
    f.write("0\nSECTION\n2\nENTITIES\n")
    for i in range(CIRCLE_COUNT):
        f.write(dxf_circle(MAX_X_COORD*random(), MAX_Y_COORD*random(), MAX_R*random()))
    f.write("0\nENDSEC\n0\nEOF\n")

对于仅圆,您可以使用简单的DXF R12格式,仅使用实体部分:

  0
SECTION
  2
ENTITIES
  0
CIRCLE
  8
0
 10
{x-coord}
 20
{y-coord}
 40
{radius}
  0
ENDSEC
  0
EOF
以下Python脚本在CAD工作站上在不到一分钟的时间内创建一个包含10.000.000个圆圈的DXF文件。AutoCAD需要不到3分钟的时间打开它,但AutoCAD不再响应

from random import random

MAX_X_COORD = 1000.0
MAX_Y_COORD = 1000.0
MAX_R = 1.0
CIRCLE_COUNT = 10000000

def dxf_circle(x, y, r):
    return "0\nCIRCLE\n8\n0\n10\n{x:.3f}\n20\n{y:.3f}\n40\n{r:.2f}\n".format(x=x, y=y, r=r)

with open("circles.dxf", 'wt') as f:
    f.write("0\nSECTION\n2\nENTITIES\n")
    for i in range(CIRCLE_COUNT):
        f.write(dxf_circle(MAX_X_COORD*random(), MAX_Y_COORD*random(), MAX_R*random()))
    f.write("0\nENDSEC\n0\nEOF\n")

如果我理解你的问题,我可以帮你。乍一看,这个看起来很简单,不需要函数库。根据原始列表的格式,您可能只需要使用能够进行搜索和替换的纯文本编辑器添加标题和每个对象的信息。您能否给出一个预期输出的示例?如果您创建一个包含1000万个实体的.dxf文件,几乎所有试图打开它的CAD软件都会崩溃。也许你可以把它看作是一个光栅图像显示而不是矢量。如果我理解你的问题,可能会有所帮助。乍一看,它看起来很简单,不需要函数库。根据原始列表的格式,您可能只需要使用能够进行搜索和替换的纯文本编辑器添加标题和每个对象的信息。您能否给出一个预期输出的示例?如果您创建一个包含1000万个实体的.dxf文件,几乎所有试图打开它的CAD软件都会崩溃。也许你可以把它看作是一个光栅图像显示而不是矢量。如果我理解你的问题,可能会有所帮助。乍一看,它看起来很简单,不需要函数库。根据原始列表的格式,您可能只需要使用能够进行搜索和替换的纯文本编辑器添加标题和每个对象的信息。您能否给出一个预期输出的示例?如果您创建一个包含1000万个实体的.dxf文件,几乎所有试图打开它的CAD软件都会崩溃。也许你可以把它看作是一个光栅图像显示而不是矢量。如果我理解你的问题,可能会有所帮助。乍一看,它看起来很简单,不需要函数库。根据原始列表的格式,您可能只需要使用能够进行搜索和替换的纯文本编辑器添加标题和每个对象的信息。您能否给出一个预期输出的示例?如果您创建一个包含1000万个实体的.dxf文件,几乎所有试图打开它的CAD软件都会崩溃。也许我们可以把它看作是光栅图像显示,而不是矢量。