public static void Run(Tekla.Technology.Akit.IScript akit) { /* * The main task for this script is to find reinforcement groups with nasty spacing values like 200.15 or 150.48. Tekla rounds up or down some small accurate numbers, * the key is to found such interval to make this script work. */ var reportName = "DecimalSpacingGroups"; var reportFolder = string.Empty; Tekla.Structures.TeklaStructuresSettings.GetAdvancedOption("XS_REPORT_OUTPUT_DIRECTORY", ref reportFolder); var path = new Model().GetInfo().ModelPath + reportFolder.Replace(".\\", "\\") + "\\" + reportName + "_" + Environment.UserName + ".xsr"; ModelObjectEnumerator moe = new Tekla.Structures.Model.UI.ModelObjectSelector().GetSelectedObjects(); System.Collections.ArrayList decimalgroups = new System.Collections.ArrayList(); var pb = new Tekla.Structures.Model.Operations.Operation.ProgressBar(); int i = 0; foreach (BaseRebarGroup m in moe) { pb.Display(100, "Processing data", "Please wait", "Cancel", "0%"); if (m != null) { foreach (double spacing in m.Spacings) { if (spacing % 1 > 0.009) // this should be changed like: >0.009999999999999999 & <0.999999999999999999 but it needs some tests { decimalgroups.Add(m); } } } var percentage = (i++) * 100 / moe.GetSize(); pb.SetProgress(percentage.ToString() + "%", percentage); } pb.Close(); using (System.IO.StreamWriter sw = new StreamWriter(path)) { foreach (ModelObject m in decimalgroups) { sw.WriteLine(string.Format("guid: {0}", m.Identifier.GUID.ToString().ToUpper())); } } Tekla.Structures.Model.Operations.Operation.DisplayPrompt("Operation finished"); Tekla.Structures.Model.Operations.Operation.DisplayReport(path); }
public Tekla() { } // конструктор класса Tekla - пока пустой 6.4.17 public List<Elm> Read(string dir = "", string name = "") { Log.set("TS_OpenAPI.Read"); List<Elm> elements = new List<Elm>(); // 6.4.17 //TSM.Model model = new TSM.Model(); ////////////List<Part> parts = new List<Part>(); ModInfo = model.GetInfo(); if (dir != "" && ModInfo.ModelPath != dir || name != "" && ModInfo.ModelName != String.Concat(name, ".db1")) Msg.F("Tekla.Read: Another model loaded, not", name); ModInfo.ModelName = ModInfo.ModelName.Replace(".db1", ""); TSM.ModelObjectSelector selector = model.GetModelObjectSelector(); System.Type[] Types = new System.Type[1]; Types.SetValue(typeof(Part), 0); TSM.ModelObjectEnumerator objectList = selector.GetAllObjectsWithType(Types); int totalCnt = objectList.GetSize(); var progress = new TSM.Operations.Operation.ProgressBar(); bool displayResult = progress.Display(100, "TSmatch", "Reading model. Pass component records:", "Cancel", " "); int ii = 0; while (objectList.MoveNext()) { TSM.Part myPart = objectList.Current as TSM.Part; if (myPart != null) { ii++; double lng = 0.0; double weight = 0.0; double vol = 0.0; string guid = ""; string mat_type = ""; double price = 0.0; myPart.GetReportProperty("GUID", ref guid); myPart.GetReportProperty("LENGTH", ref lng); myPart.GetReportProperty("WEIGHT", ref weight); myPart.GetReportProperty("VOLUME", ref vol); myPart.GetReportProperty("MATERIAL_TYPE", ref mat_type); lng = Math.Round(lng, 0); //string cut = ""; //myPart.GetReportProperty("CAST_UNIT_TYPE", ref cut); //ModAtr.Add(new AttSet(myPart.Material.MaterialString, // profile, lng, weight, vol)); //21/6/2016 в отладке Elm.Elements.Add(new Elm()); elements.Add(new Elm(guid, myPart.Material.MaterialString, mat_type, myPart.Profile.ProfileString, lng, weight, vol, price)); // !! if (ii % 500 == 0) // progress update every 500th items { if (progress.Canceled()) { // new Log("\n\n======= TSmatch pass model CANCEL!! ======= ii=" + ii); // TSD.Show() break; } progress.SetProgress(ii.ToString(), 100 * ii / totalCnt); } } } //while progress.Close(); Scale(elements); elements.Sort(); Log.exit(); return elements; } // Read
public override bool Run(List <InputDefinition> Input) { GetValuesFromDialog(); int succesfulModified = 0; var selectedDrawings = new Tekla.Structures.Drawing.DrawingHandler().GetDrawingSelector().GetSelected(); var drawingsCount = selectedDrawings.GetSize(); if (drawingsCount == 0) { MessageBox.Show("No drawings selected", "No drawings", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } DialogResult result = MessageBox.Show( "Are you sure do you want to change attributes in " + selectedDrawings.GetSize() + " drawings?", "Are you sure ?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2 ); if (result == DialogResult.Yes) { var progress = new Tekla.Structures.Model.Operations.Operation.ProgressBar(); var stopwatch = new System.Diagnostics.Stopwatch(); try { progress.Display(10, "Task is in progress", "Task is in progress", "Cancel", " "); stopwatch.Start(); int checkedDrawings = 0; double medTimeForOne = 0; while (selectedDrawings.MoveNext()) { if (progress.Canceled()) { break; } var currentDrawing = selectedDrawings.Current as Tekla.Structures.Drawing.Drawing; bool modified = false; switch (_Title) { case (0): if (currentDrawing.Name != currentDrawing.Name.Replace(_Find, _Replace)) { currentDrawing.Name = currentDrawing.Name.Replace(_Find, _Replace); modified = true; } break; case (1): if (currentDrawing.Title1 != currentDrawing.Title1.Replace(_Find, _Replace)) { currentDrawing.Title1 = currentDrawing.Title1.Replace(_Find, _Replace); modified = true; } break; case (2): if (currentDrawing.Title2 != currentDrawing.Title2.Replace(_Find, _Replace)) { currentDrawing.Title2 = currentDrawing.Title2.Replace(_Find, _Replace); modified = true; } break; case (3): if (currentDrawing.Title3 != currentDrawing.Title3.Replace(_Find, _Replace)) { currentDrawing.Title3 = currentDrawing.Title3.Replace(_Find, _Replace); modified = true; } break; default: try { var udaHandler = new UDAHandler(); var udaName = udaHandler.GetUDAByIndex(_Title - 4); if (udaName != "") { //I dont want to change other types than string because it might be wrong string udaStringValue = ""; if (currentDrawing.GetUserProperty(udaName, ref udaStringValue)) { if (udaStringValue != udaStringValue.Replace(_Find, _Replace)) { modified = currentDrawing.SetUserProperty(udaName, udaStringValue.Replace(_Find, _Replace)); } } } } catch (Exception) { } break; } if (modified) { currentDrawing.Modify(); succesfulModified++; } checkedDrawings++; medTimeForOne = stopwatch.Elapsed.TotalMinutes / checkedDrawings; progress.SetProgress(checkedDrawings + "/" + drawingsCount + "\t" + Math.Round(medTimeForOne * (drawingsCount - checkedDrawings)) + " minutes left", 100 * checkedDrawings / drawingsCount); } } catch (Exception e) { MessageBox.Show(e.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { progress.Close(); stopwatch.Stop(); MessageBox.Show("Task has been completed.\nModified drawings: " + succesfulModified.ToString() + ".\nTime elapsed: " + Math.Round(stopwatch.Elapsed.TotalSeconds).ToString() + " seconds"); } } return(true); }