STUDIO HAZE · jeniapp
Topaz source
Open by house policy. Topaz is our own language.
Topaz 5.20.2 · 63 files
apps/circuit/ui/waveform.tpz
Topaz · 2564 B · Original file
1
// 파형 패널. 프로브마다 한 행에 틱별 0/1 계단 선을 그리고 현재 틱을 점선으로 표시합니다.2
// 입력은 프로브별 틱 신호 열과 현재 틱이고 출력은 SVG 조각입니다. 프로브가 없으면 빈 문자열입니다.3
// 같은 파형이면 늘 같은 조각이 나옵니다.4
// 회로를 평가하지 않습니다. 신호 열은 core.history 가 만듭니다.5
// Waveform panel: one 0/1 step trace per probe with a current-tick marker.7
import core.history8
import ui.signalviz10
let 라벨폭 = 7611
let 틱폭 = 1612
let 행높이 = 4013
let 위여백 = 1615
function 파형칸(파형값: history.파형, t: int, 높은y: int, 낮은y: int) -> string {16
let x = 라벨폭 + t * 틱폭17
let y = if 파형값.값들[t] { 높은y } else { 낮은y }18
let 수평선 = "<line x1=\"{x}\" y1=\"{y}\" x2=\"{x + 틱폭}\" y2=\"{y}\" stroke=\"{signalviz.신호색(파형값.값들[t])}\" stroke-width=\"2\" data-wave=\"{파형값.프로브}\" data-tick=\"{t}\" />"19
if t + 1 >= 파형값.값들.length { return 수평선 }20
let 다음y = if 파형값.값들[t + 1] { 높은y } else { 낮은y }21
if 다음y == y { 수평선 } else { 수평선 + "<line x1=\"{x + 틱폭}\" y1=\"{y}\" x2=\"{x + 틱폭}\" y2=\"{다음y}\" stroke=\"{signalviz.흑연}\" stroke-width=\"1\" />" }22
}24
function 파형행(파형값: history.파형, 기준y: int) -> string {25
let 높은y = 기준y + 626
let 낮은y = 기준y + 2627
let 칸들 = map(0..<파형값.값들.length, t => 파형칸(파형값, t, 높은y, 낮은y))28
"<text x=\"4\" y=\"{낮은y}\" font-size=\"11\" font-family=\"monospace\" fill=\"{signalviz.먹}\">{파형값.프로브}</text>" + 칸들.join("")29
}31
export function 그리기파형(파형들: Array<history.파형>, 현재틱: int) -> string {32
if 파형들.length == 0 { return "" }33
let 틱수 = 파형들[0].값들.length34
let 폭 = 라벨폭 + 틱수 * 틱폭 + 2035
let 높이 = 위여백 + 파형들.length * 행높이 + 1036
let 표시선 = if 현재틱 >= 0 && 현재틱 < 틱수 {37
let 표시x = 라벨폭 + 현재틱 * 틱폭 + 틱폭 / 238
"<line x1=\"{표시x}\" y1=\"0\" x2=\"{표시x}\" y2=\"{높이}\" stroke=\"{signalviz.시그널}\" stroke-width=\"1\" stroke-dasharray=\"2 2\" />"39
} else { "" }40
let 행들 = map(0..<파형들.length, 행 => 파형행(파형들[행], 위여백 + 행 * 행높이))41
"<svg viewBox=\"0 0 {폭} {높이}\" width=\"100%\" style=\"border:1px solid #d8dad6;background:{signalviz.벨럼};margin-top:10px\" data-waveform=\"1\">" + 표시선 + 행들.join("") + "</svg>"42
}SHA256 eea52d6a9de115e378177147fdda88c602dd4bc0f94e4af182041504caabda48