Thứ Năm, 16 tháng 1, 2025

Biến đổi đối tượng trong AutoCAD dotNet | Transform an Entity in AutoCAD dotNet | AutoCAD dotNet

Ứng dụng được phát triển/Sưu tầm bởi đội ngũ AutoLISP Thật là đơn giản

   

Thông tin thêm: 👉👉👉

Entity.Transform 

Trong AutoCAD dotNet, để biến đổi 1 đối tượng Entity, ta sẽ phải sử dụng hàm Entity.TransformBy(mMatrix3d)

Trong đó mMatrix3d là một Matrix3d dùng để biến đổi đối tượng.



Matrix3d

Có 4 Matrix3d dùng để biến đổi đối tượng hay dùng đó là:
Code:
Matrix3d.Displacement(Vector3d vector)

Matrix3d.Rotation(double angle, Vector3d axis, Point3d center)

Matrix3d.Scaling(double scaleAll, Point3d center)

Matrix3d.AlignCoordinateSystem(Point3d fromOrigin, Vector3d fromXAxis, Vector3d fromYAxis, Vector3d fromZAxis, Point3d toOrigin, Vector3d toXAxis, Vector3d toYAxis, Vector3d toZAxis)


Căn (Align) Text theo đường thẳng


Để biến đổi Text theo line (đường thẳng 3D), nên có thể dùng kết hợp các Matrix3d.Displacement và Matrix3d.Rotation hoặc một phép biến đổi hệ trục Matrix3d.AlignCoordinateSystem

Cách sử dụng Matrix3d.AlignCoordinateSystem

Để sử dụng Matrix3d.AlignCoordinateSystem, bạn cần xác định được 2 hệ tọa độ:
- Hệ tọa độ gốc: là hệ tọa độ dùng để vẽ Text. Được định nghĩa bởi: Txt.Position, Vector3d.XAxis, Vector3d.YAxis, Vector3d.ZAxis

- Hệ tọa độ cần dịch chuyển đến. Được định nghĩa bởi: pl.StartPoint, v12, v90, vZ

Code:
var Txt = new DBText();
Line line = new Line(new Point3d(1000, 0, 500), new Point3d(0, 1110, 0));

Vector3d v12 = line.StartPoint.GetVectorTo(line.EndPoint).GetNormal();
Vector3d vZ = Vector3d.ZAxis; //Cần xác định lại Vector này cho phù hợp
Vector3d v90 = line.StartPoint.GetVectorTo(line.EndPoint).RotateBy(Math.PI * 0.5, vZ).GetNormal();

Txt.TransformBy(Matrix3d.AlignCoordinateSystem(Txt.Position, Vector3d.XAxis, Vector3d.YAxis, Vector3d.ZAxis, line.StartPoint, v12, v90, vZ));
ed.WriteMessage("\nwww.lisp.vn");

Lưu ý, 1 đường thẳng (line) trong không gian 3d chưa đủ căn cứ xác định hệ tọa độ, nên sẽ cần phải giả định thêm cho đủ hệ. Trong đoạn code mẫu, mình giả định vector vZ trùng với Vector3d.ZAxis.

Nhóm AutoCAD dotNet


Link tham gia nhóm Zalo: http://dnz.lisp.vn

---------------------------------------------------------------------------------------------
Ứng dụng được phát triển bởi đội ngũ AutoLISP Thật là đơn giản - Tác giả ứng dụng in D2P

    

Mọi thông tin xin liên hệ Fanpage AutoLISP Thật là đơn giản!
Cảm ơn bạn đã theo dõi!

Không có nhận xét nào:

Đăng nhận xét

Kiểm tra ExpressTools đã load chưa trong AutoCAD | Checkif ExpressTools is loaded already in AutoCAD dotNet | AutoCAD dotNet

Ứng dụng được phát triển/Sưu tầm bởi đội ngũ AutoLISP Thật là đơn giản     Thông tin thêm: 👉👉👉