Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

AutoCAD với Excel


  • Please log in to reply
199 replies to this topic

#1 emhn

emhn

    biết vẽ line

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

Đã gửi 06 April 2007 - 11:15 AM

Tôi muốn các bạn chia sẽ cách nhập và xuất số liệu giữa Autocad và Excel, được viết bằng ngôn ngữ AutoLISP. nếu được có thể cho xem ví dụ mẫu.
Cám ơn.
  • 2

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 06 April 2007 - 12:38 PM

Tại trang tin cũng đã có 1 ví dụ về chương trình LISP nhập xuất dữ liệu giữa AutoCAD và Excel.
http://www.cadviet.com/content/view/20/1/

Đó là chương trình eiPoint (Export Import Point), là chương trình khá đơn giản và cơ bản. Chúng ta có thể cải tiến nó để đáp ứng được từng mục đích riêng của mình.

Dưới đây là mã lệnh của chương trình eiPoint (lấy từ trang tin):

(defun c:exppnt (/ fn fid i sdt tp ent p x y z)
(princ "\neiPoint © 2007 Cadviet.com")
(setq
ssp (ssget '((0 . "POINT")))
fn (getfiled "Ten tep de xuat toa do x y z"
(getvar "dwgprefix")
"txt"
1
)
i 0
sdt (cond (ssp (sslength ssp))
(t 0)
)
tp nil
fid (open fn "w")
)

(repeat sdt
(setq ent (ssname ssp i)
i (1+ i)
p (cdr (assoc 10 (entget ent)))
x (car p)
y (cadr p)
z (caddr p)
)
(princ (strcat (rtos x) "\t" (rtos y) "\t" (rtos z) "\n")
fid
)
)
(close fid)
(princ)
)

(defun c:imppnt ( / fn fid strht vt x y z)
(defun pos (sub st / l1 l2 index)
(setq index 1
l1 (strlen sub)
l2 (strlen st)
)
(while
(and (<= (+ index l1 -1) l2) (/= sub (substr st index l1)))
(setq index (1+ index))
)
(if (= sub (substr st index l1))
index
nil
)
)
(princ "\neiPoint © 2007 Cadviet.com")
(setq fn (getfiled "Ten tep de nhap toa do x y z"
(getvar "dwgprefix")
"txt"
2
)
fid (open fn "r")

)
(while (setq strht (read-line fid))
(setq strht (strcat strht "\t\t\t"))
(if (/= strht " ")
(progn
(setq
vt (pos "\t" strht)
x (atof (substr strht 1 (1- vt)))
strht (substr strht (1+ vt))
vt (pos "\t" strht)
y (atof (substr strht 1 (1- vt)))
strht (substr strht (1+ vt))
vt (pos "\t" strht)
z (atof (substr strht 1 (1- vt)))
)
(entmake (list
(cons 0 "POINT")
(list 10 x y z)
)
)
)
)
)
(close fid)
)
(princ "\neiPoint da duoc nap. su dung 2 lenh: ExpPnt va ImpPnt de xuat va nhap Point")


Bản chất của quá trình trao đổi dữ liệu giữa AutoCAD và Excel trong ví dụ trên là tạo ra một tệp có đuôi .txt làm trung gian.
  • 3

#3 emhn

emhn

    biết vẽ line

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

Đã gửi 06 April 2007 - 03:15 PM

Tại trang tin cũng đã có 1 ví dụ về chương trình LISP nhập xuất dữ liệu giữa AutoCAD và Excel.
http://www.cadviet.com/content/view/20/1/

Đó là chương trình eiPoint (Export Import Point), là chương trình khá đơn giản và cơ bản. Chúng ta có thể cải tiến nó để đáp ứng được từng mục đích riêng của mình.

Dưới đây là mã lệnh của chương trình eiPoint (lấy từ trang tin):


(defun c:exppnt (/ fn fid i sdt tp ent p x y z)
(princ "\neiPoint © 2007 Cadviet.com")
(setq
ssp (ssget '((0 . "POINT")))
fn (getfiled "Ten tep de xuat toa do x y z"
(getvar "dwgprefix")
"txt"
1
)
i 0
sdt (cond (ssp (sslength ssp))
(t 0)
)
tp nil
fid (open fn "w")
)

(repeat sdt
(setq ent (ssname ssp i)
i (1+ i)
p (cdr (assoc 10 (entget ent)))
x (car p)
y (cadr p)
z (caddr p)
)
(princ (strcat (rtos x) "\t" (rtos y) "\t" (rtos z) "\n")
fid
)
)
(close fid)
(princ)
)

(defun c:imppnt ( / fn fid strht vt x y z)
(defun pos (sub st / l1 l2 index)
(setq index 1
l1 (strlen sub)
l2 (strlen st)
)
(while
(and (<= (+ index l1 -1) l2) (/= sub (substr st index l1)))
(setq index (1+ index))
)
(if (= sub (substr st index l1))
index
nil
)
)
(princ "\neiPoint © 2007 Cadviet.com")
(setq fn (getfiled "Ten tep de nhap toa do x y z"
(getvar "dwgprefix")
"txt"
2
)
fid (open fn "r")

)
(while (setq strht (read-line fid))
(setq strht (strcat strht "\t\t\t"))
(if (/= strht " ")
(progn
(setq
vt (pos "\t" strht)
x (atof (substr strht 1 (1- vt)))
strht (substr strht (1+ vt))
vt (pos "\t" strht)
y (atof (substr strht 1 (1- vt)))
strht (substr strht (1+ vt))
vt (pos "\t" strht)
z (atof (substr strht 1 (1- vt)))
)
(entmake (list
(cons 0 "POINT")
(list 10 x y z)
)
)
)
)
)
(close fid)
)
(princ "\neiPoint da duoc nap. su dung 2 lenh: ExpPnt va ImpPnt de xuat va nhap Point")


Bản chất của quá trình trao đổi dữ liệu giữa AutoCAD và Excel trong ví dụ trên là tạo ra một tệp có đuôi .txt làm trung gian.



Trước hết mình xin chân thành cám ơn bạn "nguyen hoanh" vì sự nhiệt tình và sẳn sàng chia sẽ. Nhưng vấn đề là mình muốn làm việc trực tiếp vào các file Excel, không muố nhờ vào tep trung gian (*.txt). Xin bạn vui lòng hương dẫn.
  • 1

#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 06 April 2007 - 04:18 PM

Bó tay.

Cái này thì phải nhờ một cao thủ nào đó trên diễn đàn thôi, kiến thức của tôi không giải đáp được cho bạn rồi.
  • 2

#5 be_chanh

be_chanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1712 Bài viết
Điểm đánh giá: 889 (rất tốt)

Đã gửi 06 April 2007 - 05:37 PM

@emhn: tại sao lại muốn làn việc trực tiếp ngay trên file ex ? bạn có thể nêu nguyên do để chúng ta cùng thảo luận:P
  • 1

t: 097.323.1199 | m: cudstk@gmail.com | w: http://www.aicollect.com


#6 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 09 April 2007 - 08:01 AM

Trước hết mình xin chân thành cám ơn bạn "nguyen hoanh" vì sự nhiệt tình và sẳn sàng chia sẽ. Nhưng vấn đề là mình muốn làm việc trực tiếp vào các file Excel, không muố nhờ vào tep trung gian (*.txt). Xin bạn vui lòng hương dẫn.

Lisp chỉ có thể làm việc (read và write) với text file, không xâm nhập được vào cấu trúc của *.xls (nếu được, chắc bác Bill Gate đã phá sản rồi!).
Có 2 dạng file mà Lisp và Excel cùng hiểu và xử lý được là *.txt và *.csv. Mình xin phân tích kỹ hơn:
Text file là... file dạng text, nội dung gồm tập hợp các ký tự ASCII, thường là *.txt. Cho dù bạn có đổi nó thành *.abc, *.def, *.doc... thậm chí là *.xls cũng được(!) nhưng bản chất của nó vẫn là text file (cốt khỉ vẫn là... cốt khỉ!).
Một bảng dữ liệu bao gồm các số liệu được tổ chức theo hàng (row - record) và cột (column - field). Excel hiểu bảng dữ liệu của text file như sau:
1) Đối với file *.txt:
- Field: căn cứ vào ký tự TAB ("\t")
- Record: căn cứ vào ký tự xuống dòng ("\n")
2) Đối với file *.csv (Comma Separated Value File):
- Field: phân biệt bằng dấu phẩy (,)
- Record: theo ký tự xuống dòng như trên
Bạn có thể mở 2 kiểu file trên bằng Excel để xem, sửa, bổ sung; có thể dùng được các công cụ của Excel (ngay cả gán function) rất thuận tiện cho biên tập. Nhưng khi save, bạn phải giữ nguyên định dạng cũ (Excel sẽ hiện cảnh báo đối với các trường hợp này). Nếu bạn save theo dạng *.xls, toàn bộ cấu trúc file sẽ thay đổi (theo đúng kiểu của MicroSoft), và sau đó chương trình lisp của bạn sẽ không thể nào đọc nó được nữa!
Nếu bạn muốn làm việc trực tiếp với *.xls thì phải dùng VBA (MicroSoft Visual Basic for Application) thay cho Lisp. VBA trong Acad là sản phẩm hợp tác của Autodesk và MicroSoft nên việc hiểu và xử lý *.xls là "chuyện nhỏ".
Nếu bạn có hứng thú với VBA, chúng ta có thể đề nghị Admin lập thêm một box mới cho mục này.

PS:
Khi bạn dùng Excel để open 3 kiểu file *.txt, *.csv, *.xls, chúng hiển thị giống nhau nhưng bản chất khác nhau một trời một vực:
- *.txt và *.csv: chỉ chứa giá trị (value)
- *.xls: ngoài value, mỗi cell của nó còn chứa rất nhiều thông tin khác: định dạng (format), công thức (function), tham chiếu (reference), liên kết (link).... và nhiều thứ khác nữa!
  • 9

#7 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 09 April 2007 - 10:28 AM

Nghĩa là làm việc với *.txt rất là dễ dàng.
Không chỉ khi viết Lisp mà với rất nhiều chương trình tự động tính toán khác, người ta luôn sử dụng file trung gian là *.txt. Bởi vì trong tất cả các ngôn ngữ lập trình đều có hỗ trợ mở (open), đọc (read) và ghi (save) file text
Không hiểu ý đồ của emhn là gì khi muốn thực hiện trực tiếp trên file *.xls , mặc dù vậy chắc là có muốn cũng không được, vì cứ như danh sách các lệnh Lisp mà anh Nguyễn Hoành từng liệt kê ra thì Lisp không hỗ trợ các thao tác với cơ sở dữ liệu (Database), và SSG cũng phân tích rất đúng: file *.xls không chỉ lưu trữ các số liệu, cũng như *.doc không chỉ lưu trữ các text
Song cũng có giải pháp là dùng VBA cho CAD, cái này chắc được
  • 2

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#8 bemove

bemove

    biết lệnh divide

  • Vip
  • PipPipPipPipPipPip
  • 446 Bài viết
Điểm đánh giá: 1308 (rất tốt)

Đã gửi 09 April 2007 - 10:46 AM

AutoCAD 2008 đã hỗ trợ liên kết dữ liệu với excel rồi đấy :lol:
  • 0

#9 khongminh21484

khongminh21484

    Chưa sử dụng CAD

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

Đã gửi 09 April 2007 - 10:41 PM

có bác nào biết kết nối CAD với access ko?
viết VBA trong CAD kết nối vói ễcl nưa?
biết chỉ dùm hộ em.bài tập lớn thầy ra mà em chưa biết gì cả?
cảm ơn các bác trước :lol:
  • 0

#10 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 09 April 2007 - 11:18 PM

Nếu chỉ là dùng VBA của AutoCAD để kết nối với Excel thì mã lệnh điển hình như sau:

Sub Ch12_Extract()
Dim Excel As Excel.Application
Dim ExcelSheet As Object
Dim ExcelWorkbook As Object

Dim RowNum As Integer
Dim Header As Boolean
Dim elem As AcadEntity
Dim Array1 As Variant
Dim Count As Integer

' Launch Excel.
Set Excel = New Excel.Application

' Create a new workbook and find the active sheet.
Set ExcelWorkbook = Excel.Workbooks.Add
Set ExcelSheet = Excel.ActiveSheet
ExcelWorkbook.SaveAs "Attribute.xls"

RowNum = 1
Header = False
' Iterate through model space finding
' all block references.
For Each elem In ThisDrawing.ModelSpace
With elem
' When a block reference has been found,
' check it for attributes
If StrComp(.EntityName, "AcDbBlockReference", 1) _
= 0 Then
If .HasAttributes Then
' Get the attributes
Array1 = .GetAttributes
' Copy the Tagstrings for the
' Attributes into Excel
For Count = LBound(Array1) To UBound(Array1)
If Header = False Then
If StrComp(Array1(Count).EntityName, _
"AcDbAttribute", 1) = 0 Then
ExcelSheet.Cells(RowNum, _
Count + 1).value = _
Array1(Count).TagString
End If
End If
Next Count
RowNum = RowNum + 1
For Count = LBound(Array1) To UBound(Array1)
ExcelSheet.Cells(RowNum, Count + 1).value _
= Array1(Count).textString
Next Count
Header = True
End If
End If
End With
Next elem
Excel.Application.Quit
End Sub


mã lệnh VBA này gọi Excel lên, sau đó add một SheetShet và saveas với tên file là Attribute.xls sau đó quét qua tất cả các đối tượng của AutoCAD, tìm các block, kiểm tra xem nó có Attribute không, nếu có thì viết giá trị của từng attribute vào các ô của excel. Mỗi giá trị một ô, mỗi block một dòng. Sau đó thì close chương trình Excel.
  • 2

#11 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 10 April 2007 - 04:05 PM

Một ví dụ dùng VBA giao tiếp với Excel (mã VBA chứa trong bản vẽ):

http://www.cadviet.com/upfiles/VD_VBA.dwg

Hướng dẫn:
1) Mở VD_VBA.dwg
2) Chọn Tool - Macro - Macros (hoặc bấm Alt + F8)
3) Chọn Macro XUAT - Run
File C:\Vd.xls được tạo với các số liệu 100, 120, 0, 50 ở các cell A1, B1, C1, D1
Bạn có thể mở file này để xem kết quả.
4)Chạy Macro NHAP theo cách như trên.
Chương trình đọc các số liệu tại các cell A1, B1, C1, D1 và vẽ đường tròn tâm (100, 120, 0), bán kính 50
5) Chọn Tool - Macro - Visual Basic Editor (hoặc Alt + F11) để xem mã nguồn

Chương trình đơn giản nhưng chứng tỏ VBA có khả năng giao tiếp với các ứng dụng của Microsoft (kể cả Access) rất tốt.
Nếu các bạn thấy hứng thú thì "ngâm cứu" thêm. Bản thân ssg đã quen với lisp, không dùng VBA.
  • 2

#12 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 10 April 2007 - 04:27 PM

Không biết vì sao không download được. Ssg đã upload đúng theo hướng dẫn mà?
Nếu các bạn cũng không down được, vui lòng làm như sau:
- Copy và Paste đoạn code dưới vào MS-Word
- Chạy Acad
- Bấm Alt + F11
- Bấm F7
- Copy đoạn code từ MS-Word và Paste vào
- Save và quay lại Acad
- Làm bước 2, 3 và 4 như đã nói ở bài trên



Dim ExcelSheet As Object
Dim CirObj As AcadCircle
Dim CenP(0 To 2) As Double
Dim X, Y, Z, R As Double

Public Sub XUAT()
Set ExcelSheet = CreateObject("Excel.Sheet")
ExcelSheet.Application.Visible = True
ExcelSheet.Application.Range("A1").Value = 100
ExcelSheet.Application.Range("B1").Value = 120
ExcelSheet.Application.Range("C1").Value = 0
ExcelSheet.Application.Range("D1").Value = 50
ExcelSheet.SaveAs "C:\VD.XLS"
Set ExcelSheet = Nothing
End Sub

Public Sub NHAP()
Set ExcelSheet = GetObject("C:\VD.XLS")
X = ExcelSheet.Application.Range("A1")
Y = ExcelSheet.Application.Range("B1")
Z = ExcelSheet.Application.Range("C1")
R = ExcelSheet.Application.Range("D1")
CenP(0) = X: CenP(1) = Y: CenP(2) = Z
Set CirObj = ThisDrawing.ModelSpace.AddCircle(CenP, R)
ZoomAll
Set ExcelSheet = Nothing
End Sub


  • 1

#13 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 11 April 2007 - 03:37 PM

Bổ sung:
Có thể chạy macro bằng lisp: (command "vbarun" "MacroName")
Ví dụ trên:
(command "vbarun" "xuat")
(command "vbarun" "nhap")
  • 0

#14 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 09 May 2007 - 10:04 PM

Một điều quan trọng nhất để điều khiển Excel từ AutoCad bằng VBA là bạn phải khai báo thư viện đối tượng trong cửa sổ VBE của AutoCad không thì thủ tục sẽ báo lỗi.
Cách khai báo: vào menu Tools/References và tìm Micosoft Office XX Object Library. XX chính là đời Office bạn cài. :lol:
Còn thủ tục trên có thể rút gọn bằng With ... End With như sau:

ExcelSheet.Application.Range("A1").Value = 100
ExcelSheet.Application.Range("B1").Value = 120
ExcelSheet.Application.Range("C1").Value = 0
ExcelSheet.Application.Range("D1").Value = 50

With ExcelSheet.Application
.Range("A1").Value = 100
.Range("B1").Value = 120
.Range("C1").Value = 0
.Range("D1").Value = 50
End With


  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#15 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 10 May 2007 - 08:45 AM

Mình dùng Cad2002 và Office2003 không cần khai báo vẫn chạy tốt. Có lẽ do hai "thằng" đó tương thích nhau (nếu thay đời 1 trong 2 thằng thì chưa chắc). Đó là lý do khiến mình ít thích dùng VB. Một trình VB (nói chung, không riêng gì VBA for Acad) chạy tốt trên máy mình, nhưng khi đưa sang máy khác thì Runtime Error!?
Bạn phantuhuong có thể phân tích sâu hơn vấn đề này để anh em được mở rộng tầm mắt?
  • 0

#16 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 10 May 2007 - 09:06 AM

VBA thì nói chung là dễ học, dễ viết - Ưu điểm
Nhưng nhược điểm thì nhiều hơn:
1. Cùng làm môt chức năng thì nặng hơn LISP rất nhiều.
2. Ít tương thích giữa các version của AutoCad...
3. Hay bị nghi ngờ là có Virus hay Macro độc hại khi tải vào bản vẽ.
4. Hay bị thông báo thiếu function được định nghĩa sẵn của VB (Cách tốt nhất là cài một phiên bản VB lên máy tính rồi viết VBA trong AutoCad)
Việc trao đổi dữ liệu từ CAD và Excel có thể không cần thông qua file.txt. File.txt để dùng được trong Excel phải có cấu trúc dữ liệu phân cách bởi các dấu TAB (\t) nhưng gặp những trường dữ liệu dài ngắn khác nhau thì chỉnh sửa cũng "đỏ con mắt bên phải, mỏi con mắt bên trái luôn".
Có một cách đơn giản là xuất dữ liệu từ CAD thành một file.XML. Và hầu như tất cả các phần mềm bảng tính đều hỗ trợ đọc dữ liệu từ XML.
Còn đọc file.XML để import dữ liệu vào CAD thì quá đơn giản...
:lol:
  • 0

#17 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 12 May 2007 - 12:07 PM

4. Hay bị thông báo thiếu function được định nghĩa sẵn của VB (Cách tốt nhất là cài một phiên bản VB lên máy tính rồi viết VBA trong AutoCad)


Đúng là VBA còn một số nhược điểm như bạn vndesperados đã nói nhưng không hẳn là đúng hẳn. Hàm VB hay VBA đều như nhau (tất nhiên phải tương ứng theo phiên bản).
Cái lợi nhất sử dụng VBA là củng cố kiến thức về lập trình Visual Basic. Những người đã lập trình trên VB thì dễ dàng sử dụng được VBA khi tìm hiểu thêm đối tượng, phương thức và thuộc tính của chúng.
Còn học và để thành thạo AutoLisp không phải đơn giản vì là ngôn ngữ khác biệt. Việc thiết kế giao diện trong AutoLisp tương đối phức tạp, trong khi đó VBA lại dễ dàng. Khả năng liên kết của AutoLisp với môi trường bên ngoài rất hạn chế, còn VBA thì rất ổn nhờ DLL. Đặc biệt trong lĩnh vực kỹ thuật, việc trao đổi giữa Excel và AutoCad là rất cần thiết và hợp lý. Bạn có thể sử dụng VBA trong Excel hay AutoCad đều được, thậm chí cả VB6 cũng ổn. Như vậy hướng phát triển VBA sẽ ứng dụng được rộng hơn so với AutoLisp,...
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#18 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 14 May 2007 - 04:11 PM

...
Cái lợi nhất sử dụng VBA là củng cố kiến thức về lập trình Visual Basic. Những người đã lập trình trên VB thì dễ dàng sử dụng được VBA khi tìm hiểu thêm đối tượng, phương thức và thuộc tính của chúng.
Còn học và để thành thạo AutoLisp không phải đơn giản vì là ngôn ngữ khác biệt. Việc thiết kế giao diện trong AutoLisp tương đối phức tạp, trong khi đó VBA lại dễ dàng. Khả năng liên kết của AutoLisp với môi trường bên ngoài rất hạn chế, còn VBA thì rất ổn nhờ DLL. Đặc biệt trong lĩnh vực kỹ thuật, việc trao đổi giữa Excel và AutoCad là rất cần thiết và hợp lý. Bạn có thể sử dụng VBA trong Excel hay AutoCad đều được, thậm chí cả VB6 cũng ổn. Như vậy hướng phát triển VBA sẽ ứng dụng được rộng hơn so với AutoLisp,...

Cũng không hoàn toàn đồng ý với bạn được
Mặc dù VBA quả nhiên có nhiều ưu điểm, nhưng gặp phải các hạn chế như:
- Thực thi lệnh nặng nề
- Muốn chạy thì trừ phi viết thêm một Lisp với dòng "vbarun" nếu không thì đành phải dùng Run Macro

Lisp hiển nhiên là đứa con được cưng chiều nhất của Cad, ssg có thăm qua đây chắc cũng phải đồng ý với điều này, vì chính như anh đã nói trong màn chào sân: Nick ssg nghĩa là ssget (creates a selection set from the selected object) - một khái niệm rất cơ bản của lisp. Theo hiểu biết của tôi, làm chủ được SS, bạn có thể làm được mọi thứ mình muốn bằng lsp. Quả vậy! Lisp chứa đựng mọi công cụ đủ để tác động trực tiếp lên các đối tượng trong Cad bằng bản chất của chúng. Điều đó khiến chùng ta có cảm giác AutoCad được các nhà lập trình tạo ra với công thức: Cad = Giao diện đồ họa + phần bổ trợ + các lệnh Lisp vậy
Tất nhiên cũng cần xét đến yếu tố cá nhân, mỗi người có một thói quen và cách thức làm việc riêng, và ai cũng có một ngôn ngữ đắc ý của mình. Jin tin rằng chúng ta hoàn toàn có thể tìm cách để hoặc dùng độc lập, hoặc sử dụng kết hợp các ngôn ngữ để giải quyết các vấn đề của mình
  • 0

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#19 cuongcv3

cuongcv3

    biết vẽ line

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

Đã gửi 29 June 2007 - 09:41 AM

Hay qua, lại biết thêm 01 món nữa. Bác Nguyen Hoanh ơi cho e hỏi bác có chương trình nào nhập điểm vào theo cả tọa độ đề các và tọa độ cực không nhỉ, chỉ cho e với (Tọa độ nhập từ excel). Xin bác chỉ kỹ kỹ 1 xíu vì e mới vào nghề nên còn non lắm. thank bác.
Nhân tiện cho e hỏi e ở Thủ Đức - TPHCM muốn đi học lập trình Autolisp thì học ở đâu là tiện nhỉ.
  • 0

#20 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 29 June 2007 - 11:41 AM

Hay qua, lại biết thêm 01 món nữa. Bác Nguyen Hoanh ơi cho e hỏi bác có chương trình nào nhập điểm vào theo cả tọa độ đề các và tọa độ cực không nhỉ, chỉ cho e với (Tọa độ nhập từ excel). Xin bác chỉ kỹ kỹ 1 xíu vì e mới vào nghề nên còn non lắm. thank bác.
Nhân tiện cho e hỏi e ở Thủ Đức - TPHCM muốn đi học lập trình Autolisp thì học ở đâu là tiện nhỉ.

Để làm gì hả bạn?
  • 2