anhcos
-
Số lượng nội dung
305 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
21
Bài đăng được đăng bởi anhcos
-
-
qua VB.Net bạn không nên dùng On error resume next nữa mà nên dùng cú pháp Try Catch End Try để bắt lỗi.
VD: Khởi động và liên kết với GCAD Star, AutoCAD cũng tương tự:
DIm CadApp as Object
Try
CadApp = GetObject(,"GCAD.Application")
Catch
CadApp = CreateObject("GCAD.Application")
End try
Mặc định bản Acad/Gcad sẽ không hiển thị, vì thế phải dùng lệnh CadApp.Visible = True sau đó.
Trong khi chạy thử, bạn đã vô tình tạo ra một số phiên (session) của Cad chạy ở background, nên cái dòng GetObject kia sẽ liên kết với phiên đang ẩn --> Đã có liên kết nhưng bạn không trông thấy được.
Dùng TaskManager đóng hết các session đang chạy của CAD. rồi chạy lại.
Bài hướng dẫn VB.NET cho AutoCAD ở đây, tất cả đều áp dụng được cho GCAD.
- 1
-
======================================================================
Với VB6 : thì toàn bộ các biến liên quan đến CAD em đều khai báo Object
Ví dụ
Dim AcadApp as Object
======================================================================
Nếu VB6 như thế thì VB.NET bạn cũng dùng như thế.
Đừng import các thư viện của CAD vào, như vậy sẽ chạy với mọi phiên bản AutoCAD và đặc biệt là với GCAD luôn.
- 1
-
Của bạn đây:
Lấy danh sách các máy in (mảng các chuỗi): .GetPlotDeviceNames
Chọn máy in: .ConfigName
Lấy danh sách các khổ giấy tương ứng với máy in trên (mảng chuỗi): .GetCanonicalMediaNames
Mấy cái này có trong help hết, bạn xem là có.
-
Hix, vậy còn cái Plot Offset làm sao để chỉnh X,Y theo ý muốn bác nhỉ
Dùng PlotOrigin để chỉnh.
Các chi tiết về thuộc tính và hàm đối tượng sử dụng file Help của CAD trong thư mục Help.
Mở file acad_dev*.chm, chọn ActiveX and VBA reference ấy.
-
Cái StyleName mình không rành, nhưng bạn bỏ đi xem có dùng được không.
Còn 2 điểm pt1, pt2 là mảng 2 phần từ (Variant (two-element array of doubles))
-
Bạn dùng thêm từ set là được
set a = b.mirror(A1,B1)
set c= a.offset (5)
Cái vụ set này lâu rồi không còn dùng nên chẳng nhớ được.
- 1
-
Các bác cho e hỏi xí về VBA,e muốn offset các đối tượng sau khi mirror mà sao không thực hiện dc nhỉ
b as acadline
a as variant
c as variant
a = b.mirror(A1,B1)
c= a.offset (5)
'cho em hoi tai sao cad không vẽ được đường thẳng c ạ,tương tự thế sao e không set layer cho đối tượng c được ạ.Cảm ơn các bác
Đoạn lệnh này mình không thấy gì có lỗi.
Có những đối tượng sau khi offset thì chia thành nhiều đối tượng con, vì thế c là mảng các đối tượng sau khi offset.
Bạn kiểm tra số lượng các đối tượng và thay đổi giá trị
VD:
c(0).Layer = "cadviet"
Tổng quát hơn
for i=0 to ubound©
c(i).Layer ="0"
next i
- 1
-
AutoCAD .NET
trong Lập trình khác
3. Vì có thể đọc được code của nó. E ví dụ ở đây là 1 số hàm check lience code dạng Boolean, kết quả trả về True or Flase.
Có khi nào "đè" được nó thành hàm luôn luôn trả True ?
Nếu sử dụng private thì khó mà bị ghi đè, tuy nhiên phần kết quả trả về như bạn nói vẫn có thể thay đổi được bằng kỹ thuật patch (không cần biết đè hay không)
Nói chung, ứng dụng là để dùng và bảo mật là tránh mấy kẻ tò mò, còn gặp thợ thì cũng thua.
-
Đã xong cho bạn đây rồi, nhưng nhớ đừng hỏi về spline nhé, hơi khó làm.
Với cái tiêu đề không biết số lượng có quá nhiều không, vì nhiều thì chưa biết chương trình chạy có nổi không?
Bạn có thể gởi một cái file gốc chứa kha khá đối tượng để test thử xem như thế nào.
- 2
-
Nhìn bản vẽ thì thấy dễ làm, nhưng líp thì lại không biết.
-
Mình cũng góp vui một tí với chương trình của mình: http://www.mediafire...322fdncyewgrfut
Chương trình cho phép:
- Mỗi lần có thể chọn nhiều đối tượng, mỗi lần nên chọn cỡ 10 tập là được, càng chọn nhiều càng chậm.
- Chọn theo window, các đối tượng thừa sẽ không được tính đến
- Tự xác định tập và điểm quay của tập đó.
- Xem trước các thay đổi tương ứng với góc nhập vào
-
Mỗi tập đối tượng có 3 text và 3 đường thẳng có quy luật rõ ràng.
Như vậy nếu CHỈ chọn đúng và nhiều các đối tượng cần thiết thì dư sức tách ra thành từng nhóm riêng biệt và biết luôn điểm quay của từng tập con.
Còn góc quay thì có thể nhập vào hoặc xác định thông qua đường bao ở chân.
- 1
-
1. Bạn hỏi cái này trong VBA, vậy liệu có phải là nhầm chủ đề rồi không?
2. Nếu bình thuờng thì cứ bắt điểm vuông góc (per) thôi.
Đoạn này người ta hỏi về VBA, bạn lấy CAD ra trả lời.
Em thì không biết gì về VBA, nhưng mà có vô số đường vuông góc chung với 2 đường này. Bởi vì đường vuông góc ấy chính là giao tuyến của hai mặt phẳng, mỗi mặt phẳng trong đó lấy lần lượt d1 d2 làm pháp tuyến.
Mặt phẳng vuông góc với d1 có phương trình là :
0x+50y-50z+D1=0
Mặt phẳng vuông góc với d2 có phương trình là:
25x+25y+50z+D2=0
Đường thẳng cần tìm có phương trình là:
0x+50y-50z+D1=0 và 25x+25y+25z+D2=0. Từ đây có thể dựng nó qua 2 điểm tìm được từ phương trình trên!
Đoạn này hỏi về CAD, bạn lại đem cái khác ra.
2 phương trình 3 ẩn x,y,z nói chung là khó giải lắm.
- 1
-
Cám ơn anh em đã nhiệt tình giúp đỡ. Mình sẽ nghiên cứu sub về đường thẳng. nhưng vấn đề khó khăn ở đây là đường tròn và spline, cái này không biết anh em nào đã thử làm chưa cho mình tham khảo thuật toán cùng với. xin chân thành cám ơn anh em rất nhiều!
SPLine thì mình chưa nghiên cứu, còn elip, đường tròn, point, line thì mình đã và đang làm.
Đã dịch thành thư viện, tải ở đây: anhcos.geometry.dll. (viết bằng C#)
Lưu ý: đây là bản đang phát triển, nên vẫn còn lỗi...
Cách dùng:
- Từ VB: dùng từ khóa Declare để import các cấu trúc dữ liệu từ dll. Cái này tự nghiên cứu, mình không rành.
- Từ VS:
Chèn vào đầu file
Imports Anhcos.Geometry
hoặc using Anhcos.Geometry
Các kiểu dữ liệu trong thư viện
PointD: cấu trúc điểm trong 3D
Vector: thông tin về vector, tính tích vô hướng, có hướng
Line:
Plane: Mặt phẳng
Circle
Ellipse
VD: Tìm hình chiếu G của M trên đường thẳng L
Dim M as new Point(Mx,My,Mz)
Dim L as new Line(LineObj.StartPoint,LineObj.EndPoint)
Dim G as PointD = M.Project(L) 'hình chiếu của M trên L
VD: Tìm hình chiếu G của M trên mặt phẳng chứa đường tròn C
Dim M as new Point(Mx,My,Mz)
Dim C as new Circle(CircleObj.Normal, CircleObj.Center, CircleObj.Radius)
Dim G as PointD = M.Project© 'hình chiếu của M trên C
Một đoạn code trong thư viện:
/// <summary>Cấu trúc điểm trong hệ tọa độ 3 chiều</summary> public class PointD { /// <summary>Hoành độ của điểm</summary> public double X; /// <summary>Tung độ của điểm</summary> public double Y; /// <summary>Cao độ của điểm</summary> public double Z; /// <summary>Khởi tạo với 3 phần tử X,Y,Z đều bằng 0</summary> public PointD() { X = Y= Z = 0; } /// <summary>Khởi tạo giá trị cho một điểm</summary> public PointD(Single X, Single Y, Single Z) { this.X = (double)X; this.Y = (double)Y; this.Z = (double)Z; } /// <summary>Khởi tạo giá trị cho một điểm 2D</summary> public PointD(Single X, Single Y) { this.X = (double)X; this.Y = (double)Y; this.Z = 0; } /// <summary>Khởi tạo giá trị cho một điểm</summary> public PointD(double X, double Y, double Z) { this.X = X; this.Y = Y; this.Z = Z; } /// <summary>Khởi tạo giá trị cho một điểm 2D</summary> public PointD(double X, double Y) { this.X = X; this.Y = Y; this.Z = 0; } /// <summary>Khởi tạo giá trị cho một điểm khi biết tham số t của đường thẳng</summary> public PointD(Line L, double t) { X = L.M0.X + L.Normal.A * t; Y = L.M0.Y + L.Normal.B * t; Z = L.M0.Z + L.Normal.C * t; } /// <summary>Khởi tạo giá trị cho một điểm khi biết tham số t của đường thẳng, 1 điểm trên đường thẳng và vector chỉ phương</summary> public PointD(Vector Normal, PointD M0, double t) { X = M0.X + Normal.A * t; Y = M0.Y + Normal.B * t; Z = M0.Z + Normal.C * t; } /// <summary>Nhập tọa độ từ một biến có kiểu tọa độ của AutoCAD, là mảng 3 phần tử X,Y,Z</summary> public PointD(object AcadPointD) { try { double[] pts = (double[])AcadPointD; X = pts[0]; Y = pts[1]; Z = pts[2]; } catch { X = Y = Z = 0; } } /// <summary>So sánh trùng 2 điểm</summary> public static bool operator ==(PointD P1, PointD P2) { return (P1.X == P2.X && P1.Y == P2.Y && P1.Z == P2.Z); } /// <summary>So sánh không trùng 2 điểm</summary> public static bool operator !=(PointD P1, PointD P2) { return !(P1.X == P2.X && P1.Y == P2.Y && P1.Z == P2.Z); } /// <summary>So sánh trùng 2 điểm</summary> public override bool Equals(object obj) { PointD P2 = (PointD)obj; return (X == P2.X && Y == P2.Y && Z == P2.Z); } /// <summary>Hàm băm</summary> public override int GetHashCode() { return base.GetHashCode(); } /// <summary>Tổng của 2 điểm</summary> public static PointD operator +(PointD P1, PointD P2) { return new PointD(P1.X + P2.X, P1.Y + P2.Y, P1.Z + P2.Z); } /// <summary>Hiệu của 2 điểm</summary> public static PointD operator -(PointD P1, PointD P2) { return new PointD(P1.X - P2.X, P1.Y - P2.Y, P1.Z - P2.Z); } /// <summary>Nhân một điểm với một số</summary> public static PointD operator *(double K, PointD P) { return new PointD(K * P.X, K * P.Y, K * P.Z); } /// <summary>Nhân một điểm với một số</summary> public static PointD operator *(PointD P,double K) { return new PointD(K * P.X, K * P.Y, K * P.Z); } /// <summary>Chia một điểm với một số</summary> public static PointD operator /(PointD P, double K) { return new PointD(P.X / K, P.Y / K, P.Z / K); } /// <summary>Khoảng cách giữa 2 điểm</summary> public double Distance(PointD P) { return System.Math.Sqrt((X - P.X) * (X - P.X) + (Y - P.Y) * (Y - P.Y) + (Z - P.Z) * (Z - P.Z)); } /// <summary>Khoảng cách giữa nó đến một đường thẳng</summary> public double Distance(Line L) { return L.Distance(this); } /// <summary>Khoảng cách giữa nó đến một mặt phẳng</summary> public double Distance(Plane PL) { return PL.Distance(this); } /// <summary>Hình chiếu của nó lên một đường thẳng</summary> /// Sử dụng mảng để tương thích public PointD[] Project(Line L) { //Giao điểm G giữa đường thẳng L với đường thẳng qua điểm này và vuông góc với L //G thuộc L --> xG = xL0 + At, yG = yL0 + Bt, zg = zL0 + Ct //Gọi d là khoảng cách từ điểm đến đường thẳng //d^2 = (xG - x0)^2 + (yG - y0)^2 + zG - z0)^2 = this.Distance(L) [1] //Thay xG, yG, zG vào phtr [1] --> //(xL0 + At - x0)^2 + (yL0 + Bt - y0)^2 + (zL0 + Ct - z0)^2 --> sau khi khai triển ta có phương trình bậc 2 ẩn t có 3 hệ số A, B, C double A = L.Normal.A * L.Normal.A + L.Normal.B * L.Normal.B + L.Normal.C * L.Normal.C; double B = 2 * (L.Normal.A * (L.M0.X - X) + L.Normal.B * (L.M0.Y - Y) + L.Normal.C * (L.M0.Z - Z)); double C = (L.M0.X - X) * (L.M0.X - X) + (L.M0.Y - Y) * (L.M0.Y - Y) + (L.M0.Z - Z) * (L.M0.Z - Z) - Distance(L); Math.QuadraticEquation eq2 = new Math.QuadraticEquation(A, B, C); double[] nghiem = eq2.Solve(); if (nghiem != null) { if (nghiem.Length == 1) return new PointD[] { L.GetPoint(nghiem[0]) }; else return new PointD[] { L.GetPoint(nghiem[0]), L.GetPoint(nghiem[1]) }; } return null; } /// <summary>Hình chiếu của nó lên một mặt phẳng</summary> /// Sử dụng mảng để tương thích public PointD[] Project(Plane PL) { //đường thẳng nối điểm này và điểm hình chiếu sẽ cùng phương với cevtor chỉ phương của mặt phẳng Line L = new Line(PL.Normal, this); PointD[] Intersects = L.IntersectWith(PL); if (Intersects != null) return Intersects; return null; } /// <summary>Di chuyển thêm một đoạn</summary> public void Move(double dX, double dY, double dZ) { X += dX; Y += dY; Z += dZ; } /// <summary>Di chuyển thêm một đoạn</summary> public void Move(PointD delta) { X += delta.X; Y += delta.Y; Z += delta.Z; } /// <summary>Sao chép điểm qua một biến mới</summary> public PointD Copy() { return new PointD(X, Y, Z); } /// <summary>Quay 3D một điểm quanh 1 điểm khác, tức là quay nó quanh đường thẳng vuông góc với mặt phẳng xOy /// Tọa độ Z sẽ không thay đồi</summary> public void Rotate(PointD Center, double Angle) { //Sử dụng công thức //x' = (x - a) * cosA - (y - B) * sinA + a //y' = (x - a) * sinA + (y - B) * cosA + b //Với tâm quay I (a,B) và góc quay A double temp_X = (X - Center.X) * System.Math.Cos(Angle) - (Y - Center.Y) * System.Math.Sin(Angle) + Center.X; Y = (X - Center.X) * System.Math.Sin(Angle) - (Y - Center.Y) * System.Math.Cos(Angle) + Center.Y; X = temp_X; //Góc hiện tại giữa điểm này và điểm tâm //double this_ang = System.Math.Atan2(Y - Center.Y, X - Center.X); //this_ang += Angle; //double this_radius = System.Math.Sqrt((X - Center.X) * (X - Center.X) + (Y - Center.Y) * (Y - Center.Y) + (Z - Center.Z) * (Z - Center.Z)); //X = Center.X + this_radius * System.Math.Cos(this_ang); //Y = Center.Y + this_radius * System.Math.Sin(this_ang); } /// <summary>Quay 3D một điểm quanh đường thẳng qua 2 điểm</summary> public void Rotate(PointD P1, PointD P2, double Angle) { Rotate(new Line(P1, P2), Angle); } /// <summary>Quay 3D một điểm quanh 1 đường thẳng</summary> public void Rotate(Line L, double Angle) { //Trình tự tạm thời như sau: // 1. Tìm điểm tâm quay nằm trên đường thẳng // 2. Trải phẳng điểm này tương đối so với tâm quay đã chuyển về (0,0) // 3. Quay phẳng nó trong mp xOy // 4. Chiếu M trở lại mp vòng tròn quay ban đầu // 5. Dời theo điểm quay để lấy lại tọa độ cũ // 1. Tìm điểm tâm quay nằm trên đường thẳng PointD[] centers = Project(L); // 2. Trải phẳng điểm này tương đối so với tâm quay đã chuyển về (0,0) PointD M = new PointD(this - centers[0]); M = M.To2DPoint(); // 3. Quay phẳng nó trong mp xOy M.Rotate(new PointD(0, 0, 0), Angle); // 4. Chiếu M trở lại mp vòng tròn quay ban đầu Plane PL = new Plane(L.Normal, centers[0]); PointD[] Mps = M.Project(PL); // 5. Dời theo điểm quay để lấy lại tọa độ cũ Mps[0] += centers[0]; X = Mps[0].X; Y = Mps[0].Y; Z = Mps[0].Z; } /// <summary>Đối xứng trong không gian qua 1 đường thẳng, tức là đối xứng qua mặt phẳng chứa đường thẳng /// và có vector pháp tuyến đi qua điểm này và điểm hình chiếu của nó trên đường thẳng</summary> public PointD Mirror(double X1, double Y1, double Z1, double X2, double Y2, double Z2) { return Mirror(new Line(new PointD(X1, Y1, Z1), new PointD(X2, Y2, Z2))); } /// <summary>Đối xứng trong không gian qua 1 đường thẳng, tức là đối xứng qua mặt phẳng chứa đường thẳng /// và có vector pháp tuyến đi qua điểm này và điểm hình chiếu của nó trên đường thẳng</summary> public PointD Mirror(PointD P1, PointD P2) { return Mirror(new Line(P1, P2)); } /// <summary>Đối xứng trong không gian qua 1 đường thẳng, tức là đối xứng qua mặt phẳng chứa đường thẳng /// và có vector pháp tuyến đi qua điểm này và điểm hình chiếu của nó trên đường thẳng</summary> public PointD Mirror(Line L) { try { //Hình chiếu của nó trên đường thẳng PointD[] ProjectPointD = Project(L); //Độ lệch giữa chúng PointD delta = ProjectPointD[0] - this; //Di chuyển đến vị trí mới ProjectPointD[0].Move(delta); return ProjectPointD[0]; } catch { }; return null; } /// <summary>Đối xứng trong không gian qua mặt phẳng</summary> public PointD Mirror(PointD P1, PointD P2, PointD P3) { return Mirror(new Plane(P1, P2, P3)); } /// <summary>Đối xứng trong không gian qua mặt phẳng</summary> public PointD Mirror(Plane PL) { try { //Hình chiếu của nó trên mặt phẳng PointD[] ProjectPointD = Project(PL); //Độ lệch giữa chúng PointD delta = ProjectPointD[0] - this; //Di chuyển đến vị trí mới ProjectPointD[0].Move(delta); return ProjectPointD[0]; } catch { }; return null; } /// <summary>Chuyển thành kiểu dữ liệu PointF của Windows</summary> public System.Drawing.PointF ToPointF() { return new System.Drawing.PointF((float)X, (float)Y); } /// <summary>Chuyển thành điểm phẳng, là phép khử Z</summary> public PointD To2DPoint() { //Hình chiếu của M trên mp xOy là Mz, góc giữa OMz và Ox là double a1 = System.Math.Atan2(Y, X); //Khoảng cách từ M --> O double radius = System.Math.Sqrt(X * X + Y * Y + Z * Z); //Tọa độ M' khi quay M đến mp xOy là return new PointD(radius * System.Math.Cos(a1), radius * System.Math.Sin(a1), 0); } /// <summary>Xuất tọa độ thành chuỗi có dạng (X, Y, Z)</summary> public override string ToString() { return "(" + X + ", " + Y + ", " + Z + ")"; } /// <summary>Xuất tọa độ thành chuỗi có dạng (X.digit, Y.digit, Z.digit)</summary> public string ToString(int Digit) { return "(" + System.Math.Round(X, Digit) + ", " + System.Math.Round(Y, Digit) + ", " + System.Math.Round(Z, Digit) + ")"; } }
- 1
-
Các bác cho em hỏi có cách nào vẽ một đường thẳng từ một điểm cho trước vuông góc với một đối tượng(Line, Spline,Pline...) không ah?
VD tìm điểm vuông góc với đường thẳng:
- Bài toán tổng quát trong không gian 3 chiều:
Gọi G là giao điểm vuông góc giữa đường thẳng qua M và đường thẳng có sẵn L.
G thuộc L --> phương trình tham số của L(t)
xG = StartPoint(0) + A*t
yG = StartPoint(1) + B*t
zG = StartPoint(2) + C*t
với (A,B,C) là vector chỉ phương của L, sử dụng thuộc tính L.Normal để xác định.
Gọi d là khoảng cách từ điểm M đến đường thẳng L
d^2 = (xG - xM)^2 + (yG - yM)^2 + (zG - zM)^2 [pt (1)]
Thay 3 tham số trên vào pt (1) --> phương trình bậc 2, ẩn là tham số t.
thay t vào 3 phương trình trên --> tọa độ G.
- Trong 2D:
Đường L có vector chỉ phương L.Normal (A, B ) và qua điểm L.StartPoint
Đường vuông góc có vector chỉ phương (-B,A) và qua điểm M (tích vô hướng = 0)
G là giao của 2 đường --> giải là xong
-
Để đọc toạ độ của pline thì không còn là vấn đề nan giải, nhưng nhận diện tên đỉnh của nó thì đúng là khó thật. Nếu lấy tiêu chí là text gần đỉnh nhất thì cũng hơi chủ quan, nhưng mà ngoài cái đó ra, em không nghĩ ra một thuật toán nào khác :)
Tôi cũng nghĩ như vậy, tìm text gần đỉnh nhất là được rồi.
-
Cả tôi với bạn cùng sai rồi.
Chỉnh như thế này mới đúng, đầu vào của hàm phải là một đối tượng Block để ta có thể duyệt qua từng đối tượng con, và block con sẽ là BlockReference
Function Dem(block as AcadBlock) as Integer 'Duyệt qua từng đối tượng xem nó có phải là Block con hay không Dim i as Integer Dim SoLuong as Integer Dim SubBlock as Object For i=0 to block.Count-1 if block.Item(i).ObjectName = "AcDbBlockReference" 'Tìm block tương ứng với BlockRef này SubBlock = block.Document.Blocks(block.Item(i).Name) SoLuong = SoLuong + Dem(SubBlock) Else 'không phải Block SoLuong = SoLuong + 1 End if Next i Dem = SoLuong End Function
Hoặc đầu vào của hàm là BlockReference
Function Dem(blockref as AcadBlockReference as Integer) 'Tìm block tương ứng với BlockRef này Dim block = blockref.Document.Blocks(blockref.Name) 'Duyệt qua từng đối tượng xem nó có phải là Block con hay không Dim i as Integer Dim SoLuong as Integer Dim SubBlock as Object For i=0 to block.Count-1 if block.Item(i).ObjectName = "AcDbBlockReference 'Tìm block tương ứng với BlockRef này SubBlock = block.Document.Blocks(block.Item(i).Name) SoLuong = SoLuong + Dem(block.Item(i)) Else 'không phải Block SoLuong = SoLuong + 1 End if Next i Dem = SoLuong End Function
- 2
-
Trong video và file bản vẽ kèm theo, một đường bao chính đại diện cho vùng đất đắp, với đường trên cùng là mặt đường, có chỉ định vị trí và cao độ tâm đường.
Sau đó phân lớp theo từng lát có độ dày theo yêu cầu.
Kết quả tính toán xuất qua diện tích phần bên trái bên phải của từng phân lớp, cao độ bên trái và fai của phân lớp.
Ý sơ bộ mình thấy là như thế. Bạn có thể chỉnh lại cho phù hợp.
Mọi trao đổi có thể tiến hành qua 4r cũng dc.
-
Nhìn sơ qua thì không khó khăn lắm, nhưng để làm được thì đề bài cần chi tiết hơn một chút.
-
Tôi nghĩ không nên tranh cãi nhiều, các bạn thử tìm khóa hoặc bẻ đi cái đã.
-
Trời ơi! Bác nói em mới search trên google ra cả đống. không ngờ cái .net vày dịch ngược dễ vậy. Có khi phải quay về VB6 thôi. Híc
Vì thế trong visual studio đã có sẵn công cụ mã hóa code rồi là Dotfuscate, Vô google mà tìm.
- 2
-
Cách sử dụng tlbimp.ex:
Đây là tiện tích của VS, nằm đâu đó trong thư mục cài đặt của microsoft visual studio, search là ra ngay thôi.
Cách sử dụng từ ms: http://msdn.microsoft.com/en-us/library/tt0cf3sx%28VS.80%29.aspx
Sử dụng trực tiếp từ Command Line của windows.
.NET reflector là công cụ dịch ngược file .NET, hỗ trợ dịch ngược .exe, .dll. Bản này tìm và tra cứu trên google có rất nhiều.
Khi cài đặt cần thêm addon FileDisassembler mới dịch ngược được.
-
Chào Bác! Em imports 2 file của bác vào thì được nhưng khi chạy thì lại báo lỗi không nhận file. Mà cái này Bác viết trên nền net1.0 à. Lúc Add vào nó báo phải thay đổi version của net framework.
2 thư viện này là trích xuất từ 2 thư viện chuẩn của AutoCAD:
- AutoCAD.dll trích xuất ra từ AutoCAD 17 Type Library
- AXDBLib.dll trích xuất ra từ AutoCAD/ObjectDBX 17 Common Type Library
Để trích xuất, bạn dùng command line của windows, tìm đến file tlbimp.exe để xuất thư viện TLB --> DLL.
Bạn có thể dùng .NET reflector để lấy mã nguồn dạng VB/C# từ thư viện dll kia luôn. Từ đó về sau có thể dùng các thư viện mã nguồn chèn trực tiếp vào chương trình mà không cần add bất kỳ thư viện nào nữa.
-
Hề hề! Em lại làm phiền các Bác chút.
Em gạp sự cố với hatch với code sau
Dim OuterLoop(0 To 0) As Object
OuterLoop(0) = plineObj
Add_plHatch = AcadApp.ActiveDocument.ModelSpace.AddHatch(0, hName, True)
Add_plHatch.AppendOuterLoop(OuterLoop)
bị lỗi "Invalid object array" thật bó tay với cái .net này.
Lỗi này rất khó hiểu, mà không có cách giải quyết.
Bạn dùng cách sau xem sao:
Chèn thư viện đối tượng của CAD mà mình đã trích xuất qua dạng dll ở đây, bao gồm AutoCAD.DLL và AXDBLib.dll.
2 thư viện này copy vào cùng chỗ với chương trình đã biên dịch.
Lúc đó trong chương trình mình sẽ dùng code giống như chèn thư viện chuẩn của CAD vậy.
Như VD trên sẽ viết lại, theo kiểu thực thi giao diện:
Imports AutoCAD
Imports AXDBLib
...
...
Dim AcadApp as IAcadApplication
...
Dim plineObj as IAcadPolyline
...
Dim OuterLoop(0 To 0) As IAcadEntity
OuterLoop(0) = plineObj
Dim Add_plHatch as IAcadHatch = AcadApp.ActiveDocument.ModelSpace.AddHatch(0, hName, True)
Add_plHatch.AppendOuterLoop(OuterLoop)
[Hỏi] Lập trình VB.net chạy với mọi phiên bản CAD
trong Lập trình khác
Đã đăng · Trả lời báo cáo
Bạn bỏ cái vbCrlf đi, đó là kí tự xuống hàng (và về đầu dòng).