/// <summary> /// 测量两个对象集之间的投影距离,只能是当前工作部件中的对象,可用类型为 Point, Curve, Edge, Face, Body, Datum Plane. /// </summary> /// <param name="measureManager"></param> /// <param name="objects1"></param> /// <param name="objects2"></param> /// <param name="projectVector">投影矢量</param> /// <param name="type">测量类型</param> /// <returns>投影距离值</returns> public static (bool Success, double Distance, Point3d PointOn1stObjects, Point3d PointOn2ndObjects) MeasureProjectDistance(this MeasureManager measureManager, NXObject[] objects1, NXObject[] objects2, Vector3d projectVector, MeasureManager.ProjectionType type) { try { NXOpen.Unit lengthUnit = WorkPart.UnitCollection.FindObject("MilliMeter"); Direction direction = WorkPart.Directions.CreateDirection(new Point3d(), projectVector, NXOpen.SmartObject.UpdateOption.WithinModeling); MeasureDistance minimumMeasure = measureManager.NewScDistance(lengthUnit, CreateCollector(objects1), CreateCollector(objects2), direction, type, true); Measure measureFeature = minimumMeasure.CreateFeature(); var measureLine = measureFeature.GetEntities()[0] as Line; var minimumDistance = measureLine.GetLength(); Point3d pointOn1stObjects = measureLine.StartPoint; Point3d pointOn2ndObjects = measureLine.EndPoint; measureFeature.Delete(); return(true, minimumDistance, pointOn1stObjects, pointOn2ndObjects); } catch (Exception) { return(false, 0, new Point3d(), new Point3d()); } }
/// <summary> /// 使用 NXOpen 测量两个对象之间的距离 /// </summary> /// <param name="measureManager"></param> /// <param name="object1">对象1</param> /// <param name="object2">对象2</param> /// <returns>距离值</returns> public static (bool Success, double Distance, Point3d PointOn1stObject, Point3d PointOn2ndObject) MeasureDistance(this MeasureManager measureManager, DisplayableObject object1, DisplayableObject object2) { try { NXOpen.Unit lengthUnit = WorkPart.UnitCollection.FindObject("MilliMeter"); MeasureDistance distance = measureManager.NewDistance(lengthUnit, MeasureManager.MeasureType.Minimum, true, object1, object2); var measureFeature = distance.CreateFeature(); var measureLine = measureFeature.GetEntities()[0] as Line; var minimumDistance = measureLine.GetLength(); Point3d pointOn1stObject = measureLine.StartPoint; Point3d pointOn2ndObject = measureLine.EndPoint; measureFeature.Delete(); return(true, minimumDistance, pointOn1stObject, pointOn2ndObject); } catch (Exception) { return(false, 0, new Point3d(), new Point3d()); } }
void Update() { /****** * Check if player wants to enter or exit a vehicle ******/ player = GameObject.FindWithTag("PlayerFps"); if (Input.GetKeyDown("f")) { if (GameManager.isInsideVehicle == true) { //Set inside vehicle to false GameManager.isInsideVehicle = false; //Destroy camera on ship Destroy(GameObject.FindWithTag("MainCamera")); //Instantiate the player outside the vehicle Instantiate(InstantiatePlayer, exitPoint.transform.position, exitPoint.transform.rotation); //Set gravity on for vehicle gameObject.GetComponent <Rigidbody>().useGravity = true; } else { // Check for distance if outside of Vehicle if (MeasureDistance.checkDistance(6.5, player, entryPoint) == true && GameManager.hoveredObject == "shipEnterPoint") { //Set inside to true GameManager.isInsideVehicle = true; //destroy player Destroy(GameObject.FindWithTag("PlayerFps")); //Create new camera GameObject cameraPosition = GameObject.FindWithTag("ThirdPersonCameraShip"); var camera = Instantiate(cam, cameraPosition.transform.position, cameraPosition.transform.rotation); camera.transform.parent = gameObject.transform; //Set the vehicle to not use gravity (Only for space ships) gameObject.GetComponent <Rigidbody>().useGravity = false; } } //Reset hovered object, since it never made an exit GameManager.hoveredObject = ""; } }
void Start() { m_TargetBuildingBehaviour = GetComponent <UserDefinedTargetBuildingBehaviour>(); if (m_TargetBuildingBehaviour) { m_TargetBuildingBehaviour.RegisterEventHandler(this); Debug.Log("Registering User Defined Target event handler."); } measureDistance = FindObjectOfType <MeasureDistance>(); m_QualityDialog = FindObjectOfType <QualityDialog>(); if (m_QualityDialog) { //hiding Quality message at the begining if its enabled m_QualityDialog.GetComponent <CanvasGroup>().alpha = 0; } }
public override void OnInspectorGUI() { serializedObject.Update(); DrawDefaultInspector(); MeasureDistance script = serializedObject.targetObject as MeasureDistance; if (script == null) { return; } Transform startPoint = script.StartPoint; StringBuilder ss = new StringBuilder("Distance: "); if (startPoint != null) { float distance = Vector3.Distance(startPoint.position, script.transform.position); ss.Append(distance); } EditorGUILayout.LabelField(ss.ToString()); serializedObject.ApplyModifiedProperties(); }