العمل مع KOMPAS-3D API → الدرس 11 ← تسميات نصية بسيطة

في الدروس السابقة من الدورة ، تعلمنا عرض النص في كتلة العنوان. سنتحدث اليوم عن كيفية إخراج النص إلى المستند نفسه. سننظر في أبسط الأمثلة ، ونعرض حيلًا أكثر تعقيدًا في الدروس التالية.




محتوى سلسلة الدرس "العمل مع COMPASS-3D API"


  1. الأساسيات
  2. تصميم رسم
  3. اتصال صحيح بـ KOMPAS
  4. النقش الرئيسي
  5. البدائيون الرسم
  6. حفظ مستند بتنسيقات مختلفة
  7. التعرف على الإعدادات
  8. طرق كتابة أكثر تعقيدًا في كتلة العنوان
  9. قراءة خلايا الترجمة
  10. أحرف خاصة بما في ذلك سلسلة
  11. تسميات نصية بسيطة

نقطة ربط النص


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

long ksGetTextAlign ( long pText //   ); 

كمعلمة فقط ، فإنه يأخذ مؤشر عدد صحيح إلى كائن نص . تُرجع الطريقة نوع الربط ، أو -1 في حالة حدوث خطأ. أنواع الربط الصالحة موضحة في الجدول أدناه.


جدول أنواع الربط الصالحة

لتغيير ربط النص ، استخدم طريقة ksSetTextAlign للواجهة ksDocument2D . ما يلي هو نموذجها الأولي.

 long ksSetTextAlign ( long pText, //   «» long align //  ); 

في حالة نجاحها ، ترجع هذه الطريقة 1 ، وفي حالة حدوث خطأ ، يتم إرجاع صفر .

إخراج النص


لإخراج نص بسيط ، استخدم طريقة ksText للواجهة ksDocument2D . فيما يلي نموذج أولي لهذه الطريقة.

 long ksText ( double x, //   double y, double ang, //   double hStr, //    double ksuStr, //  long bitVector, //  BSTR s //  ); 

دعونا نحلل معلمات طريقة ksText . ناقشنا نقطة الربط في القسم السابق.

تقوم المعلمة ang بتعيين الزاوية بالدرجات بين سطر من النص وخط أفقي. تُحسب الزاوية عكس اتجاه عقارب الساعة. توضح الصورة أدناه خطًا مرسومًا بزاوية 45 درجة .


سلسلة 45 درجة

تعيّن المعلمة hStr حجم أحرف السلسلة بالملليمتر. إذا كانت قيمة هذه المعلمة صفرًا ، فسيتم استخدام الحجم الافتراضي.

تحدد المعلمة ksuStr تمدد (تضييق) النص. يوضح الشكل أدناه عدة أسطر بقيم مختلفة لمعلمة ksuStr .


خطوط متعددة بقيم امتداد مختلفة

من هذا الشكل يمكن ملاحظة أن "التمدد 0" يعادل "التمدد 1" ، أي غياب أي تمدد.

تحتوي المعلمة bitVector على مجموعة من العلامات التي تحدد نمط الحرف. الأعلام الصالحة مدرجة في الجدول أدناه.


جدول أعلام الأحرف

في الواقع ، هناك أعلام صالحة أخرى ، ولكن عملها يظهر فقط في بناء سلاسل مركبة معقدة. سننظر في بعضها في الدرس التالي.
تذكر - يجب ألا تحتوي سلسلة الإخراج على الأحرف @ و $ و & و ~ و ^ و # ، لأنها أحرف تحكم. سنتحدث عن العمل معهم في الدروس القادمة من دورتنا.
في حالة نجاح ذلك ، ترجع طريقة ksText مؤشر عدد صحيح إلى النص. يمكن تمرير هذا المؤشر ، على سبيل المثال ، إلى أسلوب ksSetTextAlign لتغيير موضع النص بالنسبة إلى نقطة الارتساء. في حالة حدوث خطأ ، ترجع طريقة ksText صفر .

مثال


ما يلي هو برنامج مثال يوضح إخراج السلسلة باستخدام أسلوب ksText .

 //  BSTR str = SysAllocString(L""); long itext; itext = Document2D->ksText(100, 100, //  0, //  11, //  0, // 0, //  str); SysFreeString(str); //    Document2D->ksSetTextAlign(itext, txta_Left); Document2D.Unbind(); //   kompas->Visible = true; kompas.Unbind(); 

من أجل البساطة ، يتم حذف الرمز المسؤول عن إنشاء المستند وتنفيذه في هذا المثال. نتيجة لهذا البرنامج ، يتم عرض النص "سلسلة" في المستند.

حجم النص


عند عرض النص في مستند ، من المفيد معرفة مقدار المساحة التي يشغلها. يتم تعيين ارتفاع النص بواسطة معلمة hStr لأسلوب ksText . لكن طوله يعتمد بشكل مباشر على سلسلة الإخراج.

لتحديد ذلك ، استخدم طريقة ksGetTextLengthFromReference للواجهة ksDocument2D . تحتوي هذه الطريقة على معلمة واحدة فقط - مؤشر عدد صحيح للنص. تقوم بإرجاع طول النص بالملليمتر.

إن طريقة ksGetTextLengthFromReference غير ملائمة لأنها لا تسمح لك بتحديد طول السطر قبل إخراجه إلى المستند. لتحديد طول سلسلة لم يتم إخراجها بعد إلى المستند ، تحتاج إلى استخدام أسلوب ksGetTextLength . ولكن قبل التفكير في الأمر ، لنتحدث عن الأنماط.

أنماط النص


يحدد نظام KOMPAS العديد من الأنماط للنصوص المعروضة في المستندات. كل نمط له عدد صحيح. الأنماط الأكثر استخدامًا موجودة في الجدول أدناه.


أنماط النص شائعة الاستخدام

لا يتم إعطاء جميع الأنماط في هذا الجدول: جزء منها فقط. يمكن العثور على قائمة كاملة بالثوابت المتوفرة في صفحة "هياكل المعلمات و Constants \ Constants \ Text Constants \ System Text Styles" في وثائق KOMPAS.

طريقة KsGetTextLength


تسمح لك طريقة ksGetTextLength للواجهة ksDocument2D بتحديد طول السلسلة قبل إخراجها إلى المستند. يوجد أدناه نموذج أولي لهذه الطريقة.

 double ksGetTextLength ( BSTR text, // long style //  ); 

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

مثال


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

 const wchar_t FULLSTR[] = L"  !   !   !"; const wchar_t DOTS[] = L"..."; const long STYLE = 1; double maxSize = 100.0; BSTR str = SysAllocString(FULLSTR); if(Document2D->ksGetTextLength(str, STYLE) > maxSize) { //   BSTR str_dots = SysAllocString(DOTS); double size_dots = Document2D->ksGetTextLength(str_dots, STYLE); SysFreeString(str_dots); //     maxSize -= size_dots; SysReAllocStringLen(&str, str, SysStringLen(str) - 4); // ,     while(Document2D->ksGetTextLength(str, STYLE) > maxSize) SysReAllocStringLen(&str, str, SysStringLen(str) - 1); //    size_t len = SysStringLen(str); SysFreeString(str); //     wchar_t *p = new wchar_t[len + wcslen(DOTS) + 1]; wcsncpy(p, FULLSTR, len); p[len] = L'\0'; wcscat(p, DOTS); str = SysAllocString(p); delete [] p; } //    Document2D->ksText(100, 100, //  0, //  0, //  0, // 0, //  str); //  SysFreeString(str); Document2D.Unbind(); //   kompas->Visible = true; kompas.Unbind(); 

يتم تحديد السلسلة المصدر في ثابت FULLSTR . يقوم maxSize المتغير بتعيين طول المستطيل الذي تريد إدخال السلسلة فيه. في وقت لاحق يتم تحديد هذه القيمة ، يتم طرح حجم القطع منها ، والذي يتم تخزينه في متغير size_dots . إذا لم يكن الخط مناسبًا ، يتم قطع حرف واحد منه حتى يتناسب مع مستطيل الحجم المحدد. يحدث هذا في حلقة من الوقت .

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

الخلاصة

تعلمنا في هذا الدرس كيفية عرض تسميات نصية بسيطة باستخدام طريقة ksText . هذه ليست الطريقة الوحيدة لعرض النص ، ولكن ربما أسهل. في الدرس التالي ، سنلقي نظرة على كيفية إخراج هذا الخط المركب باستخدام هذه الطريقة. وفي ما يلي ، سننظر في طرق إخراج النص الأكثر تعقيدًا.

للمتابعة ، تابع أخبار المدونة.

سيرجي نورسيف ، دكتوراه ، مؤلف كتاب "تطوير التطبيقات لـ COMPAS في دلفي".

Source: https://habr.com/ru/post/ar417723/


All Articles