Bekerja dengan API KOMPAS-3D β†’ Pelajaran 11 β†’ Label teks sederhana

Dalam pelajaran siklus sebelumnya, kami belajar menampilkan teks di blok judul. Hari ini kita akan berbicara tentang cara membuat teks ke dokumen itu sendiri. Kami akan mempertimbangkan contoh paling sederhana, dan menunjukkan trik yang lebih kompleks dalam pelajaran berikut.




Isi seri pelajaran β€œBekerja dengan API KOMPAS-3D”


  1. Dasar-dasarnya
  2. Desain gambar
  3. Koneksi yang benar ke KOMPAS
  4. Prasasti utama
  5. Primitif grafis
  6. Menyimpan dokumen dalam berbagai format
  7. Mengenal pengaturan
  8. Metode penulisan yang lebih canggih di blok judul
  9. Membaca sel teks
  10. Karakter khusus termasuk string
  11. Label teks sederhana

Text Anchor Point


Teks dalam KOMPAS selalu ditampilkan relatif ke beberapa titik, yang disebut titik jangkar. Teks dapat diposisikan secara berbeda relatif terhadapnya. Untuk mengetahui lokasi teks relatif terhadap titik jangkar, metode ksGetTextAlign dari antarmuka ksDocument2D digunakan . Berikut ini adalah prototipe-nya.

long ksGetTextAlign ( long pText //   ); 

Sebagai satu-satunya parameter, dibutuhkan pointer integer ke objek teks . Metode mengembalikan tipe penjilidan , atau -1 jika terjadi kesalahan. Jenis penjilidan yang valid ditunjukkan pada tabel di bawah ini.


Tabel tipe pengikatan yang valid

Untuk mengubah pengikatan teks, gunakan metode ksSetTextAlign dari antarmuka ksDocument2D . Berikut ini adalah prototipe-nya.

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

Jika berhasil, metode ini mengembalikan 1 , dan jika terjadi kesalahan, mengembalikan nol .

Output teks


Untuk output teks sederhana, gunakan metode ksText dari antarmuka ksDocument2D . Berikut ini adalah prototipe dari metode ini.

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

Mari kita menganalisis parameter metode ksText . Kami membahas titik jangkar di bagian sebelumnya.

Parameter ang menetapkan sudut dalam derajat antara garis teks dan garis horizontal. Sudut dihitung berlawanan arah jarum jam. Gambar di bawah ini menunjukkan garis yang ditarik pada sudut 45 Β° .


String 45 Β°

Parameter hStr menetapkan ukuran karakter string dalam milimeter. Jika nilai parameter ini adalah nol , maka ukuran standar digunakan.

Parameter ksuStr menentukan peregangan (penyempitan) teks. Gambar di bawah ini menunjukkan beberapa baris dengan nilai parameter ksuStr yang berbeda .


Garis berganda dengan nilai regangan berbeda

Dari gambar ini dapat dilihat bahwa "peregangan 0" setara dengan "peregangan 1", yaitu tidak adanya peregangan.

Parameter bitVector berisi serangkaian flag yang menentukan gaya karakter. Bendera yang valid tercantum dalam tabel di bawah ini.


Tabel tanda karakter

Bahkan, ada bendera lain yang valid, tetapi pekerjaan mereka hanya muncul dalam konstruksi string kompleks. Kami akan mempertimbangkan beberapa dari mereka dalam pelajaran berikutnya.
Ingat - string keluaran tidak boleh mengandung karakter @ , $ , & , ~ , ^ dan # , karena mereka adalah karakter kontrol. Kami akan berbicara tentang bekerja dengan mereka dalam pelajaran berikutnya dari siklus kami.
Jika berhasil, metode ksText mengembalikan pointer integer ke teks. Pointer ini dapat diteruskan, misalnya, ke metode ksSetTextAlign untuk mengubah posisi teks relatif ke titik jangkar. Jika terjadi kesalahan, metode ksText mengembalikan nol .

Contoh


Berikut ini adalah contoh program yang menunjukkan keluaran string menggunakan metode 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(); 

Untuk kesederhanaan, kode yang bertanggung jawab untuk pembuatan dan pelaksanaan dokumen dihilangkan dalam contoh ini. Sebagai hasil dari program ini, teks "String" ditampilkan dalam dokumen.

Ukuran teks


Saat menampilkan teks dalam dokumen, akan berguna untuk mengetahui seberapa banyak ruang yang dibutuhkan. Ketinggian teks diatur oleh parameter hStr dari metode ksText . Tetapi panjangnya langsung tergantung pada string output.

Untuk menentukannya, gunakan metode ksGetTextLengthFromReference dari antarmuka ksDocument2D . Metode ini hanya memiliki satu parameter - pointer integer ke teks. Ini mengembalikan panjang teks dalam milimeter.

Metode ksGetTextLengthFromReference tidak nyaman karena tidak memungkinkan Anda untuk menentukan panjang baris sebelum di-output ke dokumen. Untuk menentukan panjang string yang belum di-output ke dokumen, Anda perlu menggunakan metode ksGetTextLength . Tapi sebelum mempertimbangkannya, mari kita bicara tentang gaya.

Gaya teks


Sistem KOMPAS menentukan beberapa gaya untuk teks yang ditampilkan dalam dokumen. Setiap gaya memiliki bilangan bulat. Gaya yang paling umum digunakan adalah dalam tabel di bawah ini.


Gaya Teks yang Biasa Digunakan

Tidak semua gaya diberikan dalam tabel ini: hanya sebagian saja. Daftar lengkap konstanta yang tersedia dapat ditemukan di halaman "Struktur Parameter dan Konstanta \ Konstanta \ Konstanta Teks \ Gaya Teks Sistem" dalam dokumentasi KOMPAS.

Metode KsGetTextLength


Metode ksGetTextLength pada antarmuka ksDocument2D memungkinkan Anda untuk menentukan panjang string sebelum di-output ke dokumen. Di bawah ini adalah prototipe dari metode ini.

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

Metode mengembalikan panjang string dalam milimeter. Harap dicatat: metode menerima string itu sendiri sebagai parameter, dan bukan penunjuk ke objek "teks". Ini memungkinkan Anda untuk mengevaluasi ukuran garis sebelum di-output ke dokumen.

Contoh


Pertimbangkan contoh menggunakan metode ksGetTextLength . Misalkan kita memiliki garis dan kita perlu menempatkannya dalam persegi panjang dengan panjang tertentu (tugas ini jauh lebih mudah untuk diselesaikan dengan bantuan paragraf, tetapi tentang mereka dalam pelajaran berikutnya). Jika garis pas di dalamnya, maka itu ditampilkan secara penuh. Jika tidak, maka itu terputus dan elipsis ditempatkan di ujungnya. Di bawah ini adalah kode sumber program yang memecahkan masalah seperti itu.

 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(); 

String sumber ditentukan dalam konstanta FULLSTR . MaxSize variabel menetapkan panjang persegi panjang tempat Anda ingin memasukkan string. Kemudian nilai ini ditentukan, ukuran ellipsis dikurangi darinya, yang disimpan dalam variabel size_dots . Jika garis tidak cocok, satu karakter terpotong darinya sampai cocok dengan persegi panjang dengan ukuran yang ditentukan. Ini terjadi dalam loop sementara .

Perhatikan titik yang sangat penting: saat mengeluarkan string, semua parameter metode ksText (kecuali koordinat titik jangkar) memiliki nilai nol . Faktanya adalah bahwa metode ksGetTextLength tidak tahu apa-apa tentang parameter ini, sehingga tidak dapat memperhitungkannya saat menghitung panjang string. Jadi, jika output dari string menggunakan nilai bukan nol dari parameter metode ksText , maka panjang string yang dihasilkan mungkin berbeda dari yang diperoleh oleh metode ksGetTextLength .

Kesimpulan

Dalam pelajaran ini, kami belajar cara menampilkan label teks sederhana menggunakan metode ksText . Ini bukan satu-satunya cara untuk menampilkan teks, tetapi mungkin yang termudah. Dalam pelajaran berikutnya, kita akan melihat bagaimana garis majemuk ini dapat di-output menggunakan metode ini. Dan berikut ini, kami akan mempertimbangkan metode output teks yang lebih kompleks.

Untuk dilanjutkan, ikuti berita blog.

Sergey Norseev, Ph.D., penulis buku "Pengembangan Aplikasi untuk COMPAS di Delphi."

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


All Articles