Đến nội dung


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

Viết Lisp theo yêu cầu


  • Chủ đề bị khóa Chủ đề bị khóa
2780 replies to this topic

#1621 cmengenie

cmengenie

    biết zoom

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

Đã gửi 25 February 2009 - 02:34 PM

Chỉ là 1 lời nhắn tới các bác phamthanhbinh, phiphi...lần trước nhiệt tình chỉ bảo em thôi, k có yêu cầu lần này.
Cácm ơn các bác, nhưng quả thực e rất gà về lisp khi các bác gợi ý em cái quả tính diện tích tổng của 1 loạt các polyline kín.
Em đã làm theo cách của bác gì là: cho chúng nó vào block rồi xem accumulative area :cheers:.
Hôm nay lại tìm thấy cách mới muốn share cho anh em chơi: các bác có thể dùng lệnh area thế này:
Area\chọn Add\ chọn Object thì CAD nó sẽ tự động liệt kê thuộc tính Total area của mấy cái mình chọn.
Thân.
Ps: đã tự mày mò viết xong cái lisp (vài dòng) cho loạt lệnh này :cheers:)
  • 0

#1622 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 25 February 2009 - 03:19 PM

Các bác pro ơi viết dùm em lísp khi click vào 2 điểm của hình chữ nhật bao quanh đối tượng cần tạo Block thì lísp sẽ tạo ra 1 Block có tên là tên file bản vẽ, điểm chèn là tâm của hình chữ nhật.

http://www.cadviet.c...iles/xe_hoi.dwg

Em xin cám ơn nhiều lắm.

Mình thấy bạn cũng đã tập viết lisp nên cái này đơn giản bạn nên tự viết theo gợi ý sau.
-Hỏi chọn điểm thứ nhất.
-Hỏi chọn điểm thứ hai.
-Tính toán ra điểm thứ 3 là trung điểm của 2 điểm vừa tạo.
-Gọi lệnh BLOCK chọn đối tượng bằng chế độ W điểm thứ nhất và điểm thứ 2. Tùy nhu cầu mà bạn tính toán chọn từ điểm trái qua pahỉ hay từ phải qua trái. điểm đặt là điểm thứ 3 mà bạn vừa tính được. Khi tạo xong đối tượng gốc mất đi nếu bạn muốn không mất thì thêm dòng gọi lệnh OOPS.
  • 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


#1623 sucuph

sucuph

    biết zoom

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

Đã gửi 25 February 2009 - 03:55 PM

Hình như bạn nhầm H/L thành L/H, bình thường nói mái dốc 60% hoặc 15% tức là tan(anpha)=0.60 = H/L
Đoạn code này có thể giúp bạn, trong Lisp ko có hàm tan, thường dùng sin/cos=tan, nếu cần cotan thì chỉnh lại nhé.
(defun c:gocdoc ( / ent p1 cao_text sp ep ang dodoc thap_phan)
(vl-load-com)
(setq ent (entsel "\nChon mai doc:"))
(setq cao_text 0.5
thap_phan 2
p1 (cadr ent)
ent (car ent)
sp (vlax-curve-getStartPoint ent)
ep (vlax-curve-getEndPoint ent)
ang (angle sp ep)
dodoc (* (abs (/ (sin ang) (cos ang))) 100)
dodoc (strcat (rtos dodoc 2 thap_phan) "%"))
(command "_.text" p1 cao_text 0 dodoc)
)

Em là dân thuỷ lợi, trong thuỷ lợi bọn em thưòng nói hệ số mái dốc là m=l/h, (vd hệ số mái đập m=3, m=3,5), em cảm ơn bác, em cũng đã sửa lại code theo ý muốn. Em có một ý muốn nhờ bác nữa đó là em muốn khi chọn đối tượng đo mái dốc thì sẽ hiện lên màn hình kết quả là đoạn text song song với mái dốc để ghi chú luôn cho mái dốc đó.Chờ tin bác. Cảm ơn bác và các anh em!
  • 0

#1624 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 25 February 2009 - 04:00 PM

Em là dân thuỷ lợi, trong thuỷ lợi bọn em thưòng nói hệ số mái dốc là m=l/h, (vd hệ số mái đập m=3, m=3,5), em cảm ơn bác, em cũng đã sửa lại code theo ý muốn. Em có một ý muốn nhờ bác nữa đó là em muốn khi chọn đối tượng đo mái dốc thì sẽ hiện lên màn hình kết quả là đoạn text song song với mái dốc để ghi chú luôn cho mái dốc đó.Chờ tin bác. Cảm ơn bác và các anh em!

Có 1 cách để viết text góc quay theo đối tượng vừa chọn là bạn dùng UCS lựa chọn ob thực hiện lệnh text xong thì UCS lựa chọn p để trả về là xong.
  • 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


#1625 sucuph

sucuph

    biết zoom

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

Đã gửi 25 February 2009 - 04:11 PM

Có 1 cách để viết text góc quay theo đối tượng vừa chọn là bạn dùng UCS lựa chọn ob thực hiện lệnh text xong thì UCS lựa chọn p để trả về là xong.

nhờ các bác viết luôn hộ code đi, em chỉ biết sửa mấy thu đơn giản thôi chứ viết thì em chịu.Các bác giúp em nha.
  • 0

#1626 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 25 February 2009 - 04:37 PM

Các bác pro ơi viết dùm em lísp khi click vào 2 điểm của hình chữ nhật bao quanh đối tượng cần tạo Block thì lísp sẽ tạo ra 1 Block có tên là tên file bản vẽ, điểm chèn là tâm của hình chữ nhật.

http://www.cadviet.c...iles/xe_hoi.dwg

Em xin cám ơn nhiều lắm.

Chào bạn tuan_thietkedien,
Thú thục với bạn là mình chưa viết cái lisp tạo block bao giờ. Nay thấy bạn yêu cầu thì làm thử song không biết có vừa ý bạn hay không. Trong lisp này cái việc đặt tên cho block theo tên file hiện hành mình chưa biết ính sao nên đành để cho bạn tự nhập vậy. Do cái tên không dài quá nên chắc bạn cũng vui lòng nhập giùm nha.
(defun c:mb()
(setq p1 (getpoint "\n Nhap diem thu nhat:")
p2 (getpoint "\n Nhap diem thu hai:")
p3 (list (/ (+ (car p1) (car p2)) 2) (/ (+ (cadr p1) (cadr p2)) 2))
)
(command "block" (getstring "\n Nhap ten block: ") p3 (ssget "w" p1 p2) "")
(princ)
)

Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1627 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 25 February 2009 - 04:44 PM

nhờ các bác viết luôn hộ code đi, em chỉ biết sửa mấy thu đơn giản thôi chứ viết thì em chịu.Các bác giúp em nha.

Mạn phép thêm 1 chút vào lisp của bạn cuongtk2
(defun c:gocdoc ( / ent p1 cao_text sp ep ang dodoc thap_phan)
(vl-load-com)
(setq ent (entsel "\nChon mai doc:"))
(setq cao_text 0.5
thap_phan 2
p1 (cadr ent)
ent (car ent)
sp (vlax-curve-getStartPoint ent)
ep (vlax-curve-getEndPoint ent)
ang (angle sp ep)
dodoc (* (abs (/ (sin ang) (cos ang))) 100)
dodoc (strcat (rtos dodoc 2 thap_phan) "%"))
(command "ucs" "ob" ent)
(command "_.text" p1 cao_text 0 dodoc)
(command "ucs" "p")
)
  • 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


#1628 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

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

Đã gửi 25 February 2009 - 04:51 PM

Mình thấy bạn cũng đã tập viết lisp nên cái này đơn giản bạn nên tự viết theo gợi ý sau.
-Hỏi chọn điểm thứ nhất.
-Hỏi chọn điểm thứ hai.
-Tính toán ra điểm thứ 3 là trung điểm của 2 điểm vừa tạo.
-Gọi lệnh BLOCK chọn đối tượng bằng chế độ W điểm thứ nhất và điểm thứ 2. Tùy nhu cầu mà bạn tính toán chọn từ điểm trái qua pahỉ hay từ phải qua trái. điểm đặt là điểm thứ 3 mà bạn vừa tính được. Khi tạo xong đối tượng gốc mất đi nếu bạn muốn không mất thì thêm dòng gọi lệnh OOPS.


Anh Duy có thể hướng dẫn em thêm cách lấy tên của file hiện hành, còn chọn đối tượng bằng chế độ W mình phải làm sao?
Em đã thử viết rồi nhưng lisp không chạy được
(defun c:test()
(setq
p1 (getpoint "\nChon diem 1: ")
p2 (getcorner p1 "\nChon diem 2: ")
td (list (/ (+ (car p1) (car p2)) 2) (/ (+ (cadr p1) (cadr p2)) 2))
)
(command "block" "abc" td p1 p2 "")
(princ)
)

  • 0

#1629 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 25 February 2009 - 04:58 PM

nhờ các bác viết luôn hộ code đi, em chỉ biết sửa mấy thu đơn giản thôi chứ viết thì em chịu.Các bác giúp em nha.

Chào bạn sucuph,
Cái yêu cầu của bạn bác Cuongtk2 đã giải quyết phần cơ bản rồi, dòng text ghi độ dốc đã có, bạn chỉ việc thay đổi nội dung text , vị trí điểm đặt của text và góc xoay text là xong mà.
Bạn hãy thay dòng lệnh (command "_.text" p1 cao_text 0 dodoc) bằng dòng lệnh tương tự như sau:(command "_.text" (list (car p1) (+ 5 (cadr p1)) cao_text ang (strcat " Do doc mai la " dodoc)).
Như vậy vị trí đặt text sẽ cao hơn điểm chọn 5 đơn vị và text sẽ nghiêng một góc ang tức là song song với mặt dốc. Text sẽ được đổi thành Do doc mai là ....%

Bạn thử lại nhé. Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1630 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 25 February 2009 - 05:15 PM

Anh Duy có thể hướng dẫn em thêm cách lấy tên của file hiện hành, còn chọn đối tượng bằng chế độ W mình phải làm sao?
Em đã thử viết rồi nhưng lisp không chạy được

(defun c:test()
(setq
p1 (getpoint "\nChon diem 1: ")
p2 (getcorner p1 "\nChon diem 2: ")
td (list (/ (+ (car p1) (car p2)) 2) (/ (+ (cadr p1) (cadr p2)) 2))
)
(command "block" "abc" td p1 p2 "")
(princ)
)

Chào bạn tuan_thietkedien,
Câu hỏi 1 mình chưa trả lời được.
Câu hỏi 2, bạn tham khảo cái lisp của mình đã post cho bạn trong topic này. Cái sai của bạn là điểm p1 p2 là đối số của hàm ssget chứ không phải là tham số của lệnh block. Lệnh block yêu cầu bạn chọn một tập đối tượng trên bản vẽ chứ không phải các điểm chọn. Do vậy mình dùng hàm ssget để lấy tập đối tượng này với mode "W" và các điểm chọn p1, p2 làm đối số.
Bạn nên lưu ý khi dùng lệnh command của cad phải tuân thủ đúng yêu cầu về các tham số của nó thì lisp mới chạy được, kể cả về trình tự sắp xếp các tham số trong lệnh nữa.
Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1631 sucuph

sucuph

    biết zoom

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

Đã gửi 25 February 2009 - 05:30 PM

Chào bạn sucuph,
Cái yêu cầu của bạn bác Cuongtk2 đã giải quyết phần cơ bản rồi, dòng text ghi độ dốc đã có, bạn chỉ việc thay đổi nội dung text , vị trí điểm đặt của text và góc xoay text là xong mà.
Bạn hãy thay dòng lệnh (command "_.text" p1 cao_text 0 dodoc) bằng dòng lệnh tương tự như sau:(command "_.text" (list (car p1) (+ 5 (cadr p1)) cao_text ang (strcat " Do doc mai la " dodoc)).
Như vậy vị trí đặt text sẽ cao hơn điểm chọn 5 đơn vị và text sẽ nghiêng một góc ang tức là song song với mặt dốc. Text sẽ được đổi thành Do doc mai là ....%

Bạn thử lại nhé. Chúc bạn vui.

em đã thử nhưng không được bác ạ, không biết lỗi chỗ nào tìm mãi không thấy. Bác cho em xin đoạn code hoàn thiện được không?Nhờ bác giúp đỡ, em đang online chờ bác!
  • 0

#1632 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 25 February 2009 - 05:48 PM

em đã thử nhưng không được bác ạ, không biết lỗi chỗ nào tìm mãi không thấy. Bác cho em xin đoạn code hoàn thiện được không?Nhờ bác giúp đỡ, em đang online chờ bác!

thiếu 1 dấu đóng ngoặc cho list
  • 0

#1633 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 25 February 2009 - 06:12 PM

Lấy tên file hiện hành dùng code này bạn nhé:
(setq tenbanve (vl-string-right-trim ".dwg" (getvar "dwgname")))
  • 0

#1634 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 26 February 2009 - 05:31 AM

Hình như bạn nhầm H/L thành L/H, bình thường nói mái dốc 60% hoặc 15% tức là tan(anpha)=0.60 = H/L

Cái này thì 100% bạn sai hoàn toàn rồi.
Tỉ số H/L gọi là độ dốc của mái được kí hiệu thông thường bằng chữ i=H/L=tan(anpha)
độ dốc i của mái càng lớn thì H càng lớn và ngược lại.
độ dốc i của mái càng lớn thì L càng nhỏ và ngược lại.
Tức là độ dốc của mái tỉ lệ thuận với chiều cao H và tỉ lệ nghịch với chiều dài L

Còn hệ số mái dốc kí hiệu bằng chữ m là đại lượng tỉ lệ nghịch với độ dốc i tính bằng cotg anpha =L/H
mái dốc m của mái càng lớn thì L càng lớn, người ta nói mái dốc này rất thoải và ngược lại
mái dốc m của mái càng nhỏ thì H càng lớn, người ta nói mái dốc này rất là dốc và ngược lại
Tức là mái dốc của mái tỉ lệ thuận với chiều dài L và tỉ lệ nghịch với chiều cao H

Mong các bạn hiểu đúng hai khái niệm này, đặc biệt là các bạn trong ngành Xây dựng dân dụng, xây dựng thuỷ lợi, xây dựng cầu đường và các ngành khác nói chung.
  • 1

#1635 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 26 February 2009 - 05:58 AM

Câu hỏi 2, bạn tham khảo cái lisp của mình đã post cho bạn trong topic này. Cái sai của bạn là điểm p1 p2 là đối số của hàm ssget chứ không phải là tham số của lệnh block. Lệnh block yêu cầu bạn chọn một tập đối tượng trên bản vẽ chứ không phải các điểm chọn. Do vậy mình dùng hàm ssget để lấy tập đối tượng này với mode "W" và các điểm chọn p1, p2 làm đối số.
Bạn nên lưu ý khi dùng lệnh command của cad phải tuân thủ đúng yêu cầu về các tham số của nó thì lisp mới chạy được, kể cả về trình tự sắp xếp các tham số trong lệnh nữa.
Chúc bạn vui.

Chào bạn phamthanhBinh
Đúng là dùng hàm ssget để lấy tập đối tượng này với mode "W" và các điểm chọn p1, p2 làm đối số.

Mình xin được góp ý thêm nhé : Lệnh Block có thể cho bạn chọn đối tượng trên bản vẽ là các điểm chọn và điểm chọn này phải trùng với đối tượng thì lệnh Block mới nhận được đối tượng này và thực thi lệnh Block
Và cái sai của bạn Tuanthietkedien không phải là điểm p1 p2 không phải là tham số của lệnh block mà chính sai ở chổ p1, p2 không trùng với đối tượng chọn cho nên không có đối tượng nào được chọn mà không có đối tượng nào được chọn thì lệnh Block sẽ không thực thi -> thành ra bị lỗi.

(command "block" "abc" td p1 p2 "")
Bạn xem dòng lệnh ở trên thì p1 p2 chính là các điểm chọn theo chế độ pick điểm phải không?
Mà chọn theo chế độ pick điểm p1, p2 thì không có đối tượng nào được chọn rồi còn gì?

@tuanthietkedien: Hãy làm theo gợi ý của bác phamthanhbinh sẽ được
Chúc bạn thành công :cheers:
  • 0

#1636 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 26 February 2009 - 07:27 AM

Anh Duy có thể hướng dẫn em thêm cách lấy tên của file hiện hành, còn chọn đối tượng bằng chế độ W mình phải làm sao?
Em đã thử viết rồi nhưng lisp không chạy được

Đây là lisp theo đúng yêu vầu của bạn nhưng quả thật mình không hiểu lisp này dùng để làm gì.
-Tạo ra block trong chính bản vẽ bằng chính cái tên đó dùng để làm gì vậy bạn.
-Lisp này chỉ chạy được 1 lần cho 1 bản vẽ vì lần thứ 2 thì trong bản vẽ đã tồn tại block này rồi.
-Nếu mục đích bạn muốn đưa điểm chèn block về tâm của hình bạn chọn thì chỉ cần move nó về điểm 0,0 sau đó khi bạn chèn nó vào các bản vẽ khác thì nó là block có tên và điểm chèn như mong muốn của bạn rồi.
*Lưu ý khi chọn điểm bạn nên chọn từ trái qua phải nghen.

(defun c:tbl ()
(command "undo" "be")
(setq a (getpoint "\nChon diem thu nhat: "))
(setq b (getcorner a"\nChon diem thu hai: "))
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq c (list (/ (+ (car a) (car b)) 2) (/ (+ (cadr a) (cadr b)) 2)))
(setq ten (getvar "dwgname"))
(setq so (strlen ten))
(setq so (- so 4))
(setq ten (substr ten 1 so))
(command "select" "W" a b "" "")
(command "block" ten c "p" "")
(setvar "osmode" luubatdiem)
(command "undo" "end")
(princ)
)

  • 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


#1637 sucuph

sucuph

    biết zoom

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

Đã gửi 26 February 2009 - 07:51 AM

thiếu 1 dấu đóng ngoặc cho list

em thử mãi cũng vẫn không được, nó không cho kết quả

Command: gocdoc
Chon mai doc:nil

nhờ bác test lại rồi post cho em xin đầy đủ code của lisp nhé!không biết gì khổ thế đấy!Cam ơn các bác!
  • 0

#1638 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

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

Đã gửi 26 February 2009 - 08:59 AM

Đây là lisp theo đúng yêu vầu của bạn nhưng quả thật mình không hiểu lisp này dùng để làm gì.
-Tạo ra block trong chính bản vẽ bằng chính cái tên đó dùng để làm gì vậy bạn.
-Lisp này chỉ chạy được 1 lần cho 1 bản vẽ vì lần thứ 2 thì trong bản vẽ đã tồn tại block này rồi.
-Nếu mục đích bạn muốn đưa điểm chèn block về tâm của hình bạn chọn thì chỉ cần move nó về điểm 0,0 sau đó khi bạn chèn nó vào các bản vẽ khác thì nó là block có tên và điểm chèn như mong muốn của bạn rồi.
*Lưu ý khi chọn điểm bạn nên chọn từ trái qua phải nghen.



Chào anh Duy
Cám ơn anh đã hướng dẫn cụ thể, em muốn dùng lisp này để tạo thành 1 thư viện block các thiết bị sử dụng trong bản vẽ. Đầu tiên tải dữ liệu CAD của thiết bị từ công ty Panasonic, dữ liệu tải về là 1 file ***.dxf chỉ chứa 1 hình thiết bị chưa được tạo block. Nếu công trình của mình sử dụng loại thiết bị nào thì chỉ việc lấy block từ thư viện ra thôi. Việc chọn điểm chèn là tâm của hộp bao quanh thiết bị để khi mình chèn block cho đẹp mắt ý. :cheers:
:cheers:
  • 0

#1639 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 26 February 2009 - 09:47 AM

thiếu 1 dấu đóng ngoặc cho list

Cám ơn bác Cuongtk2,
Do sơ suất nên viết thiếu một dấu ngoặc đúng như bác nói. Xin rút kinh nghiệm để lần sau cẩn thận hơn. Chúc bác vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1640 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 26 February 2009 - 10:43 AM

em thử mãi cũng vẫn không được, nó không cho kết quả

Command: gocdoc
Chon mai doc:nil

nhờ bác test lại rồi post cho em xin đầy đủ code của lisp nhé!không biết gì khổ thế đấy!Cam ơn các bác!


Chào bạn sucuph,
Lisp đầy đủ đây ạ:
(defun c:gocdoc ( / ent p1 cao_text sp ep ang dodoc thap_phan)
(vl-load-com)
(setq ent (entsel "\nChon mai doc:"))
(setq cao_text 0.5
thap_phan 2
p1 (cadr ent)
ent (car ent)
sp (vlax-curve-getStartPoint ent)
ep (vlax-curve-getEndPoint ent)
ang (angle sp ep)
dodoc (* (abs (/ (sin ang) (cos ang))) 100)
dodoc (strcat (rtos dodoc 2 thap_phan) "%"))
(command "_.text" (list (car p1) (+ 5 (cadr p1))) cao_text (/ (* ang 180) pi) (strcat " Do doc mai la " dodoc))
)

Bạn lưu ý là khi lisp yêu cầu bạn chọn mái doc thì bạn phải chọn vào đúng mái dốc cần xác định độ dốc chứ không được nhấn enter ngay nha.
Khi góc dốc >pi/2 bạn sẽ thấy text bị lộn ngược và tùy theo ý bạn có thể để nguyên hay rotate nó nhé.
Bạn lưu ý thêm là mình có thay đổi cái cách xác định góc xoay của text do hàm angle trả ra giá trị theo radian mà lệnh text yêu cầu nhập giá trị theo độ.
Trong trường hợp mái dốc của bạn không phải là đường line thì góc ang sẽ là góc của điểm đầu và điểm cuối của đường polyline hay spline đó bạn nhé.
Mình đã chạy thử lisp ngon.

Chúc bạn vui và thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.