File: move_block_base_point.py

package info (click to toggle)
ezdxf 1.4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 104,528 kB
  • sloc: python: 182,341; makefile: 116; lisp: 20; ansic: 4
file content (55 lines) | stat: -rw-r--r-- 1,654 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# Copyright (c) 2023, Manfred Moitzi
# License: MIT License
from __future__ import annotations
import pathlib
import ezdxf
from ezdxf import bbox, transform


CWD = pathlib.Path("~/Desktop/Outbox").expanduser()
if not CWD.exists():
    CWD = pathlib.Path(".")


# This example requires ezdxf v1.1.0 or later.
def main():
    doc = ezdxf.new()
    msp = doc.modelspace()

    # create a new block definition, with the default base point at (0, 0):
    circle_block = doc.blocks.new("CIRCLE")
    circle_block.add_circle((100, 100), 3)

    # add a block reference to the model space
    msp.add_blockref("CIRCLE", (0, 0))
    doc.saveas(CWD / "original.dxf")

    # get new base point from bounding box of the block definition:
    extents = bbox.extents(circle_block, fast=True)
    new_base_point = extents.center
    # extents.extmin is the lower left corner
    # extents.extmax is the upper right corner
    # offset vector for block references:
    offset = new_base_point - circle_block.base_point

    circle_block.base_point = new_base_point
    doc.saveas(CWD / "move_base_point.dxf")

    # WARNING:
    # So far the INSERT entities have not been updated, hence the block references are
    # mislocated!!!

    # Update INSERT entities:
    # get ALL block references for block "CIRCLE"
    block_refs = doc.query("INSERT[name=='CIRCLE']")
    # translate all block references by offset vector
    transform.translate(block_refs, offset)

    doc.saveas(CWD / "updated_block_references.dxf")


if __name__ == "__main__":
    if ezdxf.version >= (1, 1, 0):
        main()
    else:
        print("This example requires ezdxf v1.1.0 or later.")