Пример #1
0
        public void MultiLayer()
        {
            var layer1 = new Layer()
            {
                Color        = new Color(0, 1, 0),
                Transparency = 0.5f,
                Name         = "Layer Number One"
            };

            Context.Current.Layers.Add(layer1);

            var layer2 = new Layer()
            {
                Color = new Color(0, 0, 1),
                Name  = "Layer Number Two"
            };

            Context.Current.Layers.Add(layer2);

            var bodies = TestGeomGenerator.CreateBoxCylinderSphere();

            bodies[0].Layer = layer1;
            bodies[1].Layer = layer2;
            bodies[2].Layer = layer2;

            Context.Current.ViewportController.ZoomFitAll();

            var u3d = U3dBodyExporter.Export(bodies);

            Assert.IsNotNull(u3d);
            Assert.That(u3d.Length > 0);
            AssertHelper.IsSameTextFile(Path.Combine(_BasePath, "MultiLayer.u3d"), u3d, AssertHelper.TextCompareFlags.IgnoreFloatPrecision);
        }
Пример #2
0
        //--------------------------------------------------------------------------------------------------

        #endregion

        #region IBodyExporter

        bool IBodyExporter.DoExport(string fileName, IEnumerable <Body> bodies)
        {
            bool result;

            using (new ProcessingScope(null, "Exporting bodies to Universal 3D File"))
            {
                result = _WriteToFile(fileName, U3dBodyExporter.Export(bodies));
            }

            return(result);
        }
Пример #3
0
        public void OrientedNormals()
        {
            var body = TestData.GetBodyFromBRep(Path.Combine(_BasePath, "OrientedNormals_Source.brep"));

            Context.Current.ViewportController.ZoomFitAll();

            var u3d = U3dBodyExporter.Export(new [] { body });

            Assert.IsNotNull(u3d);
            Assert.That(u3d.Length > 0);
            AssertHelper.IsSameTextFile(Path.Combine(_BasePath, "OrientedNormals.u3d"), u3d, AssertHelper.TextCompareFlags.IgnoreFloatPrecision);
        }
Пример #4
0
        public void MeshWrite()
        {
            var bodies = TestGeomGenerator.CreateBoxCylinderSphere();

            Context.Current.ViewportController.ZoomFitAll();

            var u3d = U3dBodyExporter.Export(bodies);

            Assert.IsNotNull(u3d);
            Assert.That(u3d.Length > 0);
            AssertHelper.IsSameTextFile(Path.Combine(_BasePath, "MeshWrite.u3d"), u3d, AssertHelper.TextCompareFlags.IgnoreFloatPrecision);
        }
Пример #5
0
        //--------------------------------------------------------------------------------------------------

        MemoryStream _Export(IEnumerable <Body> bodies)
        {
            try
            {
                var u3dSource = U3dBodyExporter.Export(bodies);
                if (u3dSource == null)
                {
                    Messages.Error("Mesh exporting failed, cannot generate 3D PDF.");
                    return(null);
                }

                _Document = new PdfDomDocument {
                    Version = PdfVersion.PDF_1_6
                };
                _Page = _Document.AddPage();

                var pageRect = new[] { 0, 0, PaperSizeX, PaperSizeY };
                _Page.MediaBox = pageRect;

                // Create U3D stream
                var streamObj = new PdfDom3DStream(_Document);
                streamObj.Add(u3dSource);

                // Create view
                var view = streamObj.AddView("Default");
                view.U3DPath = "View";

                var projection = view.Projection;
                projection.IsPerspective     = false;
                projection.AutomaticClipping = true;

                var background = view.Background;
                background.Color = new Color(0.75f, 0.75f, 0.75f);

                if (CoreContext.Current?.Viewport != null)
                {
                    var vp    = CoreContext.Current.Viewport;
                    var size  = vp.Size;
                    var scale = Math.Min(PaperSizeX / size.Width, PaperSizeY / size.Height);
                    projection.OrthographicScale = scale * PdfDomDocument.UserSpaceScale;
                    view.OrbitCenterDistance     = vp.EyePoint.Distance(vp.TargetPoint) * vp.Scale;
                }

                // Create annotation
                var normalAppearenceStream = new PdfDomXObject(_Document, pageRect);
                normalAppearenceStream.Add(PdfSnippets.NormalAppearenceFor3DAnnot);
                var annot = new PdfDom3DAnnotation(_Document, new[] { 0, 0, PaperSizeX, PaperSizeY }, streamObj)
                {
                    IsInteractive    = true,
                    IsAutostart      = true,
                    NormalAppearence = normalAppearenceStream
                };
                _Page.Annotations.Add(annot);

                // Finish
                var stream = _Document.WriteToStream();
                _Document = null;
                return(stream);
            }
            catch (Exception e)
            {
                Messages.Exception($"Exception occured while exporting to U3D.", e);
                return(null);
            }
        }