/// <summary> /// Tree->Screen Selection. If the viewport entities are selected, they get marked as selected straight away. /// To check we are considering the correct entities we use the Entity stored in the Tag property of the TreeView /// </summary> /// <returns>The selected item.</returns> /// <param name="tv">The TreeView control</param> /// <param name="vl">The ViewportLayout control</param> public static ViewportLayout.SelectedItem SynchTreeSelection(TreeView tv, ViewportLayout vl) { // Fill a stack of entities and blockreferences starting from the node tags. Stack <BlockReference> parents = new Stack <BlockReference>(); TreeNode node = tv.SelectedNode; Entity entity = node.Tag as Entity; node = node.Parent; while (node != null) { var ent = node.Tag as Entity; if (ent != null) { parents.Push((BlockReference)ent); } node = node.Parent; } tv.HideSelection = false; // The top most parent is the root Blockreference: must reverse the order, creating a new Stack var selItem = new ViewportLayout.SelectedItem(new Stack <BlockReference>(parents), entity); // Selects the item selItem.Select(vl, true); return(selItem); }
/// <summary> /// Deletes the selected tree node and all the others nodes that are linked to the same entity instance. /// </summary> /// <param name="tv">The TreeView control</param> /// <param name="vl">The ViewportLayout control</param> public static void DeleteSelectedNode(TreeView tv, ViewportLayout vl) { Entity deletedEntity = tv.SelectedNode.Tag as Entity; DeleteNodes(deletedEntity, tv.Nodes); CleanCurrent(vl); tv.SelectedNode = null; }
/// <summary> /// Clear selection for entities to avoid problems with the Tree->Screen selection /// </summary> /// <param name="vl">The ViewportLayout control</param> /// <param name="rootLevel">When true the CurrentBlockReference is set to null (Go back to the root level of the assembly)</param> public static void CleanCurrent(ViewportLayout vl, bool rootLevel = true) { vl.Entities.ClearSelection(); if (rootLevel && vl.Entities.CurrentBlockReference != null) { vl.Entities.SetCurrent(null); } }
public void Show(ViewportLayout eyeshot, int layer) { Joint j = new Joint(o, 0.5, 1); Mesh xx = Mesh.CreateArrow(o, x, 0.2, 5, 0.35, 1, 16, Mesh.natureType.Smooth, Mesh.edgeStyleType.Free); Mesh yy = Mesh.CreateArrow(o, y, 0.2, 5, 0.35, 1, 16, Mesh.natureType.Smooth, Mesh.edgeStyleType.Free); Mesh zz = Mesh.CreateArrow(o, z, 0.2, 5, 0.35, 1, 16, Mesh.natureType.Smooth, Mesh.edgeStyleType.Free); eyeshot.Entities.Add(j, layer, Color.Black); eyeshot.Entities.Add(xx, layer, Color.Red); eyeshot.Entities.Add(yy, layer, Color.Green); eyeshot.Entities.Add(zz, layer, Color.Blue); //eyeshot.Invalidate(); }
public static Entity getEntityFromIfcRepresentation(IfcRepresentation rep, ViewportLayout viewportLayout1, Transformation entityTrs = null) { List <Entity> entityList = new List <Entity>(); if (viewportLayout1.Blocks.ContainsKey("Representation " + rep.Index.ToString())) { return(new IfcBlockReference("Representation " + rep.Index.ToString())); } foreach (IfcRepresentationItem item in rep.Items) { Entity entity = getEntityFromIfcRepresentationItem(item, viewportLayout1, entityTrs); if (entity != null) { entityList.Add(entity); } } if (entityList.Count > 1) { Block b = new Block(); foreach (Entity e in entityList) { b.Entities.Add(e); } viewportLayout1.Blocks.Add("Representation " + rep.Index.ToString(), b); BlockReference br = new IfcBlockReference("Representation " + rep.Index.ToString()); br.ColorMethod = colorMethodType.byParent; return(br); //return new IfcBlockReference("Representation " + rep.Index.ToString()); } else if (entityList.Count == 0) { return(null); } return(entityList[0]); }
public GameplayScreen(PlayRequest request) { mRequest = request; TransitionOnTime = TimeSpan.FromSeconds(1.5); TransitionOffTime = TimeSpan.FromSeconds(0.5); mScene = null; mViews = new ObservableCollection <PlayerView>(); mActorMan = null; mScreenLayout = ViewportLayout.Invalid; mDrawSegments = new List <DrawSegment>(); mViewContentLoader = null; mPauseAlpha = 0.5f; mFrameCounter = 0; mFrameRate = 0; mFrameRateTimer = new TimeSpan(); mFrameTimes = new Queue <double>(); for (int f = 0; f < 30; ++f) { mFrameTimes.Enqueue(160.0d); } mPrevFrameTime = -1.0d; }
public GameplayScreen(PlayRequest request) { mRequest = request; TransitionOnTime = TimeSpan.FromSeconds(1.5); TransitionOffTime = TimeSpan.FromSeconds(0.5); mScene = null; mViews = new ObservableCollection<PlayerView>(); mActorMan = null; mScreenLayout = ViewportLayout.Invalid; mDrawSegments = new List<DrawSegment>(); mViewContentLoader = null; mPauseAlpha = 0.5f; mFrameCounter = 0; mFrameRate = 0; mFrameRateTimer = new TimeSpan(); mFrameTimes = new Queue<double>(); for (int f = 0; f < 30; ++f) { mFrameTimes.Enqueue(160.0d); } mPrevFrameTime = -1.0d; }
public override void LoadContent() { mScene = new Scene(); mActorMan = new ActorManager(mViews); GameResources.ActorManager = mActorMan; LevelManifest manifest; using (ContentManager manifestLoader = new ContentManager(SharedResources.Game.Services, "Content")) { manifest = manifestLoader.Load<LevelManifest>(mRequest.LevelName); manifestLoader.Unload(); // a LevelManifest does not use any Disposable resources, so this is ok. } // The IScreenHoncho tells this gameplay screen how to set up the PlayerViews and DrawSegments required to play this level IScreenHoncho screenHoncho = Activator.CreateInstance(Type.GetType(manifest.ScreenHonchoTypeName)) as IScreenHoncho; mViewContentLoader = new ContentManager(SharedResources.Game.Services, "Content"); foreach (PlayerInfo player in GameResources.PlaySession.Players) { mViews.Add(PlayerViewFactory.Create(player, mRequest.CharacterSelections[player.PlayerId], screenHoncho, mViewContentLoader)); } // Determine screen layout and create DrawSegments if (screenHoncho.PlayersUseSeparateViewports) { switch (GameResources.PlaySession.LocalPlayers.Count) { case 1: mScreenLayout = ViewportLayout.FullScreen; break; case 2: mScreenLayout = GameOptions.PreferHorizontalSplit ? ViewportLayout.HorizontalSplit : ViewportLayout.VerticalSplit; break; case 3: case 4: mScreenLayout = ViewportLayout.FourWaySplit; break; default: throw new InvalidOperationException("Unsupported number of local players."); } foreach (int playerId in GameResources.PlaySession.LocalPlayers.Keys) { HumanView playerView = mViews.Single(v => v.PlayerId == playerId) as HumanView; ICameraProvider cameraPlayerView = playerView as ICameraProvider; if (cameraPlayerView == null) throw new LevelManifestException("When IScreenHoncho.PlayersUseSeparateViewports is true, HumanViews must implement the ICameraProvider interface."); DrawSegment ds = new DrawSegment(mScene, cameraPlayerView.Camera); mDrawSegments.Add(ds); playerView.DrawSegment = ds; } } else { mScreenLayout = ViewportLayout.FullScreen; DrawSegment ds = new DrawSegment(mScene); mDrawSegments.Add(ds); foreach (int playerId in GameResources.PlaySession.LocalPlayers.Keys) { HumanView playerView = mViews.Single(v => v.PlayerId == playerId) as HumanView; playerView.DrawSegment = ds; } } // TODO: P3: Make sure all non-local players are connected mScene.Load(); mActorMan.LoadContent(manifest); // TODO: P3: Make sure all remote clients have loaded their game. foreach (PlayerView view in mViews) { view.Load(); } GameResources.LoadNewLevelDelegate = LoadNewLevel; SharedResources.Game.GraphicsDevice.DeviceLost += DeviceLostHandler; SharedResources.Game.GraphicsDevice.DeviceResetting += DeviceResettingHandler; SharedResources.Game.GraphicsDevice.DeviceReset += DeviceResetHandler; }
public static Entity getEntityFromIfcProductRepresentation(IfcProductRepresentation prodRep, ViewportLayout viewportLayout1, Transformation entityTrs = null) { List <Entity> entityList = new List <Entity>(); //se uso solo body non mi serve lista ?? foreach (IfcRepresentation iRep in prodRep.Representations) { if (iRep.RepresentationIdentifier.Equals("Body")) { Entity entity = getEntityFromIfcRepresentation(iRep, viewportLayout1, entityTrs); if (entity != null) { entityList.Add(entity); } } else { if (!debug.Contains("IfcRepresentation.RepresentationIdentifier not supported: " + iRep.RepresentationIdentifier)) { debug += "IfcRepresentation.RepresentationIdentifier not supported: " + iRep.RepresentationIdentifier + "\n"; } } } if (entityList.Count > 1) { Block b = new Block(); foreach (Entity e in entityList) { b.Entities.Add(e); } viewportLayout1.Blocks.Add("ProductRepresentatio " + prodRep.Index.ToString(), b); return(new IfcBlockReference("ProductRepresentatio " + prodRep.Index.ToString())); } else if (entityList.Count == 0) { return(null); } return(entityList[0]); }
private static Entity createOpenings(Entity eyeElement, IfcElement ifcElement, ViewportLayout viewportLayout1) { if (eyeElement is BlockReference) { BlockReference brElement = (BlockReference)eyeElement; Block blockElement; viewportLayout1.Blocks.TryGetValue(brElement.BlockName, out blockElement); for (int i = 0; i < blockElement.Entities.Count; i++) { blockElement.Entities[i] = createOpenings(blockElement.Entities[i], ifcElement, viewportLayout1); } return(eyeElement); } else if (eyeElement is Mesh) { Mesh m = (Mesh)eyeElement; Mesh[] splittedMesh; splittedMesh = m.SplitDisjoint(); if (splittedMesh.Length > 1) { debug += "splittedMesh.length > 1\n"; } foreach (IfcRelVoidsElement relVE in ifcElement.HasOpenings) { Entity openingEntity = Conversion.getEntityFromIfcProductRepresentation(relVE.RelatedOpeningElement.Representation, viewportLayout1); //viewportLayout1.Entities.Add((Entity)openingEntity.Clone(), 2); if (openingEntity != null && (openingEntity is Mesh || openingEntity is Solid)) //gestire se openingEntity is BlockReference { Transformation opTrs = Conversion.getPlacementTransformtion(relVE.RelatedOpeningElement.Placement); openingEntity.TransformBy(opTrs); Solid openingSolid; if (openingEntity is Mesh) { openingSolid = ((Mesh)openingEntity).ConvertToSolid(); } else { openingSolid = (Solid)openingEntity; } for (int i = 0; i < splittedMesh.Length; i++) { //verificare collision? bound box? Solid[] result; Solid entitySolid = splittedMesh[i].ConvertToSolid(); //viewportLayout1.Entities.Add((Entity)openingSolid.Clone(), 1, Color.Green); if (Utility.DoOverlap(entitySolid.BoxMin, entitySolid.BoxMax, openingSolid.BoxMin, openingSolid.BoxMax)) { result = Solid.Difference(entitySolid, openingSolid, 0.001); if (result != null) { splittedMesh[i] = result[0].ConvertToMesh(); break; } else { WriteSTL ws = new WriteSTL(new Entity[] { entitySolid, openingSolid }, new Layer[] { new Layer("Default") }, new Dictionary <string, Block>(), @"c:\devdept\booleanError\" + count + " " + ifcElement.GlobalId + ".stl", 0.01, true); count++; ws.DoWork(); debug += "Error in opening boolean operation\n"; } } } } } if (splittedMesh.Length > 1) { Block b = new Block(); foreach (Mesh mesh in splittedMesh) { b.Entities.Add(mesh); } viewportLayout1.Blocks.Add(ifcElement.GlobalId, b); eyeElement = new IfcBlockReference(ifcElement.GlobalId); } else { eyeElement = splittedMesh[0]; } } else { Solid entitySolid = (Solid)eyeElement; foreach (IfcRelVoidsElement relVE in ifcElement.HasOpenings) { Entity openingEntity = Conversion.getEntityFromIfcProductRepresentation(relVE.RelatedOpeningElement.Representation, viewportLayout1); if (openingEntity != null && (openingEntity is Mesh || openingEntity is Solid)) { Transformation opTrs = Conversion.getPlacementTransformtion(relVE.RelatedOpeningElement.Placement); openingEntity.TransformBy(opTrs); Solid openingSolid; if (openingEntity is Mesh) { openingSolid = ((Mesh)openingEntity).ConvertToSolid(); } else { openingSolid = (Solid)openingEntity; } Solid[] result; //viewportLayout1.Entities.Add((Entity)openingSolid.Clone(), 1, Color.Green); result = Solid.Difference(entitySolid, openingSolid, 0.001); if (result != null) { entitySolid = result[0]; } else { WriteSTL ws = new WriteSTL(new Entity[] { entitySolid, openingSolid }, new Layer[] { new Layer("Default") }, new Dictionary <string, Block>(), @"c:\devdept\booleanError\" + count + " " + ifcElement.GlobalId + ".stl", 0.01, true); count++; ws.DoWork(); debug += "Error in opening boolean operation\n"; } } } eyeElement = entitySolid; } return(eyeElement); }
private static ICurve getICurveFromIfcCurve(IfcCurve ifcCurve, ViewportLayout viewportLayout1 = null, Transformation entityTrs = null) { ICurve result = null; if (ifcCurve is IfcConic) { IfcConic ifcConic = (IfcConic)ifcCurve; Plane pln = getPlaneFromPosition((IfcPlacement)ifcConic.Position); if (ifcConic is IfcCircle) { IfcCircle ifcCircle = (IfcCircle)ifcCurve; Circle circle = new Circle(pln, ifcCircle.Radius); result = circle; } else { IfcEllipse ifcEllipse = (IfcEllipse)ifcConic; Ellipse ellipse = new Ellipse(pln, pln.Origin, ifcEllipse.SemiAxis1, ifcEllipse.SemiAxis2); result = ellipse; } } else if (ifcCurve is IfcPolyline) { IfcPolyline p = (IfcPolyline)ifcCurve; Point3D[] points = new Point3D[p.Points.Count]; for (int i = 0; i < p.Points.Count; i++) { points[i] = getPoint3DFromIfcCartesianPoint(p.Points[i]); } LinearPath lp = new LinearPath(points); result = lp; } else if (ifcCurve is IfcCompositeCurve) // verificare sense e transition { IfcCompositeCurve cc = (IfcCompositeCurve)ifcCurve; result = new CompositeCurve(); foreach (IfcCompositeCurveSegment ccSegment in cc.Segments) { ICurve segment = getICurveFromIfcCurve(ccSegment.ParentCurve, viewportLayout1, entityTrs); if (segment != null) { ((CompositeCurve)result).CurveList.Add(segment); } else { result = null; break; } } } else if (ifcCurve is IfcTrimmedCurve) { IfcTrimmedCurve tc = (IfcTrimmedCurve)ifcCurve; ICurve basisCurve = getICurveFromIfcCurve(tc.BasisCurve, viewportLayout1, entityTrs); if (basisCurve != null) { ICurve trimCurve = null; if (tc.MasterRepresentation == IfcTrimmingPreference.PARAMETER) { double startParam = tc.Trim1.IfcParameterValue * Math.PI / 180; double endParam = tc.Trim2.IfcParameterValue * Math.PI / 180; if (tc.SenseAgreement) { if (startParam > endParam) { startParam = startParam - Math.PI * 2; } basisCurve.SubCurve(startParam, endParam, out trimCurve); } else { if (endParam > startParam) { endParam = endParam - Math.PI * 2; } basisCurve.SubCurve(endParam, startParam, out trimCurve); trimCurve.Reverse(); } result = trimCurve; //new CompositeCurve(trimCurve); } else if (tc.MasterRepresentation == IfcTrimmingPreference.CARTESIAN) { debug += "IfcTrimmed cartesianPoint not supported: \n"; } else { debug += "IfcTrimmed not supported: \n"; } } } else { if (!debug.Contains("IfcCurve not supported: " + ifcCurve.KeyWord)) { debug += "IfcCurve not supported: " + ifcCurve.KeyWord + "\n"; } } return(result); }
public static Entity getEntityFromIfcRepresentationItem(IfcRepresentationItem reprItem, ViewportLayout viewportLayout1 = null, Transformation entityTrs = null) { Entity result = null; if (reprItem is IfcBooleanClippingResult) { IfcBooleanClippingResult bcr = (IfcBooleanClippingResult)reprItem; result = getSolidFromIfcBooleanClippingResult(bcr); } else if (reprItem is IfcCurve) { result = (Entity)getICurveFromIfcCurve((IfcCurve)reprItem, viewportLayout1, entityTrs); } else if (reprItem is IfcExtrudedAreaSolid) { IfcExtrudedAreaSolid extrAreaSolid = (IfcExtrudedAreaSolid)reprItem; // if (!viewportLayout1.Blocks.ContainsKey(extrAreaSolid.Index.ToString())) { Plane pln = Conversion.getPlaneFromPosition(extrAreaSolid.Position); Align3D align = new Align3D(Plane.XY, pln); IfcDirection dir = extrAreaSolid.ExtrudedDirection; Vector3D extDir = new Vector3D(dir.DirectionRatioX, dir.DirectionRatioY, dir.DirectionRatioZ); //extDir.TransformBy(trs * align2); extDir.TransformBy(align); devDept.Eyeshot.Entities.Region region = getRegionFromIfcProfileDef(extrAreaSolid.SweptArea, viewportLayout1); if (region != null) { //region.TransformBy(trs * align2); region.TransformBy(align); result = region.ExtrudeAsMesh(extDir * extrAreaSolid.Depth, 0.1, Mesh.natureType.Plain); // 0.1 tolerance must be computed according to object size //viewportLayout1.Entities.Add(result, 1); //Block b = new Block(); //b.Entities.Add(m); //viewportLayout1.Blocks.Add(extrAreaSolid.Index.ToString(), b); } } // BlockReference br = new IfcBlockReference(trs, extrAreaSolid.Index.ToString()); // viewportLayout1.Entities.Add(br, 0, Color.Gray); } else if (reprItem is IfcFaceBasedSurfaceModel) { IfcFaceBasedSurfaceModel fbs = (IfcFaceBasedSurfaceModel)reprItem; result = new Mesh(0, 0, Mesh.natureType.Plain); foreach (IfcConnectedFaceSet cfs in fbs.FbsmFaces) { Mesh global = new Mesh(0, 0, Mesh.natureType.Plain); foreach (IfcFace face in cfs.CfsFaces) { Point3D[] outerPoints = null; List <Point3D[]> innerPointsList = new List <Point3D[]>(); foreach (IfcFaceBound fb in face.Bounds) // al massimo 2 ? profilo esterno e interno { // bool sense = ifb.mOrientation; if (fb is IfcFaceOuterBound) { IfcFaceOuterBound ifob = (IfcFaceOuterBound)fb; IfcPolyloop pl = (IfcPolyloop)fb.Bound; List <Point3D> pLIst = new List <Point3D>(); for (int i = 0; i < pl.Polygon.Count; i++) { Point3D p = getPoint3DFromIfcCartesianPoint(pl.Polygon[i]); if (!pLIst.Contains(p)) // non copio punti uguali !! { pLIst.Add(p); } } outerPoints = pLIst.ToArray(); if (!outerPoints[0].Equals(outerPoints[outerPoints.Length - 1])) { Array.Resize(ref outerPoints, outerPoints.Length + 1); outerPoints[outerPoints.Length - 1] = (Point3D)outerPoints[0].Clone(); } Array.Reverse(outerPoints); } else { IfcFaceBound ifb = (IfcFaceBound)fb; IfcPolyloop inPl = (IfcPolyloop)ifb.Bound; List <Point3D> pLIst = new List <Point3D>(); for (int i = 0; i < inPl.Polygon.Count; i++) { Point3D p = getPoint3DFromIfcCartesianPoint(inPl.Polygon[i]); if (!pLIst.Contains(p)) // non copio punti uguali !! { pLIst.Add(p); } } Point3D[] innerPoints = pLIst.ToArray(); if (!innerPoints[0].Equals(innerPoints[innerPoints.Length - 1])) { Array.Resize(ref innerPoints, innerPoints.Length + 1); innerPoints[innerPoints.Length - 1] = (Point3D)innerPoints[0].Clone(); } Array.Reverse(innerPoints); innerPointsList.Add(innerPoints); } } if (outerPoints.Length > 3) { Mesh local; List <LinearPath> boundLp = new List <LinearPath>(); boundLp.Add(new LinearPath(outerPoints)); foreach (Point3D[] innerPoints in innerPointsList) { boundLp.Add(new LinearPath(innerPoints)); } local = new devDept.Eyeshot.Entities.Region(boundLp.ToArray()).ConvertToMesh(0, Mesh.natureType.Plain); global.MergeWith(local, true); // fonde i vertici, sarebbe meglio farla una volta sola alla fine } } ((Mesh)result).MergeWith(global, true); } } else if (reprItem is IfcFacetedBrep) //controllare { IfcFacetedBrep facBrep = (IfcFacetedBrep)reprItem; IfcClosedShell cs = facBrep.Outer; Mesh global = new Mesh(0, 0, Mesh.natureType.Plain); foreach (IfcFace face in cs.CfsFaces) { Point3D[] outerPoints = null; List <Point3D[]> innerPointsList = new List <Point3D[]>(); foreach (IfcFaceBound fb in face.Bounds) { // bool sense = ifb.mOrientation; if (fb is IfcFaceOuterBound) { IfcFaceOuterBound ifob = (IfcFaceOuterBound)fb; IfcPolyloop pl = (IfcPolyloop)fb.Bound; List <Point3D> pLIst = new List <Point3D>(); for (int i = 0; i < pl.Polygon.Count; i++) { Point3D p = getPoint3DFromIfcCartesianPoint(pl.Polygon[i]); if (!pLIst.Contains(p)) // non copio punti uguali !! { pLIst.Add(p); } } outerPoints = pLIst.ToArray(); if (!outerPoints[0].Equals(outerPoints[outerPoints.Length - 1])) { Array.Resize(ref outerPoints, outerPoints.Length + 1); outerPoints[outerPoints.Length - 1] = (Point3D)outerPoints[0].Clone(); } Array.Reverse(outerPoints); } else { IfcFaceBound ifb = (IfcFaceBound)fb; IfcPolyloop inPl = (IfcPolyloop)ifb.Bound; List <Point3D> pLIst = new List <Point3D>(); for (int i = 0; i < inPl.Polygon.Count; i++) { Point3D p = getPoint3DFromIfcCartesianPoint(inPl.Polygon[i]); if (!pLIst.Contains(p)) // non copio punti uguali !! { pLIst.Add(p); } } Point3D[] innerPoints = pLIst.ToArray(); if (!innerPoints[0].Equals(innerPoints[innerPoints.Length - 1])) { Array.Resize(ref innerPoints, innerPoints.Length + 1); innerPoints[innerPoints.Length - 1] = (Point3D)innerPoints[0].Clone(); } Array.Reverse(innerPoints); innerPointsList.Add(innerPoints); } } if (outerPoints.Length > 3) { Mesh local; List <LinearPath> boundLp = new List <LinearPath>(); boundLp.Add(new LinearPath(outerPoints)); foreach (Point3D[] innerPoints in innerPointsList) { boundLp.Add(new LinearPath(innerPoints)); } local = new devDept.Eyeshot.Entities.Region(boundLp.ToArray()).ConvertToMesh(0, Mesh.natureType.Plain); global.MergeWith(local, true); // fonde i vertici, sarebbe meglio farla una volta sola alla fine } } result = global; } //else if (repItem is IfcBoundingBox) //{ // IfcBoundingBox bBox = (IfcBoundingBox)iRep.Items[0]; // m = Mesh.CreateBox(bBox.XDim, bBox.YDim, bBox.ZDim); // m.Translate(bBox.Corner.Coordinates.Item1, bBox.Corner.Coordinates.Item1, bBox.Corner.Coordinates.Item1); //} else if (reprItem is IfcMappedItem) { IfcMappedItem mapItem = (IfcMappedItem)reprItem; if (!viewportLayout1.Blocks.ContainsKey("MappingSource " + mapItem.MappingSource.Index.ToString())) { IfcRepresentationMap reprMapSource = mapItem.MappingSource; Entity mapSource = getEntityFromIfcRepresentation(reprMapSource.MappedRepresentation, viewportLayout1, entityTrs); Block b = new Block(); if (mapSource != null) { Plane pln = getPlaneFromPosition((IfcPlacement)reprMapSource.MappingOrigin); Align3D algn = new Align3D(Plane.XY, pln); mapSource.TransformBy(algn); b.Entities.Add(mapSource); } viewportLayout1.Blocks.Add("MappingSource " + mapItem.MappingSource.Index.ToString(), b); } IfcCartesianTransformationOperator3D iTrs = (IfcCartesianTransformationOperator3D)mapItem.MappingTarget; Point3D org = new Point3D(iTrs.LocalOrigin.Coordinates.Item1, iTrs.LocalOrigin.Coordinates.Item2, iTrs.LocalOrigin.Coordinates.Item3); Vector3D vectorX; if (iTrs.Axis1 != null) { vectorX = new Vector3D(iTrs.Axis1.DirectionRatioX, iTrs.Axis1.DirectionRatioY, iTrs.Axis1.DirectionRatioZ); } else { vectorX = new Vector3D(1, 0, 0); } vectorX = vectorX * iTrs.Scale; Vector3D vectorY; if (iTrs.Axis2 != null) { vectorY = new Vector3D(iTrs.Axis2.DirectionRatioX, iTrs.Axis2.DirectionRatioY, iTrs.Axis2.DirectionRatioZ); } else { vectorY = new Vector3D(0, 1, 0); } Vector3D vectorZ; if (iTrs.Axis1 != null) { vectorZ = new Vector3D(iTrs.Axis3.DirectionRatioX, iTrs.Axis3.DirectionRatioY, iTrs.Axis3.DirectionRatioZ); } else { vectorZ = new Vector3D(0, 0, 1); } if (iTrs is IfcCartesianTransformationOperator3DnonUniform) { IfcCartesianTransformationOperator3DnonUniform nut = (IfcCartesianTransformationOperator3DnonUniform)iTrs; vectorY = vectorY * nut.Scale2; vectorZ = vectorZ * nut.Scale3; } Transformation targetTrs = new Transformation(org, vectorX, vectorY, vectorZ); result = new IfcBlockReference(targetTrs, "MappingSource " + mapItem.MappingSource.Index.ToString()); } else if (reprItem is IfcShellBasedSurfaceModel) { IfcShellBasedSurfaceModel sbs = (IfcShellBasedSurfaceModel)reprItem; result = new Mesh(0, 0, Mesh.natureType.Plain); foreach (IfcShell cfs in sbs.SbsmBoundary) { Mesh global = new Mesh(0, 0, Mesh.natureType.Plain); foreach (IfcFace face in cfs.CfsFaces) { Point3D[] outerPoints = null; List <Point3D[]> innerPointsList = new List <Point3D[]>(); foreach (IfcFaceBound fb in face.Bounds) // al massimo 2 ? profilo esterno e interno { // bool sense = ifb.mOrientation; if (fb is IfcFaceOuterBound) { IfcFaceOuterBound ifob = (IfcFaceOuterBound)fb; IfcPolyloop pl = (IfcPolyloop)fb.Bound; List <Point3D> pLIst = new List <Point3D>(); for (int i = 0; i < pl.Polygon.Count; i++) { Point3D p = getPoint3DFromIfcCartesianPoint(pl.Polygon[i]); if (!pLIst.Contains(p)) // non copio punti uguali !! { pLIst.Add(p); } } outerPoints = pLIst.ToArray(); if (!outerPoints[0].Equals(outerPoints[outerPoints.Length - 1])) { Array.Resize(ref outerPoints, outerPoints.Length + 1); outerPoints[outerPoints.Length - 1] = (Point3D)outerPoints[0].Clone(); } Array.Reverse(outerPoints); } else { IfcFaceBound ifb = (IfcFaceBound)fb; IfcPolyloop inPl = (IfcPolyloop)ifb.Bound; List <Point3D> pLIst = new List <Point3D>(); for (int i = 0; i < inPl.Polygon.Count; i++) { Point3D p = getPoint3DFromIfcCartesianPoint(inPl.Polygon[i]); if (!pLIst.Contains(p)) // non copio punti uguali !! { pLIst.Add(p); } } Point3D[] innerPoints = pLIst.ToArray(); if (!innerPoints[0].Equals(innerPoints[innerPoints.Length - 1])) { Array.Resize(ref innerPoints, innerPoints.Length + 1); innerPoints[innerPoints.Length - 1] = (Point3D)innerPoints[0].Clone(); } Array.Reverse(innerPoints); innerPointsList.Add(innerPoints); } } if (outerPoints.Length > 3) { Mesh local; List <LinearPath> boundLp = new List <LinearPath>(); boundLp.Add(new LinearPath(outerPoints)); foreach (Point3D[] innerPoints in innerPointsList) { boundLp.Add(new LinearPath(innerPoints)); } //devDept.Eyeshot.Entities.Region localRegion = new devDept.Eyeshot.Entities.Region(boundLp.ToArray()); //localRegion.TransformBy(entityTrs); //viewportLayout1.Entities.Add(localRegion, 1); local = new devDept.Eyeshot.Entities.Region(boundLp.ToArray()).ConvertToMesh(0, Mesh.natureType.Plain); global.MergeWith(local, true); // fonde i vertici, sarebbe meglio farla una volta sola alla fine } } ((Mesh)result).MergeWith(global, true); } } else { if (!debug.Contains("IfcRepresentationItem not supported: " + reprItem.KeyWord)) { debug += "IfcRepresentationItem not supported: " + reprItem.KeyWord + "\n"; } } if (result != null) { Color color; if (tryGetColorFromIfcRepresentationItem(reprItem, out color)) { result.ColorMethod = colorMethodType.byEntity; result.Color = color; } else { result.ColorMethod = colorMethodType.byParent; } } return(result); }
public ViewportLayout InitViewport() { var displayModeSettingsRendered1 = new DisplayModeSettingsRendered(true, edgeColorMethodType.EntityColor, Color.Black, 1F, 2F, silhouettesDrawingType.LastFrame, false, shadowType.Realistic, null, false, true, 0.3F, realisticShadowQualityType.High); var backgroundSettings1 = new BackgroundSettings(backgroundStyleType.LinearGradient, Color.WhiteSmoke, Color.White, Color.FromArgb(102, 163, 210), 0.75D, null); var camera1 = new Camera(new Point3D(0D, 0D, 0D), 100D, new Quaternion(0.12940952255126034D, 0.22414386804201339D, 0.4829629131445341D, 0.83651630373780794D), projectionType.Perspective, 50D, 8D); var toolBarButton1 = new ToolBarButton(null, "Zoom Window", "Zoom Window", ToolBarButtonStyle.ToggleButton, true); var toolBarButton2 = new ToolBarButton(null, "Zoom", "Zoom", ToolBarButtonStyle.ToggleButton, true); var toolBarButton3 = new ToolBarButton(null, "Pan", "Pan", ToolBarButtonStyle.ToggleButton, true); var toolBarButton4 = new ToolBarButton(null, "Rotate", "Rotate", ToolBarButtonStyle.ToggleButton, true); var toolBarButton5 = new ToolBarButton(null, "Zoom Fit", "Zoom Fit", ToolBarButtonStyle.PushButton, true); var toolBar1 = new devDept.Eyeshot.ToolBar(toolBarPositionType.HorizontalTopRight, 32, 3, 4, Color.FromArgb(255, 146, 0), true, new[] { toolBarButton1, toolBarButton2, toolBarButton3, toolBarButton4, toolBarButton5 }); var legend1 = new Legend(0D, 100D, "Title", "Subtitle", new Point(24, 24), new Size(10, 30), true, false, false, "{0:0.##}", System.Drawing.Color.Transparent, System.Drawing.Color.Black, System.Drawing.Color.Black, new System.Drawing.Font("Tahoma", 10F, FontStyle.Bold), new Font("Tahoma", 8.25F), new[] { Color.FromArgb(0, 0, 255), Color.FromArgb(0, 63, 255), Color.FromArgb(0, 127, 255), Color.FromArgb(0, 191, 255), Color.FromArgb(0, 255, 255), Color.FromArgb(0, 255, 191), Color.FromArgb(0, 255, 127), Color.FromArgb(0, 255, 63), Color.FromArgb(0, 255, 0), Color.FromArgb(63, 255, 0), Color.FromArgb(127, 255, 0), Color.FromArgb(191, 255, 0), Color.FromArgb(255, 255, 0), Color.FromArgb(255, 191, 0), Color.FromArgb(255, 127, 0), Color.FromArgb(255, 63, 0), Color.FromArgb(255, 0, 0) }); var originSymbol1 = new OriginSymbol(2, originSymbolStyleType.CoordinateSystem, new Font("Tahoma", 8.25F), Color.Black, Color.Red, Color.Green, Color.Blue, "Origin", "X", "Y", "Z", true); var rotateSettings1 = new RotateSettings(new MouseButton(MouseButtons.Middle, ModifierKeys.None), 10D, true, 1D, rotationStyleType.Trackball, rotationCenterType.CursorLocation, new devDept.Geometry.Point3D(0D, 0D, 0D)); var zoomSettings1 = new ZoomSettings(new MouseButton(MouseButtons.Middle, ModifierKeys.Shift), 25, true, zoomStyleType.AtCursorLocation, false, 1D, Color.DeepSkyBlue, perspectiveFitType.Accurate); var viewport1 = new Viewport(new Point(0, 0), new Size(100, 10000), backgroundSettings1, camera1, toolBar1, new[] { legend1 }, displayType.Rendered, true, false, false, CreateGrid(10), originSymbol1, false, rotateSettings1, zoomSettings1, new PanSettings(new MouseButton(MouseButtons.Middle, ModifierKeys.Ctrl), 25, true)); _viewportLayout = new SingleViewportLayout(); _viewportLayout.Dock = DockStyle.Fill; _viewportLayout.Cursor = Cursors.Arrow; _viewportLayout.Name = "SingleViewPort"; _viewportLayout.Rendered = displayModeSettingsRendered1; _viewportLayout.Size = new Size(431, 405); _viewportLayout.TabIndex = 0; _viewportLayout.Viewports.Add(viewport1); return _viewportLayout; }
public ViewportLayout InitViewport() { var displayModeSettingsRendered1 = new DisplayModeSettingsRendered(true, edgeColorMethodType.EntityColor, Color.Black, 1F, 2F, silhouettesDrawingType.LastFrame, false, shadowType.Realistic, null, false, true, 0.3F, realisticShadowQualityType.High); var backgroundSettings1 = new BackgroundSettings(backgroundStyleType.LinearGradient, Color.WhiteSmoke, Color.White, Color.FromArgb(102, 163, 210), 0.75D, null); var camera1 = new Camera(new Point3D(0D, 0D, 0D), 100D, new Quaternion(0.12940952255126034D, 0.22414386804201339D, 0.4829629131445341D, 0.83651630373780794D), projectionType.Perspective, 50D, 8D); var toolBarButton1 = new ToolBarButton(null, "Zoom Window", "Zoom Window", ToolBarButtonStyle.ToggleButton, true); var toolBarButton2 = new ToolBarButton(null, "Zoom", "Zoom", ToolBarButtonStyle.ToggleButton, true); var toolBarButton3 = new ToolBarButton(null, "Pan", "Pan", ToolBarButtonStyle.ToggleButton, true); var toolBarButton4 = new ToolBarButton(null, "Rotate", "Rotate", ToolBarButtonStyle.ToggleButton, true); var toolBarButton5 = new ToolBarButton(null, "Zoom Fit", "Zoom Fit", ToolBarButtonStyle.PushButton, true); var toolBar1 = new devDept.Eyeshot.ToolBar(toolBarPositionType.HorizontalTopRight, 32, 3, 4, Color.FromArgb(255, 146, 0), true, new[] { toolBarButton1, toolBarButton2, toolBarButton3, toolBarButton4, toolBarButton5 }); var legend1 = new Legend(0D, 100D, "Title", "Subtitle", new Point(24, 24), new Size(10, 30), true, false, false, "{0:0.##}", System.Drawing.Color.Transparent, System.Drawing.Color.Black, System.Drawing.Color.Black, new System.Drawing.Font("Tahoma", 10F, FontStyle.Bold), new Font("Tahoma", 8.25F), new[] { Color.FromArgb(0, 0, 255), Color.FromArgb(0, 63, 255), Color.FromArgb(0, 127, 255), Color.FromArgb(0, 191, 255), Color.FromArgb(0, 255, 255), Color.FromArgb(0, 255, 191), Color.FromArgb(0, 255, 127), Color.FromArgb(0, 255, 63), Color.FromArgb(0, 255, 0), Color.FromArgb(63, 255, 0), Color.FromArgb(127, 255, 0), Color.FromArgb(191, 255, 0), Color.FromArgb(255, 255, 0), Color.FromArgb(255, 191, 0), Color.FromArgb(255, 127, 0), Color.FromArgb(255, 63, 0), Color.FromArgb(255, 0, 0) }); var originSymbol1 = new OriginSymbol(2, originSymbolStyleType.CoordinateSystem, new Font("Tahoma", 8.25F), Color.Black, Color.Red, Color.Green, Color.Blue, "Origin", "X", "Y", "Z", true); var rotateSettings1 = new RotateSettings(new MouseButton(MouseButtons.Middle, ModifierKeys.None), 10D, true, 1D, rotationStyleType.Trackball, rotationCenterType.CursorLocation, new devDept.Geometry.Point3D(0D, 0D, 0D)); var zoomSettings1 = new ZoomSettings(new MouseButton(MouseButtons.Middle, ModifierKeys.Shift), 25, true, zoomStyleType.AtCursorLocation, false, 1D, Color.DeepSkyBlue, perspectiveFitType.Accurate); var viewport1 = new Viewport(new Point(0, 0), new Size(100, 10000), backgroundSettings1, camera1, toolBar1, new[] { legend1 }, displayType.Rendered, true, false, false, CreateGrid(10), originSymbol1, false, rotateSettings1, zoomSettings1, new PanSettings(new MouseButton(MouseButtons.Middle, ModifierKeys.Ctrl), 25, true)); _viewportLayout = new SingleViewportLayout(); _viewportLayout.Dock = DockStyle.Fill; _viewportLayout.Cursor = Cursors.Arrow; _viewportLayout.Name = "SingleViewPort"; _viewportLayout.Rendered = displayModeSettingsRendered1; _viewportLayout.Size = new Size(431, 405); _viewportLayout.TabIndex = 0; _viewportLayout.Viewports.Add(viewport1); return(_viewportLayout); }
public static Entity getEntityFromIfcElement(IfcElement ifcElement, ViewportLayout viewportLayout1) { Entity eyeElement = null; Transformation elementTrs = new Transformation(1); if (ifcElement.Placement != null) { elementTrs = Conversion.getPlacementTransformtion(ifcElement.Placement); } if (ifcElement.Representation != null) { eyeElement = Conversion.getEntityFromIfcProductRepresentation(ifcElement.Representation, viewportLayout1, elementTrs); } if (eyeElement != null) { eyeElement.TransformBy(elementTrs); } if (ifcElement.IsDecomposedBy.Count > 0) { Block b = new Block(); foreach (IfcRelAggregates relAg in ifcElement.IsDecomposedBy) { foreach (IfcElement el in relAg.RelatedObjects) { Entity entity = getEntityFromIfcElement(el, viewportLayout1); if (entity != null) { b.Entities.Add(entity); } } } if (eyeElement != null) { b.Entities.Add(eyeElement); } viewportLayout1.Blocks.Add(ifcElement.GlobalId, b); eyeElement = new IfcBlockReference(ifcElement.GlobalId); } if (eyeElement != null) { if (ifcElement.HasOpenings.Count > 0) { eyeElement = createOpenings(eyeElement, ifcElement, viewportLayout1); } if (eyeElement is BlockReference) { UtilityIfc.loadProperties((IfcBlockReference)eyeElement, ifcElement); } else { IfcMesh ifcMesh; Mesh eyeElementMesh; if (eyeElement is Solid) { Solid eyeElementSolid = (Solid)eyeElement; eyeElementMesh = eyeElementSolid.ConvertToMesh(); } else { eyeElementMesh = (Mesh)eyeElement; } Color color = eyeElementMesh.Color; colorMethodType cmt = eyeElementMesh.ColorMethod; ifcMesh = new IfcMesh(eyeElementMesh.Vertices, eyeElementMesh.Triangles); ifcMesh.Color = color; ifcMesh.ColorMethod = cmt; UtilityIfc.loadProperties(ifcMesh, ifcElement); eyeElement = ifcMesh; } } return(eyeElement); }
private Viewport GetViewport(int viewportIndex, ViewportLayout mScreenLayout, Viewport baseViewport) { // viewportIndex: // +-----------+ +-----------+ +-----+-----+ +-----+-----+ // | | | 0 | | | | | 0 | 1 | // | 0 | +-----------+ | 0 | 1 | +-----+-----+ // | | | 1 | | | | | 2 | 3 | // +-----------+ +-----------+ +-----+-----+ +-----+-----+ // FullScreen HorizontalSplit VerticalSplit FourWaySplit if (mScreenLayout == ViewportLayout.FullScreen) return baseViewport; Viewport splitViewport = new Viewport(baseViewport.Bounds); switch (mScreenLayout) { case ViewportLayout.HorizontalSplit: if (viewportIndex == 0) { splitViewport.Height /= 2; } else { splitViewport.Y = splitViewport.Height / 2; splitViewport.Height = splitViewport.Height - splitViewport.Y; } break; case ViewportLayout.VerticalSplit: if (viewportIndex == 0) { splitViewport.Width /= 2; } else { splitViewport.X = splitViewport.Width / 2; splitViewport.Width = splitViewport.Width - splitViewport.X; } break; case ViewportLayout.FourWaySplit: if (viewportIndex == 0 || viewportIndex == 1) { splitViewport.Height /= 2; } else { splitViewport.Y = splitViewport.Height / 2; splitViewport.Height = splitViewport.Height - splitViewport.Y; } if (viewportIndex == 0 || viewportIndex == 2) { splitViewport.Width /= 2; } else { splitViewport.X = splitViewport.Width / 2; splitViewport.Width = splitViewport.Width - splitViewport.X; } break; default: throw new InvalidOperationException("Screen layout not defined."); } return splitViewport; }
private Viewport GetViewport(int viewportIndex, ViewportLayout mScreenLayout, Viewport baseViewport) { // viewportIndex: // +-----------+ +-----------+ +-----+-----+ +-----+-----+ // | | | 0 | | | | | 0 | 1 | // | 0 | +-----------+ | 0 | 1 | +-----+-----+ // | | | 1 | | | | | 2 | 3 | // +-----------+ +-----------+ +-----+-----+ +-----+-----+ // FullScreen HorizontalSplit VerticalSplit FourWaySplit if (mScreenLayout == ViewportLayout.FullScreen) { return(baseViewport); } Viewport splitViewport = new Viewport(baseViewport.Bounds); switch (mScreenLayout) { case ViewportLayout.HorizontalSplit: if (viewportIndex == 0) { splitViewport.Height /= 2; } else { splitViewport.Y = splitViewport.Height / 2; splitViewport.Height = splitViewport.Height - splitViewport.Y; } break; case ViewportLayout.VerticalSplit: if (viewportIndex == 0) { splitViewport.Width /= 2; } else { splitViewport.X = splitViewport.Width / 2; splitViewport.Width = splitViewport.Width - splitViewport.X; } break; case ViewportLayout.FourWaySplit: if (viewportIndex == 0 || viewportIndex == 1) { splitViewport.Height /= 2; } else { splitViewport.Y = splitViewport.Height / 2; splitViewport.Height = splitViewport.Height - splitViewport.Y; } if (viewportIndex == 0 || viewportIndex == 2) { splitViewport.Width /= 2; } else { splitViewport.X = splitViewport.Width / 2; splitViewport.Width = splitViewport.Width - splitViewport.X; } break; default: throw new InvalidOperationException("Screen layout not defined."); } return(splitViewport); }
public override void LoadContent() { mScene = new Scene(); mActorMan = new ActorManager(mViews); GameResources.ActorManager = mActorMan; LevelManifest manifest; using (ContentManager manifestLoader = new ContentManager(SharedResources.Game.Services, "Content")) { manifest = manifestLoader.Load <LevelManifest>(mRequest.LevelName); manifestLoader.Unload(); // a LevelManifest does not use any Disposable resources, so this is ok. } // The IScreenHoncho tells this gameplay screen how to set up the PlayerViews and DrawSegments required to play this level IScreenHoncho screenHoncho = Activator.CreateInstance(Type.GetType(manifest.ScreenHonchoTypeName)) as IScreenHoncho; mViewContentLoader = new ContentManager(SharedResources.Game.Services, "Content"); foreach (PlayerInfo player in GameResources.PlaySession.Players) { mViews.Add(PlayerViewFactory.Create(player, mRequest.CharacterSelections[player.PlayerId], screenHoncho, mViewContentLoader)); } // Determine screen layout and create DrawSegments if (screenHoncho.PlayersUseSeparateViewports) { switch (GameResources.PlaySession.LocalPlayers.Count) { case 1: mScreenLayout = ViewportLayout.FullScreen; break; case 2: mScreenLayout = GameOptions.PreferHorizontalSplit ? ViewportLayout.HorizontalSplit : ViewportLayout.VerticalSplit; break; case 3: case 4: mScreenLayout = ViewportLayout.FourWaySplit; break; default: throw new InvalidOperationException("Unsupported number of local players."); } foreach (int playerId in GameResources.PlaySession.LocalPlayers.Keys) { HumanView playerView = mViews.Single(v => v.PlayerId == playerId) as HumanView; ICameraProvider cameraPlayerView = playerView as ICameraProvider; if (cameraPlayerView == null) { throw new LevelManifestException("When IScreenHoncho.PlayersUseSeparateViewports is true, HumanViews must implement the ICameraProvider interface."); } DrawSegment ds = new DrawSegment(mScene, cameraPlayerView.Camera); mDrawSegments.Add(ds); playerView.DrawSegment = ds; } } else { mScreenLayout = ViewportLayout.FullScreen; DrawSegment ds = new DrawSegment(mScene); mDrawSegments.Add(ds); foreach (int playerId in GameResources.PlaySession.LocalPlayers.Keys) { HumanView playerView = mViews.Single(v => v.PlayerId == playerId) as HumanView; playerView.DrawSegment = ds; } } // TODO: P3: Make sure all non-local players are connected mScene.Load(); mActorMan.LoadContent(manifest); // TODO: P3: Make sure all remote clients have loaded their game. foreach (PlayerView view in mViews) { view.Load(); } GameResources.LoadNewLevelDelegate = LoadNewLevel; SharedResources.Game.GraphicsDevice.DeviceLost += DeviceLostHandler; SharedResources.Game.GraphicsDevice.DeviceResetting += DeviceResettingHandler; SharedResources.Game.GraphicsDevice.DeviceReset += DeviceResetHandler; }
public static devDept.Eyeshot.Entities.Region getRegionFromIfcProfileDef(IfcProfileDef ipd, ViewportLayout viewportLayout1) { devDept.Eyeshot.Entities.Region region = null; if (ipd is IfcCircleProfileDef) { IfcCircleProfileDef crProfDef = (IfcCircleProfileDef)ipd; region = new CircularRegion(crProfDef.Radius); } else if (ipd is IfcIShapeProfileDef) // IfcIShapeProfileDef and all derived from { IfcIShapeProfileDef shProfDef = (IfcIShapeProfileDef)ipd; double halfWidth = shProfDef.OverallWidth / 2; double halfDepth = shProfDef.OverallDepth / 2; LinearPath lp = new LinearPath(Plane.XY, new Point2D(-halfWidth, -halfDepth), new Point2D(halfWidth, -halfDepth), new Point2D(halfWidth, -halfDepth + shProfDef.FlangeThickness), new Point2D(shProfDef.WebThickness / 2, -halfDepth + shProfDef.FlangeThickness), new Point2D(shProfDef.WebThickness / 2, +halfDepth - shProfDef.FlangeThickness), new Point2D(halfWidth, +halfDepth - shProfDef.FlangeThickness), new Point2D(halfWidth, halfDepth), new Point2D(-halfWidth, halfDepth), new Point2D(-halfWidth, halfDepth - shProfDef.FlangeThickness), new Point2D(-shProfDef.WebThickness / 2, halfDepth - shProfDef.FlangeThickness), new Point2D(-shProfDef.WebThickness / 2, -halfDepth + shProfDef.FlangeThickness), new Point2D(-halfWidth, -halfDepth + shProfDef.FlangeThickness), new Point2D(-halfWidth, -halfDepth) ); region = new devDept.Eyeshot.Entities.Region(lp); } else if (ipd is IfcRectangleProfileDef) { IfcRectangleProfileDef recProfDef = (IfcRectangleProfileDef)ipd; region = new RectangularRegion(recProfDef.XDim, recProfDef.YDim, true); } else if (ipd is IfcArbitraryClosedProfileDef) { IfcArbitraryClosedProfileDef arProfDef = (IfcArbitraryClosedProfileDef)ipd; ICurve cc = getICurveFromIfcCurve(arProfDef.OuterCurve); if (cc != null) { //foreach(Entity xx in cc.CurveList) // viewportLayout1.Entities.Add((Entity)xx.Clone(), 1); //viewportLayout1.Entities.Add((Entity)cc.Clone(), 2); region = new devDept.Eyeshot.Entities.Region(cc); } } else { if (!debug.Contains("IfcProfileDef not supported: " + ipd.KeyWord)) { debug += "IfcProfileDef not supported: " + ipd.KeyWord + "\n"; } } if (ipd is IfcParameterizedProfileDef) { IfcParameterizedProfileDef parProfDef = (IfcParameterizedProfileDef)ipd; if (parProfDef.Position != null && region != null) { Plane plane = getPlaneFromPosition(parProfDef.Position); Align3D algn = new Align3D(Plane.XY, plane); region.TransformBy(algn); //region.Translate(parProfDef.Position.Location.Coordinates.Item1, parProfDef.Position.Location.Coordinates.Item2, parProfDef.Position.Location.Coordinates.Item3); } } return(region); }