/// <summary> /// Method to get the rotation matrices of a solid, based on its Centroid /// </summary> /// <param name="acSol">The solid to be rotated</param> private void GetRotationMatrices(Solid3d acSol) { var center = acSol.GetBoxCenter(); using (var brep = new Brep(acSol)) { var centroid = brep.GetMassProperties().Centroid.RoundToTolerance(); if (centroid != center) { center = brep.GetMassProperties().Centroid; } } //Find the 90 degree rotation matrices X90 = Matrix3d.Rotation(CalcUnit.ConvertToRadians(90), Vector3d.XAxis, center); Y90 = Matrix3d.Rotation(CalcUnit.ConvertToRadians(90), Vector3d.YAxis, center); Z90 = Matrix3d.Rotation(CalcUnit.ConvertToRadians(90), Vector3d.ZAxis, center); //Find the 180 degree rotation matrices X180 = Matrix3d.Rotation(CalcUnit.ConvertToRadians(180), Vector3d.XAxis, center); Y180 = Matrix3d.Rotation(CalcUnit.ConvertToRadians(180), Vector3d.YAxis, center); Z180 = Matrix3d.Rotation(CalcUnit.ConvertToRadians(180), Vector3d.ZAxis, center); //Find the 180 degree rotation matrices X270 = Matrix3d.Rotation(CalcUnit.ConvertToRadians(270), Vector3d.XAxis, center); Y270 = Matrix3d.Rotation(CalcUnit.ConvertToRadians(270), Vector3d.YAxis, center); Z270 = Matrix3d.Rotation(CalcUnit.ConvertToRadians(270), Vector3d.ZAxis, center); }
protected void OnClickedOp(Button obj) { CalcUnit calcUnit = new CalcUnit(); calcUnit.unitType = CalcUnitType.Oper; calcUnit.unitData = new OperData(); calcUnit.unitData.btn = obj; obj.gameObject.GetComponent <Outline>().enabled = true; switch (obj.name) { case "op_add": OperData.Data(calcUnit.unitData).op = CalcOper.Add; break; case "op_sub": OperData.Data(calcUnit.unitData).op = CalcOper.Sub; break; case "op_mul": OperData.Data(calcUnit.unitData).op = CalcOper.Mul; break; case "op_div": OperData.Data(calcUnit.unitData).op = CalcOper.Div; break; } GlobalDataManager.GetInstance().cardModel.AddCalcUnit(calcUnit); }
public void Cmd_GenViews() { if (!LicensingAgent.Check()) { return; } var acCurDoc = Application.DocumentManager.MdiActiveDocument; var acCurDb = acCurDoc.Database; var acCurEd = acCurDoc.Editor; var modelView = acCurEd.GetCurrentView().Clone() as ViewTableRecord; var uSelOpts = new PromptSelectionOptions { MessageForAdding = "\nSelect objects to use in view creation: " }; var userSelection = acCurEd.GetSelection(uSelOpts); if (userSelection.Status != PromptStatus.OK) { return; } using (var acTrans = acCurDb.TransactionManager.StartTransaction()) { var boundBox = acTrans.GetBoundingBox(userSelection.Value.GetObjectIds(), acCurDb); //Get all Layouts in the Drawing var layoutList = new List <Layout>(); var dbDict = (DBDictionary)acTrans.GetObject(acCurDb.LayoutDictionaryId, OpenMode.ForRead); foreach (var curEntry in dbDict) { var layout = (Layout)acTrans.GetObject(curEntry.Value, OpenMode.ForRead); if (layout != null) { layoutList.Add(layout); } } var pKeyOpts = new PromptKeywordOptions(string.Empty) { Message = "\nWhich layout would you like to create views in?", AllowArbitraryInput = true }; var iterator = 'A'; var keyDict = new Dictionary <string, string>(); foreach (var layout in layoutList) { if (layout.LayoutName != "Model") { keyDict.Add(layout.LayoutName, iterator.ToString()); pKeyOpts.Keywords.Add(iterator.ToString(), iterator.ToString(), iterator + ": " + layout.LayoutName.ToLower()); iterator++; } } pKeyOpts.AllowNone = false; var pKeyRes = acCurEd.GetKeywords(pKeyOpts); if (pKeyRes.Status != PromptStatus.OK) { return; } var returnIterator = pKeyRes.StringResult; ObjectId id; var layoutName = string.Empty; foreach (var entry in keyDict) { if (entry.Value == returnIterator) { layoutName = entry.Key; break; } } if (dbDict.Contains(layoutName)) { id = dbDict.GetAt(layoutName); } else { acCurEd.WriteMessage("\nLayout not found. Cannot continue."); acTrans.Abort(); return; } var chosenLayout = acTrans.GetObject(id, OpenMode.ForRead) as Layout; if (chosenLayout == null) { return; } // Reference the Layout Manager var acLayoutMgr = LayoutManager.Current; // Set the layout current if it is not already if (chosenLayout.TabSelected == false) { acLayoutMgr.CurrentLayout = chosenLayout.LayoutName; } acCurEd.SwitchToPaperSpace(); var layOutSize = GetLayoutSize(chosenLayout); var importSize = new LayoutSize(0, 0); var iPorts = ImportViewports(acCurEd, ref importSize.Height, ref importSize.Width); var vStyles = acTrans.GetObject(acCurDb.VisualStyleDictionaryId, OpenMode.ForRead) as DBDictionary; if (iPorts.Count > 0) { foreach (var iPort in iPorts) { var ht = CalcUnit.GetProportion(iPort.VHeight, importSize.Height, layOutSize.Height); var wd = CalcUnit.GetProportion(iPort.VWidth, importSize.Width, layOutSize.Width); if (ht > layOutSize.Height || wd > layOutSize.Width) { continue; } var vPort = new Viewport { Height = ht, Width = wd }; var importPt = iPort.InsertPoint; var xProp = CalcUnit.GetProportion(importPt.X, importSize.Width, layOutSize.Width); var yProp = CalcUnit.GetProportion(importPt.Y, importSize.Height, layOutSize.Height); vPort.CenterPoint = new Point3d(xProp, yProp, 0); acCurDb.AppendEntity(vPort, acTrans); vPort.ViewDirection = iPort.ViewDirection; ZoomViewport(acCurDb, vPort, boundBox); //TODO find closest scale to zoom //TODO allow user to set these if (vStyles != null) { vPort.SetShadePlot(ShadePlotType.Hidden, vStyles.GetAt("Hidden")); } // Enable the viewport vPort.Visible = true; vPort.On = true; vPort.UpdateDisplay(); } } boundBox.Dispose(); LayoutManager.Current.CurrentLayout = "Model"; using (var view = acCurEd.GetCurrentView()) { view.CopyFrom(modelView); acCurEd.SetCurrentView(view); } try { Thread.Sleep(100); LayoutManager.Current.CurrentLayout = chosenLayout.LayoutName; } catch (Exception e) { Console.WriteLine(e); MailAgent.Report(e.Message); } if (modelView != null) { modelView.Dispose(); } acTrans.Commit(); } }
public void Cmd_PartsGen() { var acCurDoc = Application.DocumentManager.MdiActiveDocument; if (acCurDoc == null) { return; } var acCurDb = acCurDoc.Database; var acCurEd = acCurDoc.Editor; var modelView = acCurEd.GetCurrentView().Clone() as ViewTableRecord; var objIds = acCurEd.GetFilteredSelection(Enums.DxfNameEnum._3Dsolid, false); if (objIds.Length <= 0) { return; } var splitNum = 8; var colCount = splitNum / 2; var rowCount = 2; var partList = new List <Solid3d>(); using (var acTrans = acCurDb.TransactionManager.StartTransaction()) { foreach (var ob in objIds) { var acSol = acTrans.GetObject(ob, OpenMode.ForRead) as Solid3d; if (acSol == null) { continue; } partList.Add(acSol); } acTrans.Commit(); } var sortedParts = partList.OrderBy(e => e.GetPartName()).ToList(); var objChunks = sortedParts.ChunkBy(splitNum); var layName = "Model"; var vPorts = new List <Viewport>(); using (var pWorker = new ProgressAgent("Creating Part Views: ", sortedParts.Count)) using (var acTrans = acCurDb.TransactionManager.StartTransaction()) { for (var i = 0; i < objChunks.Count; i++) { var curLayout = "PrtGen"; var id = LayoutManager.Current.CreateAndMakeLayoutCurrentByAddition(curLayout); // Open the created layout var lay = (Layout)acTrans.GetObject(id, OpenMode.ForWrite); // Open the Block table record Paper space for write var acBlkTableRec = acTrans.GetObject(lay.BlockTableRecordId, OpenMode.ForWrite) as BlockTableRecord; // Make some settings on the layout and get its extents lay.SetPlotSettings( //"ISO_full_bleed_2A0_(1189.00_x_1682.00_MM)", // Try this big boy! // "ANSI_B_(11.00_x_17.00_Inches)", "ARCH_full_bleed_D_(36.00_x_24.00_Inches)", "monochrome.ctb", "AutoCAD PDF (High Quality Print).pc3" ); if (acBlkTableRec != null) { foreach (var vpId in acBlkTableRec) { if (vpId == acCurDb.PaperSpaceVportId) { continue; } var vp = acTrans.GetObject(vpId, OpenMode.ForRead) as Viewport; if (vp != null) { vPorts.Add(vp); } } var layOutSize = GetLayoutSize(lay); var paperLength = layOutSize.Width; var paperHeight = layOutSize.Height; var dSpacing = CalcUnit.GetProportion(1.5, 36, paperLength); var dBorder = CalcUnit.GetProportion(1.5, 36, paperLength); var availWidth = paperLength - dBorder * 2.5 - dSpacing * (colCount + 1); var availHeight = paperHeight - dBorder * 2.25 - dSpacing * (rowCount + 1); var dWidth = availWidth / colCount; var dWHalf = dWidth / 2; var dHeight = availHeight / rowCount; var dhHalf = dHeight / 2; var col1 = dBorder + dWHalf + dSpacing; var col2 = dBorder + dWHalf + dSpacing * 2 + dWidth; var col3 = dBorder + dWHalf + dSpacing * 3 + dWidth * 2; var col4 = dBorder + dWHalf + dSpacing * 4 + dWidth * 3; //var col5 = dBorder + dWHalf + dSpacing * 5 + dWidth * 4; var row1 = paperHeight - dhHalf - dBorder - dSpacing; var row2 = paperHeight - dhHalf - dBorder - dSpacing * 2 - dHeight; //row3 = paperHeight - dhHalf - dBorder - dSpacing * 3 - dHeight * 2; //row4 = paperHeight - dhHalf - dBorder - dSpacing * 4 - dHeight * 3; var positions = new[] { new Point2d(col1, row1), new Point2d(col2, row1), new Point2d(col3, row1), new Point2d(col4, row1), new Point2d(col1, row2), new Point2d(col2, row2), new Point2d(col3, row2), new Point2d(col4, row2) }; for (var j = 0; j < objChunks[i].Count; j++) { //Progress progress bar or exit if ESC has been pressed if (!pWorker.Progress()) { acTrans.Abort(); return; } var acSol = acTrans.GetObject(objChunks[i][j].ObjectId, OpenMode.ForWrite) as Solid3d; if (acSol == null) { continue; } var acExt = acSol.GeometricExtents; var acVport = new Viewport { CenterPoint = positions[j].Convert3D(), Width = dWidth, Height = dHeight, ViewDirection = ViewDirection.TopView }; acCurDb.AppendEntity(acVport, acTrans); acVport.FitContentToViewport(acExt); acVport.FitViewportToContent(acExt); acVport.CenterPoint = positions[j].Convert3D(); acVport.UpdateDisplay(); acVport.Layer = "Defpoints"; // Enable the viewport acVport.Visible = true; acVport.On = true; //acVport.CreateBaseViewFromVp(acSol.ObjectId, acCurEd, acCurDb, lay, acVport.CenterPoint); System.Threading.Thread.Sleep(300); vPorts.Add(acVport); //Insert Part Tags //Insert block to name the viewport var insertMin = acVport.GeometricExtents.MinPoint; var insertMax = acVport.GeometricExtents.MaxPoint; var mid = insertMin.GetMidPoint(insertMax); var midInsert = new Point3d(mid.X, positions[j].Convert3D().Y - 1, 0); // Open the Block table for read var acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForWrite) as BlockTable; if (!acBlkTbl.Has(SettingsInternal.TagName)) { MakeTag_Name(acBlkTbl, acTrans); } var blockName = SettingsInternal.TagName; var acBlkRef = acBlkTableRec.InsertBlock(blockName, midInsert, acCurDb); if (acBlkRef != null) { UpdatePartViewSubs(acBlkRef, acSol, acCurDoc); } } } layName = lay.LayoutName; } //Save the new objects to the database LayoutManager.Current.CurrentLayout = "MODEL"; using (var view = acCurEd.GetCurrentView()) { view.CopyFrom(modelView); acCurEd.SetCurrentView(view); } try { Thread.Sleep(300); LayoutManager.Current.CurrentLayout = layName; } catch (Exception e) { Console.WriteLine(e); } if (modelView != null) { modelView.Dispose(); } // Zoom so that we can see our new layout, again with a little padding acCurEd.Command("_.ZOOM", "_E"); acCurEd.Command("_.ZOOM", ".7X"); acCurEd.Regen(); // Commit the transaction acTrans.Commit(); } //using (var acTrans = acCurDb.TransactionManager.StartTransaction()) //{ // foreach (var acVp in vPorts) // { // if (acVp.ObjectId == acCurDb.PaperSpaceVportId) continue; // var delVp = acTrans.GetObject(acVp.ObjectId, OpenMode.ForWrite) as Viewport; // delVp.Erase(); // delVp.Dispose(); // } // acTrans.Commit(); //} }
public void Cmd_GenDims() { var acCurDoc = Application.DocumentManager.MdiActiveDocument; var acCurDb = acCurDoc.Database; var acCurEd = acCurDoc.Editor; var objIds = acCurEd.GetAllSelection(false); if (objIds.Length <= 0) { return; } using (var pWorker = new ProgressAgent("Generating Dimension: ", objIds.Length)) { using (var acTrans = acCurDb.TransactionManager.StartTransaction()) { foreach (var obj in objIds) { if (!pWorker.Progress()) { acTrans.Abort(); return; } var acEnt = acTrans.GetObject(obj, OpenMode.ForRead) as Entity; if (acEnt == null) { continue; } var extents = acEnt.GeometricExtents; var minPt = extents.MinPoint; var maxPt = extents.MaxPoint; // Create the rotated dimension using (var acXDim = new RotatedDimension()) { acXDim.XLine1Point = new Point3d(minPt.X, minPt.Y, 0); acXDim.XLine2Point = new Point3d(maxPt.X, minPt.Y, 0); acXDim.DimLinePoint = new Point3d(minPt.X, minPt.Y - SettingsUser.AnnoSpacing, 0); acXDim.DimensionStyle = acCurDb.Dimstyle; // Add the new object to Model space and the transaction acCurDb.AppendEntity(acXDim); } // Create the rotated dimension using (var acYDim = new RotatedDimension()) { acYDim.XLine1Point = new Point3d(minPt.X, minPt.Y, 0); acYDim.XLine2Point = new Point3d(minPt.X, maxPt.Y, 0); acYDim.Rotation = CalcUnit.ConvertToRadians(90); acYDim.DimLinePoint = new Point3d(minPt.X - SettingsUser.AnnoSpacing, minPt.Y, 0); acYDim.DimensionStyle = acCurDb.Dimstyle; // Add the new object to Model space and the transaction acCurDb.AppendEntity(acYDim); } } acTrans.Commit(); } } }
protected void OnClickedNum(Button obj) { obj.gameObject.GetComponent <Outline>().enabled = true; CalcUnit calcUnit = new CalcUnit(); calcUnit.unitType = CalcUnitType.Card; calcUnit.unitData = new UnitData(); calcUnit.unitData.btn = obj; switch (obj.name) { //poker case "poker_topleft": UnitData.Data(calcUnit.unitData).pointUp = topLeftNum; UnitData.Data(calcUnit.unitData).resultBtn = btnResultTopLeft; GlobalDataManager.GetInstance().cardModel.AddCalcUnit(calcUnit); break; case "poker_topright": UnitData.Data(calcUnit.unitData).pointUp = topRightNum; UnitData.Data(calcUnit.unitData).resultBtn = btnResultTopRight; GlobalDataManager.GetInstance().cardModel.AddCalcUnit(calcUnit); break; case "poker_bottomleft": UnitData.Data(calcUnit.unitData).pointUp = bottomLeftNum; UnitData.Data(calcUnit.unitData).resultBtn = btnResultBottomLeft; GlobalDataManager.GetInstance().cardModel.AddCalcUnit(calcUnit); break; case "poker_bottomright": UnitData.Data(calcUnit.unitData).pointUp = bottomRightNum; UnitData.Data(calcUnit.unitData).resultBtn = btnResultBottomRight; GlobalDataManager.GetInstance().cardModel.AddCalcUnit(calcUnit); break; //result case "result_topleft": if (int.TryParse(obj.GetComponentInChildren <Text>().text, out UnitData.Data(calcUnit.unitData).pointUp)) { UnitData.Data(calcUnit.unitData).pointDown = 1; } else { string[] s = obj.GetComponentInChildren <Text>().text.Split('/'); UnitData.Data(calcUnit.unitData).pointUp = int.Parse(s[0]); UnitData.Data(calcUnit.unitData).pointDown = int.Parse(s[1]); } UnitData.Data(calcUnit.unitData).resultBtn = btnResultTopLeft; GlobalDataManager.GetInstance().cardModel.AddCalcUnit(calcUnit); break; case "result_topright": if (int.TryParse(obj.GetComponentInChildren <Text>().text, out UnitData.Data(calcUnit.unitData).pointUp)) { UnitData.Data(calcUnit.unitData).pointDown = 1; } else { string[] s = obj.GetComponentInChildren <Text>().text.Split('/'); UnitData.Data(calcUnit.unitData).pointUp = int.Parse(s[0]); UnitData.Data(calcUnit.unitData).pointDown = int.Parse(s[1]); } UnitData.Data(calcUnit.unitData).resultBtn = btnResultTopRight; GlobalDataManager.GetInstance().cardModel.AddCalcUnit(calcUnit); break; case "result_bottomleft": if (int.TryParse(obj.GetComponentInChildren <Text>().text, out UnitData.Data(calcUnit.unitData).pointUp)) { UnitData.Data(calcUnit.unitData).pointDown = 1; } else { string[] s = obj.GetComponentInChildren <Text>().text.Split('/'); UnitData.Data(calcUnit.unitData).pointUp = int.Parse(s[0]); UnitData.Data(calcUnit.unitData).pointDown = int.Parse(s[1]); } UnitData.Data(calcUnit.unitData).resultBtn = btnResultBottomLeft; GlobalDataManager.GetInstance().cardModel.AddCalcUnit(calcUnit); break; case "result_bottomright": if (int.TryParse(obj.GetComponentInChildren <Text>().text, out UnitData.Data(calcUnit.unitData).pointUp)) { UnitData.Data(calcUnit.unitData).pointDown = 1; } else { string[] s = obj.GetComponentInChildren <Text>().text.Split('/'); UnitData.Data(calcUnit.unitData).pointUp = int.Parse(s[0]); UnitData.Data(calcUnit.unitData).pointDown = int.Parse(s[1]); } UnitData.Data(calcUnit.unitData).resultBtn = btnResultBottomRight; GlobalDataManager.GetInstance().cardModel.AddCalcUnit(calcUnit); break; } }
public IActionResult VData() { ViewData["CalcUnit"] = new CalcUnit(); return(View()); }
public IActionResult Model() { var viewmodel = new CalcUnit(); return(View(viewmodel)); }