diff --git a/src/plugins/tools/view_25d/lay_plugin/built-in-macros/_d25_engine.rb b/src/plugins/tools/view_25d/lay_plugin/built-in-macros/_d25_engine.rb index 534d72650..54949b9a3 100644 --- a/src/plugins/tools/view_25d/lay_plugin/built-in-macros/_d25_engine.rb +++ b/src/plugins/tools/view_25d/lay_plugin/built-in-macros/_d25_engine.rb @@ -260,7 +260,7 @@ module D25 displays.each do |k,zz| display = zz[0].display - view.open_display(display.frame, display.fill, display.like) + view.open_display(display.frame, display.fill, display.like, display.name) zz.each do |z| view.entry(z.layer.data, self.dbu, z.zstart, z.zstop) end diff --git a/src/plugins/tools/view_25d/lay_plugin/gsiDeclLayD25View.cc b/src/plugins/tools/view_25d/lay_plugin/gsiDeclLayD25View.cc index 0c771858a..4f614c1ce 100644 --- a/src/plugins/tools/view_25d/lay_plugin/gsiDeclLayD25View.cc +++ b/src/plugins/tools/view_25d/lay_plugin/gsiDeclLayD25View.cc @@ -65,7 +65,7 @@ Class decl_D25View (QT_EXTERNAL_BASE (QDialog) "lay", "D25View", gsi::method ("begin", &lay::D25View::begin, gsi::arg ("generator"), "@brief Initiates delivery of display groups" ) + - gsi::method ("open_display", &lay::D25View::open_display, gsi::arg ("frame_color"), gsi::arg ("fill_color"), gsi::arg ("like"), + gsi::method ("open_display", &lay::D25View::open_display, gsi::arg ("frame_color"), gsi::arg ("fill_color"), gsi::arg ("like"), gsi::arg ("name"), "@brief Creates a new display group" ) + gsi::method ("entry", &lay::D25View::entry, gsi::arg ("data"), gsi::arg ("dbu"), gsi::arg ("zstart"), gsi::arg ("zstop"), diff --git a/src/plugins/tools/view_25d/lay_plugin/layD25View.cc b/src/plugins/tools/view_25d/lay_plugin/layD25View.cc index dbd204051..142c83c6c 100644 --- a/src/plugins/tools/view_25d/lay_plugin/layD25View.cc +++ b/src/plugins/tools/view_25d/lay_plugin/layD25View.cc @@ -173,10 +173,10 @@ D25View::begin (const std::string &generator) } void -D25View::open_display (const color_t *frame_color, const color_t *fill_color, const db::LayerProperties *like) +D25View::open_display (const color_t *frame_color, const color_t *fill_color, const db::LayerProperties *like, const std::string *name) { if (! mp_ui->d25_view->has_error ()) { - mp_ui->d25_view->open_display (frame_color, fill_color, like); + mp_ui->d25_view->open_display (frame_color, fill_color, like, name); } } diff --git a/src/plugins/tools/view_25d/lay_plugin/layD25View.h b/src/plugins/tools/view_25d/lay_plugin/layD25View.h index 9979114f0..c891df965 100644 --- a/src/plugins/tools/view_25d/lay_plugin/layD25View.h +++ b/src/plugins/tools/view_25d/lay_plugin/layD25View.h @@ -65,7 +65,7 @@ public: void close (); void clear (); void begin (const std::string &generator); - void open_display (const color_t *frame_color, const color_t *fill_color, const db::LayerProperties *like); + void open_display (const color_t *frame_color, const color_t *fill_color, const db::LayerProperties *like, const std::string *name); void close_display (); void entry (const db::Region &data, double dbu, double zstart, double zstop); void finish (); diff --git a/src/plugins/tools/view_25d/lay_plugin/layD25ViewWidget.cc b/src/plugins/tools/view_25d/lay_plugin/layD25ViewWidget.cc index b911edca5..af8cbc9e5 100644 --- a/src/plugins/tools/view_25d/lay_plugin/layD25ViewWidget.cc +++ b/src/plugins/tools/view_25d/lay_plugin/layD25ViewWidget.cc @@ -555,7 +555,7 @@ static void lp_to_info (const lay::LayerPropertiesNode &lp, D25ViewWidget::Layer } void -D25ViewWidget::open_display (const color_t *frame_color, const color_t *fill_color, const db::LayerProperties *like) +D25ViewWidget::open_display (const color_t *frame_color, const color_t *fill_color, const db::LayerProperties *like, const std::string *name) { m_vertex_chunks.push_back (triangle_chunks_type ()); m_line_chunks.push_back (line_chunks_type ()); @@ -565,6 +565,14 @@ D25ViewWidget::open_display (const color_t *frame_color, const color_t *fill_col info.visible = true; color_to_gl (frame_color, info.frame_color); color_to_gl (fill_color, info.fill_color); + + info.has_name = (name != 0 || like != 0); + if (name) { + info.name = *name; + } else if (like) { + info.name = like->to_string (); + } + info.vertex_chunk = &m_vertex_chunks.back (); info.line_chunk = &m_line_chunks.back (); @@ -601,9 +609,11 @@ D25ViewWidget::entry (const db::Region &data, double dbu, double zstart, double m_zmax = std::min (m_zmax, std::max (zstart, zstop)); } + LayerInfo &info = m_layers.back (); + // try to establish a default color from the region's origin if required const db::OriginalLayerRegion *original_region = dynamic_cast (data.delegate ()); - if (mp_view && m_layers.back ().fill_color [3] == 0.0 && m_layers.back ().frame_color [3] == 0.0) { + if (mp_view && info.fill_color [3] == 0.0 && info.frame_color [3] == 0.0) { if (original_region) { @@ -614,7 +624,11 @@ D25ViewWidget::entry (const db::Region &data, double dbu, double zstart, double for (lay::LayerPropertiesConstIterator lp = mp_view->begin_layers (); ! lp.at_end (); ++lp) { if (! lp->has_children () && lp->source (true).layer_props ().log_equal (like)) { - lp_to_info (*lp, m_layers.back ()); + lp_to_info (*lp, info); + if (! info.has_name) { + info.name = like.to_string (); + info.has_name = true; + } break; } } @@ -625,7 +639,7 @@ D25ViewWidget::entry (const db::Region &data, double dbu, double zstart, double // sequential assignment lay::color_t color = mp_view->get_palette ().luminous_color_by_index (m_layers.size ()); - color_to_gl (color, m_layers.back ().fill_color); + color_to_gl (color, info.fill_color); } @@ -638,7 +652,7 @@ D25ViewWidget::entry (const db::Region &data, double dbu, double zstart, double void D25ViewWidget::finish () { - // @@@ + // .. nothing yet .. } void diff --git a/src/plugins/tools/view_25d/lay_plugin/layD25ViewWidget.h b/src/plugins/tools/view_25d/lay_plugin/layD25ViewWidget.h index 217d231b7..7c091fe7b 100644 --- a/src/plugins/tools/view_25d/lay_plugin/layD25ViewWidget.h +++ b/src/plugins/tools/view_25d/lay_plugin/layD25ViewWidget.h @@ -89,6 +89,8 @@ public: GLfloat fill_color [4]; GLfloat frame_color [4]; bool visible; + std::string name; + bool has_name; }; D25ViewWidget (QWidget *parent); @@ -148,7 +150,7 @@ public: } void clear (); - void open_display (const color_t *frame_color, const color_t *fill_color, const db::LayerProperties *like); + void open_display (const color_t *frame_color, const color_t *fill_color, const db::LayerProperties *like, const std::string *name); void close_display (); void entry (const db::Region &data, double dbu, double zstart, double zstop); void finish ();