Pregunta

Estoy creando un VSD dinámico de un conjunto jerárquico de datos que representa un diagrama de flujo.No quiero / necesito abrazar con el posicionamiento absoluto de estos elementos: las opciones de diseño automáticas funcionarán bien.

El problema es que no puedo averiguar cómo realizar este comando a través del código.En la UI (Visio 2010), los comandos están en la cinta aquí: Diseño (TAB) -> Diseño (grupo) -> Reaprobación (SplitButton).

cualquiera de estos lo hará.Mirar a través de la documentación de Visio SDK y el googling durante un par de días no han subido nada de mucho uso.

¿Alguna idea?(usando C #, pero vb / vba haría)

¿Fue útil?

Solución

El método de página.layout () en sí mismo no es suficiente.

En el proyecto de muestra WBSTREEVIEW.sLN (vb.net), encontré cómo lograr esto, pero no pude publicar mi respuesta hasta las 8 horas posteriores: -x

Los otros tipos de diseño son posibles mirando a través de los enumias utilizados a continuación. Compacto -> Desconocido acabo de terminar siendo mejor para la mayoría de los flujos que estamos creando.

traducido a C #:

        // auto-layout, Compact Tree -> Down then Right
        var layoutCell = this._page.PageSheet.get_CellsSRC(
            (short)VisSectionIndices.visSectionObject,
            (short)VisRowIndices.visRowPageLayout,
            (short)VisCellIndices.visPLOPlaceStyle);
        layoutCell.set_Result(
            VisUnitCodes.visPageUnits,
            (short)VisCellVals.visPLOPlaceCompactDownRight);
        layoutCell = this._page.PageSheet.get_CellsSRC(
            (short)VisSectionIndices.visSectionObject,
            (short)VisRowIndices.visRowPageLayout,
            (short)VisCellIndices.visPLORouteStyle);
        layoutCell.set_Result(
            VisUnitCodes.visPageUnits,
            (short)VisCellVals.visLORouteFlowchartNS);

        //// to change page orientation
        //layoutCell = this._page.PageSheet.get_CellsSRC(
        //    (short)VisSectionIndices.visSectionObject,
        //    (short)VisRowIndices.visRowPrintProperties,
        //    (short)VisCellIndices.visPrintPropertiesPageOrientation);
        //layoutCell.set_Result(
        //    VisUnitCodes.visPageUnits,
        //    (short)VisCellVals.visPPOLandscape);

        // curved connector lines
        layoutCell = this._page.PageSheet.get_CellsSRC(
            (short)VisSectionIndices.visSectionObject,
            (short)VisRowIndices.visRowPageLayout,
            (short)VisCellIndices.visPLOLineRouteExt); 
        layoutCell.set_Result(
            VisUnitCodes.visPageUnits, 
            (short)VisCellVals.visLORouteExtNURBS);


        // perform the layout
        this._page.Layout();
        // optionally resize the page to fit the space taken by its shapes
        this._page.ResizeToFitContents();
        // 

Cambiar los colores de la línea de conectores

Si no está familiarizado con las fórmulas para el trabajo de colores, esto también podría ser muy frustrante. de forma predeterminada puede dar un int Como una cadena para obtener colores predefinidos, pero esto no es muy útil porque no hay una manera fácil de averiguar cuáles son cada uno de esos colores. (Hay una colección de colores, pero tiene que inspeccionar cada uno de sus valores RGB y descubrir el color de ellos).

En su lugar, puede usar sus propios valores RGB para la fórmula.

    private void SetConnectorLineColor(Shape connector, string colorFormula)
    {
        var cell = connector.get_Cells("LineColor");
        cell.Formula = colorFormula;
    }

    internal static class AnswerColorFormula
    {
        public static string Green = "RGB(0,200,0)";
        public static string Orange = "RGB(255,100,0)";
        public static string Yellow = "RGB(255,200,0)";
        public static string Red = "RGB(255,5,5)";
    }

Otros consejos

Llame al diseño método en el página objeto.Si hay formas seleccionadas en esta página, este método solo funcionará en la selección actual.Es posible que desee llamar a deselectall en el ActiveWindow Primero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top