Skip to content

نظام الألوان ​

يتبع نظام الألوان في cad-viewer سلوك AutoCAD ObjectARX مع ضمان عرض متوقع في بيئة المتصفح.

وهو يدعم كلا من فهرس ألوان AutoCAD (ACI) واللون الحقيقي / True Color، موحّدين عبر تجريد AcCmColor.

نظرة عامة ​

في الأنظمة المتوافقة مع AutoCAD، تُمثَّل الألوان بطريقتين أساسيتين:

ACI (فهرس ألوان AutoCAD) ​

  • نظام ألوان قائم على الأعداد الصحيحة (0–256)
  • يستخدم لوحة ألوان محددة مسبقًا
  • يشمل ألوانًا منطقية تعتمد على السياق بدلًا من قيم RGB ثابتة

اللون الحقيقي / True Color ​

  • لون RGB 24-بت (R, G, B)
  • تتراوح كل قناة بين 0–255
  • يوفّر مرونة لونية كاملة مستقلة عن ACI

AcCmColor ​

تُمثَّل جميع الألوان في cad-viewer باستخدام فئة AcCmColor.

وهي تدعم:

  • فهرس ACI
  • اللون الحقيقي (RGB)
  • أوضاع الألوان المنطقية (ByLayer / ByBlock)

التنفيذ المرجعي:
https://github.com/mlightcad/realdwg-web/blob/main/packages/common/src/AcCmColor.ts

يحاكي هذا التجريد ObjectARX، حيث قد يمثّل كائن اللون لونًا مفهرسًا أو قيمة RGB صريحة.

قيم ACI الخاصة ​

بخلاف قيم ACI القياسية (1–255)، تمثّل القيم التالية ألوانًا منطقية:

ACI = 0 → ByBlock ​

  • يتحدد اللون بواسطة مرجع الكتلة
  • السلوك:
    • قبل الإدراج: يستخدم لون المقدمة الافتراضي
    • بعد الإدراج: يرث من سياق الكتلة

هذا ليس لونًا ثابتًا بل مرجع ديناميكي.

ACI = 256 → ByLayer ​

  • يُورَّث اللون من طبقة الكيان
  • وهو الوضع الأكثر استخدامًا في سير عمل CAD

السلوك:

  • تغيير لون الطبقة يحدّث جميع الكيانات التي تستخدم ByLayer
  • يتيح إدارة مركزية للألوان

ACI = 7 → لون المقدمة التكيفي ​

  • يمثّل لون المقدمة الافتراضي
  • يظهر كـ:
    • أبيض على الخلفيات الداكنة
    • أسود على الخلفيات الفاتحة

هذا يجعله لونًا معتمدًا على السياق، لا قيمة RGB ثابتة.

في سير عمل AutoCAD:

  • عند إنشاء طبقة جديدة، يكون لونها الافتراضي عادةً ACI 7
  • يضمن ذلك أن تكون الهندسة المنشأة حديثًا مرئية دائمًا بغض النظر عن سمة الخلفية

حل الألوان في AcDbEntity ​

يحلّ كل كيان لون عرضه النهائي عبر الخاصية resolvedColor.

التنفيذ المرجعي:
https://github.com/mlightcad/realdwg-web/blob/main/packages/data-model/src/entity/AcDbEntity.ts

تحدد الخاصية resolvedColor لون RGB النهائي المستخدم للعرض. ويتبع الحل عملية قائمة على الأولوية:

  • اللون الحقيقي (أعلى أولوية): إذا كان الكيان يعرّف لونًا حقيقيًا صراحةً، يُستخدم مباشرة
  • حل ByLayer: إذا كان اللون ByLayer (ACI = 256)، يُفوَّض إلى اللون المحلول للطبقة
  • حل ByBlock: إذا كان اللون ByBlock (ACI = 0)، يعتمد على سياق إدراج الكتلة ويرجع إلى لون افتراضي إذا لم يكن هناك سياق متاح
  • حل لون ACI: بالنسبة لقيم ACI القياسية (1–255)، يُستخدم جدول بحث محدد مسبقًا

معالجة ACI 7 في cad-viewer ​

يتعامل cad-viewer مع ACI 7 كلون دلالي، لا كقيمة RGB ثابتة. وهو ينقلب تلقائيًا للحفاظ على التباين عند تغيّر الخلفية. كيف يعمل ذلك؟ من حيث المبدأ،

  • تغيير الخلفية يطلق تحديث المقدمة: عندما يتغيّر لون خلفية العرض، يُطلب من محرك العرض صراحةً تحديث لون العرض "المقدمة". والقاعدة بسيطة:

    • إذا كانت الخلفية سوداء، استخدم الأبيض لـ ACI 7.
    • إذا كانت الخلفية بيضاء، استخدم الأسود لـ ACI 7.
  • المواد تتذكر ما إذا كانت "مقدمة": عند إنشاء المواد، تُوسَم ببيانات وصفية تشير إلى ما إذا كانت تمثّل كيان مقدمة (ACI 7). وهذا يتيح للنظام العثور على جميع المواد المخزَّنة مؤقتًا التي ينبغي أن تنقلب عند تغيّر المقدمة.

  • تحديث مقدمة مركزي: يوجّه مدير أنماط محرك العرض طلب "تغيير المقدمة" الواحد إلى جميع مديري المواد (الخطوط والنقاط والتعبئات). ويمرّ كل مدير على مواده المخزَّنة مؤقتًا ويحدّث فقط المواد الموسومة كمقدمة.

الملخص ​

النوعالتمثيلاستراتيجية الحل
اللون الحقيقيRGBمباشر
ACI (1–255)فهرسبحث في لوحة الألوان
ByLayer256تفويض إلى الطبقة
ByBlock0يعتمد على السياق
ACI 77تباين تكيفي

أهداف التصميم ​

صُمّم نظام الألوان في cad-viewer لكي:

  • يتوافق مع دلالات ObjectARX
  • يحافظ على سلوكيات الألوان المنطقية (ByLayer / ByBlock)
  • يضمن عرضًا متسقًا في المتصفحات
  • يوفّر معالجة صحيحة للون المقدمة التكيفي (ACI 7)