map-svg-tools
v0.1.2
Published
SVG mimari planlardan navigasyon grafiği üreten ve Illustrator script kurulumunu otomatize eden CLI araç seti.
Readme
map-svg-tools
SVG mimari plan / kat haritalarıyla çalışan CLI araç seti. Üç komut sağlar:
map-svg-tools— Komutların kısa bir özetini ve kullanımını gösterir (map-svg-tools --help).node-connect-generator— SVG'lerden node (düğüm) ve bağlantı (komşuluk) verilerini çıkarır. İç mekan navigasyon (wayfinding) grafiği üretmek için kullanılır.init-illustrator-scripts— Pakete dahil olan Illustrator yardımcı script'lerini sistemdeki Adobe Illustrator kurulumununScriptsklasörüne kopyalar.
Kurulum
Önkoşul: Node.js ≥18 (gerekirse nvm üzerinden kurun).
Global kurulum gerekmiyor; her iki komut da npx ile doğrudan çalıştırılabilir:
npx -p map-svg-tools node-connect-generator --input=./floor-svgs --output=./output
# for mac
sudo npx -p map-svg-tools init-illustrator-scriptsSık kullanıyorsanız global de kurabilirsiniz:
npm install -g map-svg-tools
map-svg-tools --help # komut listesi ve özet kullanım
node-connect-generator --input=./input --output=./cikti-klasoru
init-illustrator-scriptsnode-connect-generator
Her SVG için:
#nodeskatmanındaki<circle>elementlerini düğüm olarak,<line>elementlerini ise düğümler arası kenar olarak okur.- Her düğümün dairesel yarıçapına temas eden çizgilerin uzak uçlarını başka düğümlerle eşleştirip komşuluk listesi çıkarır.
- Sonuçları
nodes.txt,elevator-connect.txt,escalator-connect.txt,doorway-connect.txtdosyalarına yazar. - Kaynak SVG'lerin
#nodeskatmanı temizlenmiş bir kopyasını daOUTPUT/<building>/svg/altına kaydeder.
Input için gerekli klasör yapısı
input/
├── <building>/
│ └── <level-name>.svgKullanım
node-connect-generator [--input=./input] [--output=./output]Argümanlar
| Argüman | Varsayılan | Açıklama |
| --- | --- | --- |
| --input | ./input | İçinde .svg dosyaları bulunan kaynak dizin. |
| --output | ./output | Üretilen *.txt ve temizlenmiş svg/ dosyalarının yazılacağı dizin. Çalıştırıldığı dizinin altında olmak zorunda; aksi halde script silme yapmadan hata verir. |
Uyarı:
--outputile verilen dizin her çalıştırmada tamamını silinip yeniden oluşturulur. Üretim çıktısı dışında bir şey içermemesi tavsiye edilir.
SVG Formatı
Script aşağıdaki yapıyı bekler:
<svg>
<g id="nodes">
<circle id="A02" class="cls-8" cx="377.57" cy="885.92" r="9.5"/>
<circle id="A01-entrance" class="cls-8" cx="119.38" cy="1065.87" r="9.5"/>
<!-- ... diğer satırlar ... -->
<!-- ... circle'lar line ile birbirine bağlıdır ... -->
<g id="lines">
<line class="cls-9" x1="808.05" y1="652.09" x2="808.05" y2="652.8"/>
<line class="cls-9" x1="764.81" y1="516.64" x2="926.87" y2="496.21"/>
<!-- ... diğer satırlar ... -->
</g>
<!-- ... sadece görsel amaçlı katmandır. generator aşamasında kullanılmıyor ... -->
<g id="node_texts">
<text class="cls-4" transform="translate(797.96 387.9)"><tspan x="0" y="0">A08</tspan></text>
<text class="cls-4" transform="translate(930.3 527.24)"><tspan x="0" y="0">A09</tspan></text>
<!-- ... diğer satırlar ... -->
</g>
</g>
<!-- ... mimari katmanlar ... -->
</svg>Circle (node) ID konvansiyonu
ID şu formattadır: nodeId-attr1-attr2-... — ayraç olarak -, ,, ;, | karakterlerinden herhangi biri kullanılabilir. İlk parça düğümün kimliği, kalanlar etiketlerdir.
Node ID format: Büyük harf + sayı (ör. A01, AA02, AB01, AB02). Aynı SVG dosyası içinde benzersiz olmalıdır; aksi halde uyarı verilir.
Etiketler:
| Etiket | Anlam |
| --- |---------------------------------------------------------------------------------------------------------------------|
| elevator veya EL | Bu düğüm bir asansör noktasıdır. |
| escalator veya ES | Bu düğüm bir yürüyen merdiven noktasıdır. |
| stairs, door, entrance | Bu düğüm bir kapı/giriş/merdiven noktasıdır — yani bir bina veya kat geçişi. Tek başına anlamlı değildir; mutlaka bir hedef düğüm kimliği (A1, AB05 gibi) ile birlikte yazılmalıdır. Aksi halde geçiş kaydedilmez. Örnek: A09-entrance-AB05 (A binasındaki A09'dan AB binasındaki AB05'e geçiş). |
| A1, B2, EL1, AB05... (büyük harf + sayı) | Başka bir kattaki veya binadaki hedef düğüm kimliği. Asansör/yürüyen merdiven düğümlerinde kat değişikliği bağlantısı, kapı/giriş düğümlerinde bina geçişi olarak yorumlanır. |
| wc, cafe, kat1_room_5 ... | Düğüme ait lokasyon etiketi. Regex: ^[a-z]+$ veya ^[a-z0-9]+_[a-z]+_[0-9]+$. |
Örnek ID: A5-elevator-EL2-EL3-cafe
- Düğüm kimliği:
A5 - Bir asansör noktası, diğer katlardaki
EL2veEL3ile bağlantılı,cafelokasyonuna yakın.
Line (kenar)
<line> elementi x1, y1, x2, y2 attribute'larıyla iki nokta arasında bağlantı tanımlar. Uçlardan biri bir circle'ın yarıçapı (r) içine düşerse, o düğüme "temas eden çizgi" olarak işaretlenir.
Geçersiz veri davranışı
Aşağıdaki durumlarda script ilgili öğeyi atlar ve dosya adıyla birlikte uyarı basar (SVG üreticisinin kolayca düzeltebilmesi amaçlanır):
idattribute'u olmayan circlecx/cy/rdeğerleri sayı olmayan circlex1/y1/x2/y2değerleri sayı olmayan line- Aynı dosyada tekrar eden node id
- Aynı circle id içinde tekrar eden etiket (ör.
A03-K0_store_01-K0_store_01)
Çıktı Dosyaları
OUTPUT dizinine şunlar yazılır:
output/
├── doorway-connect.txt # Sadece kapı/giriş düğümlerinin bina-geçiş bağlantıları (multi-building yapılarda oluşması beklenir)
└── <building>/
├── nodes.txt # Tüm düğümlerin listesi
├── elevator-connect.txt # Asansör grafiği (asansör + sıradan koridor düğümleri)
├── escalator-connect.txt # Yürüyen merdiven grafiği (escalator + sıradan koridor düğümleri)
└── svg/
└── <level-name>.svg # `#nodes` katmanı temizlenmiş orijinal SVG'lerDosya formatları
nodes.txt — her satır bir düğüm:
A01 120 80 K0_store_01 wc
A02 200 80
A03 280 80 K0_store_02 elevator
B03 280 80 ELSütunlar: id, x, y, lokasyon etiketleri (boşlukla).
elevator-connect.txt / escalator-connect.txt — her satır bir düğüm ve komşuları:
A01 A02
A02 A01 A03
A03 A02
A03 B03
B03 A03İlk sütun düğümün kendisi, kalanlar komşu id'leridir. Komşusu olmayan düğümler dahil edilmez.
doorway-connect.txt — stairs/door/entrance etiketli düğümlerin bina/kat geçiş bağlantıları. Bu dosya OUTPUT kök dizininde yer alır; tüm binalar için ortak tek dosyadır.
A09 AB05
AB05 A09İlk sütun düğüm kimliği, kalan sütunlar hedef düğüm(ler)dir (genelde başka bir binadaki karşı düğüm).
init-illustrator-scripts
Pakete dahil olan Illustrator yardımcı script'lerini (illustrator_scripts/*.jsx) sistemdeki tüm Adobe Illustrator kurulumlarının Scripts/ klasörlerine kopyalar. Böylece Illustrator'da File > Scripts menüsünden doğrudan erişilebilirler.
Kullanım
# macOS — otomatik tespit
init-illustrator-scripts
# Herhangi bir platform — hedef klasörü elle ver
init-illustrator-scripts --path=/path/to/Illustrator/Presets/<locale>/ScriptsArgümanlar
| Argüman | Varsayılan | Açıklama |
| --- | --- | --- |
| --path | (yok) | Script'lerin kopyalanacağı hedef klasör. Verildiğinde otomatik tespit atlanır; macOS olmayan platformlarda zorunludur. Klasör mevcut olmalıdır. |
Geliştirme
pnpm install
pnpm start -- --input=./input --output=./outputNode 18 ve üstü gereklidir. Repo köküne örnek SVG'ler input/ altına yerleştirilerek lokal çalıştırılabilir.
