Simge paketleri: PLC Icons
Simge paketleri yalnızca resmî eklentilerle gelir
Simge paketi sunucunun içinde çalışan koddur; bu yüzden yalnızca bir C# eklentisi olabilir ve sunucu C# eklentilerini yalnızca resmî ve imzalı olduklarında yükler. JavaScript eklentileri simge paketi ekleyemez. Bu sayfa, resmî PLC Icons eklentisinin nasıl yapıldığını okumak için gösterir.
Simge paketi, işe yarar en basit C# eklentisidir: bağlantı yok, ayar yok, aksiyon yok. PLC Icons eklentisi (PLCIcons/, id plc-icons) Düzenleyici'nin simge seçicisine kendi kategorisi olarak 29 merdiven mantığı (PLC) simgesi ekler. Bu sayfa onu adım adım anlatır.
Paket nedir
IIconPackSource arayüzünü uygulayın ve Initialize içinde host.RegisterIconPack ile kaydedin:
| Üye | Anlamı |
|---|---|
Id | Paketin benzersiz kimliği. |
DisplayName | Simge seçicideki kategori adı. |
IconNames | Simgelerin adları, listelenmesini istediğiniz sırayla. |
GetIconSvg(name) | Bir simgenin SVG metni, yoksa null. |
Eklentinin tamamı
using MacroGrid.Plugin.Abstractions;
namespace MacroGrid.Plugin.PlcIcons;
/// <summary>Entry point (plugin.json's "entry") — the host finds this type by reflection and instantiates it
/// with a parameterless constructor, then calls <see cref="Initialize"/> once.</summary>
public sealed class PlcIconsPlugin : IPlugin
{
public void Initialize(IPluginHost host) => host.RegisterIconPack(new PlcIconPack());
}
/// <summary>A static icon pack: ladder-logic function block icons (coil, timers, comparisons, arithmetic),
/// embedded as SVG resources in this assembly. No connection, no settings — the icons never change at
/// runtime, so <see cref="IIconPackSource"/> is the whole plugin.</summary>
public sealed class PlcIconPack : IIconPackSource
{
// Sorted so the picker's default ordering doesn't depend on the filesystem's own order.
private static readonly string[] Names =
[
"add", "calculate", "close-branch", "coil", "convert", "divide", "empty-block", "equal",
"f-trig", "greater", "greater-equal", "lesser", "lesser-equal", "move", "multiply", "n",
"nc", "no", "not-equal", "open-branch", "p", "r-trig", "reset-coil", "set-coil", "subtract",
"timer-convert", "tof-timer", "ton-timer", "tp-timer",
];
public string Id => "plc-icons";
public string DisplayName => "PLC Icons";
public IReadOnlyList<string> IconNames => Names;
public string? GetIconSvg(string name)
{
if (Array.IndexOf(Names, name) < 0) return null;
var assembly = typeof(PlcIconPack).Assembly;
using var stream = assembly.GetManifestResourceStream($"MacroGrid.Plugin.PlcIcons.icons.{name}.svg");
if (stream is null) return null;
using var reader = new StreamReader(stream);
return reader.ReadToEnd();
}
}PlcIconsPluginIPlugingiriş noktasıdır: tek satır,host.RegisterIconPack(new PlcIconPack()).- İsimler sıralanır, böylece seçicinin sıralaması dosya sistemine bağlı olmaz.
- SVG'ler assembly'ye gömülü kaynaklardan okunur, dolayısıyla çalışma zamanında ayrı dosya yoktur.
Görünen ad İngilizce yazılmıştır (eklentinin varsayılan dili); Türkçe ad "PLC İkonları" locales/tr.json dosyasından gelir.
Proje
Simgeler src/icons/ içinde durur ve .csproj içindeki tek bir satırla gömülür:
<EmbeddedResource Include="icons\*.svg" />Kaynak adı <RootNamespace>.icons.<file name> biçimindedir (MacroGrid.Plugin.PlcIcons.icons.coil.svg); yukarıdaki GetManifestResourceStream de bunu ister. plugin.json, her C# eklentisinde olduğu gibi çıktıya kopyalanır:
{
"id": "plc-icons",
"name": "PLC Icons",
"description": "A static icon pack: 29 ladder-logic symbols in their own category in the editor's icon picker.",
"author": "Deccoyi",
"homepage": "https://github.com/Deccoyi/macro-grid-plugin/tree/main/PLCIcons",
"defaultLanguage": "en",
"version": "0.1.4",
"minMacroGrid": "1.0.0",
"sdkVersion": "^0.4.0",
"minServerVersion": "0.3.2",
"entry": "MacroGrid.Plugin.PlcIcons.dll",
"kind": "csharp",
"permissions": null
}Bir simge
Her simge stroke="currentColor" ile çizen tek renkli bir SVG'dir. Düzenleyici simgeyi kök <svg> öğesinde color ayarlayarak renklendirir, bu yüzden renkleri asla sabit yazmayın. Bu, coil.svg dosyasıdır:
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="30" fill="none" viewBox="0 0 40 30"><path stroke="currentColor" stroke-linecap="round" stroke-width="2" d="M0 15h12m16 0h12M16 5c-5 5-5 15 0 20m8-20c5 5 5 15 0 20"/></svg>Simge ekleme
src/icons/içine yeni bir.svgkoyun. Tek renkli tutun ve her çizgi ve dolgu içincurrentColorkullanın.- Dosya adını (uzantısız)
Namesdizisine ekleyin. - Eklentiyi derleyin ve yeniden kurun (veya yeniden yükleyin).
