|
@@ -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();
|