70002506 Draw some Mtext entities on top in 2D even if they are inside layers

Article 70002506
Type HowTo
Product Engine
Version 11
Date Added 3/31/2024 12:00:00 AM
Fixed 11.1.4.0 (3/31/2024 12:00:00 AM)
Submitted by Peter Chanios

Summary

Solution

Put vdMtext objects that you want to draw on the top in separate layers
Override the OnDraw and OnDrawAfter
In onDraw set the text layers frozen
In OnDrawAfter Draw all the text in the frozen layers

 
vdDocument doc;
doc.OnDrawAfter += Doc_OnDrawAfter;
doc.OnDraw += Doc_OnDraw;
 
static bool IsOverAllLayer(vdLayer layer)
        {
            return layer != null && string.Compare(layer.Name, "awCabs_2D_Text", true) == 0 || string.Compare(layer.Name, "awCabs_2D_Number", true) == 0;
        }
private void Doc_OnDraw(object sender, vdRender render, ref bool cancel)
        {
            foreach (vdLayer layer in doc.Layers)
            {
                if (IsOverAllLayer(layer)) layer.Frozen = true;
            }
        }
private void Doc_OnDrawAfter( object sender, vdRender render)
        {
            foreach (vdFigure figure in doc.ActiveLayOut.Entities)
            {
                if (IsOverAllLayer(figure.Layer)) figure.Draw(render);
                else if(figure is vdInsert)
                {
                    vdInsert insert = figure as vdInsert;
                    vdBlock block = insert.Block;
                    foreach (vdFigure fig in block.Entities)
                    {
                        if (IsOverAllLayer(fig.Layer))
                        {
                            render.PushDrawFigureList(insert);
                            render.PushMatrix(insert.ECSMatrix);
                            fig.Draw(render);
                            render.PopMatrix();
                            render.PopDrawFigureList();
                        }
                    }
                }
            }
            
        }

Send comments on this topic.