Bagian aktif Syntax
12. Expressions
Status dokumen: Normative
RelGeo mendukung ekspresi deklaratif untuk menghitung nilai numerik, geometri, dan hasil query.
Bab ini merangkum semua operator dan fungsi yang tersedia.
12.1 Arithmetic Operators
Operator berikut didukung:
+
-
*
/
%
^
Contoh:
derived:
radius:
value: diameter / 2
Precedence
Urutan prioritas operator:
1. ()
2. unary !
3. ^
4. * / %
5. + -
6. comparison operators
7. &&
8. ||
9. ternary ? :
12.2 Built-in Functions
RelGeo menyediakan berbagai fungsi matematika dan geometri bawaan:
Matematika
min(a, b) → nilai minimum
max(a, b) → nilai maksimum
abs(x) → nilai absolut
clamp(x, min, max) → membatasi x dalam rentang [min, max]
round(x) → pembulatan
floor(x) → pembulatan ke bawah
ceil(x) → pembulatan ke atas
sqrt(x) → akar kuadrat
sin(angle) → sinus (input: angle type)
cos(angle) → kosinus
tan(angle) → tangen
Geometri
distance(A, B) → panjang antara dua titik
length(path) → panjang total geometri
perimeter(shape) → keliling closed-shape
bbox(target) → world-space bounding box minimum
midpoint(A, B) → titik tengah antara dua titik
polar(C, r, angle) → titik dari pusat, radius, dan sudut
angleBetween(A, B) → arah dari titik A ke titik B
width(target) → lebar bounding box target
height(target) → tinggi bounding box target
minX(target) → batas kiri bounding box target
maxX(target) → batas kanan bounding box target
minY(target) → batas atas bounding box target
maxY(target) → batas bawah bounding box target
project(P, line) → proyeksi ortogonal titik ke line
reflect(P, target) → refleksi titik terhadap point atau line
pointAt(path, t) → titik pada parameter t ∈ [0, 1]
Catatan:
angleBetween(A, B)pada v0.5 dibatasi untuk dua point, bukan overload vector-to-vectorbbox(target)pada v0.5 menghasilkan recordbbox2dminimum dengan fieldminX,maxX,minY,maxY,width, danheight- family
width/height/minX/maxX/minY/maxYpada v0.5 dibaca terhadap world-space bounding box target project(P, line)pada v0.5 hanya sah untuk targetlinereflect(P, target)pada v0.5 hanya sah untuk targetpointatauline
String
derived:
label: concat("Part-", partNo)
initial: charAt("Agus", 0) # → "A"
info: format("{} × {}", width, height)
Kontrak minimum v0.5:
concat(...values) -> string
format(template, ...values) -> string
charAt(text, index) -> string
Catatan:
concat(...)danformat(...)boleh menerima nilai non-string dan mengonversinya ke representasi string secara deterministikformat(...)adalah surface formatting minimum, bukan bahasa formatting yang lebih luascharAt(...)mengambil satu karakter pada indeks yang diberikantoString(...)bukan bagian surface aktif v0.5
Contoh tambahan:
derived:
note: format("R={} mm", radius)
tag: concat("Hole-", index)
Jika fungsi tidak dikenal atau argumennya tidak valid terhadap kontrak tipenya, resolver harus menghasilkan INVALID_EXPRESSION.
12.3 Comparison Operators
Operator berikut menghasilkan nilai boolean:
==
!=
<
>
<=
>=
12.4 Logical Operators
Operator berikut didukung:
&&
||
!
12.5 Ternary Expression
Format:
condition ? valueA : valueB
Contoh:
derived:
width:
value: compact ? 80mm : 120mm
12.6 References
Ekspresi dapat mereferensikan:
parameters
constants
derived values
object properties
anchors
queries
Contoh:
panel.width
panel.centerX
hole.radius
12.7 Type Rules
Operasi berikut valid secara umum:
length + length
length - length
number * length
length / number
number + number
Operasi yang mengubah makna geometris secara ambigu harus ditolak.
Contoh:
length * length → invalid
10cm + true → invalid
Jika salah satu operand pada penjumlahan atau pengurangan bertipe length dan operand lainnya adalah angka tanpa unit yang berada di konteks panjang, angka tersebut diperlakukan sebagai scene.unit.
12.8 Evaluation Constraints
Ekspresi RelGeo harus:
deterministic
side-effect free
context dependent hanya melalui reference eksplisit
Kondisi berikut wajib menghasilkan error:
- pembagian dengan nol
- fungsi yang tidak dikenal
- identifier yang tidak dikenal
- operator yang tidak didukung