Đến nội dung


Hình ảnh
- - - - -

Tạo 1 ứng dụng AutoCAD .NET với MS Visual C#


  • Please log in to reply
45 replies to this topic

#21 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 21 December 2010 - 09:19 AM


Tôi làm việc cũng gần đó, tôi sẽ giúp bạn làm phần này.
Tài liệu thì chỉ có mỗi help VB của CAD thôi.
  • 1
Clear sky!

MF Rock collection.

#22 v3rarz

v3rarz

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 23 December 2010 - 08:12 PM

Tôi làm việc cũng gần đó, tôi sẽ giúp bạn làm phần này.
Tài liệu thì chỉ có mỗi help VB của CAD thôi.

cảm ơn anh anhcos
  • -1

#23 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 26 January 2011 - 04:07 PM

@v3rarz: code C# về chương trình vẽ Line, Circle và Spline (chưa có phần vẽ Arc - cái này để bạn tự làm)
Nhập dữ liệu từ bàn phím và chuột (hỗ trợ truy bắt điểm CEN, END, MID)
Tải về ở đây.
  • 1
Clear sky!

MF Rock collection.

#24 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 03 January 2013 - 08:52 AM

Tạo 1 hàm LISP với AutoCAD .NET

- Với thư viện .NET API, AutoCAD cho phép chúng ta truy cập đến cơ sở dữ liệu của một bản vẽ (đối tuợng) nhiều hơn so với các công cụ truớc đó.
VD như các thông tin về Proxy (1 sản phẩm của ObjectARX)
- Mặt khác trong LISP, phạm vi của số nguyên (Integer) bị giới hạn trong khoảng 32-bit nên trong 1 số tính toán với số nguyên lớn đôi khi bị lỗi tràn bộ nhớ (Overflow).
Để khắc phục các hạn chế này, chúng ta nhờ .NET API tính toán rồi trả lại kết quả để AutoLisp tiếp tục xử lý.

Sử dụng thuộc tính LispFunction để tạo 1 hàm LISP.
ví dụ : [LispFunction("HelloWorld")]

Ví dụ 1 : hàm LISP Proxy_Info trả về danh sách (list) thông tin của 1 Proxy
VD : (proxy_info (car(entsel)))
→ ("\"Harmony\"" "HsCellInforObj" "HS_CELLINFOROBJECT")
hay
→ ("\"Harmony\"" "HsNodeObj" "HS_NODEOBJECT")
<pre class="cadvietlispcode">using Autodesk.AutoCAD.ApplicationServices;using Autodesk.AutoCAD.DatabaseServices;using Autodesk.AutoCAD.EditorInput;using Autodesk.AutoCAD.Runtime;using AcadApp = Autodesk.AutoCAD.ApplicationServices.Application;namespace Acad_command{ public class ProxyCommands { [LispFunction("Proxy_Info")] public ResultBuffer ProxyInfo(ResultBuffer resbuf) { Document doc = AcadApp.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; Database db = doc.Database; if (resbuf == null) { ed.WriteMessage("\nError: Quá ít đối số\n"); return null; } TypedValue[] args = resbuf.AsArray(); if (args.Length == 0) { ed.WriteMessage("\nError: Quá ít đối số\n"); return null; } if (args.Length > 1) { ed.WriteMessage("\nError: Quá nhiều đối số\n"); return null; } if (args[0].TypeCode != (short)LispDataType.ObjectId) { ed.WriteMessage("\nError: Đối số không hợp lệ\n"); return null; } ObjectId id = (ObjectId)args[0].Value; ResultBuffer result = new ResultBuffer(); using (Transaction tr = db.TransactionManager.StartTransaction()) { Entity ent = tr.GetObject(id, OpenMode.ForRead, false) as Entity; if (ent is ProxyEntity) { ProxyEntity ProxyEnt = ent as ProxyEntity; result.Add(new TypedValue((int)LispDataType.ListBegin)); result.Add(new TypedValue((int)LispDataType.Text, ProxyEnt.ApplicationDescription)); result.Add(new TypedValue((int)LispDataType.Text, ProxyEnt.OriginalClassName)); result.Add(new TypedValue((int)LispDataType.Text, ProxyEnt.OriginalDxfName)); result.Add(new TypedValue((int)LispDataType.ListEnd)); } else { ed.WriteMessage("Entity không phải là Proxy."); return null; } tr.Commit(); } return result; } }}</pre>


Ví dụ 2 : hàm Lisp RPN_Cal tính giá trị của biếu thức (tuơng tự hàm cal của Lisp) kết quả trả về là 1 chuỗi (string).
(sử dụng hàm tính giá trị biếu thức của Vincent )
(RPN viết tắt của Reverse Polish Notation : ký pháp nghịch đảo Ba Lan)
chấp nhận các toán tử và toán hạng : + - * / ^ abs sqrt sin cos tan e pi () và ...
VD :
(RPN_cal "3^2 +abs(-1)") → "10"
(RPN_cal "sin(pi/2) +abs(-1)") → "2"
(RPN_cal "sqrt(16) – abs(-4)") → "0"

mã nguồn C# và dll : download here

Cám ơn Tue_NV đã chỉ điểm vị trí để tham khảo hàm RPN_Cal .
Gia_Bach xem lại giúp, mình kg vào link này download here đc.
Gia_Bach có thể biên dịch nó thành dll để sử dụng chung trong windows được kg
  • 0

#25 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 03 January 2013 - 09:39 AM

Cám ơn Tue_NV đã chỉ điểm vị trí để tham khảo hàm RPN_Cal .
Gia_Bach xem lại giúp, mình kg vào link này download here đc.
Gia_Bach có thể biên dịch nó thành dll để sử dụng chung trong windows được kg

Vụ này Tue_NV không giúp bác được. File cũ PRN_Cal.dll đã tải của anh gia_bach không còn trong máy của Tue_NV nữa :( .
Chắc bác chờ anh gia bach và Có thông báo này ở đường Link mà bác download:
http://www.megashare.vnn.vn/
chắc bác phải tạm chờ vậy :)
  • 1

#26 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 03 January 2013 - 09:41 AM

Cám ơn Tue_NV đã chỉ điểm vị trí để tham khảo hàm RPN_Cal .
Gia_Bach xem lại giúp, mình kg vào link này download here đc.
Gia_Bach có thể biên dịch nó thành dll để sử dụng chung trong windows được kg

Gửi lại mã nguồn C# và dll hàm Lisp download here
  • 2

#27 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 03 January 2013 - 10:42 AM

Cám ơn Gia_Bach, mình đã dơn đc nhưng sd có chút trục trặc, nhờ bạn hướng dẫn giúp.
Mình mở cad2006, đánh lệnh netload sau đó chọn file RPN_Calculator.dll.
Xong rồi thử và kq như sau:
Command: (RPN_cal "3^2 +abs(-1)") ; error: no function definition: RPN_CAL
Có thể mình sd kg đúng.

Bạn cho mình hỏi thêm, nếu gọi hàm theo kiểu liên kết động có đc kg và hàm RPN_CAL có dạng đấy đủ như thế nào (ý mình muốn hỏi kiều của hàm và các đối số của nó). Mính muốn gọi nó trong Delphi và VC++. Cám ơn bạn
  • 0

#28 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 03 January 2013 - 12:31 PM

Cám ơn Gia_Bach, mình đã dơn đc nhưng sd có chút trục trặc, nhờ bạn hướng dẫn giúp.
Mình mở cad2006, đánh lệnh netload sau đó chọn file RPN_Calculator.dll.
Xong rồi thử và kq như sau:
Command: (RPN_cal "3^2 +abs(-1)") ; error: no function definition: RPN_CAL
Có thể mình sd kg đúng.

Bạn cho mình hỏi thêm, nếu gọi hàm theo kiểu liên kết động có đc kg và hàm RPN_CAL có dạng đấy đủ như thế nào (ý mình muốn hỏi kiều của hàm và các đối số của nó). Mính muốn gọi nó trong Delphi và VC++. Cám ơn bạn

- Có thể Cad2006 chưa hỗ trợ tốt Netload.

Các thông tin về đối số của hàm ReversePolishNotation bạn xem trong code đã đính kèm. (file ReversePolishNotation.cs)
Có 2 hàm cần chú ý : ParseEvaluate

Tham khảo cách dùng cho VB (nhớ add reference cho dll của ReversePolishNotation)
dll của ReversePolishNotation http://www.cadviet.c...ishnotation.zip

<LispFunction("RPN_CalVB")> _
Public Sub RPN_CalVB(ByVal rbArgs As ResultBuffer)
If Not rbArgs = Nothing Then
Dim args As TypedValue() = rbArgs.AsArray
Dim bieuthuc As String = args(0).Value.ToString()
Dim res As Double = 0.0
Dim rpn As MathText.ReversePolishNotation = New MathText.ReversePolishNotation()
Try
rpn.Parse(bieuthuc)
res = rpn.Evaluate()
Catch ex As Exception
Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("System error: " + ex.Message)
End Try
Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(vbLf & "K&#7871;t qu&#7843;: " & res)
End If
End Sub

  • 2

#29 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 03 January 2013 - 10:28 PM

Cám ơn gia_bach.
đúng là cad2006 có vđ. mình thử trên cad2008 đã chạy tốt.
Còn việc đọc code thì mình đã đọc, tuy nhiên kg phải là tín đồ của C# nên chẳng hiểu gì. Nó khác nhiều so với lập trình trên Delphi nên ... sau này hãy tính. giờ tạm dùng hàm RPN_cal thôi
  • 0

#30 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 04 January 2013 - 11:30 AM

...............
Bạn cho mình hỏi thêm, nếu gọi hàm theo kiểu liên kết động có đc kg và hàm RPN_CAL có dạng đấy đủ như thế nào (ý mình muốn hỏi kiều của hàm và các đối số của nó). Mính muốn gọi nó trong Delphi và VC++. Cám ơn bạn

Ví dụ gọi hàm theo kiểu liên kết động trong VC++ (sử dụng thư viện ReversePolishNotation.dll)
1. Add reference cho dll của ReversePolishNotation) file ReversePolishNotation.dll
2. Khai báo biến và tính toán:
String^ bieuthuc; // biếu thức cần tính toán
double result; // kết quả
MathText::ReversePolishNotation^ rpn = gcnew MathText::ReversePolishNotation(); // Khởi tạo hàm tính biểu thức

bieuthuc = "3^2 +abs(-1)"; // gán giá trị cho biểu thức
rpn->Parse(bieuthuc); //
result = rpn->Evaluate(); // gán kết quả vào biến result
  • 0

#31 hoathuongphuoc

hoathuongphuoc

    biết lệnh erase

  • Members
  • PipPipPip
  • 102 Bài viết
Điểm đánh giá: 9 (bình thường)

Đã gửi 06 November 2013 - 09:31 AM

Còn mình muốn làm với VB.net thì làm như thế nào nhỉ


  • -1

#32 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 06 November 2013 - 09:43 AM

Còn mình muốn làm với VB.net thì làm như thế nào nhỉ

Sử dụng chức năng tìm kiếm.

http://www.cadviet.c...et/#entry107700


  • -1

#33 lamchivinh

lamchivinh

    biết zoom

  • Members
  • Pip
  • 11 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 18 November 2013 - 04:03 PM

Sử dụng chức năng tìm kiếm.

http://www.google.com

Trả lời ngu vl.


  • -1

#34 tiendung89

tiendung89

    biết lệnh move

  • Members
  • PipPipPip
  • 121 Bài viết
Điểm đánh giá: 8 (bình thường)

Đã gửi 11 June 2014 - 12:46 PM

bây giờ nếu e muốn hiện các form trong autocad thì code như thế nào ạ?

ví dụ e tạo form1 với các nút điều khiển trên đó (button, textbox,...), sau đó e dùng lệnh netload trong cad(ví dụ là lệnh mycommand)

và e muốn Cad hiện lên form1. nhưng e không biết đoạn code đó như thế nào, mong các bác giúp đỡ

e dung C# VB2008, autocad2010


  • 0
Tôi không phải là đặc biệt, nhưng tôi là duy nhất ^^

#35 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 11 June 2014 - 01:23 PM

bây giờ nếu e muốn hiện các form trong autocad thì code như thế nào ạ?

ví dụ e tạo form1 với các nút điều khiển trên đó (button, textbox,...), sau đó e dùng lệnh netload trong cad(ví dụ là lệnh mycommand)

và e muốn Cad hiện lên form1. nhưng e không biết đoạn code đó như thế nào, mong các bác giúp đỡ

e dung C# VB2008, autocad2010

Bạn tạ0 1 Form bình thuờng bằng cách Add Form, sau đó gọi lệnh ShowModalDialog(Form) để hiển thị nó.

Tham khảo :

http://www.cadviet.c...e-3#entry134874

http://www.cadviet.c...oi/#entry241404


  • 0

#36 thehost31

thehost31

    biết vẽ line

  • Members
  • PipPip
  • 26 Bài viết
Điểm đánh giá: 17 (tàm tạm)

Đã gửi 05 July 2014 - 09:42 PM

Đây là link nhóm thảo luận, chia sẽ code học autocad.net C#. Chia sẽ cung mọi người

 

http://tramx.vn/9/Nh...utoCAD-net.aspx


  • 0

#37 Bee

Bee

    biết lệnh extend

  • Members
  • PipPipPip
  • 197 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 14 September 2016 - 10:13 PM

Tạo 1 ứng dụng AutoCAD .NET với MS Visual C#

Tạo Project :
1. Khởi động Microsoft Visual C#
2. Chọn menu : FILE → “New Project ...”. Hộp thoại New Project xuất hiện :
tut01.jpg
3. Chọn template “Class Lybrary” như trong hình và nhập tên vào mục Name, trong ví dụ này tôi để mặc định là : ClassLibrary1.
4. Một Project mới đuợc tạo và giao diện như sau : C# tạo 1 file có tên Class1.cs mà ta sẽ sử dụng ở buớc viết Code.
tut02.jpg


Khai báo thư viện (Reference):
1. Tại cửa sổ Solution Explorer bên phải phía trên, chọn tag Reference
tut03.jpg
2. Click chuột phải lên tag Reference rồi chọn “Add Reference” trên menu xổ xuống . Hộp thoại “Add Reference” xuất hiện :
tut04.jpg
3. Chọn tag “ Browse” như trong hình và chỉ đến thư mục cài đặt AutoCad, ví dụ : C:\Program Files\AutoCAD 2010.

4. chọn 2 file : "acmgd.dll" và "acdbmgd.dll" , click OK để kết thúc.
5. Đặt thuộc tính “Copy Local” : Tại cửa sổ Solution Explorer, tag Reference click chuột phải lên file "acmgd.dll" chọn Properties : trong cửa sổ Properties, đặt thuộc tính “Copy Local” là False.
Làm tuơng tự với file "acdbmgd.dll"
tut05.jpg

Tạo lệnh Cad (viết code):
Để tạo 1 lệnh mới, sử dụng thuộc tính CommandMethod
ví dụ : [CommandMethod("CadViet")]

Ví dụ 1 : khai báo lệnh CadViet1 thực hiện việc xuất ra màn hình thông báo
“Chào mừng bạn đến với ứng dụng AutoCAD .NET API”

Ví dụ 2 : khai báo lệnh CadViet2 thực hiện việc tạo 1 đối tuợng TEXT có nội dung :
“Chào mừng bạn đến với ứng dụng AutoCAD .NET API”, tại vị trí do nguời dùng chọn.

Bạn Copy và Paste toàn bộ đọan code sau vào file Class1.cs

using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;

namespace Gia_Bach
{
public class Cad_command
{
[CommandMethod("CadViet1")]
public static void ex1()
{
Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Chào mừng bạn đến với ứng dụng AutoCAD .NET API!");
}

[CommandMethod("CadViet2")]
public static void ex2()
{
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocume
nt;
Editor ed = doc.Editor;
Database db = doc.Database;

PromptPointResult Pr = ed.GetPoint("\nChọn điểm đặt Text : ");
Point3d pt = Pr.Value;

if (Pr.Status != PromptStatus.OK) return;

// Start a transaction
using (Transaction acTrans = db.TransactionManager.StartTransaction())
{
// Open the Block table for read
BlockTable acBlkTbl = acTrans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

// Open the Block table record Model space for write
BlockTableRecord acBlkTblRec
= acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

// Create a single-line text object
DBText acText = new DBText();
acText.SetDatabaseDefaults();
acText.Position = pt;
acText.Height = 0.5;
acText.TextString = "Chào mừng bạn đến với ứng dụng AutoCAD .NET API!";

acBlkTblRec.AppendEntity(acText);
acTrans.AddNewlyCreatedDBObject(acText, true);
// Save the changes and dispose of the transaction
acTrans.Commit();
}
}
}
}

Lưu Project :
Chọn menu : FILE → “Save All ...”. Hộp thoại Save Project xuất hiện, chọn đuờng dẫn thích hợp, click Save để kết thúc.


Build Project :
Chọn menu : BUILD → “Build Solution” : để tạo 1 ứng dụng.
Trong truờng hợp BUILD thành công, bạn sẽ có 1 file dll trùng tên với tên Project tại đuờng dẫn :
- “ProjectName\bin\Release\ projectName.dll “
trong đó ProjectName là tên Project bạn đã đặt ở buớc Lưu Project


Thực thi lệnh : (xem thành quả)
1. Khởi động AutoCAD
2. Tại dấu nhắc (Command ) của CAD gõ lệnh NETLOAD và chỉ đến vị trí file vừa BUILD ở trên, chọn OPEN để hoàn thành lệnh NETLOAD .
3. gõ lệnh CadViet1 hay CadViet2 để bắt đầu

Chúc bạn thành công.

Chao anh gia bach.

 

Em moi tim hieu .net co lam theo huong dan cua anh nhưng lúc add 2 .dll nó báo lỗi không thấy file nên không build được, anh và mọi người có thể chỉ em fix lỗi này?

 

Warning 1 The referenced component 'acmgd' could not be found. 

Warning 2 The referenced component 'acdbmgd' could not be found.
 

 

Em dùng ACad2015 và VS2008, Win 7 x64


  • 0

#38 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 15 September 2016 - 07:41 AM

Chao anh gia bach.

 

Em moi tim hieu .net co lam theo huong dan cua anh nhưng lúc add 2 .dll nó báo lỗi không thấy file nên không build được, anh và mọi người có thể chỉ em fix lỗi này?

 

Warning 1 The referenced component 'acmgd' could not be found. 

Warning 2 The referenced component 'acdbmgd' could not be found.
 

 

Em dùng ACad2015 và VS2008, Win 7 x64

Với AutoCad 2015 bạn phải sử dụng Visual Studio 2012 (hoặc mới hơn VS 2013-2015) và Net Framework 4.5

 

Và từ AutoCAD 2013 chúng ta phải add thêm file AcCoreMgd.dll (dĩ nhiên cũng phải add 2 file AcMgd.dll và AcDbMgd.dll)

 

Tham khảo : 

ACADvsVisualStudio.png


  • 0

#39 Bee

Bee

    biết lệnh extend

  • Members
  • PipPipPip
  • 197 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 15 September 2016 - 10:00 AM

Với AutoCad 2015 bạn phải sử dụng Visual Studio 2012 (hoặc mới hơn VS 2013-2015) và Net Framework 4.5

 

Và từ AutoCAD 2013 chúng ta phải add thêm file AcCoreMgd.dll (dĩ nhiên cũng phải add 2 file AcMgd.dll và AcDbMgd.dll)

 

Tham khảo : 

ACADvsVisualStudio.png

Oài sau khi cài VS 2012 là build ngon lành cành đào. 

 

Cám ơn anh gia bách nhiều.


  • 0

#40 Bee

Bee

    biết lệnh extend

  • Members
  • PipPipPip
  • 197 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 17 September 2016 - 10:06 AM

using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;

namespace Gia_Bach
{
public class Cad_command
{
[CommandMethod("CadViet1")]
public static void ex1()
{
Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Chào mừng bạn đến với ứng dụng AutoCAD .NET API!");
}

[CommandMethod("CadViet2")]
public static void ex2()
{
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocume
nt;
Editor ed = doc.Editor;
Database db = doc.Database;

PromptPointResult Pr = ed.GetPoint("\nChọn điểm đặt Text : ");
Point3d pt = Pr.Value;

if (Pr.Status != PromptStatus.OK) return;

// Start a transaction
using (Transaction acTrans = db.TransactionManager.StartTransaction())
{
// Open the Block table for read
BlockTable acBlkTbl = acTrans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

// Open the Block table record Model space for write
BlockTableRecord acBlkTblRec
= acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

// Create a single-line text object
DBText acText = new DBText();
acText.SetDatabaseDefaults();
acText.Position = pt;
acText.Height = 0.5;
acText.TextString = "Chào mừng bạn đến với ứng dụng AutoCAD .NET API!";

acBlkTblRec.AppendEntity(acText);
acTrans.AddNewlyCreatedDBObject(acText, true);
// Save the changes and dispose of the transaction
acTrans.Commit();
}
}
}
}

Chào anh gia bach và mọi người.

Anh (hoặc bạn nào)có thể chuyển ngữ đoạn lisp này sang C# để em hiểu cách thức làm việc từ lisp sang C#. Xin cám ơn.

(defun c:test (/ ss n pt str h att old_os num)
  (setq old_os (getvar 'osmode))
  ;ssget and repeat
  (if (setq ss (ssget '((0 . "*TEXT"))))
    (progn
      (setq n 0)
      (repeat (sslength ss)

	(setvar 'osmode 0)
	
	(setq num (getreal "\Chon so: "));number
	
	(setq pt (cdr (assoc 10 (entget (ssname ss n)))))
	(setq str (cdr (assoc 1 (entget (ssname ss n)))))
	(setq h (cdr (assoc 40 (entget (ssname ss n)))))
	(mapcar 'print (list pt str h)); print
	
	;change value text
	(entmod (subst (cons 1 (rtos num 2 2)) (assoc 1 (entget (ssname ss n))) (entget (ssname ss n))))
	
	(setq n (1+ n))
	);repeat
      )
    (princ "\nBan da khong chon doi tuong")
    );if
  
  ;;;While and nentsel
  (while (setq att (car (nentsel "\nChon att: ")))
    (progn
      (change_w att)
      )    
    )
  (setvar "osmode" old_os)
  (princ)
  )

(defun change_w (att / w_att w)
  (setq w_att (vla-get-ScaleFactor (vlax-ename->vla-object att)))
  (if (setq w (getreal (strcat "\nChon withfactor <" (rtos w_att 2 2) ">: ")))
    (vla-put-ScaleFactor (vlax-ename->vla-object att) w)
    )
  )  

(princ "\nCommand: test")
  

  • 0