/*---------------------------------------------------------------------------------**//** * Create Grouped hole element. * @bsimethod Bentley Systems * /*--------------+---------------+---------------+---------------+---------------+------*/ public static Element CreateElement(DPoint3d start, DPoint3d opposite) { DgnModel model = Bentley.MstnPlatformNET.Session.Instance.GetActiveDgnModel(); //Create Solid shape element from actual start and opposite points. ShapeElement solidShape = CreateShapeElement(model, start, opposite); //Get holes for grouped hole element. ElementAgenda holes; PopulateHolesAgenda(out holes, start, opposite, model); //Create actual grouped hole element with given solid and holes. GroupedHoleElement groupedHoleElement = new GroupedHoleElement(model, solidShape, holes); //Set line color. ElementPropertiesSetter pSetter = new ElementPropertiesSetter(); pSetter.SetColor((uint)Bentley.MstnPlatformNET.Settings.GetActiveColor().Index); pSetter.Apply(groupedHoleElement); //Add fill color. if (PlaceGroupedHoleForm.GetAddFillColor()) { groupedHoleElement.AddSolidFill((uint)Bentley.MstnPlatformNET.Settings.GetActiveFillColor().Index, false); } return(groupedHoleElement); }
// should create on 0,0,0 center private Bentley.DgnPlatformNET.Elements.Element CreatePolyhedronCell(string sPolyhedronName, List <DPoint3d> points, List <List <int> > faces, List <DPoint3d> colors) { try { List <Bentley.DgnPlatformNET.Elements.Element> listElements = new List <Bentley.DgnPlatformNET.Elements.Element>(); if (points.Count > 0 && faces.Count > 0) { int iFaceIndex = 0; foreach (List <int> listVertices in faces) { List <DPoint3d> listPoints = new List <DPoint3d>(); foreach (int iVertexIndex in listVertices) { DPoint3d pt = points[iVertexIndex]; pt.ScaleInPlace(uorPerMaster()); listPoints.Add(pt); } DPoint3d color = colors.ToArray()[iFaceIndex++]; Bentley.DgnPlatformNET.Elements.ShapeElement shapeElement = new Bentley.DgnPlatformNET.Elements.ShapeElement(Session.Instance.GetActiveDgnModel(), null, listPoints.ToArray()); DVector3d normal = new DVector3d(); DPoint3d somePoint = new DPoint3d(); DPoint3d defNormal = listPoints.ToArray()[0]; shapeElement.IsPlanar(out normal, out somePoint, ref defNormal); uint iColorIndex = (uint)listPoints.Count - 1; ElementPropertiesSetter pSetter = new ElementPropertiesSetter(); pSetter.SetColor(iColorIndex); pSetter.SetFillColor(iColorIndex); shapeElement.AddSolidFill(iColorIndex, false); pSetter.Apply(shapeElement); listElements.Add(shapeElement); } } if (listElements.Count > 0) { DMatrix3d rotation = new DMatrix3d(1, 0, 0, 0, 1, 0, 0, 0, 1); // Identity Bentley.DgnPlatformNET.Elements.CellHeaderElement cellHeaderElement = new CellHeaderElement(Session.Instance.GetActiveDgnModel(), sPolyhedronName, new DPoint3d(0, 0, 0), rotation, listElements); return(cellHeaderElement); } } catch (Exception ex) { BPSUtilities.WriteLog($"CreatePolyhedronCell {ex.Message}\n{ex.StackTrace}"); } return(null); }
protected override void OnPostInstall() { try { BPSUtilities.WriteLog("PlaceQRCode OnPostInstall"); NotificationManager.OutputPrompt("Enter data point for corner of QR Code. Reset to exit."); // AccuSnap.SnapEnabled = true; // AccuSnap.LocateEnabled = true; base.OnPostInstall(); m_haveFirstPoint = false; // base.BeginDynamics(); m_firstPoint = DPoint3d.Zero; if (!string.IsNullOrEmpty(LongURL)) { QRCodeEncoderLibrary.QREncoder enc = QRCodeImageFunctions.GetQREncoderObject(LongURL); BPSUtilities.WriteLog($"QRCodeDimension: {enc.QRCodeDimension}"); if (enc.QRCodeDimension > 0) { DPoint3d[] blkPts = new DPoint3d[4]; blkPts[0] = blkPts[1] = blkPts[2] = blkPts[3] = DPoint3d.Zero; blkPts[0].X = enc.QuietZone; blkPts[0].Y = enc.QuietZone; blkPts[1].X = enc.QuietZone + 1.0; blkPts[1].Y = enc.QuietZone; blkPts[2].X = enc.QuietZone + 1.0; blkPts[2].Y = enc.QuietZone + 1.0; blkPts[3].X = enc.QuietZone; blkPts[3].Y = enc.QuietZone + 1.0; DPoint3d[] blkPts2 = new DPoint3d[4]; DVector3d yVec = new DVector3d(0, 1, 0); DVector3d xVec = new DVector3d(1, 0, 0); DMatrix3d cellRotation = new DMatrix3d(1, 0, 0, 0, 1, 0, 0, 0, 1); // Identity List <Bentley.DgnPlatformNET.Elements.Element> listChildElements = new List <Bentley.DgnPlatformNET.Elements.Element>(); // bool[,] pixels = enc.ConvertQRCodeMatrixToPixels(); for (int i = 0; i < enc.QRCodeDimension; i++) { // reset row for (int index = 0; index < 4; index++) { blkPts2[index] = blkPts[index]; } // move up for (int index = 0; index < 4; index++) { blkPts2[index] = DPoint3d.Add(blkPts2[index], yVec, (double)i); } for (int j = 0; j < enc.QRCodeDimension; j++) { if (enc.QRCodeMatrix[i, j]) { Bentley.DgnPlatformNET.Elements.ShapeElement shapeElement = new Bentley.DgnPlatformNET.Elements.ShapeElement(Session.Instance.GetActiveDgnModel(), null, blkPts2); ElementPropertiesSetter pSetter = new ElementPropertiesSetter(); pSetter.SetColor((uint)Bentley.MstnPlatformNET.Settings.GetActiveFillColor().Index); pSetter.SetFillColor((uint)Bentley.MstnPlatformNET.Settings.GetActiveFillColor().Index); shapeElement.AddSolidFill((uint)Bentley.MstnPlatformNET.Settings.GetActiveFillColor().Index, true); pSetter.Apply(shapeElement); if (shapeElement.IsValid) { listChildElements.Add(shapeElement); } } // move across for (int index = 0; index < 4; index++) { blkPts2[index] = DPoint3d.Add(blkPts2[index], xVec); } } } DPoint3d[] blkPts3 = new DPoint3d[5]; blkPts3[0] = blkPts3[1] = blkPts3[2] = blkPts3[3] = blkPts3[4] = DPoint3d.Zero; blkPts3[1].X = 2 * enc.QuietZone + enc.QRCodeDimension; blkPts3[2].X = 2 * enc.QuietZone + enc.QRCodeDimension; blkPts3[2].Y = 2 * enc.QuietZone + enc.QRCodeDimension; blkPts3[3].Y = 2 * enc.QuietZone + enc.QRCodeDimension; Bentley.DgnPlatformNET.Elements.LineStringElement border = new LineStringElement(Session.Instance.GetActiveDgnModel(), null, blkPts3); ElementPropertiesSetter pSetter2 = new ElementPropertiesSetter(); pSetter2.SetColor((uint)Bentley.MstnPlatformNET.Settings.GetActiveFillColor().Index); pSetter2.Apply(border); listChildElements.Add(border); Bentley.DgnPlatformNET.Elements.CellHeaderElement codeElement = new CellHeaderElement(Session.Instance.GetActiveDgnModel(), "QRCode", new DPoint3d(0, 0, 0), cellRotation, listChildElements); // scale down to one... DMatrix3d rotMatrix = DMatrix3d.Identity; rotMatrix.ScaleInPlace((double)1.0 / (double)enc.QRCodeDimension); DTransform3d translateAndScale = DTransform3d.FromMatrixAndTranslation(rotMatrix, DPoint3d.Zero); TransformInfo transformInfo = new TransformInfo(translateAndScale); codeElement.ApplyTransform(transformInfo); CodeElement = codeElement; // might want to tag with the URL... if (CodeElement.IsValid) { base.BeginDynamics(); } } } BPSUtilities.WriteLog($"PlaceQRCode OnPostInstall Dynamics {(this.DynamicsStarted ? "is" : "is not")} started."); } catch (Exception ex) { BPSUtilities.WriteLog($"PlaceQRCode OnPostInstall {ex.Message}\n{ex.StackTrace}"); } }