Quellcode durchsuchen

cad转换适配3d线

欧阳劲驰 vor 2 Monaten
Ursprung
Commit
66bfd7d589

+ 12 - 1
src/main/java/com/shkpr/service/alambizplugin/components/GisSurveyCadConverter.java

@@ -1,9 +1,12 @@
 package com.shkpr.service.alambizplugin.components;
 
+import com.aspose.cad.Color;
 import com.aspose.cad.Image;
 import com.aspose.cad.ImageOptionsBase;
+import com.aspose.cad.fileformats.ObserverPoint;
 import com.aspose.cad.fileformats.cad.CadDrawTypeMode;
 import com.aspose.cad.fileformats.cad.CadImage;
+import com.aspose.cad.fileformats.cad.cadobjects.polylines.CadPolyline3D;
 import com.aspose.cad.imageoptions.*;
 import com.global.base.log.LogLevelFlag;
 import com.global.base.log.LogPrintMgr;
@@ -70,6 +73,10 @@ public class GisSurveyCadConverter {
         //读取输入流
         Image image = CadImage.load(inputStream);
 
+        //判断是否有3D线
+        boolean isCadPolyline3D = ((CadImage) image).getEntities().stream()
+                .anyMatch(entity -> entity instanceof CadPolyline3D);
+
         //导出图像配置
         ImageOptionsBase options;
         switch (cadEnum) {
@@ -131,7 +138,7 @@ public class GisSurveyCadConverter {
                 options = new SvgOptions();
                 ((SvgOptions) options).setTextAsShapes(false);
                 ((SvgOptions) options).setUseAbsoluteRescaling(false);
-                ((SvgOptions) options).setRescaleSubpixelLinewidths(false);
+                if (!isCadPolyline3D) ((SvgOptions) options).setRescaleSubpixelLinewidths(false);
                 break;
             case THREE_DS:
                 options = new ThreeDSOptions();
@@ -159,11 +166,15 @@ public class GisSurveyCadConverter {
         rasterizationOptions.setPageHeight(Math.max(image.getHeight(), cadConvertProperties.getRasterizationMinHeight()));
         //使用原本颜色
         rasterizationOptions.setDrawType(CadDrawTypeMode.UseObjectColor);
+        //黑色背景
+        rasterizationOptions.setBackgroundColor(Color.getBlack());
         //缩放配置
         rasterizationOptions.setNoScaling(false);
         rasterizationOptions.setAutomaticLayoutsScaling(true);
         //质量配置
         rasterizationOptions.getQuality().setTextThicknessNormalization(true);
+        //调整视角
+        if (isCadPolyline3D) rasterizationOptions.setObserverPoint(new ObserverPoint(1, 0, 0));
 
         options.setVectorRasterizationOptions(rasterizationOptions);