123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- using netDxf;
- using netDxf.Entities;
- using System;
- using System.Collections.Generic;
- namespace MECF.Framework.UI.Core.DxfScript
- {
- public class GasFunnel : GasBaseShape
- {
- public GasFunnel(double x, double y, double z, double scaleX, double scaleY, double scaleZ, double rotation)
- {
- X = x;
- Y = y;
- Z = z;
- ScaleX = scaleX;
- ScaleY = scaleY;
- ScaleZ = scaleZ;
- Rotation = rotation;
- Id = CreateId(ShapeType.FUNNEL, x, y);
- }
- /// <summary>
- /// 坐标X
- /// </summary>
- public double X { get; set; }
- /// <summary>
- /// 坐标Y
- /// </summary>
- public double Y { get; set; }
- /// <summary>
- /// 坐标Z
- /// </summary>
- public double Z { get; set; }
- /// <summary>
- /// X轴的缩放因子
- /// </summary>
- public double ScaleX { get; set; }
- /// <summary>
- /// Y轴的缩放因子
- /// </summary>
- public double ScaleY { get; set; }
- /// <summary>
- /// Z轴的缩放因子
- /// </summary>
- public double ScaleZ { get; set; }
- /// <summary>
- /// 旋转角度
- /// </summary>
- public double Rotation { get; set; }
- /// <summary>
- /// 多条线
- /// </summary>
- public List<GasLine> GasLines { get; set; } = new List<GasLine>();
- /// <summary>
- /// 圆
- /// </summary>
- public List<GasCircle> GasCircles { get; set; } = new List<GasCircle>();
- public override bool Contains(double x, double y)
- {
- //是否点击到了线
- foreach (GasLine line in GasLines)
- {
- if (line.Contains(x, y)) return true;
- }
- //是否点击到了线内空间 后期优化
- return false;
- }
- public override void Move(double x, double y)
- {
- X = X + x; Y = Y + y;
- foreach (GasLine line in GasLines)
- {
- line.Move(x, y);
- }
- }
- /// <summary>
- /// 处理漏斗中的线
- /// </summary>
- /// <param name="insert"></param>
- public void SetGasLines(Insert insert)
- {
- var block = insert.Block;
- foreach (EntityObject blockEntity in block.Entities)
- {
- //处理块中包含的类型
- if (blockEntity.Type == EntityType.Line)
- {
- Line line = (Line)blockEntity;
- var start = TransformPoint(line.StartPoint, insert);
- var end = TransformPoint(line.EndPoint, insert);
- GasLines.Add(new GasLine(start.X, start.Y, end.X, end.Y));
- }
- }
- }
- // 计算实际坐标,考虑插入点、比例和旋转
- private static Vector3 TransformPoint(Vector3 point, Insert insert)
- {
- // 应用比例变换
- double x = point.X * insert.Scale.X;
- double y = point.Y * insert.Scale.Y;
- double z = point.Z * insert.Scale.Z;
- // 应用旋转变换
- double angle = insert.Rotation * Math.PI / 180.0; // 将角度转换为弧度
- double cosAngle = Math.Cos(angle);
- double sinAngle = Math.Sin(angle);
- double rotatedX = x * cosAngle - y * sinAngle;
- double rotatedY = x * sinAngle + y * cosAngle;
- // 应用插入点偏移
- double finalX = insert.Position.X + rotatedX;
- double finalY = insert.Position.Y + rotatedY;
- double finalZ = insert.Position.Z + z;
- return new Vector3(finalX, finalY, finalZ);
- }
- }
- }
|