static void Start() { objectPreviews = new Dictionary <Guid, DocumentPreviewServer>(); using (var service = DBES.ExternalServiceRegistry.GetService(DBES.ExternalServices.BuiltInExternalServices.DirectContext3DService) as DBES.MultiServerService) { var activeServerIds = service.GetActiveServerIds(); foreach (var o in ActiveDocument.Objects) { if (!ObjectPrimitive.IsSupportedObject(o, true)) { continue; } var preview = new DocumentPreviewServer(o); var serverId = preview.GetServerId(); objectPreviews.Add(serverId, preview); service.AddServer(preview); activeServerIds.Add(serverId); } service.SetActiveServers(activeServerIds); } Revit.RefreshActiveView(); }
static void RhinoDoc_DeleteRhinoObject(object sender, RhinoObjectEventArgs e) { if (e.TheObject.Document == ActiveDocument && ObjectPrimitive.IsSupportedObject(e.TheObject, false)) { Revit.EnqueueReadAction((doc, canceled) => objectPreviews[e.TheObject.Id]?.Unregister()); Revit.RefreshActiveView(); } }
static void RhinoDoc_AddRhinoObject(object sender, RhinoObjectEventArgs e) { if (e.TheObject.Document == ActiveDocument && ObjectPrimitive.IsSupportedObject(e.TheObject, true)) { Revit.EnqueueReadAction((doc, canceled) => new DocumentPreviewServer(e.TheObject).Register()); Revit.RefreshActiveView(); } }
void AddPointCloudPreviews(PointCloud previewCloud) { int verticesCount = previewCloud.Count; if (verticesCount > VertexThreshold) { primitives = new Primitive[(verticesCount / VertexThreshold) + ((verticesCount % VertexThreshold) > 0 ? 1 : 0)]; for (int c = 0; c < verticesCount / VertexThreshold; ++c) { var part = new Primitive.Part(c * VertexThreshold, (c + 1) * VertexThreshold); primitives[c] = new ObjectPrimitive(rhinoObject, previewCloud, part); } if ((verticesCount % VertexThreshold) > 0) { var part = new Primitive.Part((primitives.Length - 1) * VertexThreshold, verticesCount); primitives[primitives.Length - 1] = new ObjectPrimitive(rhinoObject, previewCloud, part); } } else { primitives = new Primitive[] { new ObjectPrimitive(rhinoObject, previewCloud) } }; } void AddMeshPreviews(Mesh previewMesh) { int verticesCount = previewMesh.Vertices.Count; if (verticesCount > VertexThreshold || previewMesh.Faces.Count > VertexThreshold) { // If it's insane big show as point clouds if (previewMesh.Faces.Count > (VertexThreshold - 1) * 16) { primitives = new Primitive[(verticesCount / VertexThreshold) + ((verticesCount % VertexThreshold) > 0 ? 1 : 0)]; for (int c = 0; c < verticesCount / VertexThreshold; ++c) { var part = new Primitive.Part(c * VertexThreshold, (c + 1) * VertexThreshold); primitives[c] = new ObjectPrimitive(rhinoObject, previewMesh, part); } if ((verticesCount % VertexThreshold) > 0) { var part = new Primitive.Part((primitives.Length - 1) * VertexThreshold, verticesCount); primitives[primitives.Length - 1] = new ObjectPrimitive(rhinoObject, previewMesh, part); } // Mesh.Reduce is slow in this case //previewMesh = previewMesh.DuplicateMesh(); //previewMesh.Reduce((BigMeshThreshold - 1) * 16, true, 5, true); } // Split the mesh into partitions else if (previewMesh.CreatePartitions(VertexThreshold, int.MaxValue)) { int partitionCount = previewMesh.PartitionCount; primitives = new Primitive[partitionCount]; for (int p = 0; p < partitionCount; ++p) { primitives[p] = new ObjectPrimitive(rhinoObject, previewMesh, previewMesh.GetPartition(p)); } } } else { primitives = new Primitive[] { new ObjectPrimitive(rhinoObject, previewMesh) } }; }
private void ColorHolder() { //default setting for objects ClearPHAM(); currentObject = ObjectPrimitive.Cylinder; // bool startHorizontal = false; // currentObject = ObjectPrimitive.Cylinder; int taskType = Random.Range(1, 5); switch (taskType) { case 1: initialTransform = GameObject.Find("VerticalHolder_TopLeft").transform.Find("TargetCylinder").transform; primitives["Cylinder"].transform.position = initialTransform.position; primitives["Cylinder"].transform.rotation = initialTransform.rotation; primitives["Cylinder"].SetActive(true); primitives["Cylinder"].GetComponent <DroppedObjectLogic>().SetDroppedStatus(false); GameObject.Find("HorizontalHolder_BotRight").GetComponent <Renderer>().material.color = Color.red; targetTransform = GameObject.Find("HorizontalHolder_BotRight").transform.Find("TargetCylinder").transform; GameObject.Find("HorizontalHolder_BotRight").GetComponent <Holder>().activate(); break; case 2: initialTransform = GameObject.Find("HorizontalHolder_TopLeft").transform.Find("TargetCylinder").transform; primitives["Cylinder"].transform.position = initialTransform.position; primitives["Cylinder"].transform.rotation = initialTransform.rotation; primitives["Cylinder"].SetActive(true); primitives["Cylinder"].GetComponent <DroppedObjectLogic>().SetDroppedStatus(false); GameObject.Find("VerticalHolder_BotRight").GetComponent <Renderer>().material.color = Color.red; targetTransform = GameObject.Find("VerticalHolder_BotRight").transform.Find("TargetCylinder").transform; GameObject.Find("VerticalHolder_BotRight").GetComponent <Holder>().activate(); break; case 3: initialTransform = GameObject.Find("HorizontalHolder_BotLeft").transform.Find("TargetCylinder").transform; primitives["Cylinder"].transform.position = initialTransform.position; primitives["Cylinder"].transform.rotation = initialTransform.rotation; primitives["Cylinder"].SetActive(true); primitives["Cylinder"].GetComponent <DroppedObjectLogic>().SetDroppedStatus(false); GameObject.Find("VerticalHolder_TopRight").GetComponent <Renderer>().material.color = Color.red; targetTransform = GameObject.Find("VerticalHolder_TopRight").transform.Find("TargetCylinder").transform; GameObject.Find("VerticalHolder_TopRight").GetComponent <Holder>().activate(); break; case 4: initialTransform = GameObject.Find("HorizontalHolder_TopoRight").transform.Find("TargetCylinder").transform; primitives["Cylinder"].transform.position = initialTransform.position; primitives["Cylinder"].transform.rotation = initialTransform.rotation; primitives["Cylinder"].SetActive(true); primitives["Cylinder"].GetComponent <DroppedObjectLogic>().SetDroppedStatus(false); GameObject.Find("VerticalHolder_BotLeft").GetComponent <Renderer>().material.color = Color.red; targetTransform = GameObject.Find("VerticalHolder_BotLeft").transform.Find("TargetCylinder").transform; GameObject.Find("VerticalHolder_BotLeft").GetComponent <Holder>().activate(); break; } }