نواصل سلسلة من المقالات حول العمل مع CAD API COMPASS-3D. لقد شوهدت أحرف التحكم بالفعل عدة مرات في الدروس السابقة للدورة. ثم في كل مرة يُقال إن خطوط الإخراج يجب ألا تحتويها ، لأن نظام COMPAS يعالجها بطريقة خاصة. الآن حان الوقت للتعرف عليهم بشكل أفضل.
بعد إتقان العمل معهم ، ستفهم أن إنشاء سلاسل مركبة معقدة هو مهمة تافهة ، وفي معظم الحالات لا تتطلب كتابة كمية كبيرة من التعليمات البرمجية.
في الدرس ، سنبحث في كيفية استخدام الأحرف الخاصة وأحرف الخطوط مع أحرف التحكم ، ونتحدث عن كيفية إنشاء الكسور والانحرافات بمساعدتهم ، وسننظر أيضًا في استخدامها مع الفقرات.

محتوى سلسلة الدروس "العمل مع KOMPAS-3D API"
- الأساسيات
- رسم التصميم
- الاتصال الصحيح ل KOMPAS
- النقش الرئيسي
- بدائية الرسم
- حفظ وثيقة في أشكال مختلفة
- التعرف على الإعدادات
- طرق الكتابة الأكثر تطوراً في كتلة العنوان
- قراءة خلايا التسمية التوضيحية
- شخصيات خاصة بما في ذلك سلسلة
- تسميات نصية بسيطة
- سلاسل مركب
- الفقرات
- نص متعدد الخطوط
- الخطوط المركبة المستندة إلى الفقرة
- أحرف التحكم
مراجعة سريعة
أحرف التحكم هي: @ ، $ ، & ، ؛ ، ~ ، ^ ، و #. لسوء الحظ ، لدى KOMPAS SDK معلومات قليلة جدًا حول كيفية استخدامها. لمزيد من المعلومات ، راجع مساعدة KOMPAS ، في القسم
"9. إعدادات KOMPAS-3D / تخزين إعدادات النظام / ملفات الخدمة / ملف قائمة المستخدم / بناء جملة الملف " .

يمكن تقسيم كل شخصيات التحكم بشكل مشروط إلى مجموعتين: رئيسية ومساعدة. تستخدم الرموز المساعدة فقط بالاقتران مع الرموز الرئيسية ، وفي حد ذاتها ، لا تصف أي مكون. يوفر الجدول أدناه وصفًا موجزًا لأحرف التحكم.

لننظر فيها بمزيد من التفصيل.
إدراج أحرف خاصة
لقد نظرنا بالفعل في الشخصيات الخاصة (انظر الدرسين
4 و
10 ). ثم ، لإدراج حرف واحد خاص ، تم
استخدام مثيل منفصل لواجهة
ksTextItemParam . باستخدام أحرف التحكم ، يمكنك إدراج أكبر عدد ممكن من الأحرف الخاصة في سلسلة كما تراها مناسبة دون
إعادة استخدام واجهة
ksTextItemParam .
بناء الجملة لإدخال أحرف خاصة هو:
AA @ YXXXX ~ BBحيث
AA - سلسلة موجودة قبل شخصية خاصة ،
Y - معدل لتمثيل رمز الحرف الخاص ،
XXXX - رمز الحرف الخاص المدرج.
BB - خط يقع بعد الطابع الخاص.
يتم تحديد رمز الحرف الخاص المدرج بين
@ و
~ . علاوة على ذلك ، بناءً على قيمة المعدل
Y ، يمكن تحديده بترميز عشري أو ست عشري. يتم عرض القيم الصحيحة للمعدل
Y في الجدول أدناه.
ملاحظة: كما توضح تجاربي ، تقوم COMPASS عادة بمعالجة غياب الحرف
~ . في هذه الحالة ، يتم إدراج أحرف خاصة حسب الحاجة. ومع ذلك ، أوصي بشدة بعدم الاعتماد على هذا السلوك وأكمل دائمًا عملية الإدراج بالحرف
~ .
فيما يلي مثال لبرنامج يوضح مخرجات الحروف الخاصة.
BSTR str = SysAllocString(OLESTR(" @+51~ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str); str = SysAllocString(OLESTR(" @*33~ ")); document2D->ksText(100.0,90.0,0.0,0.0,0.0,0,str); SysFreeString(str);
في هذا المثال ، يتم عرض نفس الحرف (ألفا ألفا) مرتين. في المرة الأولى التي يتم فيها تحديد الكود العشري الخاص بها ، تكون المرة الثانية في الست عشري. يوضح الشكل أدناه نتيجة البرنامج.

تسمح لك أحرف التحكم بعرض عدة أحرف خاصة على نفس السطر. لذلك ، في المثال التالي ، يتم عرض الأحرف الثلاثة الأولى من الأبجدية اليونانية في استدعاء واحد إلى أسلوب
ksText .
BSTR str = SysAllocString(OLESTR("@+51~ @+52~ @+53~")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str);
يوضح الشكل أدناه نتيجة هذا البرنامج.

معدل + هو المعدل الافتراضي. لذلك ، يمكن كتابة السطر أعلاه كما يلي:
"@ 51 ~ @ 52 ~ @ 53 ~"في هذه الحالة ، ستظل نتيجة البرنامج كما هي.
إذا كانت علامة
@ هي حرف غير صالح ، فسيتم عرض الخط الفاصل بين
@ و
~ كما هو.
يتم حذف الأحرف
@ و
~ . على سبيل المثال ، مع السطر:
"قبل @ T51 ~ بعد"سيتم عرض المستند:
قبل T51 بعدملاحظة: سلوك KOMPAS هذا غير موثق وقد يختلف في إصدارات مختلفة من البرنامج.
ملاحظة: أحرف التحكم غير مناسبة لإدخال أحرف خاصة تحتوي على سلسلة. والحقيقة هي أنه لتقييد إجراءاتها ، تحتاج إلى استخدام العلامة SPECIAL_SYMBOL_END (لمزيد من التفاصيل ، انظر
10 درس من الدورة) ، لكن أحرف التحكم لا تسمح باستخدام الإشارات.
إدراج أحرف الخط
بالإضافة إلى الأحرف الخاصة ، يمكنك إدراج أحرف عادية برمزها. يتم استخدام أحرف التحكم
^ و
~ لهذا الغرض. ويرد بناء الجملة أدناه.
AA ^ ( FNAME ) YXXXX ~ BBحيث
AA - سلسلة موجودة قبل الحرف المدرج ،
FNAME - اسم الخط الذي تؤخذ منه الحرف ،
Y - معدل لتمثيل رمز الحرف (على غرار @) ،
XXXX - رمز رقمي للحرف المدرج ،
BB - سطر يقع بعد الحرف المدرج.
من خلال غرضه ، يشبه حرف التحكم
^ @ . لديهم حتى بناء جملة مماثل. ولكن هناك اختلافان مهمان بينهما:
- ^ لا يُدرج حرفًا خاصًا ، ولكن حرف الخط برمزه ؛
- لإدراج الحرف ، يمكنك تعيين الخط في حقل FNAME (لا يسمح @ بهذا).
يمكن عرض رموز الرموز باستخدام تطبيق charmap (Symbol Table) ، الذي يعد جزءًا من نظام التشغيل Windows.
إذا لم يتم تحديد خط ، فسيتم استخدام الخط الافتراضي. فيما يلي مثال يستخدم الحرف
^ .
BSTR str = SysAllocString(OLESTR(" ^(Arial)*B1~ ^*39~ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str);
في هذا المثال ، يتم إدراج حرفين في السلسلة الناتجة ، لأول مرة نختار الخط
Arial ،
وللثاني نترك الخط الافتراضي. يوضح الشكل أدناه السطر الذي يتم إخراجه إلى المستند.

يرجى ملاحظة: تم تعيين الخط فقط للحرف المعروضة. كما تظهر تجاربي ، تقوم KOMPAS عادة بمعالجة عدم إنهاء
~ . ومع ذلك ، فإنني لا أوصي بالاعتماد على هذا السلوك ودائمًا تحديد أداة النهائية.
إذا تم تحديد حرف غير صالح (أو رمز غير صالح) بعد
^ ، فسيتم حذف
^ و
~ ، ويتم عرض الخط الفاصل بينهما على أنه يستخدم الخط الافتراضي. على سبيل المثال ، مع الخط
"قبل ^ Q (Arial) * B1 ~ بعد"سيتم عرض المستند:
"قبل Q (Arial) * B1 بعد"إذا تمت الإشارة إلى اسم خط غير صحيح في حقل
FNAME ، فسيختار KOMPAS الخط ويعرض الحرف فيه.
إذا لم يكن هناك قوس إغلاق في السطر ، فلن يتم عرض هذا الخط بالكامل. على سبيل المثال ، مع السطر:
"قبل ^ Q (Arial * B1 ~ بعد"سيتم عرض المستند فقط
"قبل"ملاحظة: السلوك أعلاه مع بناء جملة حرف عنصر تحكم غير صحيح صالح لـ KOMPAS-3D V17 ولم يتم توثيقه. في الإصدارات الأخرى ، قد يكون مختلفا.
طرق إضافية لإدراج الأحرف
الأحرف
@ و
^ لها نظائرها -
& و
# على التوالي. لديهم بناء جملة مماثل:
AA & XX ~ BB
AA # ( FNAME ) XX ~ BBحيث
AA - سلسلة معروضة قبل الحرف المدرج ،
XX - رمز الحرف المدرج (لـ & - الحرف الخاص ، لـ # - حرف الخط) ،
BB - سلسلة معروضة بعد الحرف المدرج ،
FNAME - اسم الخط.
هناك فروقان فقط بين الأحرف
@ و
^ ونظرائهم:
- لا تحتوي الأحرف & و # على معدل Y. يتم تحديد رمز الحرف دائمًا بالتدوين العشري.
- يتم تحديد رمز الحرف المراد إدراجه بواسطة رقمين كحد أقصى.
فيما يلي الكود المصدري لبرنامج يوضح كيفية استخدام الأحرف
& & # .
BSTR str = SysAllocString(OLESTR(" &51~ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str); str = SysAllocString(OLESTR(" #(Arial)37~ #37~ ")); document2D->ksText(100.0,90.0,0.0,0.0,0.0,0,str); SysFreeString(str);
يوضح الشكل أدناه نتيجة هذا البرنامج.

نص متعدد الخطوط
باستخدام أحرف التحكم ، يمكن عرض نص متعدد الخطوط. للقيام بذلك ، في مكان النقل إلى سطر جديد ، تحتاج إلى إدراج التسلسل:
@ / . ملاحظة: يتم استخدام الحرف
@ بدون فاصل
~ . فيما يلي الكود المصدري لبرنامج يعرض نصًا متعدد الأسطر باستخدام أحرف تحكم.
BSTR str = SysAllocString(OLESTR(" @/ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str);
يرجى ملاحظة: بفضل استخدام أحرف التحكم ، نعرض نصًا من سطرين مع مكالمة واحدة فقط إلى طريقة
ksText . يوضح الشكل أدناه نتيجة هذا البرنامج.

إدراج أحرف التحكم
اكتشفنا كيفية إدراج أحرف خاصة تعسفية وأحرف يونيكود. ولكن ماذا لو كنت تريد إدراج حرف التحكم نفسه؟ هنا يمكنك الذهاب بطريقتين. الطريقة الأولى هي استخدام الحرف
^ ولصقها مثل أحرف الخطوط العادية. ولكن هناك طريقة أسهل.
رمز هي مساعدة ويمكن إدراجها مباشرة في النص. لإدخال أحرف التحكم الأخرى ، تحتاج إلى مضاعفة. بمعنى ، زوج
منأحرف إدراج حرف واحد
@ في النص. وينطبق الشيء نفسه على أحرف التحكم الأخرى.
التالي هو برنامج مثال يوضح إدراج أحرف التحكم في سلسلة.
BSTR str = SysAllocString(OLESTR(" : @@ $$ && ; ~~ ^^ ##")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str);
يوضح الشكل أدناه نتيجة هذا البرنامج.

الانحرافات العلوية والسفلية
يتم استخدام بناء الجملة التالي لإدراج الانحرافات:
AA $ XX ؛ YY $ BBحيث
AA - النص المعروض قبل الانحرافات ؛
XX - الانحراف العلوي ؛
YY هو الانحراف السفلي ؛
BB - النص المعروض بعد الانحرافات.
يرجى ملاحظة: البناء بأكمله يقتصر على أحرف
$ ، و "
؛ »بمثابة فاصل بين الانحرافات العلوية والسفلية.
إذا لم يكن هناك محدد "بين الأحرف
$ ؛ "، ثم يتم تفسير السطر بأكمله بينهما على أنه الانحراف العلوي. إذا كان المكون
XX غائبًا ، أي بعد أن يذهب أول
دولار فورًا "
؛ "، ثم
يتم تفسير السطر التالي بالكامل إلى أقرب
دولار على أنه الانحراف الأدنى.
ملاحظة: يجب ألا يبدأ نص الانحراف العلوي بالأحرف
b و
d و
s و
m و
l (صغيرة
L ). سيتم شرح سبب ذلك لاحقًا.
فيما يلي مثال لبرنامج يعرض المخرجات بانحرافات
BSTR str = SysAllocString(OLESTR(" $;$ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str);
يوضح الشكل أدناه نتيجة هذا البرنامج:

يرجى ملاحظة أن KOMPAS يعالج حرف واحد فقط "
؛ ". الشخصية الثانية هي "
؛ "يمكن تفسيرها على أنها الجهة النهائية للهيكل بأكمله. على سبيل المثال ، مع السطر "
11 $ 22 ؛ 33 ؛ 44 $ " ، سيتم عرض الشاشة:
ملاحظة: لم يتم توثيق سلوك KOMPAS ، لذلك لا يمكنك الاعتماد عليه.
لقطة
يشبه بناء جملة الكسر بناء الجملة الانحراف ولديه خياران معادلان:
AA $ bXX ؛ YY $ BB
AA $ dXX ؛ YY $ BBحيث
AA - إخراج النص إلى الكسور.
XX هو البسط.
YY هي المقام ؛
BB - النص المعروض بعد الكسر.
يرجى ملاحظة: الفرق الوحيد بين إخراج الكسر وإخراج الانحرافات هو وجود الحرف
d أو
b مباشرة بعد أول علامة
$ . خلاف ذلك ، بناء الجملة الخاصة بهم متطابقة.
إذا لم يكن هناك "
؛ " بين الأحرف
$ d (
$ b ) و
$ "، ثم سيتم تفسير السطر بأكمله بينهما كرقم. إذا كان المكون
XX غائبًا ، أي بعد
$ d (
$ b ) مباشرة "
؛ "، ثم
يتم تفسير السطر التالي بالكامل إلى أقرب
دولار على أنه المقام.
ملاحظة: يجب ألا يبدأ نص البسط بالأحرف
s أو
m أو
l (صغيرة
L ). سيتم شرح سبب ذلك لاحقًا.
فيما يلي مثال لبرنامج يوضح خرج الكسر باستخدام أحرف التحكم.
BSTR str = SysAllocString(OLESTR(" $d;$ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str);
يوضح الشكل أدناه نتيجة هذا البرنامج.

يرجى ملاحظة أن KOMPAS يعالج الأحرف "الإضافية"
؛ »وكذلك في حالة الانحرافات. هذا السلوك غير موثق ولا يمكن الاعتماد عليه.
التباين والتحكم في حجم الكسر
في بداية إنشاء الانحرافات أو الكسور ، يمكن العثور على أحد الحروف:
s أو
m أو
l (صغيرة
L ). وهي تحدد حجم الانحرافات وعناصر الكسر (البسط والمقام). ويرد وصف الغرض منها في الجدول أدناه.

إذا لم يتم تحديد أي من هذه الأحرف ، فسيتم استخدام
l للكسر ،
ويتم استخدام
m للانحرافات. فيما يلي برنامج مثال يوضح استخدام هذه الأحرف.
BSTR str = SysAllocString(OLESTR(" $d;$ ")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str); str = SysAllocString(OLESTR(" $dl;$ ")); document2D->ksText(100.0,85.0,0.0,0.0,0.0,0,str); SysFreeString(str); str = SysAllocString(OLESTR(" $dm;$ ")); document2D->ksText(100.0,70.0,0.0,0.0,0.0,0,str); SysFreeString(str); str = SysAllocString(OLESTR(" $ds;$ ")); document2D->ksText(100.0,60.0,0.0,0.0,0.0,0,str); SysFreeString(str);
يوضح الشكل أدناه نتيجة هذا البرنامج.

على الرغم من أن الحروف
s و
m و
l تستخدم في الكسور في هذا المثال ، إلا أن استخدامها للانحرافات لا يختلف.
لاحظ أنه بين بداية الكسر أو الانحراف (
$ أو
$ d أو
$ b ) والحرف
s أو
m أو
l هناك حرف "غريب" واحد على الأقل (على سبيل المثال ، مسافة) ، فإن COMPAS لن "ترى" الحروف ، والكسر أو سوف يكون الانحراف الحجم الافتراضي.
أحرف التحكم المتداخلة
عند إخراج الكسور والانحرافات ، تتم معالجة الخطوط المتضمنة في تكوينها بشكل متكرر. هذا يعني أنه عند تكوين البسط والمقام ، يمكن أيضًا استخدام أحرف التحكم. هذا النهج موضح في المثال التالي.
BSTR str = SysAllocString(OLESTR("@54~$s2$ + $d@+51~;@+52~$ - ^(Symbol)*70~")); document2D->ksText(100.0,100.0,0.0,0.0,0.0,0,str); SysFreeString(str);
يوضح الشكل أدناه نتيجة هذا البرنامج.

لإدراج أحرف الأبجدية اليونانية ، نستخدم أحرف التحكم @ و ^ (للحرف pi). يتم اشتقاق درجة في الفصل الأول باستخدام الانحرافات. سلسلة فرعية
$ s2 يعرضه. تشير الحرف
s إلى الحجم الصغير للانحراف ، ولكن بسبب عدم وجود فاصل "
؛ »يتم عرض الانحراف العلوي فقط.
لتشكيل الكسر ، يتم استخدام المجموعة
$ d ؛ $ . علاوة على ذلك ، يتضمن البسط والمقام أحرف تحكم توفر إخراج حروف الأبجدية اليونانية.
يتم عرض آخر طرح (π pi) كرمز لخط Symbol باستخدام أحرف التحكم
^ و
~ .
لسوء الحظ ، فإن إمكانيات "العودية" هذه محدودة للغاية. لا يمكننا استثمار الكسور والانحرافات في بعضنا البعض. المشكلة هي أن كلاهما يتم تشكيلهما باستخدام حرف التحكم
$ . وبسبب هذا ، لا يمكن لـ COMPASS تحليل بشكل صحيح أي
دولار ينتمي إلى أي عنصر.
أحرف التحكم في الفقرة
يمكنك تجاوز التقييد جزئيًا باستخدام أحرف تحكم متداخلة باستخدام الفقرات. يتيح لك استخدام أحرف التحكم والفقرات معًا بناء هياكل أكثر تعقيدًا. يوضح المثال التالي إنشاء جزء من 4 مستويات.
رمز البرنامج لبناء جزء من 4 مستويات // DynamicArrayPtr dynamicArray; dynamicArray = static_cast<DynamicArrayPtr>(kompas->GetDynamicArray(TEXT_ITEM_ARR)); dynamicArray->ksClearArray(); TextItemParamPtr textItemParam; textItemParam = static_cast<TextItemParamPtr>(kompas->GetParamStruct(ko_TextItemParam)); // BSTR str = SysAllocString(OLESTR(" ")); textItemParam->set_s(str); dynamicArray->ksAddArrayItem(-1, textItemParam); SysFreeString(str); // TextItemFontPtr textItemFont; textItemFont = static_cast<TextItemFontPtr>(textItemParam->GetItemFont()); textItemFont->set_bitVector(NUMERATOR); str = SysAllocString(OLESTR("1 + $d@+51~;2$")); textItemParam->set_s(str); dynamicArray->ksAddArrayItem(-1, textItemParam); SysFreeString(str); // textItemFont->set_bitVector(DENOMINATOR); str = SysAllocString(OLESTR("1 + $d@+56~;2$")); textItemParam->set_s(str); dynamicArray->ksAddArrayItem(-1, textItemParam); SysFreeString(str); // textItemFont->set_bitVector(END_FRACTION); str = SysAllocString(OLESTR(" ")); textItemParam->set_s(str); dynamicArray->ksAddArrayItem(-1, textItemParam); SysFreeString(str); // textItemFont.Unbind(); textItemParam.Unbind(); // ksTextLineParam TextLineParamPtr textLineParam; textLineParam = static_cast<TextLineParamPtr>(kompas->GetParamStruct(ko_TextLineParam)); textLineParam->Init(); textLineParam->SetTextItemArr(dynamicArray); dynamicArray.Unbind(); // ParagraphParamPtr paragraphParam; paragraphParam=static_cast<ParagraphParamPtr>(kompas->GetParamStruct(ko_ParagraphParam)); paragraphParam->Init(); paragraphParam->set_x(100.0); paragraphParam->set_y(100.0); document2D->ksParagraph(paragraphParam); document2D->ksTextLine(textLineParam); document2D->ksEndObj(); // textLineParam.Unbind(); paragraphParam.Unbind();
في هذا المثال ، يتم استخدام أحرف التحكم لإنشاء كسور في البسط والمقام الرئيسي للكسر ، وكذلك لإدراج حروف الأبجدية اليونانية. يوضح الشكل أدناه نتيجة هذا البرنامج.

استنتاج
في هذا الدرس ، التقينا أحرف التحكم وتعلمنا كيفية استخدامها لعرض أحرف خاصة وأحرف الخطوط. كما ترى ، فإنها توفر بناء جملة بسيطًا لإنشاء سلاسل تتضمن أحرفًا خاصة وكسور وانحرافات. لسوء الحظ ، ليست مناسبة تمامًا لإدراج أحرف خاصة تحتوي على سلاسل. لكن هذه الشخصيات الخاصة نادرة للغاية. هذا هو واحد من القيود المفروضة على أحرف التحكم. أيضًا ، لا يمكن استخدامها لإنشاء سلاسل فرعية وخيوط فرعية ، وهناك قيود عند العمل مع أحرف خاصة تتضمن سلاسل. ولكن هذا لا ينتقص من مزاياها. بهذا نختتم مناقشتنا لشخصيات التحكم.
للاستمرار ، تابع أخبار المدونة.
سيرجي نورسيف ، مؤلف كتاب "تطوير التطبيقات لـ COMPAS في دلفي".