Hi all,
I'm working on a large number of diamond grilles with varying diamond shapes and grille sizes. I'm looking for a quicker and more efficient way to create them.
So far, my workflow is:
Apply a hatch pattern
Explode it
Use OC Polyline from Selection
Trim out the corners
Array a full piece
Mirror it vertically and horizontally
It works, but it’s quite manual.
I’ve tried experimenting with the newer Boolean tools, but haven’t had much luck getting them to streamline the process. Has anyone had success using Boolean operations for something like this—or is there a better method altogether?
I've attached a .pat file showing one size of the grille pattern for reference.
Thanks in advance!
Cheers
John
Efficient Way to Create Multiple Diamond Grille Patterns?
Moderator: andrew
Forum rules
Always indicate your operating system and QCAD version.
Attach drawing files and screenshots.
Post one question per topic.
Always indicate your operating system and QCAD version.
Attach drawing files and screenshots.
Post one question per topic.
-
- Premier Member
- Posts: 519
- Joined: Mon Sep 30, 2019 6:21 am
- Location: Melbourne - Australia
Efficient Way to Create Multiple Diamond Grille Patterns?
IF IT IS TO BE IT IS UP TO ME [ Ten most powerful 2 letter words ]
-
- Premier Member
- Posts: 4873
- Joined: Wed Sep 27, 2017 4:17 pm
Re: Efficient Way to Create Multiple Diamond Grille Patterns?
Hi John,
I don't think you need Boolean Operations on enclosed areas.
Although I don't understand some of your steps.
First centering and mirror:
I presume that the space between your 2 rectangles is intended to be a solid edge of the 'Grille' or screen.
While the diamonds are punched out and then only within the inner rectangle.
The pattern would be nicely spread when the inner edge center and a Diamond center coexists at the same position.
Your Diamond pattern its center is at (10.0, 0.0).
Boils down to matching the hatching origin of the complete pattern and the 'grille' center.
Any other relation with the Diamond center or 'grille' center may apply.
Second, logical open or closed Polylines:
Polyline from Selection (OC) creates logical closed Polylines when the shapes are geometrically closed.
And logical open Polylines when not.
Forcing a logical open Polyline to be logically closed adds an extra segment from end-vertex to start-vertex.
In a few steps:
CVH
I don't think you need Boolean Operations on enclosed areas.
Although I don't understand some of your steps.
First centering and mirror:
I presume that the space between your 2 rectangles is intended to be a solid edge of the 'Grille' or screen.
While the diamonds are punched out and then only within the inner rectangle.
The pattern would be nicely spread when the inner edge center and a Diamond center coexists at the same position.
Your Diamond pattern its center is at (10.0, 0.0).
Boils down to matching the hatching origin of the complete pattern and the 'grille' center.
Any other relation with the Diamond center or 'grille' center may apply.
Second, logical open or closed Polylines:
Polyline from Selection (OC) creates logical closed Polylines when the shapes are geometrically closed.
And logical open Polylines when not.
Forcing a logical open Polyline to be logically closed adds an extra segment from end-vertex to start-vertex.
In a few steps:
- Draw an auxiliary circle at the center of your inner rectangle (C2).
Use for example 2 opposite corners.
Record its center position (X, Y).
Select inner rectangle of the edge.
Create a Hatch (HA) from this selection.
Select Hatch and adapts its hatching origin in the Property Editor, set recorded position but shifted (X-10.0, Y).
What should center the pattern in both directions.
Select Hatch, explode its pattern (XP) and create Polylines of the explosion (OC)
Some of these Polylines near the edge are not closed.
Select the created polylines and force them all to logically closed in the Property Editor.
Simplified when the Hatch was created on a dedicated layer (YC)
At the 4 corners that may not work out as expected.
Add 4 extra vertices for the corner shapes on the traversing segments with 'insert Node' (OA).
Drag those new vertices to reposition them at the nearest corner of your inner rectangle.
Or add these vertices in direct with 'Append Node(s)' (OP) and 'Done' after each.
Select auxiliary circle and inner rectangle of the edge.
Delete these shapes (Del or ER)
CVH
Last edited by CVH on Tue Jul 01, 2025 5:38 pm, edited 1 time in total.
-
- Premier Member
- Posts: 4873
- Joined: Wed Sep 27, 2017 4:17 pm
Re: Efficient Way to Create Multiple Diamond Grille Patterns?
A quick example:
Stepped per layer 1-6, Cyan layers are frozen on duplicating to the next step.
Screen center is turned off in step 4.
Document in layerstate 'After step 6' (Y1).
Activate layerstate 'Result' (Y2) for the example 'Grille'.
Regards,
CVH
Stepped per layer 1-6, Cyan layers are frozen on duplicating to the next step.
Screen center is turned off in step 4.
Document in layerstate 'After step 6' (Y1).
Activate layerstate 'Result' (Y2) for the example 'Grille'.
Regards,
CVH
-
- Premier Member
- Posts: 519
- Joined: Mon Sep 30, 2019 6:21 am
- Location: Melbourne - Australia
Re: Efficient Way to Create Multiple Diamond Grille Patterns?
Hi CVH,
Logically closing polylines will save me a lot of time—I wasn’t aware of that option. Thanks!
Not all of grilles have centered patterns, and as you know, I'm well aware of pattern origins and how to adjust them.
Cheers,
John
Logically closing polylines will save me a lot of time—I wasn’t aware of that option. Thanks!

Not all of grilles have centered patterns, and as you know, I'm well aware of pattern origins and how to adjust them.

Cheers,
John
IF IT IS TO BE IT IS UP TO ME [ Ten most powerful 2 letter words ]
-
- Premier Member
- Posts: 4873
- Joined: Wed Sep 27, 2017 4:17 pm
Re: Efficient Way to Create Multiple Diamond Grille Patterns?
You are probably also aware that combining a Hatch pattern and OC makes every diamond unique in shape.

tan(3/1) is for example 71.56505117707799 degrees with 16 significant digits.
The other 3 orientations relate to that by mirroring over X and Y.
An edge of the diamond should be sqrt(100+900) = 31.62277660168379 long.
A perpendicular gap of 5 wide is 8.333... long measured along the edges and that always ends with a 3 when rounded.
Offsets were also rounded from these values: (-)7.991221987003527 and (-)23.97366596101033.
We both know that these values can never be recorded as exact for a pattern and minute misalignments occur.
Very minute near the pattern origin but growing for each next diamond shape.
There is something to gain with a proper rounding scheme but no glove fits all.
On merging segments OC disregards the endpoint that is near an existent vertex of the polyline being created.
That may affect the length and the orientation of each segment being prepended or appended apart from the first.
With which segment of the selected it starts merging is arbitrary.
Or OC is configured to bridge tiny gaps with an additionally straight edge resulting in more than 4 vertices.
A diamond pattern centered on the pattern origin may simplify things.
Another candidate for the pattern origin is orthogonal to the corners.
Regards,
CVH
-
- Premier Member
- Posts: 519
- Joined: Mon Sep 30, 2019 6:21 am
- Location: Melbourne - Australia
Re: Efficient Way to Create Multiple Diamond Grille Patterns?
"Let’s all try not to have a nervous breakdown over decimal places, yeah? 
These are being cut on a laser, not etched by NASA engineers on a satellite panel.
Laser machine accuracy lives happily in the realm of ±0.05 mm to ±0.1 mm.
So unless your DXF file is destined for quantum physics, maybe relax on the 8th decimal."

These are being cut on a laser, not etched by NASA engineers on a satellite panel.
Laser machine accuracy lives happily in the realm of ±0.05 mm to ±0.1 mm.
So unless your DXF file is destined for quantum physics, maybe relax on the 8th decimal."

IF IT IS TO BE IT IS UP TO ME [ Ten most powerful 2 letter words ]