Đế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

#1741 ngocthinh84

ngocthinh84

    biết vẽ line

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

Đã gửi 26 March 2009 - 08:08 AM

oh.cảm ơn bác thanhbinh nhe.nhưng mà nó vẫn chưa được bác ạ. nó chỉ nối lại thành pline thôi chứ chưa phải lá một line. bác có thể giúp em làm 1 cái lisp xoá các line đó được kô a. .thank
  • 0

#1742 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 26 March 2009 - 09:11 AM

Bạn dùng thử Code này xem :
.....
Chúc thành công :cry:



Oh yeah!!!


Hơn cả mong đợi. Cảm ơn bác rất nhiều!

Chả là em đang làm ĐATN, vẽ cái MB cốt thép sàn mà chơi tay bo không lại.


Thanks bác lần nữa! :cry:
Chúc bác thành công trong cuộc sống!

======================

Sau một hồi sử dụng thì em thấy có cái chưa được thuận tiện lắm
Đó là mỗi lần vẽ thì lisp lại yêu cầu nhập lại kích thước các móc.
Bác có thể sửa lại cho nó lưu kích thước các loại móc và kích thước của móc tròn riêng, móc vuông riêng được không ạ?

Tức là mỗi khi ap cái lisp đó, trước khi vẽ thì mình set kích thước của các loại móc
Sau đó mỗi lần gõ lệnh vẽ (sam hay sduong như bác đã đặt) là bắt đầu vẽ luôn

Cảm ơn bác rất nhiều!
  • 0

Hình đã gửi


#1743 ngocthinh84

ngocthinh84

    biết vẽ line

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

Đã gửi 26 March 2009 - 12:37 PM

chào bác tue NV đoạn lisp bác cho hay lắm đúng với ý mình. cảm ơn nghe. có thể thêm lệnh xoá hay move vào đoạn lisp đó được kô vật?
  • 0

#1744 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 March 2009 - 02:42 PM

Đó là mỗi lần vẽ thì lisp lại yêu cầu nhập lại kích thước các móc.
Bác có thể sửa lại cho nó lưu kích thước các loại móc và kích thước của móc tròn riêng, móc vuông riêng được không ạ?

Tức là mỗi khi ap cái lisp đó, trước khi vẽ thì mình set kích thước của các loại móc
Sau đó mỗi lần gõ lệnh vẽ (sam hay sduong như bác đã đặt) là bắt đầu vẽ luôn

Cảm ơn bác rất nhiều!

Chào bạn kỹ sư :
Có lẽ rằng bạn đã không lường trước đến việc mình sẽ vẽ với các tỉ lệ khác nhau.
. Giả sử bạn đang vẽ trên mặt bằng thép sàn là tỉ lệ 1/100. thì lúc này khi khai báo để vẽ độ dài móc là 100 chẳng hạn .
Nhưng nếu bạn vẽ mặt cắt thép sàn thì chắc chắn bạn phải vẽ với tỉ lệ 1/20 hoặc tỉ lệ 1/25 thì cái độ dài móc không phải là 100 nữa mà là 200 hoặc 250 phải không bạn? nếu set luôn cho bạn kích thước độ dài móc trong Lisp thì sau này bạn sử dụng có vấn đề thì bạn trách mình à? Mình đã lường trước chuyện này rồi. Hơn nữa trong Lisp cũng đã lưu biến độ dài móc rồi, tức là mỗi khi nhập vào thì giá trị đó lưu lại cho mỗi lần sử dụng sau. Bạn có hiểu vấn đề này không?

ngocthinh84 : chào bác tue NV đoạn lisp bác cho hay lắm đúng với ý mình. cảm ơn nghe. có thể thêm lệnh xoá hay move vào đoạn lisp đó được kô vật?

Bạn hãy nói rõ hơn. Chưa hiểu ý bạn
  • 0

#1745 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 26 March 2009 - 03:18 PM

Tức là mỗi khi ap cái lisp đó, trước khi vẽ thì mình set kích thước của các loại móc
Sau đó mỗi lần gõ lệnh vẽ (sam hay sduong như bác đã đặt) là bắt đầu vẽ luôn


Ý của em là có thêm lệnh để set kích thước của các loại móc ạ!
Và sau này muốn vẽ với kích thước khác thì set lại được
  • 0

Hình đã gửi


#1746 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 26 March 2009 - 03:55 PM

Chào bạn kỹ sư :
Có lẽ rằng bạn đã không lường trước đến việc mình sẽ vẽ với các tỉ lệ khác nhau.[/quote]

Vâng, em còn phải vẽ mặt cắt của các dầm nữa mà, lúc đó sẽ dùng kích thước khác

[quote name='Tue_NV' post='53650' date='Mar 26 2009, 14:42']Hơn nữa trong Lisp cũng đã lưu biến độ dài móc rồi, tức là mỗi khi nhập vào thì giá trị đó lưu lại cho mỗi lần sử dụng sau. Bạn có hiểu vấn đề này không?[/quote]

Vâng, thì cũng chỉ phải nhấn Enter hoặc Space thêm có 1 lần
Có điều, độ dài móc vuông khác với đường kính của móc tròn trong khi biến mà lisp lưu lại dùng chung cho cả 2 lệnh vẽ các loại thép. Trong khi em thay đổi các loại thép liên tục


Thực ra đoạn LISP bác đã cho là quá tuyệt vời rồi! :cry:
  • 0

Hình đã gửi


#1747 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 March 2009 - 04:10 PM

Chào bạn kỹ sư :
Có lẽ rằng bạn đã không lường trước đến việc mình sẽ vẽ với các tỉ lệ khác nhau.

Vâng, em còn phải vẽ mặt cắt của các dầm nữa mà, lúc đó sẽ dùng kích thước khác
Vâng, thì cũng chỉ phải nhấn Enter hoặc Space thêm có 1 lần
Có điều, độ dài móc vuông khác với đường kính của móc tròn trong khi biến mà lisp lưu lại dùng chung cho cả 2 lệnh vẽ các loại thép. Trong khi em thay đổi các loại thép liên tục
Thực ra đoạn LISP bác đã cho là quá tuyệt vời rồi! :cry:

Bạn hãy thay tất cả những chữ USERR3 thành USERR2 trong đoạn Lisp vẽ thép âm thôi nhé.
Đoạn Lisp vẽ thép dương có USERR3 thì không thay.
Hãy chạy thử xem
Chúc thành công :cry:
  • 0

#1748 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 March 2009 - 09:20 PM

oh.cảm ơn bác thanhbinh nhe.nhưng mà nó vẫn chưa được bác ạ. nó chỉ nối lại thành pline thôi chứ chưa phải lá một line. bác có thể giúp em làm 1 cái lisp xoá các line đó được kô a. .thank

Chào bạn ngocthinh84,
Nếu chỉ để xóa các đường line đó thì đơn giản, nhưng việc vẽ lại các đường line đó mới làm mình đau đầu do các line của bạn sắp xếp lung tung quá, không theo quy luật gì. Việc nối các line thì chỉ có thể chuyển thành pline mới nối được bạn ạ.
Nếu bạn chấp nhận vẽ lại các đường đó bằng tay thì cái líp xóa các line đó đây bạn ạ.
(defun c:nl ()
(setq Oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ss (ssget (list (cons 0 "LINE"))))
(setq i 0
n (sslength ss)
lst '()
)
(While (< i n)
(setq e (ssname ss i)
elist (entget e)
)
(if (= (car (cdr (assoc 10 elist))) (car (cdr (assoc 11 elist))))
(progn
(setq p1 (cdr (assoc 10 elist))
p2 (cdr (assoc 11 elist))
lst (append (list p1) lst)
lst (append (list p2) lst)
)
(entdel e)
)
)
(setq i (1+ i))
)
(setvar "osmode" oldos)
(princ)
)

Mình đang cố nghĩ cách giải quyết hoàn chỉnh vấn đề của bạn mà chưa được. Mong bạn thông cảm.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1749 ngocthinh84

ngocthinh84

    biết vẽ line

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

Đã gửi 27 March 2009 - 07:47 AM

oh.hay lắm cảm ơn bạn nhiều nha. đó là bản vẽ được xuất từ tekla ra mà.sau khi xoá mình sẽ exten từ đường trên cùng xuống vậy.vì mình dùng tự động chỉnh sửa cho tất cả các bản vẻ giống nhau mà kô cần phải mở từng bản lên nên như vậy cũng là tốt rồi. chú7 lúc trước mình dùng filter để chọn line thì nó hiện lên cái bảng filter selection nên kô làm tự động được giờ thì ok rồi. thank bạn nhiều
  • 0

#1750 tdvn

tdvn

    biết lệnh rotate

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

Đã gửi 27 March 2009 - 10:18 AM

oh.hay lắm cảm ơn bạn nhiều nha. đó là bản vẽ được xuất từ tekla ra mà.sau khi xoá mình sẽ exten từ đường trên cùng xuống vậy.vì mình dùng tự động chỉnh sửa cho tất cả các bản vẻ giống nhau mà kô cần phải mở từng bản lên nên như vậy cũng là tốt rồi. chú7 lúc trước mình dùng filter để chọn line thì nó hiện lên cái bảng filter selection nên kô làm tự động được giờ thì ok rồi. thank bạn nhiều

Bạn ơi, bạn giải thích hay cho mình biết trang nào chỉ cách "tự động chỉnh sửa cho tất cả các bản vẻ giống nhau mà không cần phải mở từng bản lên" được không? Mình cũng có một số việc phải chỉnh trên hàng loạt bản vẽ, ví vụ đổi chữ "Việt Nam" thành "VIỆT NAM", nhưng mình cứ phải mở bản vẽ lên thì mới cho chạy một đoạn lisp để chỉnh sau đó save lại. Cám ơn bạn
  • 0

#1751 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 27 March 2009 - 10:33 AM

Bạn hãy thay tất cả những chữ USERR3 thành USERR2 trong đoạn Lisp vẽ thép âm thôi nhé.
Đoạn Lisp vẽ thép dương có USERR3 thì không thay.
Hãy chạy thử xem
Chúc thành công :cry:



Ô yeah!!!!!!!!!!!
Ngon rồi bác ạ! :cry:


Bác nhiệt tình quá !

Cảm ơn bác!
Cảm ơn CadViet!
  • 0

Hình đã gửi


#1752 ngocthinh84

ngocthinh84

    biết vẽ line

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

Đã gửi 27 March 2009 - 12:48 PM

à mình load thêm 1 chương trình hổ trợ vào cad. sau đó đánh lệnh vào đó và chọn tất cả bản vẽ cần sửa và ok thế là xong. nhưng có điều là tiếng hàn bạn ạ. thử tham khảo sem nhé.
http://www.cadviet.com/upfiles/EZ.zip
http://www.cadviet.c...StoneEditor.bmp
à chỉ hổ trợ cad2002 thôi bạn nhé
tải về giải nén ra chép vào support rồi ap load nó vào là được. gõ lệnh ez nhé.
chuc bạn thành công
  • 1

#1753 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 27 March 2009 - 01:51 PM

oh.hay lắm cảm ơn bạn nhiều nha. đó là bản vẽ được xuất từ tekla ra mà.sau khi xoá mình sẽ exten từ đường trên cùng xuống vậy.vì mình dùng tự động chỉnh sửa cho tất cả các bản vẻ giống nhau mà kô cần phải mở từng bản lên nên như vậy cũng là tốt rồi. chú7 lúc trước mình dùng filter để chọn line thì nó hiện lên cái bảng filter selection nên kô làm tự động được giờ thì ok rồi. thank bạn nhiều

Chào bạn ngocthinh84,
Sau một hồi, lần mò tìm cách, cuối cùng mình đã ra được cái lisp có thể giải quyết được yêu cầu của bạn. Chạy thử với cái bản vẽ bạn gửi thì Ok. Bạn xài thử xem và cho mình biết kết quả nhé.
Cái khó nhất với mình là việc phải sắp xếp lại các điểm đầu và cuối của mỗi đoạn thẳng sao cho nó có một trật tự nhất định. Còn trên bản vẽ của bạn nó lung tung quá, cái trước cái sau nó tèm lem cả. Trong lisp này mình phải dùng một mẹo nhỏ mới sắp xếp nổi nó theo tọa độ x của điểm. Sau khi sắp xếp được rồi thì chỉ cần chọn hai điểm có tọa độ y lớn nhất và nhỏ nhất trong mỗi cụm điểm cùng x là vẽ được đường thẳng cần thiết ngay.
Rất mong bạn thông cảm vì phải chờ lâu do trình độ lisp của mình còn hạn chế.
Lisp đây:
(defun c:nl ()
(setq Oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ss (ssget (list (cons 0 "LINE"))))
(setq i 0
n (sslength ss)
lst '()
)
(While (< i n)
(setq e (ssname ss i)
elist (entget e)
)
(if (= (car (cdr (assoc 10 elist))) (car (cdr (assoc 11 elist))))
(progn
(setq p1 (cdr (assoc 10 elist))
p2 (cdr (assoc 11 elist))
lst (append (list p1) lst)
lst (append (list p2) lst)
)
(entdel e)
)
)
(setq i (1+ i))
)

(setq lsts (list))
(while (/= nil lst)
(setq st (car (nth 0 lst))
lst0 '()
lst0 (append (list (nth 0 lst)) lst0)
)
(foreach p lst
(if (= (car p) st)
(setq lst0 (append (list p) lst0))
)
)
(setq lst0 (list lst0))
(foreach p lst
(if (/= (car p) st)
(setq lst0 (append (list p) lst0))
)
)
(setq lst0 (reverse lst0))
(setq lst2 (car lst0)
lst (cdr lst0)
)
(foreach q lst2
(setq lsts (append (list q) lsts))
)
)
(setq lst lsts)







(While (/= nil lst)
(setq lst1 '())
(setq j 0)
(setq a (car (nth 0 lst)))
(While (/= nil (nth j lst))
(if (= (car (nth j lst)) a)
(progn
(setq lst1 (cons (cadr (nth j lst)) lst1))
)
)

(setq j (1+ j))
)
(setq b (nth 0 lst1))
(foreach c lst1
(if (<= c b) (setq b c))
)
(setq c (nth 0 lst1))
(foreach d lst1
(if (>= d c) (setq c d))
)
(command "line" (list a b) (list a c) "")
(if (/= (car (nth 0 lst)) (car (nth 1 lst)))
(setq lst (cdr lst))
(progn
(while (= (car (nth 0 lst)) (car (nth 1 lst)))
(setq lst (cdr lst))
)
)
)
)
(setvar "osmode" oldos)
(princ)
)

Chúc bạn vui và hãy chia xẻ với mọi người. Rất cám ơn bạn về những điều bạn đã chia xẻ cùng mọi người
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1754 ngocthinh84

ngocthinh84

    biết vẽ line

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

Đã gửi 28 March 2009 - 12:59 PM

cảm ơn bạn nhé . mình thử rồi. tuyệt lắm.chúc bạn vui và có nhiều ý tưởng hay chia sẽ cùng mọi người
  • 0

#1755 hiepmeo

hiepmeo

    biết pan

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

Đã gửi 29 March 2009 - 09:46 PM

Các cao thủ có thể viết giùm em cái Lisp để dùng Draw Order --> Send to back hoặc Bring to front bằng lệnh được không ạ. Cái này cũng hay phải dùng mà cứ phải dùng thanh công cụ thì hơi lâu. Em cũng tìm khắp diễn đàn mà chưa thấy Lisp này. Các bác giúp em nhé. Thanks Cad Viet
  • 0

#1756 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 30 March 2009 - 02:32 PM

Các cao thủ có thể viết giùm em cái Lisp để dùng Draw Order --> Send to back hoặc Bring to front bằng lệnh được không ạ. Cái này cũng hay phải dùng mà cứ phải dùng thanh công cụ thì hơi lâu. Em cũng tìm khắp diễn đàn mà chưa thấy Lisp này. Các bác giúp em nhé. Thanks Cad Viet

Chào bạn hiepmeo,
Bạn xài thử cái này xem nhé.
(defun c:drob ()
(command "draworder" (ssget) "" "b")
)
(defun c:drof ()
(command "draworder" (ssget) "" "f")
)
Lệnh draworder bring to back là drob, còn bring to front là drof bạn nhé.
Có điều bạn cần lưu ý như sau:
1/- lệnh này có nhanh hơn cái việc dùng toolbar là do kỹ năng xài cad của bạn. Bởi lệnh này cũng cần xài tới 4 ký tự và một phát enter. Nếu bạn muốn nhanh hơn có thể bỏ bớt ký tự trong hàm lệnh.
2/- Đây cũng là cấu trúc chung cho các hàm lệnh sử dụng các lệnh sẵn có của cad. Việc sử dụng các hàm lệnh này thực ra chưa chắc đã hay hơn việc nhập lệnh trên dòng command. Không nên quá lạm dụng nó vì nó có thể gấy rối cho cad nhất là khi có quá nhiều các lệnh kiểu này.
3/- Dựa vào cấu trúc này bạn có thể tạo bất cứ hàm lệnh cad nào mà bạn muốn, miễn là bạn phải hiểu rõ cấu trúc, trình tự thực hiện của từng lệnh trong Cad. Hy vọng rằng bạn sẽ có thể tự tạo được các lệnh phù hợp với yêu cầu của bạn.

Chúc bạn 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.

#1757 hiepmeo

hiepmeo

    biết pan

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

Đã gửi 30 March 2009 - 03:27 PM

Chào bạn hiepmeo,
Bạn xài thử cái này xem nhé.

(defun c:drob ()
(command "draworder" (ssget) "" "b")
)
(defun c:drof ()
(command "draworder" (ssget) "" "f")
)
Lệnh draworder bring to back là drob, còn bring to front là drof bạn nhé.
Có điều bạn cần lưu ý như sau:
1/- lệnh này có nhanh hơn cái việc dùng toolbar là do kỹ năng xài cad của bạn. Bởi lệnh này cũng cần xài tới 4 ký tự và một phát enter. Nếu bạn muốn nhanh hơn có thể bỏ bớt ký tự trong hàm lệnh.
2/- Đây cũng là cấu trúc chung cho các hàm lệnh sử dụng các lệnh sẵn có của cad. Việc sử dụng các hàm lệnh này thực ra chưa chắc đã hay hơn việc nhập lệnh trên dòng command. Không nên quá lạm dụng nó vì nó có thể gấy rối cho cad nhất là khi có quá nhiều các lệnh kiểu này.
3/- Dựa vào cấu trúc này bạn có thể tạo bất cứ hàm lệnh cad nào mà bạn muốn, miễn là bạn phải hiểu rõ cấu trúc, trình tự thực hiện của từng lệnh trong Cad. Hy vọng rằng bạn sẽ có thể tự tạo được các lệnh phù hợp với yêu cầu của bạn.


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



Thank bác nhiều, em cũng chỉ dùng lệnh này thôi, em cũng không muốn (thật ra không biết,hì hì) can thiệp vào Cad bằng nhiều lệnh dạng này...Thank
  • 0

#1758 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 30 March 2009 - 04:45 PM

chào các bạn, mình lại mạo muội nhờ các bạn viết dùng mình 1 lisp để làm như sau :

mình có đường (polyline hoặc cong) và cần lisp tự động đánh số các cột đèn theo thứ tự T1/L1-1A, T1/L1-2B, T1/L1-3C, T1/L1-4A.....ban đầu có T1/L1-1A mình chỉ cần click vào chữ cần đánh (T1/L1-1A) chọn đường cần al theo lisp sẽ tự động đánh tiếp vào các block kế tiếp với điểm gốc cần đánh như trong bản vẽ kèm theo.
http://www.cadviet.c...Drawing1_37.dwg
ở bản vẽ đã có đầy đủ thông tin :cry: cảm ơn các bạn nhiều.

mình thấy cái lisp mình yêu cầu nó gần như công 2 cái lisp này vào làm 1, kô bít có giúp đc j cho các bạn viết jiup kô :cry:

cái lisp này là để đánh số cột đèn tăng dần ví dụ như T1/L1-1A sẽ thành T1/L1-2B, T1/L1-3C, T1/L1-4A.....

;;;===================================================================
;;; Danh so cot den:
(defun c:dsc (/ ang x y ent tg tg1tg2 num_r
num_c num_inc dis_r dis_c num top idnum
dx dy bottom inc tgnum attr attr_ent
t_base b_base locat value deci stnum loca1 loca2
tt count inctg inctg1 bpoint mx my nx
ny bx by
)
(setq idnum 0)
(while (/= idnum 1)
(setq ent (entsel "\nHay lua chon so ma ban muon copy : "))
(if ent
(progn
(setq e (car ent))
(setq tg (entget e))
(if (= (cdr (assoc 0 tg)) "TEXT")
(setq idnum 1)
)
)
(princ)
)
)

(setq num_inc (getreal "\nHay nhap he so tang giam <1> : "))
(if (= num_inc nil)
(setq num_inc 1)
)

(setq bpoint (getpoint "\nChon diem goc de copy : "))
(setq x (car bpoint))
(setq y (car (cdr bpoint)))

(if (and (= (cdr (assoc 72 tg)) 0) (= (cdr (assoc 73 tg)) 0))
(progn
(setq bx (car (cdr (assoc 10 tg))))
(setq by (car (cdr (cdr (assoc 10 tg)))))
)
(progn
(setq bx (car (cdr (assoc 11 tg))))
(setq by (car (cdr (cdr (assoc 11 tg)))))
)
)

(setq attr (cdr tg))
(setq tg (cdr (assoc 1 tg)))
(setq inc 0)
(setq tg1 "")
(setq t_base "")
(setq b_base "")
(setq idnum 0)
(setq top 0)
(setq bottom 0)
(setq stnum "")
(setq deci 0)
(repeat (strlen tg)
(if
(or (and (> (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1)))
47
) ;(chr 32)
(< (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1)))
58
)
)

(= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1)))
32
)

(= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1)))
46
)
)
(progn
(if (= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1)))
46
)
(setq deci inc)
)
(if (= inc 0)
(progn
(setq idnum 1)
(if
(= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1)))
46
)
(setq b_base (strcat "." b_base))
)
)
)
(if (= bottom 1)
(progn (setq bottom 0) (setq idnum 1) (setq top 1))
)
(if (and (= idnum 0) (= top 1))
(setq t_base (strcat tgnum t_base))
)
(if (= idnum 1)
(progn
(if (and (= tgnum "0") (> inc 0))
(setq stnum (strcat stnum "0"))
(setq stnum "")
)
(setq tg1 (strcat tgnum tg1))
)
)
)
(if (= inc 0)
(progn
(setq b_base (strcat tgnum b_base))
(setq bottom 1)
)
(if (= bottom 1)
(setq b_base (strcat tgnum b_base))
(progn
(setq top 1)
(setq t_base (strcat tgnum t_base))
(if (= idnum 1)
(setq idnum 0)
)
)
)
)
)
(setq inc (+ inc 1))
)

(if (= tg1 "")
(exit)
)
(setq num (atof tg1))
(setq count 1)

(while (setq bpoint (getpoint "\nChon diem copy tiep theo : "))
(setq num (+ num num_inc))
(if (>= (strlen b_base) 1)
(cond
((or (= "A"
(strcase (substr b_base (strlen b_base) 1))
)
(= "B"
(strcase (substr b_base (strlen b_base) 1))
)
)
(setq b_base
(strcat
(substr b_base 1 (1- (strlen b_base)))
(chr (1+ (ascii (substr b_base (strlen b_base) 1))))
)
)
)
((= "C" (strcase (substr b_base (strlen b_base) 1)))
(setq
b_base (strcat (substr b_base 1 (1- (strlen b_base))) "A")
)
)
)

)
(setq value (strcat t_base (strcat stnum (rtos num 2 deci)) b_base))
(setq nx (car bpoint))
(setq ny (car (cdr bpoint)))
(setq dx (- nx x))
(setq dy (- ny y))
(setq mx (car (getvar "ucsxdir")))
(setq my (car (cdr (getvar "ucsxdir"))))
(setq loca1 (+ bx (* mx dx)))
(setq loca2 (+ by (* my dx)))
(setq mx (car (getvar "ucsydir")))
(setq my (car (cdr (getvar "ucsydir"))))
(setq loca1 (+ loca1 (* mx dy)))
(setq loca2 (+ loca2 (* my dy)))
(setq attr_ent (subst (cons 1 value) (assoc 1 attr) attr))
(if (and (= (cdr (assoc 72 attr_ent)) 0)
(= (cdr (assoc 73 attr_ent)) 0)
)
(setq attr_ent (subst (list 10 loca1 loca2 0)
(assoc 10 attr_ent)
attr_ent
)
)
(setq attr_ent (subst (list 11 loca1 loca2 0)
(assoc 11 attr_ent)
attr_ent
)
)
)
(entmake attr_ent)
(setq count (+ count 1))
) ;end while
(princ)
)


cái lisp này nó sẽ copy các text theo 1 text có sẵn và al theo 1 đường thẳng chọn trước với khoảng cách giữa các text do mình chọn



;;;-----------------------------------------------
(defun c:FG2( / obj Li Di Sb P1 p2 goc n oldos P3)
(setq
OBJ (ssget)
LI (entget (car (entsel "\nSelect line :")))
DI (getreal "\nVertical distance : ")
SB (getint "\nNumber of step :")
P1 (cdr (assoc 10 LI))
P2 (cdr (assoc 11 LI))
goc (angle P1 P2)
n 1
oldos (getvar "osmode")
)
(if (> goc pi) (setq goc (- goc pi)))
(setvar "osmode" 0)
(repeat SB
(setq P3 (polar P1 goc (* (/ DI (sin goc)) n)))
(command "copy" OBJ "" P1 P3 "")
(setq n (1+ n))
)
(setvar "osmode" oldos)
(princ)
)
;;;-----------------------------------------------
  • 0

#1759 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 30 March 2009 - 08:08 PM

chào các bạn, mình lại mạo muội nhờ các bạn viết dùng mình 1 lisp để làm như sau :

mình có đường (polyline hoặc cong) và cần lisp tự động đánh số các cột đèn theo thứ tự T1/L1-1A, T1/L1-2B, T1/L1-3C, T1/L1-4A.....ban đầu có T1/L1-1A mình chỉ cần click vào chữ cần đánh (T1/L1-1A) chọn đường cần al theo lisp sẽ tự động đánh tiếp vào các block kế tiếp với điểm gốc cần đánh như trong bản vẽ kèm theo.
http://www.cadviet.c...Drawing1_37.dwg
ở bản vẽ đã có đầy đủ thông tin :cry: cảm ơn các bạn nhiều.

mình thấy cái lisp mình yêu cầu nó gần như công 2 cái lisp này vào làm 1, kô bít có giúp đc j cho các bạn viết jiup kô :cry:


Chào bạn Nguyenkhoadung98,
Rất tiếc mình không mở được file bản vẽ bạn gửi do mình dùng cad2004. Do vậy vẫn chưa hiểu được yêu cầu của bạn.
Nếu không phiền, bạn có thể upload lại cái file của bạn ở version cad2004 để mình có thể tham khảo. Việc tạo cái lisp như yêu cầu của bạn mình không dám chắc sẽ thành công nhưng sẽ cố gắng thử xem sau khi nắm rõ yêu cầu của bạn.
Chúc bạn vui.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1760 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 31 March 2009 - 09:19 AM


Chào mọi người!
Mình muốn in nhiều bản vẽ trong một file (như trắc ngang của đường chẳng hạn) thì phải kích đi kích lại nhiều lần khổ quá. Bác nào cho mình xin cái lisp để in một lần nhiều bản theo khung tên, hoặc theo một block nào đó đã định dạng trước được không? Cảm ơn nhiều.
  • 0
Học học nữa học mãi.
Đúp học lại!