public void Measure(MeasureTypeEnum measureType) { m_measureType = measureType; bStillMeasure = true; m_interactionEvents = m_inventorApplication.CommandManager.CreateInteractionEvents(); m_Interaction_OnTerminate_Delegate = new InteractionEventsSink_OnTerminateEventHandler(InteractionEvents_OnTerminate); m_interactionEvents.OnTerminate += m_Interaction_OnTerminate_Delegate; m_MeasureEvents = m_interactionEvents.MeasureEvents; m_Measure_OnMeasure_Delegate = new MeasureEventsSink_OnMeasureEventHandler(MeasureEvents_OnMeasure); m_MeasureEvents.OnMeasure += m_Measure_OnMeasure_Delegate; m_interactionEvents.Start(); if (m_measureType == MeasureTypeEnum.kDistanceMeasure) { m_MeasureEvents.Measure(MeasureTypeEnum.kDistanceMeasure); } do { m_inventorApplication.UserInterfaceManager.DoEvents(); }while (bStillMeasure); m_interactionEvents.Stop(); m_MeasureEvents = null; m_interactionEvents = null; }
/// <summary> /// 测量 /// </summary> /// <param name="measureType">测量类型,有距离、面积和方位角</param> public void Measure(MeasureTypeEnum measureType) { ReleaseTool(); // 执行命令前,先释放上一次的工具命令 switch (measureType) { case MeasureTypeEnum.Distance: currentTool = new MeasureDistance(gmapControl); break; case MeasureTypeEnum.Area: currentTool = new MeasureArea(gmapControl); break; case MeasureTypeEnum.Angle: currentTool = new MeasureAngle(gmapControl); break; default: break; } if (currentTool != null) { currentTool.CommondExecutedEvent += CommondExecutedEvent; currentTool.RunCommond(); } }
private void MeasureEvents_OnMeasure(MeasureTypeEnum MeasureType, double MeasuredValue, NameValueMap Context) { string strMeasuredValue; if (m_measureType == MeasureTypeEnum.kDistanceMeasure) { strMeasuredValue = m_inventorApplication.ActiveDocument.UnitsOfMeasure.GetStringFromValue(MeasuredValue, UnitsTypeEnum.kDefaultDisplayLengthUnits); MessageBox.Show("Distance = " + strMeasuredValue, "Measure Distance"); bStillMeasure = false; } }
private void measureOpenButton_Click(object sender, EventArgs e) { // set measure type measureType = MeasureTypeEnum.OPEN; // set measuring flag isMeasuring = true; // disable ui enableUi(false); // start background task measureBackgroundWorker.RunWorkerAsync(); }
/// <summary> /// 根据XML 反序列化 /// </summary> /// <param name="xmlNode"></param> /// <returns></returns> private BIFStruct UnSerializePoint(XmlNode xmlNode) { BIFStruct bif = new BIFStruct(); int arrayNo = 0; int.TryParse(xmlNode.SelectSingleNode("ArrayNo").InnerText, out arrayNo); string pointNo = xmlNode.SelectSingleNode("PointNo").InnerText; double height = 0.0; double.TryParse(xmlNode.SelectSingleNode("Height").InnerText, out height); double distance = 0.0; double.TryParse(xmlNode.SelectSingleNode("Distance").InnerText, out distance); StaffTypeEnum staffType = ("Upright" == xmlNode.SelectSingleNode("StaffType").InnerText ? StaffTypeEnum.Upright : StaffTypeEnum.Down); string referNo = xmlNode.SelectSingleNode("ReferNo").InnerText; MeasureTypeEnum measureType = MeasureTypeEnum.I; switch (xmlNode.SelectSingleNode("MeasureType").InnerText) { case "B": measureType = MeasureTypeEnum.B; break; case "I": measureType = MeasureTypeEnum.I; break; case "F": measureType = MeasureTypeEnum.F; break; default: measureType = MeasureTypeEnum.I; break; } string isReferNo = xmlNode.SelectSingleNode("IsReferNo").InnerText; double elevation = 0.0; double.TryParse(xmlNode.SelectSingleNode("Elevation").InnerText, out elevation); double designElevation = 0.0; double.TryParse(xmlNode.SelectSingleNode("DesignElevation").InnerText, out designElevation); double cut = 0.0; double.TryParse(xmlNode.SelectSingleNode("Cut").InnerText, out cut); double fill = 0.0; double.TryParse(xmlNode.SelectSingleNode("Fill").InnerText, out fill); double deltaHeight = 0.0; double.TryParse(xmlNode.SelectSingleNode("DeltaHeight").InnerText, out deltaHeight); bif.ArrayNo = arrayNo; bif.PointNo = pointNo; bif.Height = height; bif.Distance = distance; bif.StaffType = staffType; bif.ReferNo = referNo; bif.MeasureType = measureType; bif.IsReferNo = isReferNo; bif.Elevation = elevation; bif.DesignElevation = designElevation; bif.Cut = cut; bif.Fill = fill; bif.DeltaHeightDh = deltaHeight; return(bif); }
private void ExtendPort(int portNumber, long activeMarkerNumber, MeasureTypeEnum measureType, bool includeLoss) { // validate active marker number if (activeMarkerNumber > 0) { object err; double[] markerData; int numberOfMarkers; double markerExtendedPhase; double markerExtendedPhaseFreq; double markerLogMagnitude; double markerLogMagnitudeFreq; try { // set measurement parameter of trace 1 string parameter = ""; switch (portNumber) { default: case 1: parameter = "S11"; break; case 2: parameter = "S22"; break; } Program.vna.app.SCPI.Calculate[selectedChannel].Parameter[1].DEFine = parameter; // ------------------------------------------------------------------------------------------------ // generate a single trigger and wait for completion err = Program.vna.app.SCPI.INITiate[selectedChannel].IMMediate; err = Program.vna.app.SCPI.TRIGger.SEQuence.SINGle; // set trace 1 data format to expanded phase Program.vna.app.SCPI.CALCulate[selectedChannel].SELected.FORMat = "UPHase"; // get marker data markerData = Program.vna.app.SCPI.CALCulate[selectedChannel].SELected.MARKer.DATA; // determine number of markers numberOfMarkers = (int)markerData[0]; // validate number of markers if (numberOfMarkers >= activeMarkerNumber) { // read frequency and delay values of active marker markerExtendedPhaseFreq = markerData[(3 * (int)activeMarkerNumber) - 2]; markerExtendedPhase = markerData[(3 * (int)activeMarkerNumber) - 1]; // calculate the delay double markerGroupDelay = 0.0; // is short being measured? if (measureType == MeasureTypeEnum.SHORT) { // yes... markerGroupDelay = -0.5 * ((markerExtendedPhase - 180) / 360) * (1 / markerExtendedPhaseFreq); } else { // no... markerGroupDelay = -0.5 * (markerExtendedPhase / 360) * (1 / markerExtendedPhaseFreq); } // set port extension delay Program.vna.app.SCPI.SENSe[selectedChannel].CORRection.EXTension.PORT[portNumber].TIME = markerGroupDelay; // include loss? if (checkBoxCompensateForLoss.Checked == true) { // yes... // set trace 1 data format to logarithmic magnitude Program.vna.app.SCPI.CALCulate[selectedChannel].SELected.FORMat = "MLOGarithmic"; // read frequency and logarithmic magnitude values of active marker markerData = Program.vna.app.SCPI.CALCulate[selectedChannel].SELected.MARKer.DATA; markerLogMagnitudeFreq = markerData[(3 * (int)activeMarkerNumber) - 2]; markerLogMagnitude = markerData[(3 * (int)activeMarkerNumber) - 1]; markerLogMagnitude = -1 * (markerLogMagnitude / 2); // set port frequency and loss to measured values for point 1 Program.vna.app.SCPI.SENSe[selectedChannel].CORRection.EXTension.PORT[portNumber].FREQuency[1] = markerLogMagnitudeFreq; Program.vna.app.SCPI.SENSe[selectedChannel].CORRection.EXTension.PORT[portNumber].LOSS[1] = markerLogMagnitude; Program.vna.app.SCPI.SENSe[selectedChannel].CORRection.EXTension.PORT[portNumber].INCLude[1].STATe = true; // point 2 is not used Program.vna.app.SCPI.SENSe[selectedChannel].CORRection.EXTension.PORT[portNumber].INCLude[2].STATe = false; Program.vna.app.SCPI.SENSe[selectedChannel].CORRection.EXTension.PORT[portNumber].FREQuency[2] = 1000000000; Program.vna.app.SCPI.SENSe[selectedChannel].CORRection.EXTension.PORT[portNumber].LOSS[2] = 0; } else { // be sure loss compensation is disabled for this port Program.vna.app.SCPI.SENSe[selectedChannel].CORRection.EXTension.PORT[portNumber].INCLude[1].STATe = false; Program.vna.app.SCPI.SENSe[selectedChannel].CORRection.EXTension.PORT[portNumber].INCLude[2].STATe = false; } } } catch { throw; } } }