Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ body:
label: Ipelet
options:
- Circles
- Conics
validations:
required: true
- type: input
Expand Down
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ body:
label: Ipelet
options:
- Circles
- Conics
- Repository-wide
validations:
required: true
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ permissions:
contents: read

jobs:
circles:
ipelets:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
Expand Down
6 changes: 6 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ luac5.4 -p circles/circles.lua
python3 -m unittest discover -s circles/tests -v
```

For a focused Conics check:

```bash
./scripts/validate.sh conics
```

## Visual changes

When a change affects generated geometry or dialogs:
Expand Down
2 changes: 2 additions & 0 deletions NOTICE.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ This is an independent community repository and is not an official Ipe distribut
Ipe is the extensible drawing editor created by Otfried Cheong. Ipe is distributed separately under the GNU General Public License, version 3 or any later version. See the [official Ipe website](https://ipe.otfried.org/) and the [Ipe source repository](https://github.com/otfried/ipe) for the editor's source, documentation, copyright notices, and license terms.

The ipelets in this repository use Ipe's documented Lua extension interface. Ipe itself is not bundled in this repository or in its release archives.

The ellipse-from-foci and parabola construction formulas in Conics are adapted from Ipe's GPL-licensed `goodies.lua`. The adapted implementation remains available under GPL-3.0-or-later, with the Ipe project acknowledged above.
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@ A curated collection of independent extensions for the [Ipe drawing editor](http

[![Circles: preview every tangent-circle candidate and click to create one](circles/docs/images/circles-overview.svg)](circles/)

[![Conics: construct, classify, inspect, and annotate editable conics](conics/docs/images/conics-overview.svg)](conics/)

## Available ipelets

| Ipelet | Version | Description |
| --- | --- | --- |
| [Circles](circles/) | 1.0.0 | Circle construction, tangencies, inversion, radical geometry, center marking, and live previews. |
| [Conics](conics/) | 1.1.0 | Exact and fitted conics, dual and mixed constructions, intersections, arcs, analytic features, inspection, and metadata repair. |

## Quick installation

Expand All @@ -20,16 +23,19 @@ On Linux, install an ipelet with the repository helper:
./scripts/install.sh circles
```

Replace `circles` with `conics` to install Conics.

The helper detects the Ipe Flatpak installation and otherwise uses the standard `~/.ipe/ipelets` directory. Restart Ipe after installation.

Manual installation and platform-specific details are documented inside each ipelet directory.
Prebuilt archives are available from the [latest GitHub release](https://github.com/japbcoelho/ipelets/releases/latest).
Prebuilt archives for each ipelet are available on the [GitHub releases page](https://github.com/japbcoelho/ipelets/releases).

## Repository layout

```text
.
├── circles/ Circles source, documentation, examples, and tests
├── conics/ Conics source, documentation, examples, and tests
├── scripts/ Installation, validation, and packaging helpers
├── .github/ Continuous integration and contribution templates
└── LICENSE Repository license
Expand Down
8 changes: 7 additions & 1 deletion README.pt-BR.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@ Uma coleção organizada de extensões independentes para o [editor de desenhos

[![Circles: visualize todas as circunferências tangentes candidatas e clique para criar uma](circles/docs/images/circles-overview.svg)](circles/README.pt-BR.md)

[![Conics: construa, classifique, inspecione e anote cônicas editáveis](conics/docs/images/conics-overview.svg)](conics/README.pt-BR.md)

## Ipelets disponíveis

| Ipelet | Versão | Descrição |
| --- | --- | --- |
| [Circles](circles/README.pt-BR.md) | 1.0.0 | Construções de circunferências, tangências, inversão, geometria radical, marcação de centros e pré-visualização ao vivo. |
| [Conics](conics/README.pt-BR.md) | 1.1.0 | Cônicas exatas e ajustadas, construções duais e mistas, interseções, arcos, elementos analíticos, inspeção e reparo de metadados. |

## Instalação rápida

Expand All @@ -20,16 +23,19 @@ No Linux, instale um Ipelet com o utilitário do repositório:
./scripts/install.sh circles
```

Substitua `circles` por `conics` para instalar o Conics.

O utilitário detecta a instalação Flatpak do Ipe e, nos demais casos, utiliza a pasta padrão `~/.ipe/ipelets`. Reinicie o Ipe depois da instalação.

As instruções manuais e os detalhes específicos de cada plataforma ficam documentados dentro da pasta de cada Ipelet.
Os pacotes prontos estão disponíveis na [versão mais recente do GitHub](https://github.com/japbcoelho/ipelets/releases/latest).
Os pacotes prontos de cada Ipelet estão disponíveis na [página de versões do GitHub](https://github.com/japbcoelho/ipelets/releases).

## Organização do repositório

```text
.
├── circles/ Código, documentação, exemplos e testes do Circles
├── conics/ Código, documentação, exemplos e testes do Conics
├── scripts/ Utilitários de instalação, validação e empacotamento
├── .github/ Integração contínua e modelos de contribuição
└── LICENSE Licença do repositório
Expand Down
2 changes: 1 addition & 1 deletion circles/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ The ipelet uses documented Ipe Lua objects and does not require a separate build

## Installation

Download the self-contained package from the [latest GitHub release](https://github.com/japbcoelho/ipelets/releases/latest), or use one of the methods below.
Download the self-contained package from the [Circles 1.0.0 release](https://github.com/japbcoelho/ipelets/releases/tag/v1.0.0), or use one of the methods below.

### Repository helper on Linux

Expand Down
2 changes: 1 addition & 1 deletion circles/README.pt-BR.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ O Ipelet utiliza objetos documentados da API Lua do Ipe e não exige compilaçã

## Instalação

Baixe o pacote autocontido na [versão mais recente do GitHub](https://github.com/japbcoelho/ipelets/releases/latest) ou utilize um dos métodos abaixo.
Baixe o pacote autocontido na [versão 1.0.0 de Circles](https://github.com/japbcoelho/ipelets/releases/tag/v1.0.0) ou utilize um dos métodos abaixo.

### Utilitário do repositório no Linux

Expand Down
73 changes: 73 additions & 0 deletions conics/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Changelog

All notable changes to Conics are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versions follow semantic versioning.

## [Unreleased]

## [1.1.0] - 2026-08-29

### Added

- Least-squares conic fitting from 6–512 sample marks, with expected-kind, conditioning, and residual diagnostics.
- Dual construction from five tangent lines and mixed systems containing five weighted point/tangent conditions.
- Focus–directrix construction from an explicit eccentricity, covering ellipses, parabolas, and hyperbolas through one workflow.
- Native ellipse construction from a center and two perpendicular semiaxis endpoints.
- Parabola construction from vertex and focus, plus hyperbola construction from two asymptotes and one point.
- Explicit intersecting-line, parallel-line, double-line, single-line, point, and empty degenerate conic loci.
- Tangents from an arbitrary point, chord of contact, pole of a line, and focal chord operations.
- Robust conic–conic intersections with zero through four finite real points and coincident-conic reporting.
- Exact/adaptive conic arcs and transactional fit-and-replace for a selected path.
- Latus recta, auxiliary circles, director circles, general/canonical equations, parameter labels, focal radius, semilatus rectum, and ellipse area.
- Canonical `create_ellipse` and `create_parabola` API names while preserving the 1.0 aliases.

### Changed

- Renamed the public menu entries to `Construct: ellipse` and `Construct: parabola` because each dialog now provides multiple constructions.
- Expanded every construction and feature dialog with contextual controls, exact selection guidance, persistent successful settings, and live preview.
- Extended metadata roles and fingerprints to cover conic arcs, degenerate loci, poles, chords, equations, and circular guides.
- Revalidation now uses the many-point least-squares fitter instead of choosing only five path samples.
- Conic–conic elimination now uses a normalized coordinate frame and both coordinate orientations for improved scale and tangency stability.
- Finite polar and contact-chord segments are anchored near their defining geometry instead of an arbitrary coordinate-axis intercept.

### Compatibility

- Lua API version remains `1`; all version 1.0 creator names and action aliases remain accepted.
- Existing `conics:v1` and supported legacy Geometry metadata remain readable.
- The installed runtime remains one standalone `conics.lua` file and does not depend on Geometry, MCP, a personal stylesheet, the network, or an external Lua package.

### Verified

- Added behavior tests for every new constructor and feature, noisy fitting, degenerate classifications, numerical scale stress, transactional replacement, invalid input, and package sanitization.
- Added a 32-page editable acceptance gallery plus README media rendered from the live Ipe audit.

## [1.0.0] - 2026-08-29

### Added

- Four general conic constructions: Steiner ellipses, a conic through five points, focus-directrix-point, and the canonical midpoint ellipse of a quadrilateral.
- Dedicated ellipse-from-foci, hyperbola, and directrix-with-foci parabola workflows.
- Tangent, normal, polar, line-intersection, property-guide, inspection, and metadata-revalidation tools.
- Automatic live preview and a manual Preview button for every construction dialog.
- Classification and extraction of centers, vertices, axes, foci, directrices, eccentricity, and asymptotes.
- A versioned public Lua API and a strict, role-aware `conics:v1` metadata format.

### Changed

- Prepared Conics as a self-contained single-file ipelet with no Geometry runtime dependency.
- Replaced fragmented implicit rendering with native ellipses, exact quadratic parabola splines, and adaptive continuous cubic hyperbola branches.
- Added scale-aware tolerances, stable quadratic roots, scaled norms, a direct null-space solver for five-point fitting, and finite-output validation.
- Made explicit inputs authoritative and selection contracts strict and visible in the dialogs.
- Preserved active Ipe attributes safely, standardized creation on the active layer, and made grouping explicit.

### Compatibility

- Affine transformations preserve conic coefficients.
- Existing `geometry:conic` and `geometry:hyperbola` metadata remain readable.
- Structural path edits are detected as stale metadata and can be revalidated from the selected curve.

### Verified

- Added standalone behavioral, numerical, package, and release-contract suites for Lua 5.4.

[Unreleased]: https://github.com/japbcoelho/ipelets/compare/conics-v1.1.0...HEAD
[1.1.0]: https://github.com/japbcoelho/ipelets/releases/tag/conics-v1.1.0
Loading