Đến nội dung


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

Học AutoLisp


  • Please log in to reply
182 replies to this topic

#21 dodeca

dodeca

    biết pan

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

Đã gửi 09 September 2007 - 01:38 PM

Thông tin gì bạn?
Line có rất nhiều thông tin!


Tôi muốn viết một đoạn lệnh để chèn symbol vào giữa 2 điểm. Để định hướng cho symbol tôi sẽ vẽ 1 line tạo bởi 2 điểm đó. Sau khi chèn symbol vào rồi thì xoá line định hướng đó. Bác có rảnh thì hương dẫn dùm nha. Cám ơn đã trả lời.
  • 0

#22 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 September 2007 - 02:36 PM

Tôi muốn viết một đoạn lệnh để chèn symbol vào giữa 2 điểm. Để định hướng cho symbol tôi sẽ vẽ 1 line tạo bởi 2 điểm đó. Sau khi chèn symbol vào rồi thì xoá line định hướng đó. Bác có rảnh thì hương dẫn dùm nha. Cám ơn đã trả lời.


Sau đây là 1 đoạn lisp tạo một điểm point ở giữa một đối tượng line:
(defun c:test()
(setq ent (car (entsel "\nPick vao 1 line: "))
tt (entget ent)
p1 (cdr (assoc 10 tt))
p2 (cdr (assoc 11 tt))
pg (polar p1 (angle p1 p2) (/ (distance p1 p2) 2.0))
)
(entmake (list (cons 0 "POINT") (cons 10 pg)))
(princ)
)
  • 4

#23 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 11 September 2007 - 01:47 PM

Nhờ bác Hoành mổ xẻ lệnh: TRACDIA của bác SSG giúp được không. Đang cần học 1 số cái trong lễnh này nhưng chưa hiểu lắm nhất là các hàm diều khiển dialoag.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#24 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 11 September 2007 - 02:10 PM

Nhờ bác Hoành mổ xẻ lệnh: TRACDIA của bác SSG giúp được không. Đang cần học 1 số cái trong lễnh này nhưng chưa hiểu lắm nhất là các hàm diều khiển dialoag.

là lệnh nào bạn?
  • 0

#25 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 11 September 2007 - 02:40 PM

là lệnh nào bạn?

http://www.cadviet.com/upfiles/Tracdia2_1.rar
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#26 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 11 September 2007 - 02:50 PM

http://www.cadviet.com/upfiles/Tracdia2_1.rar

Chịu rồi!
  • 0

#27 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 11 September 2007 - 03:57 PM

Chịu rồi!

File lổi hay sao bác.
Hay là vưiớng gì?
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#28 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 11 September 2007 - 04:35 PM

File lổi hay sao bác.
Hay là vưiớng gì?

Dài quá! Tôi dịch xong cũng mất cả tuần, mà bạn cũng sẽ chẳng thu được mấy kiến thức.
  • 0

#29 dodeca

dodeca

    biết pan

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

Đã gửi 11 September 2007 - 09:02 PM

Sau đây là 1 đoạn lisp tạo một điểm point ở giữa một đối tượng line:
(defun c:test()
(setq ent (car (entsel "\nPick vao 1 line: "))
tt (entget ent)
p1 (cdr (assoc 10 tt))
p2 (cdr (assoc 11 tt))
pg (polar p1 (angle p1 p2) (/ (distance p1 p2) 2.0))
)
(entmake (list (cons 0 "POINT") (cons 10 pg)))
(princ)
)

Úi, bác Hoanh oi! Cái minh cần là vẽ line định hướng trước (chứ không phải chọn line có sẳn). Từ line đó mới lấy thông tin 2 điểm đầu và cuối (như bác đã cho ví dụ) rồi chèn symbol vào. Cuối cùng là xóa line định hướng. Tóm lại là chỉ cần 2 cái click chuột là mình chèn symbol vào giữa 2 điểm đó, nhưng trước khi click cái thứ 2 thì có 1 line chạy theo con trỏ từ điểm đã click, giúp mình định hướng tốt hơn. Giống như khi minh dùng lệnh dist để tính khoảng cách vậy. Không biết diễn tả vậy bác có hiể ý không nữa.
  • 0

#30 binladen_mrp

binladen_mrp

    biết vẽ arc

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

Đã gửi 18 September 2007 - 01:42 PM

Ok.

Có lẽ làm thế sẽ dễ hơn cho người viết, cũng dễ hơn cho người học.

thanks.

đúng đấy Bác Hoành nên viết theo kiêu này đọc dể hiểu hơn sách đấy.Tiếp tục phát huy nhé bác .he :unsure:
  • 0
Tư duy === > Tồn Tại

#31 binladen_mrp

binladen_mrp

    biết vẽ arc

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

Đã gửi 18 September 2007 - 01:48 PM

Bác Hoành ok quá! :unsure: viết tiếp đi bác nhé!
  • 0
Tư duy === > Tồn Tại

#32 hongson86

hongson86

    Chưa sử dụng CAD

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

Đã gửi 31 October 2007 - 11:29 AM

anh hoành oi! em mới bắt đầu học lisp thôi nên nhờ anh hướng dẫn em một chút: em dang học theo cách dạy lisp của anh nhưng mà em không biết cách đưa từ môi trường lisp sang môi trường cad, cảm ơn anh !
  • 0

#33 ths

ths

    biết vẽ line

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

Đã gửi 03 November 2007 - 10:08 AM

Cho minh hoi, làm sao để xuất ra được chu vi đường tròn, mình dùng lệnh "cadr" mà không được?
Minh lập một đoạn code như sau:
(defun c:tdt( / sel ent dientich chuvi)
(princ "\nChao cadviet")
(setq sel (entsel "\nHay chon doi tuong: "))
(setq ent (car sel))
(command "area" "o" ent)
(setq dientich (getvar "area"))
(princ "\nDien tich doi tuong vua roi la: ")
(princ dientich)
(princ "\nm2")
(setq chuvi (cadr (getvar "area")))
(princ "\nChu vi doi tuong vua roi la:")
(princ chuvi)
(princ)
)
Nhưng khi chạy thì máy bảo:
error: bad argument type:
  • 0

#34 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 03 November 2007 - 10:20 AM

Cho minh hoi, làm sao để xuất ra được chu vi đường tròn, mình dùng lệnh "cadr" mà không được?



(command "area" "object" doituongdo)
(setq dientichdo2d (getvar "Perimeter"))

Trong đó doituongdo là đối tượng cần đo, dientichdo2d là gia trị chu vi
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#35 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 03 November 2007 - 11:20 AM

Cho minh hoi, làm sao để xuất ra được chu vi đường tròn, mình dùng lệnh "cadr" mà không được?

Bạn phân tích như thế nào mà dùng cadr?! Để lấy thông tin về đối tượng, bạn cần tìm hiểu về entity và hàm entget.
Ví dụ: (cdr (assoc 40 (entget (car (entsel))))) sẽ trả về bán kính đường tròn do người dùng select. Có bán kính tất nhiên biết chu vi.
Vấn đề là bạn có hiểu biểu thức trên không, cũng như có hiểu bản chất của thủ thuật mà bạn duy782006 đề xuất không?
Góp ý với bạn: hãy bắt đầu bằng những cái cơ bản nhất. Lập trình lisp không khó, nhưng không nên nóng vội!
  • 0

#36 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 03 November 2007 - 11:25 AM

anh hoành oi! em mới bắt đầu học lisp thôi nên nhờ anh hướng dẫn em một chút: em dang học theo cách dạy lisp của anh nhưng mà em không biết cách đưa từ môi trường lisp sang môi trường cad, cảm ơn anh !

Bạn tìm hiểu lệnh appload và các bài viết có liên quan đã post khá nhiều trên diễn đàn.
  • 0

#37 hongson86

hongson86

    Chưa sử dụng CAD

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

Đã gửi 11 November 2007 - 12:28 PM

anh hoành ơi! theo đoạn code anh viết tính diện tích ở đầu bài sao mà em cho chạy thì nó chỉ tính được diện tích hình tròn thôi còn các hình khác nó báo bằng 0 và nó chỉ tính diện tích của một hình duy nhất thôi. em tính diện tích một hình ban đầu xong rồi nó xuất kết quả chính xác, nhưng sau đó em tính diện tích hình khác thì nó báo lại kết quả của hình cũ! mặc dù em thay đổi diện tích của hình đó rồi ! em không hiểu nguyên nhân thế nào? mong anh giải thich dum em nha! cam on anh!
  • 0

#38 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 11 November 2007 - 01:44 PM

anh hoành ơi! theo đoạn code anh viết tính diện tích ở đầu bài sao mà em cho chạy thì nó chỉ tính được diện tích hình tròn thôi còn các hình khác nó báo bằng 0 và nó chỉ tính diện tích của một hình duy nhất thôi. em tính diện tích một hình ban đầu xong rồi nó xuất kết quả chính xác, nhưng sau đó em tính diện tích hình khác thì nó báo lại kết quả của hình cũ! mặc dù em thay đổi diện tích của hình đó rồi ! em không hiểu nguyên nhân thế nào? mong anh giải thich dum em nha! cam on anh!

tôi đã kiểm tra lại, không có vấn đề gì cả.
Bạn có thể upload file CAD của bạn lên được không?
  • 0

#39 meohoang

meohoang

    biết lệnh adcenter

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

Đã gửi 12 November 2007 - 05:45 PM

tôi đã kiểm tra lại, không có vấn đề gì cả.
Bạn có thể upload file CAD của bạn lên được không?

Tôi xin góp ý :
1.Bạn phải chọn các đối lượng vẽ bằng polyline, arc , circle... ko chọn các đối tượng vẽ = lệnh line được
2.Nếu muốn chọn thêm đối tượng là line thì phái dùng lệnh join các line lại
3.Trong lisp này Mr Hoành chỉ hướng dẫn cho các bạn học thôi, chứ nếu viết để làm việc thì sẽ thêm
các hàm lọc lựa đối tượng là line xong kết nôi lại thì tính dt hay chu vi gì đó được tuốt
  • 1

#40 meohoang

meohoang

    biết lệnh adcenter

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

Đã gửi 12 November 2007 - 10:04 PM

Xin mạn phép Mr Hoành nói rõ cho các anh em còn mới tí nha
Mời các bạn tham khảo lại chương trình của Hoành TDT đã nêu. Tôi chỉ nói thêm chi tiết cho các bạn mới vào nghề hiểu thêm tí tẹo!!!!!!
(defun c:tdt( / sel ent dientich)
;;các bạn mới tập viết Lisp chú ý hàm có chữ C: ở trước thì Acad hiểu là lệnh cho nên load vào xong ta có thể gỏ lệnh TDT
;;trước dấu "/" là nơi đặt đối mục nếu ko có đổi mục thì để trống; sau "/" là các biến , có thể ko cần ghi cũng đc hàm vẫn chạy tốt.
;;Tuy nhiên theo Acad nên ghi cho chuyên nghiệp để về sau chỉnh lại dễ dàng, kiểm tra biến đã tạo....
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;định nghĩa hàm tính diện tích 1 đối tượng
(defun tinhdientich_one(ent);;;;hàm này ko có C: chỉ có 1 đổi mục là ent; chú ý nếu ko có "/" thì Acad sẽ hiểu các từ trong ngoặc là đối mục, đối mục có thể có n đối mục
;;;mục đích của loại hàm này trong 1 chương trình nhằm lặp lại các công việc giống nhau. Các bạn phải chịu khó tập cho quen cách viết này vì đây là 1 dạng của lập trình
;;;hướng đối tượng chứ ko còn là lập trình theo thứ tự dòng lệnh từ đầu đến đuôi
(command ".area" "o" ent)
(setq dientich (getvar "area"));;;chú ý sau lệnh ".area" thì Acad lưu giá trị diện tích và chu vi vào 2 biến hệ thống "Area" & "Perimeter" (dt và chu vi)
;;các bạn ko nên hiểu lầm đây là danh sách để rồi dùng hàm cadr để thẻo phần tử thứ 2 . Phải dùng hàm getvar đọc biến hệ thống "Area" và "Perimeter"
);;end defun

; viết lời chào và chọn đối tượng
(alert "Chao cadviet");;;dùng hàm này có vẻ "xôm trò"
(setq ssdt (ssget))

; khởi tạo các biến
(setq
sodoituong (sslength ssdt)
index 0
tongdientich 0.0
);;end setq

;;;quét qua tất cả các đối tượng trong tập chọn, tính diện tích và cộng dồn diện tích
(repeat sodoituong
(setq
ent_ht (ssname ssdt index)
index (1+ index)
dientich (tinhdientich_one ent_ht);;;;đây là lúc dùng hàm tinhdientich_one đối mục là ent_ht vừa tạo bên trên
tongdientich (+ tongdientich dientich)
);;;end setq
);;;end repeat

; xuất kết quả ra màn hình
(alert (strcat "Dien tich tap doi tuong vua roi la: " (rtos tongdientich) "m2"));;;;kết quả nhìn cho đã tí mà
;(princ tongdientich)
;(princ "\nm2")
;(princ)
);;;end defun C:TDT . Các bạn nên cẩn thận ghi chú các dấu ngoặc như vậy sẽ ko gặp lỗi "malformel list"
Lời quê cóp nhặt dông dài xin chân thành cảm ơn các bạn đã đọc.
các bạn cứ cóp lại code và chạy thử xem sao.
  • 3