Apakah mungkin menggunakan Multipatch untuk mengimplementasikan IFeatureRenderer.Draw dalam renderer kustom

8

Saya punya penyaji kustom yang perlu membuat geometri yang dimodifikasi. Semua fitur input masuk melalui IFeatureCursorelemen as poligon. (Ini mirip dengan contoh ini , meskipun saya tidak memberikan poin.)

Saya dapat dengan mudah merender Poligon, Baris, dan Poin melalui melewati geometri baru ke IFeatureDraw.Drawatau memanggil IDisplay.DrawPolygon/ IDisplay.DrawPoint/ etc.

Namun, IDisplaytidak menyediakan mekanisme untuk menggambar multipatch, dan meneruskan ini sebagai geometri untuk IFeatureDraw.Drawmenghasilkan apa pun yang ditarik ke layar.

Apakah ada cara untuk langsung "menggambar" elemen multipatch (lebih disukai dengan texturing), dalam metode ini?

Reed Copsey
sumber
Apakah ini dalam Tampilan 2D (ArcMap) atau di ArcScene atau Globe?
Craig Williams
@Craig: Ini perlu didukung di ketiganya, meskipun saya bersedia menggunakan beberapa jalur kode untuk menanganinya. Ini untuk sumber data plugin, sehingga dukungan harus "global."
Reed Copsey

Jawaban:

3

Seperti yang dikatakan Craig, OpenGL adalah cara untuk menggunakan 3D.

Lihat Membuat Aplikasi Mesin ArcGIS Dengan C-Sharp dan OpenGL . Versi sebelumnya dari ArcGIS Explorer juga mendukung panggilan OpenGL , tetapi terakhir kali saya memeriksa Esri tidak lagi mendukungnya.

Saya tidak tahu mengapa mereka melakukan ini - gambar OpenGL benar-benar membantu membedakan AGX dari Google Earth.

Memperbarui

Bahkan jika plugin Anda mengembalikan multipatch dengan benar, saya tidak berpikir ArcObjects menawarkan metode untuk mendukung menggambar multipatch dengan panggilan OpenGL. Mungkin akan lebih mudah untuk hanya menggambar dari format asli mereka (memotong plugin dengan kata lain). Saya tidak pernah menggunakannya, tetapi ini adalah skrip yang menunjukkan cara menggunakan OpenGL dengan ArcScene .

Kirk Kuykendall
sumber
1

Tampilan 2D (IDisplay) tidak secara langsung mendukung penggandaan gambar. Anda harus menyamarkannya untuk jejak kaki (lihat IMultipatch :: XYFootprint untuk cara mengekstrak jejak kaki). Jika Anda ingin rendering 2D dari tekstur multipatch Anda harus membuat gambar dari proyeksi 2D dari multipatch dan menggambar itu.

Untuk 3D, Anda harus bisa mengembalikan mulitpatches di kursor dan itu akan berhasil, tetapi jujur ​​saja kebanyakan orang hanya menerapkan layer kustom untuk globe dan melakukan pekerjaan mereka sendiri di OpenGL.

Craig Williams
sumber
Saya mencoba untuk mendukung ArcScene terutama (bukan Globe), tetapi juga memetakan / globe sebagai sekunder. Sayangnya, mengembalikan multipatch dalam kursor tidak berfungsi dalam dataset plugin dengan benar, dari apa yang bisa saya katakan ...
Reed Copsey