private static void load_commit_test(PrjManager manager) { Prj_Sheet sheet = manager.SheetCRUD.Load_Sheet(2316); Prj_Sheet backup = ObjectCopier.Clone(sheet); Cld_FCBlock block = sheet.New_Cld_FCBlock(); block.AlgName = "added"; block.Sequence = 12; Cld_FCInput inpt = block.New_FCInput(); inpt.Description = "added desc"; inpt.PinName = "for test"; Cld_FCOutput output = block.New_FCOutput(); output.PinName = "for test output"; SheetDiffer diff = manager.SheetCRUD.CompareSheet(backup, sheet); manager.SheetCRUD.Commit_Sheet(diff); }
public LogicPin(Cld_FCInput pin, LogicSymbol symbol) { this.Type = LogicObjectType.Pin; this.pinType = LogicPinType.Input; this.pinName = pin.PinName; this.pinValue = pin.InitialValue; // 必须先给pinValue赋值 this.PointName = pin.PointName; this.Visible = pin.Visible; this.point1 = this.point2 = new PointF(pin.Cld_FCBlock.X + pin.X, pin.Cld_FCBlock.Y + pin.Y); this.GenerateSubmitGraphicsByPin(symbol); }
/// <summary> /// 生成一条连接两个Pin的线 /// </summary> /// <param name="startPin">起始Pin</param> /// <param name="endPin">结束Pin</param> /// <returns>表示一条线的字符串</returns> public string GenerateSignalData(Cld_FCOutput startPin, Cld_FCInput endPin) { Cld_FCBlock startBlock = startPin.Cld_FCBlock; Cld_FCBlock endBlock = endPin.Cld_FCBlock; IList startInputList = startBlock.Cld_FCInput_List; IList startOutputList = startBlock.Cld_FCOutput_List; IList endInputList = endBlock.Cld_FCInput_List; IList endOutputList = endBlock.Cld_FCOutput_List; PointF startPoint = new PointF(startBlock.X + startPin.X, startBlock.Y + startPin.Y); PointF endPoint = new PointF(endBlock.X + endPin.X, endBlock.Y + endPin.Y); StringBuilder signalDatails = new StringBuilder(); const float spacing = 8f; // 相邻两个输入引脚的延伸长度差值 const float pinLength = 16f; // 引脚的最小延伸长度 int startPinIndex; int endPinIndex; // 添加开始点 signalDatails.Append(startPoint.X + "_" + startPoint.Y + "{" + startBlock.AlgName + "." + startPin.PinName + "},"); if (startPoint.Y != endPoint.Y) { // 起止点的垂直坐标不在同一直线上,需要增加折点 if (startPoint.Y < endPoint.Y) { startPinIndex = startPin.PinIndex; endPinIndex = endPin.PinIndex; } else { startPinIndex = startOutputList.Count - startPin.PinIndex - 1; endPinIndex = endInputList.Count - endPin.PinIndex - 1; } PointF point = new PointF(); point.Y = startPoint.Y; float firstX = startPoint.X + pinLength + spacing * startPinIndex; // 第一个折点的 X 坐标 float lastX = endPoint.X - pinLength - spacing * endPinIndex; // 最后一个折点的 X 坐标 if (firstX < lastX) { point.X = lastX; } else { if (startPoint.X < endPoint.X) { point.X = (endPoint.X + startPoint.X) / 2; } else { point.X = firstX; signalDatails.Append(point.X + "_" + point.Y + ","); point.Y = Math.Abs(endPoint.Y + startPoint.Y) / 2; signalDatails.Append(point.X + "_" + point.Y + ","); point.X = lastX; } } signalDatails.Append(point.X + "_" + point.Y + "," + point.X + "_" + endPoint.Y + ","); } else if (startPoint.X > endPoint.X) { // 起止点垂直坐标相同,但起点比终点水平坐标值大 float upHeight = (float)(endPoint.Y - endBlock.Y); float downHeight = (float)(endBlock.Y + endBlock.Symbol.height - endPoint.Y); float FirstX; float lastX; float signalY; if (upHeight < downHeight) { // 从Block上面折回 FirstX = startPoint.X + pinLength + spacing * startPin.PinIndex; signalY = (float)(endBlock.Y - pinLength - spacing * endPin.PinIndex); lastX = endPoint.X - pinLength - spacing * endPin.PinIndex; } else { FirstX = startPoint.X + pinLength + spacing * (startOutputList.Count - startPin.PinIndex - 1); signalY = (float)(endBlock.Y + endBlock.Symbol.height + pinLength + spacing * (endInputList.Count - endPin.PinIndex - 1)); lastX = endPoint.X - pinLength - spacing * (endInputList.Count - endPin.PinIndex - 1); } signalDatails.Append(FirstX + "_" + startPoint.Y + "," + FirstX + "_" + signalY + "," + lastX + "_" + signalY + "," + lastX + "_" + endPoint.Y + ","); } // 添加结束点 signalDatails.Append(endPoint.X + "_" + endPoint.Y + "{" + endBlock.AlgName + "." + endPin.PinName + "};"); return(signalDatails.ToString()); }
static void Main() { SessionManager sessionmanager = new SessionManager("hibernate_config.xml"); ISession session = sessionmanager.GetSession(); // 相关操作的接口 PrjManager manager = new PrjManager(session); //add your code bellow TDK.Core.Logic.URdoLib.URdoManager man = new TDK.Core.Logic.URdoLib.URdoManager(); StateManager sm = new StateManager(); for (int i = 169; i <= 179; i++) { Prj_Sheet sheet = manager.SheetCRUD.Load_Sheet(i, sm); Cld_FCBlock weiyuanke = sheet.New_Cld_FCBlock(); weiyuanke.FunctionName = "fortest"; manager.Save(weiyuanke); Cld_FCInput input = weiyuanke.New_FCInput(); Console.WriteLine(sheet.State); sheet.SheetName = "weiyuantafkjaljfl"; Console.WriteLine(sheet.State); Cld_FCBlock b = sheet.Cld_FCBlock_List[0] as Cld_FCBlock; Console.WriteLine(b.State); sheet.Cld_FCBlock_List.RemoveAt(0); Console.WriteLine(b.State); sheet.Cld_FCBlock_List.Add(b); Console.WriteLine(b.State); Cld_FCBlock temp = sheet.New_Cld_FCBlock(); Console.WriteLine(temp.State); sheet.Cld_FCBlock_List.Add(temp); Console.WriteLine(temp.State); } //GraphicsDocument.GenerateProjects(bll); // 产生xml文件的代码 //Prj_Sheet sheet = bll.manager.SheetCRUD.Load_Sheet(170); //Generate_Sheet_Xml(sheet, bll); //释放相关资源 //bll.Close(); Console.WriteLine("\nPress Enter to Exit !"); Console.ReadKey(); //以下为GUI运行 //Application.EnableVisualStyles(); //Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new Form1()); }