Files
OneCAD-Draft/docs/measurement-tools.md
T

15 KiB
Raw Blame History

Mérés eszköztár – fejlesztési csomag

Kiindulás: a feltöltött measurement-development-full-006be890.zip, Open CAD Studio 006be890. A csomag kizárólag az ehhez képest új vagy módosított fájlokat tartalmazza, projektgyökérhez viszonyított útvonalakkal. Távoli tároló módosítása és Pull Request nem történt.

Változások

  • A meglévő MEASURE_MENU / LargeDropdown sorrendje: Distance (DIST), Radius (MEASURERADIUS), Angle (MEASUREANGLE), Area (AREA). A komponens felépítése változatlan. A Distance és Area eredeti SVG-je változatlan.
  • A MEASURERADIUS és MEASUREANGLE a meglévő MeasureGeomCommand külön kezdőállapotai. Közös kijelölési és számítási kódot használnak; a parancsregisztráció, menüindítás és parancssori indítás össze van kötve. A MEASUREGEOM és MEA továbbra is elérhető négy mérési móddal.
  • Sugármérés: kör és körív, sugár és átmérő; más típus és hibás sugár esetén hibaüzenet, a parancs továbbra is vár érvényes kijelölést. Az objektum feletti kurzormozgás előzetes értéket mutat.
  • Szögmérés: csúcs, első szár pontja, második szár pontja. Az első lépésben Lines / L két LINE objektum mérésére vált; onnan az első kijelölés előtt Points / P visszavált. Azonos objektum, nulla hosszúságú szár, nem LINE objektum és nem véges koordináta kezelve van.
  • A szögszámítás f64 vektorokat használ, skálázott normalizálással és atan2-vel. A végeredmény fokban jelenik meg, az AUPREC pontosságával. A hossz- és területadatok a meglévő formázókat használják.
  • Közös, dokumentumfülenkénti, átmeneti mérési felirat. A parancsok csak az élő eredményszöveget szolgáltatják; a pozicionálás, végleges eredmény megőrzése és eltüntetése közös. A végleges kiírás a befejezés helyén marad, egérmozgatásra nem követi a kurzort.
  • A rajzterületi bal, jobb vagy középső gomb lenyomása eltünteti a végleges feliratot, majd a normál eseménykezelés folytatódik. A befejező kattintás felengedése nem törli az éppen elkészült eredményt. ESC és új parancs indítása is töröl.
  • A felirat nem vesz át egéreseményt, a rajzterület széléhez és a parancssorhoz igazodik, és a téma színeit használja. Az élő megjelenítés a DYN kapcsolótól független, alaphelyzetben a kurzor fölött van. A meglévő geometriai előnézet és tárgyraszter megmarad.
  • Az AREA objektumkijelölési előnézete kijelölésváltozáskor számol; az összetett görbék területét nem integrálja újra minden képkockában. Add/Subtract közben az aktuális terület és az előzetes összeg látható, az összeg csak a mérés elfogadásakor változik.
  • A felirat nem rajzi entitás, nem módosítja a DWG tartalmát vagy a dokumentum módosításjelzőjét. A meglévő parancssori eredmény megmarad.
  • Új sugár- és szög-SVG, magyar és angol szövegek. A többi 20 nyelvi katalógus új kulcsai angol szöveget kaptak, hogy a katalógusok kulcskészlete egyezzen.
  • Nincs új külső függőség; a Cargo.toml és Cargo.lock változatlan.

Beillesztés PowerShellből

Zárd be a futó CAD-alkalmazást. A következő parancsok tiszta Git-munkafát és pontosan a kiinduló commitot követelik meg; eltérés esetén megállnak. Saját módosításaidat előbb mentsd el vagy commitold. A ZIP-et nem egy új almappába, hanem közvetlenül a projekt gyökerébe kell kicsomagolni.

$ErrorActionPreference = 'Stop'
$project = 'C:\CAD-Development\OpenCADStudio-Dev'
$patch = Join-Path $env:USERPROFILE 'Downloads\measurement-tools-patch.zip'
Set-Location -LiteralPath $project
if (-not (Test-Path -LiteralPath $patch -PathType Leaf)) { throw 'A ZIP nem található.' }
$status = git status --porcelain
if ($LASTEXITCODE -ne 0) { throw 'Nem elérhető Git-munkafa.' }
if ($status) { throw 'A munkafa nem tiszta. Előbb mentsd a saját módosításaidat.' }
$baseCommit = git rev-parse '006be890^{commit}'
if ($LASTEXITCODE -ne 0) { throw 'A kiinduló commit nem található.' }
$currentCommit = git rev-parse HEAD
if ($LASTEXITCODE -ne 0 -or $currentCommit -ne $baseCommit) { throw 'Nem a 006be890 commiton állsz.' }
$currentBranch = git branch --show-current
if ($currentBranch -ne 'feature/measurement-tools') {
    git switch -c feature/measurement-tools
    if ($LASTEXITCODE -ne 0) { throw 'Az ág nem hozható létre. Ellenőrizd a már létező ágakat.' }
}
Expand-Archive -LiteralPath $patch -DestinationPath $project -Force
git status --short
git diff --stat
git diff --check
if ($LASTEXITCODE -ne 0) { throw 'Whitespace-ellenőrzési hiba.' }

Az új fájlokat a git status --short mutatja; a git diff --stat csak a már követett fájlokat sorolja fel. A fenti művelet nem commitol és nem pushol.

Fordítás és célzott tesztek PowerShellből

A projekt meglévő Windows/Rust/MSVC előfeltételei és a függőségek letöltéséhez internetelérés szükséges.

Set-Location 'C:\CAD-Development\OpenCADStudio-Dev'
cargo check --locked
if ($LASTEXITCODE -ne 0) { throw 'A cargo check sikertelen.' }
cargo test --locked --lib measurement -- --test-threads=1
if ($LASTEXITCODE -ne 0) { throw 'A mérési tesztek sikertelenek.' }
cargo test --locked --lib modules::draw::inquiry -- --test-threads=1
if ($LASTEXITCODE -ne 0) { throw 'Az inquiry tesztek sikertelenek.' }
cargo fmt --check
# A kiinduló projektben is vannak formázási eltérések; lásd az eredményeket.
cargo run --locked

A --test-threads=1 a formázási beállításokat módosító tesztek és az alkalmazásállapot-tesztek kiszámítható futását segíti. Memóriahiány esetén a tesztek előtt megadható $env:CARGO_BUILD_JOBS = '3' és $env:CARGO_PROFILE_TEST_DEBUG = '0'. Ez újraépítést okozhat; a változókat a vizsgálat után Remove-Item Env:CARGO_BUILD_JOBS, Env:CARGO_PROFILE_TEST_DEBUG -ErrorAction SilentlyContinue paranccsal törölheted.

Kézi ellenőrzés Windows alatt

  1. A Mérés menüben ellenőrizd a négy elemet és azok sorrendjét; indítsd őket menüből és begépelt paranccsal is. Ellenőrizd külön a MEASUREGEOM négy opcióját és a MEA aliast.
  2. DIST: mérj a (0,0,0) és (3,4,0) pontok között: 5 egység. Az első pont után mozgasd a kurzort; a felirat és a geometriai előnézet frissüljön. Próbáld ki tárgyraszterrel, DYN be- és kikapcsolva, más hosszformátummal/pontossággal, valamint nagy koordináták közelében.
  3. MEASURERADIUS: mérj 10 sugarú körön és köríven: sugár 10, átmérő 20. Előbb csak vidd föléjük a kurzort, aztán kattints. Egyenes kijelölésekor hibaüzenetet várj, utána körrel lehessen befejezni. Üres terület fölött ne maradjon az előző objektum élő értéke.
  4. MEASUREANGLE: csúcs (0,0,0), első szár (1,0,0), második (0,1,0) → 90°; második (-1,1,0) → 135°. A csúcs ismételt kiválasztása érvénytelen szár, és nem fejezheti be a mérést. Próbáld ki 3D pontokkal és eltérő AUPREC értékekkel is.
  5. MEASUREANGLE → Lines: két 45°-ban álló LINE → 45°, merőlegesek → 90°, párhuzamosak → 0°. Fordított végpontsorrenddel ugyanaz az eredmény várható. Ugyanazon egyenes kétszeri, kör vagy nulla hosszúságú egyenes kijelölése ne adjon hamis eredményt.
  6. AREA: (0,0,0), (4,0,0), (0,3,0), Enter → terület 6, kerület 12. A harmadik pont mozgatásakor legyen élő érték. Ellenőrizd Objects módban a kört, zárt polylinet, és Add/Subtract módban több egymás utáni részterület összegzését.
  7. Mindegyik befejezett mérés után mozgasd az egeret: a végleges felirat maradjon a helyén. A következő rajzterületi kattintás törölje, és egyben kezdje meg a normál kijelölést / folytassa az AREA következő részterületét. Próbálj közvetlenül a felirat szövegére is kattintani. A befejező kattintás felengedése ne törölje rögtön a feliratot.
  8. ESC, új mérés, jobb és középső rajzterületi kattintás is törölje a végleges feliratot. Válts világos/sötét témát; teszteld a sarkokat és a nyitott parancssort. Válts dokumentumfület: másik rajz eredménye ne jelenjen meg az aktuális rajzon.
  9. Csak mérés után ne nőjön az entitásszám és ne váljon módosítottá a tiszta rajz. Mentés és újranyitás után ne maradjon mérési felirat a DWG-ben. A parancssori előzményben továbbra is legyen olvasható az eredmény.

Ismert korlátok

  • A két egyenes mód az irányok kisebb, 0–90° közötti szögét adja, a végpontsorrendtől függetlenül. Térben kitérő egyeneseken is az irányszög mérhető; nincs metszéspont- vagy szögtartomány-kiválasztás. A hárompontos mód 0–180°-ot ad, nem irányított/reflex szöget.
  • Az AREA és a MEASUREGEOM Area meglévő számítási jelentése megmarad: előbbi a meglévő térbeli/görbealapú mérés, utóbbi a munkasíkra vetített sokszög. Nem síkbeli pontsorokon ezért eltérhetnek.
  • A végleges felirat képernyőpozícióhoz kötött átmeneti UI, nem modellhez kötött méretfelirat. Nem nyomtatható és nem szerkeszthető rajzi objektumként.
  • A további 20 nyelv új szövegeinek anyanyelvi fordítása külön feladat.
  • A Windows alatti interaktív kézi ellenőrzést a fenti útmutató alapján a helyi gépen kell elvégezni; itt nem történt Windows GUI-próba.

Automatikus tesztlefedettség

22 új Rust-teszt került a forrásba: kör és körív sugara, érvénytelen/stale kijelölés, ismert és szélsőséges skálájú szögek, degenerált szárak, két egyenes irányszöge, előnézet, f64/pontosság/hosszformátum, AREA élő érték és Add/Subtract, objektumkijelölési előnézet, regisztráció és menüindítás, dokumentum változatlansága, felirat élettartama, valódi viewport-kattintások továbbfeldolgozása, valamint az Iced felirat egéreseményei és szélekhez igazítása. A tesztkód a következő öt fájlban van: measuregeom.rs, dist.rs, area.rs, src/app/measurement.rs, src/app/view/overlay.rs.

Automatikus ellenőrzési eredmények

Ellenőrzési környezet: Linux x86_64, Rust/Cargo 1.98.0, 2026.10.14. A fordításnál és tesztelésnél a memóriaigény csökkentésére 3 build szálat, kikapcsolt debug információt és a függőségeknél 0 optimalizációs szintet használtam. A projekt profilfájljai változatlanok.

Ellenőrzés Tényleges eredmény
cargo check --locked Sikeres, kilépési kód 0.
cargo check --locked --tests Sikeres, kilépési kód 0. A tesztkód is lefordítható.
cargo test --locked --lib measurement -- --test-threads=1 26 sikeres, 0 hibás, 1 kihagyott. Mind a 22 új mérési teszt sikeres.
cargo test --locked --lib modules::draw::inquiry -- --test-threads=1 18 sikeres, 0 hibás, 0 kihagyott.
cargo test --locked --lib i18n::tests::every_catalog_covers_and_formats_the_source_catalog -- --exact --test-threads=1 1 sikeres, 0 hibás. A katalógusok kulcskészlete és formázása ellenőrizve.
cargo fmt --check Sikertelen a kiinduló és a módosított forráson is: ugyanaz a 72 fájl tartalmaz örökölt formázási eltéréseket. A feladattól független fájlokat nem formáztam át.
git diff --check Sikeres, nincs whitespace-hiba a patchben.
python scripts/test_locales.py A kiinduló projektben 135, a módosított projektben 134 hiányzó régi literál-leképezés. Új hiányzó leképezés nincs. Ez az eredeti ellenőrzőszkript mindkét állapoton hibát jelez.
SVG-k XML-ként érvényesek; az új ikonok világos és sötét háttéren megtekintve. Az eredeti Distance/Area SVG és a két Cargo-fájl byte szerint változatlan.
Windows GUI / DWG-mentés kézi próbája Ebben a környezetben nem futott; a fenti kézi ellenőrzési listával végezhető el.

A fenti két tesztcsoport részben átfed, a darabszámokat nem szabad összeadni egyedi tesztszámként. A kihagyott teszt meglévő viewport_dimension_external_fixture_keeps_unchanged_measurements: az OPENCAD_VIEWPORT_REGRESSION_DXF változóban megadott külső DXF-et igényli. Az új tesztek egyike sincs kihagyva.

A Linux alatt használt pontos parancsok (a +1.98.0 a telepített toolchaint választja):

CARGO_BUILD_JOBS=3 CARGO_PROFILE_DEV_DEBUG=0 cargo +1.98.0 check --locked --config 'profile.dev.package."*".opt-level=0'
CARGO_BUILD_JOBS=3 CARGO_PROFILE_DEV_DEBUG=0 cargo +1.98.0 check --locked --tests --config 'profile.dev.package."*".opt-level=0'
CARGO_BUILD_JOBS=3 CARGO_PROFILE_TEST_DEBUG=0 cargo +1.98.0 test --locked --config 'profile.test.package."*".opt-level=0' --lib measurement -- --test-threads=1
CARGO_BUILD_JOBS=3 CARGO_PROFILE_TEST_DEBUG=0 cargo +1.98.0 test --locked --config 'profile.test.package."*".opt-level=0' --lib modules::draw::inquiry -- --test-threads=1
CARGO_BUILD_JOBS=3 CARGO_PROFILE_TEST_DEBUG=0 cargo +1.98.0 test --locked --config 'profile.test.package."*".opt-level=0' --lib i18n::tests::every_catalog_covers_and_formats_the_source_catalog -- --exact --test-threads=1
cargo +1.98.0 fmt --check

A környezetben frissen telepített Rust 1.99 már rustc -vV alatt SIGBUS hibával leállt; ezen a toolchainen a cargo check/test nem érte el a projekt fordítását. A fenti sikeres eredmények Rust 1.98 alatt születtek. Ebből nem következik, hogy a helyi Windows 1.99 toolchain hibás lenne. A teljes projekt összes tesztjét és release buildjét nem futtattam.

A csomag összes fájlja

42 fájl: 4 új, 38 módosított.

Állapot Fájl
Új assets/icons/measure-angle.svg
Új assets/icons/measure-radius.svg
Új docs/measurement-tools.md
Módosított locales/ar-SA/opencadstudio.ftl
Módosított locales/bg-BG/opencadstudio.ftl
Módosított locales/cs-CZ/opencadstudio.ftl
Módosított locales/de-DE/opencadstudio.ftl
Módosított locales/el-GR/opencadstudio.ftl
Módosított locales/en-US/opencadstudio.ftl
Módosított locales/es-ES/opencadstudio.ftl
Módosított locales/fi-FI/opencadstudio.ftl
Módosított locales/fr-FR/opencadstudio.ftl
Módosított locales/hi-IN/opencadstudio.ftl
Módosított locales/hu-HU/opencadstudio.ftl
Módosított locales/it-IT/opencadstudio.ftl
Módosított locales/ja-JP/opencadstudio.ftl
Módosított locales/ko-KR/opencadstudio.ftl
Módosított locales/lo-LA/opencadstudio.ftl
Módosított locales/nl-NL/opencadstudio.ftl
Módosított locales/pl-PL/opencadstudio.ftl
Módosított locales/pt-BR/opencadstudio.ftl
Módosított locales/ru-RU/opencadstudio.ftl
Módosított locales/tr-TR/opencadstudio.ftl
Módosított locales/zh-CN/opencadstudio.ftl
Módosított locales/zh-TW/opencadstudio.ftl
Módosított src/app/command_driver/mod.rs
Módosított src/app/commands/draw.rs
Módosított src/app/commands/mod.rs
Módosított src/app/control/mod.rs
Módosított src/app/document.rs
Új src/app/measurement.rs
Módosított src/app/mod.rs
Módosított src/app/update/command.rs
Módosított src/app/update/mod.rs
Módosított src/app/update/viewport.rs
Módosított src/app/view/mod.rs
Módosított src/app/view/overlay.rs
Módosított src/command.rs
Módosított src/modules/draw/inquiry/area.rs
Módosított src/modules/draw/inquiry/dist.rs
Módosított src/modules/draw/inquiry/measuregeom.rs
Módosított src/modules/draw/mod.rs