您好,
測試程式如下,
public class OrgInfo
{
public string OrgName { get; set; }
public long OrgPartyID { get; set; }
public long? ParentOrgPartyID { get; set; }
}
static void Main(string[] args)
{
var outputFilder = Path.Combine(Environment.CurrentDirectory, "outputvsdx");
var orgDiagramList = new List<OrgInfo>();
orgDiagramList.Add(new OrgInfo() { OrgName = "GSS", OrgPartyID = 1, ParentOrgPartyID = null });
orgDiagramList.Add(new OrgInfo() { OrgName = "HRSPD1", OrgPartyID = 2, ParentOrgPartyID = 1 });
orgDiagramList.Add(new OrgInfo() { OrgName = "HRSPD2", OrgPartyID = 3, ParentOrgPartyID = 1 });
orgDiagramList.Add(new OrgInfo() { OrgName = "HRSPD1-1", OrgPartyID = 4, ParentOrgPartyID = 2 });
orgDiagramList.Add(new OrgInfo() { OrgName = "HRSPD1-2", OrgPartyID = 5, ParentOrgPartyID = 2 });
orgDiagramList.Add(new OrgInfo() { OrgName = "HRSPD1-3", OrgPartyID = 6, ParentOrgPartyID = 2 });
orgDiagramList.Add(new OrgInfo() { OrgName = "HRSPD1-4", OrgPartyID = 7, ParentOrgPartyID = 2 });
orgDiagramList.Add(new OrgInfo() { OrgName = "HRSPD2-1", OrgPartyID = 8, ParentOrgPartyID = 3 });
Diagram diagram = new Diagram();
Page page = diagram.Pages[0];
page.Name = "組織圖";
// initialize auto space options
AutoSpaceOptions atopt = new AutoSpaceOptions();
// set horizontal and vertical distances
atopt.DistanceInHorizontal = 2;
atopt.DistanceInVertical = 2;
// set auto space
page.AutoSpaceShapes(page.Shapes, atopt);
// Page orientation
page.PageSheet.PrintProps.PrintPageOrientation.Value = PrintPageOrientationValue.Landscape;
string connectorMaster = "Dynamic connector";
string rectangle = "Rectangle";
int pageNumber = 0;
var tempFile = Path.Combine(Environment.CurrentDirectory, "outputvsdx", "BasicShapes.vss");
var m1 = diagram.AddMaster(tempFile, rectangle);
var m2 = diagram.AddMaster(tempFile, connectorMaster);
// 產生所有單位圖形
orgDiagramList.ForEach((item) =>
{
Shape orgRectangle = new Shape();
long shapeID = diagram.AddShape(orgRectangle, rectangle, pageNumber);
Shape shape = page.Shapes.GetShape(shapeID);
shape.Text.Value.Add(new Txt(item.OrgName));
shape.Data1 = JsonConvert.SerializeObject(item);
});
var shapeCollection = diagram.Pages[pageNumber].Shapes;
// 產生連結線圖形,進行階層連結
foreach (var item in orgDiagramList)
{
var linkList = orgDiagramList.Where(m => m.ParentOrgPartyID == item.OrgPartyID);
var from = GetShapeByOrgInfoData(shapeCollection, item);
foreach (var link in linkList)
{
Shape connector = new Shape();
long connectorID = diagram.AddShape(connector, connectorMaster, pageNumber);
var to = GetShapeByOrgInfoData(shapeCollection, link);
page.ConnectShapesViaConnector(from.ID, ConnectionPointPlace.Bottom, to.ID, ConnectionPointPlace.Top, connectorID);
}
}
LayoutOptions flowChartOptions = new LayoutOptions();
flowChartOptions.LayoutStyle = LayoutStyle.FlowChart;
flowChartOptions.SpaceShapes = 1f;
flowChartOptions.EnlargePage = true;
flowChartOptions.Direction = LayoutDirection.TopToBottom;
diagram.Layout(flowChartOptions);
var format = SaveFileFormat.VDX;
DiagramSaveOptions options = new DiagramSaveOptions(format);
options.AutoFitPageToDrawingContent = true;
diagram.Refresh();
diagram.Save("ogfile.vdx", options);
}
產生的圖會有線跟圖折到的狀況,麻煩您了,謝謝。