Skip to content

调整已存在的测量注释

对于已经存在的测量注释,可以重新设置比例尺,单位,精确度等测量相关信息,而无需重新绘制该注释。

以线段测量工具为例,您可以通过以下步骤,调整已存在的测量注释的属性:

  1. AnnotActiveHandler 返回的数据中,线段测量工具到的注释对象CPDFAnnotationType 参数为C_ANNOTATION_TYPE.C_ANNOTATION_LINE,据此将CPDFAnnotation类型的线段测量工具转换为CPDFLineAnnotation对象。
  2. 调用IsMersured方法判断该对象是否为测量工具,然后调用GetDistanceMeasure方法,获取该注释对应的CPDFDistanceMeasure 对象。
  3. CPDFDistanceMeasure 对象中获取到MeasureInfo,并对MeasureInfo赋值。
  4. 调用CPDFDistanceMeasureSetMeasureInfoSetMeasureScaleUpdateAnnotMeasure完成参数更新。
  5. 最后调用CPDFAnnotationUpdateAp方法更新注释外观,再调用 args.Draw更新绘制。

以下是调整已存在的测量注释的示例代码:

c#
  //args为AnnotCommandHandler传递过来的对象

  CPDFAnnotation pdfAnnot = args.GetPDFAnnot();
  switch (pdfAnnot.Type)
  {
    case C_ANNOTATION_TYPE.C_ANNOTATION_LINE:
    {
        // 将 CPDFAnnotation 类型的线段测量工具转换为 CPDFLineAnnotation 对象。
        CPDFLineAnnotation lineAnnot = (CPDFLineAnnotation)pdfAnnot;
        // 判断该对象是否为测量工具。
        if (lineAnnot.IsMersured())
        {
            // 获取该注释对应的 CPDFDistanceMeasure 对象。
            CPDFDistanceMeasure lineMeasure = lineAnnot.GetDistanceMeasure();
            
            // 设置新的测量相关属性。
            CPDFMeasureInfo measureInfo = lineMeasure.MeasureInfo;
            measureInfo.Precision = MeasureSetting.GetMeasureSavePrecision();
            measureInfo.RulerBase = (float)MeasureSetting.RulerBase;
            measureInfo.RulerBaseUnit = MeasureSetting.RulerBaseUnit;
            measureInfo.RulerTranslate = (float)MeasureSetting.RulerTranslate;
            measureInfo.RulerTranslateUnit = MeasureSetting.RulerTranslateUnit;
            
            // 完成参数更新。
            lineMeasure.SetMeasureInfo(measureInfo);
            lineMeasure.SetMeasureScale(
            measureInfo.RulerBase,
            measureInfo.RulerBaseUnit,
            measureInfo.RulerTranslate,
            measureInfo.RulerTranslateUnit);
            lineMeasure.UpdateAnnotMeasure();
            
            // 更新注释外观。
            lineAnnot.UpdateAp();
            
            // 更新绘制。
            args.Draw();
        }
    }
    break;
  }