lyhzzz 2 weeks ago
parent
commit
ff723a7b34

+ 42 - 18
4dkankan-utils-dxf/src/main/java/com/fdkankan/dxf/parse/utils/LaserMeterToDxfUtil.java

@@ -78,7 +78,7 @@ public class LaserMeterToDxfUtil {
             if(type.contains("AREA") || type.contains("RECTANGLE")){
                 for (int i = 0 ;i < points.size();i ++){
                     JSONObject point1 = (JSONObject) points.get(i);
-                    JSONObject point2 = (JSONObject) points.get(  i+1 >= points.size()? 0 :i+1 );
+                    JSONObject point2 = (JSONObject) points.get(i+1 >= points.size()? 0 :i+1);
                     drawLine(point1,point2,pointSet,dxfDocWriter,viewpoint);
                 }
             }
@@ -88,7 +88,7 @@ public class LaserMeterToDxfUtil {
                         continue;
                     }
                     JSONObject point1 = (JSONObject) points.get(i);
-                    JSONObject point2 = (JSONObject) points.get(  i+1 >= points.size()? 0 :i+1 );
+                    JSONObject point2 = (JSONObject) points.get( i+1 >= points.size()? 0 :i+1);
                     drawLine(point1,point2,pointSet,dxfDocWriter,viewpoint);
                 }
             }
@@ -100,17 +100,17 @@ public class LaserMeterToDxfUtil {
 
         }
 
-        for (Vector3 vector3 : pointSet) {
-            DxfArc dxfArc = new DxfArc();
-            dxfArc.setCenter(vector3);
-            dxfArc.setRadius(0.5);
-            dxfArc.setStartAngle(0);
-            dxfArc.setEndAngle(360);
-            dxfArc.setSolid(true);
-            dxfArc.setSolidColor(new Color(255,255,255));
-            dxfArc.setColor(new Color(255,255,255));
-            dxfDocWriter.addEntity(dxfArc);
-        }
+//        for (Vector3 vector3 : pointSet) {
+//            DxfArc dxfArc = new DxfArc();
+//            dxfArc.setCenter(vector3);
+//            dxfArc.setRadius(0.5);
+//            dxfArc.setStartAngle(0);
+//            dxfArc.setEndAngle(360);
+//            dxfArc.setSolid(true);
+//            dxfArc.setSolidColor(new Color(255,255,255));
+//            dxfArc.setColor(new Color(255,255,255));
+//            //dxfDocWriter.addEntity(dxfArc);
+//        }
         dxfDocWriter.save(outPath, true);
 
     }
@@ -145,20 +145,24 @@ public class LaserMeterToDxfUtil {
         BigDecimal bigDecimal = BigDecimal.valueOf(distanceTo(point3d1, point3d2) ).setScale(4, RoundingMode.UP);
         DxfText dxfText = new DxfText();
 
-
-        double px = startPoint.getX() + (2.0/5.0) * (endPoint.getX() - startPoint.getX());
-        double py = startPoint.getY() + (2.0/5.0) * (endPoint.getY() - startPoint.getY());
-        double pz = startPoint.getZ() + (2.0/5.0) * (endPoint.getZ() - startPoint.getZ());
+        double px = startPoint.getX() + getPointAngle(endPoint.getX() , startPoint.getX());
+        double py = startPoint.getY() + getPointAngle(endPoint.getY() , startPoint.getY());
+        double pz = startPoint.getZ() + getPointAngle(endPoint.getZ() , startPoint.getZ());
 
         Vector3 vector3 = new Vector3(px   , py  , pz);
         dxfText.setStartPoint(vector3);
         dxfText.setText(bigDecimal.toString()+"m");
-        dxfText.setAngle(angleBetween(startPoint,endPoint));
+        //dxfText.setAngle(angleBetweenVectorsRad(startPoint,endPoint));
+        //dxfText.setInclination(angleBetweenVectorsDeg(startPoint,endPoint));
         dxfText.setHigh(bigDecimal.doubleValue() * 2);
         dxfText.setColor(new Color(255,255,255));
         dxfDocWriter.addEntity(dxfText);
     }
 
+    public static double getPointAngle(double x ,double y){
+        return  (2.0/5.0) * (x - y);
+    }
+
     public static void drawLinePoint(Vector3 point,Vector3 point2,DxfDocWriter dxfDocWriter){
         DxfLine dxfLine = new DxfLine();
         dxfLine.setStartPoint(new Vector3(point.getX(), point.getY(), point.getZ()));
@@ -175,6 +179,26 @@ public class LaserMeterToDxfUtil {
         return atan;
     }
 
+    public static double angleBetweenVectorsRad(Vector3 point, Vector3 point2) {
+        // 计算点积
+        double dotProduct = point.getX() * point2.getX() + point.getY() * point2.getY() + point.getZ() * point2.getZ();
+
+        // 计算向量的模
+        double magA = Math.sqrt(point.getX() * point.getX() + point.getY() * point.getY() + point.getZ() * point.getZ());
+        double magB = Math.sqrt(point2.getX() * point2.getX() + point2.getY() * point2.getY() + point2.getZ() * point2.getZ());
+
+        // 计算余弦值,并处理可能的浮点误差
+        double cosTheta = dotProduct / (magA * magB);
+        cosTheta = Math.max(Math.min(cosTheta, 1.0), -1.0);
+
+        return Math.acos(cosTheta);
+    }
+
+    public static double angleBetweenVectorsDeg(Vector3 point, Vector3 point2) {
+        double radians = angleBetweenVectorsRad(point, point2);
+        return Math.toDegrees(radians);
+    }
+
     // 计算两点之间的线段长度
     public static double distanceBetween(Vector3 p1, Vector3 p2) {
         double deltaX = p2.getX() - p1.getX();