Đến nội dung


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

Viết lisp theo yêu cầu [phần 2]


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

#1581 ksor_phong

ksor_phong

    biết vẽ circle

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

Đã gửi 20 August 2010 - 04:27 PM

Trước hết xin cám ơn các bác đã quan tâm giúp đỡ.
Sở dĩ em cần làm vậy vì trong các bản vẽ hiện trạng dung lượng rất lớn (có khi đến cả 500MB CAD) edit từng block là điều rất khó vì nó có vài trăm block; vài chục layer, mỗi thằng định dạng một kiểu, nên em muốn tất cả các đối tượng về một layer, màu: bylayer của đối tượng gốc chứ không phải của layer chứa block, được vậy thì cám ơn các bác lắm.
Gửi các bác một file mẫu:
Em Up mãi không được bác nào thương tình dowload giúp em ở đây, file chỉ 1,5MB thôi:
https://www.yousendi...tcWY4NVh2Wmc9PQ
  • 0

#1582 bachngoctung

bachngoctung

    biết lệnh copy

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

Đã gửi 20 August 2010 - 10:44 PM

Thử cái này xem......

-Cám ơn Duy nhiều :D :D
  • 0

#1583 phuongdongvl

phuongdongvl

    biết zoom

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

Đã gửi 20 August 2010 - 11:47 PM

Các anh ơi cho em hỏi.Em có viết lisp về lệnh CO thành C.Thao tác quen của em là chọn đối tượng rồi mới enter nhưng bây giờ như thế ko đc.gõ lệnh xong em lại phải chọn đối tường một lần nữa.Các anh có thể viết lại đoạn lisp mà chỉ cần chọn đối tượng và enter một lần là đc ko ạ?Em cám ơn nhiều!
  • 0

#1584 hoa35ktxd

hoa35ktxd

    biết lệnh move

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

Đã gửi 21 August 2010 - 06:43 PM

Không cần Lisp đâu, chắc là ai đó đã chỉnh mất phần sau rồi.
Option>Selection>Selection modes>Noun/Verb selection
Hãy đánh dấu vào ô đó nhé.
  • 0

#1585 phuongdongvl

phuongdongvl

    biết zoom

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

Đã gửi 22 August 2010 - 02:27 AM

Ko.Ý e là muốn viết một cái lisp như thế để mình còn tiện mang đi chứ ko cần lisp thì nói làm j.viết một cái lisp mà lệnh CO sau khi chuyển thành C mình chỉ cần chọn đối tượng rồi enter là có thể di copy luôn ko cần phải chọn đối tượng thêm một lần nữa.
  • 0

#1586 hoa35ktxd

hoa35ktxd

    biết lệnh move

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

Đã gửi 22 August 2010 - 08:19 AM

Không hiểu ý bạn là gì.
Lisp chỉ cần dùng để làm những việc có tính chất quy luật lặp đi lặp lại để giảm bớt thời gian.
Chuyển CO thành C thực chất đều là lệnh tắt của lệnh COPY. Bạn nên nghiên cứu file Acad.pgp để biết cách tạo lệnh tắt.
Còn việc chọn đối tượng trước, lệnh sau thì chỉ cần chỉnh trong Option là được.
Tôi thấy viết Lisp cho việc này là không cần thiết, mặc dù viết rất đơn giản.
  • 0

#1587 Sony2007

Sony2007

    biết lệnh copy

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

Đã gửi 22 August 2010 - 10:21 AM

Nhờ các bác viết giúp lisp: thêm một vertex vào đường polyline.
Thông thường thì e phải dùng lệnh pedit\ edit vertex\ rồi phải chọn next hoặc previous sau đó mới chọn insert
Công việc này quá mất nhiều thao tác, bác nào có thể viết lisp thêm một vertex vào đường polyline bằng cách chọn 1 điểm là được ngay.

Cám ơn các bác nhiều
  • 0

#1588 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 August 2010 - 11:03 AM

Nhờ các bác viết giúp lisp: thêm một vertex vào đường polyline.
Thông thường thì e phải dùng lệnh pedit\ edit vertex\ rồi phải chọn next hoặc previous sau đó mới chọn insert
Công việc này quá mất nhiều thao tác, bác nào có thể viết lisp thêm một vertex vào đường polyline bằng cách chọn 1 điểm là được ngay.

Cám ơn các bác nhiều

Sony chịu khó tìm kiếm 1 chút nhé :
Lisp đó đây : http://www.cadviet.c...o...15016&st=20
  • 1

#1589 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 22 August 2010 - 11:28 AM

Ko.Ý e là muốn viết một cái lisp như thế để mình còn tiện mang đi chứ ko cần lisp thì nói làm j.viết một cái lisp mà lệnh CO sau khi chuyển thành C mình chỉ cần chọn đối tượng rồi enter là có thể di copy luôn ko cần phải chọn đối tượng thêm một lần nữa.

(defun C:C (/ SS)
(setq SS (ssget))
(if SS
(command "Copy" SS "" "M" pause )
(command "Copy" "P" "" "M" pause ))
);defun

(defun C:M (/ SS)
(setq SS (ssget))
(if SS
(command "Move" SS "" pause)
(command "Move" "P" "" pause))
);defun

(defun C:R (/ SS)
(setq SS (ssget))
(if SS
(command "Rotate" SS "" pause)
(command "Rotate" "P" "" pause))
);defun

(defun C:SC (/ SS)
(setq SS (ssget))
(if SS
(command "Scale" SS "" pause)
(command "Scale" "P" "" pause))
);defun
Thêm cho bạn 3 lệnh nữa luôn. gõ lệnh, nếu không chọn đối tuợng mà enter thêm nhát nữa thì đối tuợng đuợc chọn để xử lý là đối tuợng đuợc chọn để xử lý cua lenh truớc đó (previous selection - giống như khi bạn gõ C rồi gõ P ấy) have fun!
Về vấn đề bạn gặp fải. có lẽ bạn đã thêm 1 hoặc nhiều hàm nào đó ngay trước (setq SS (ssget)). trường hợp này toàn bộ đối tượng mà bạn chọn trước khi gõ lệnh sẽ bị xóa khỏi bộ nhớ tạm và bạn fải chọn lại.
để giải quyết vấn đề này bạn tham khảo code sau:
(defun S_ENT (dongnhac / ss)
(prompt dongnhac)
(if (null (setq ss (ssget "I")))
(setq ss (ssget)))
ss
)
@hoa35ktxd: thay đổi thiết lập của máy người khác là điều không nên làm bạn ạ.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#1590 hoa35ktxd

hoa35ktxd

    biết lệnh move

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

Đã gửi 22 August 2010 - 12:10 PM

@hoa35ktxd: thay đổi thiết lập của máy người khác là điều không nên làm bạn ạ.

Đúng vậy, tôi cũng rất ghét những phần mềm can thiệp sâu vào hệ thống, đặc biệt là thay đổi thói quen người dùng mà sau đó không trả lại trạng thái cũ cho người ta.
Trong việc này tôi thấy việc thay đổi đó không phải là việc cố hữu, hết phiên làm việc ta lại trả về trạng thái cũ được mà.
Nếu viết Lisp để giải quyết vấn đề này thì ta lại phải làm với tất cả các lệnh có liên quan đến Select Object, như thế thì vất vả quá.
Nhưng không nhất thiết phải theo ý tôi vì đó chưa chắc đã phải là ý hay nhất, tùy thói quen từng người vậy.
  • 0

#1591 phuongdongvl

phuongdongvl

    biết zoom

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

Đã gửi 22 August 2010 - 12:50 PM

Thank anh nhiều nhé!happy day!
  • 0

#1592 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 22 August 2010 - 05:31 PM

Trước hết xin cám ơn các bác đã quan tâm giúp đỡ.
Sở dĩ em cần làm vậy vì trong các bản vẽ hiện trạng dung lượng rất lớn (có khi đến cả 500MB CAD) edit từng block là điều rất khó vì nó có vài trăm block; vài chục layer, mỗi thằng định dạng một kiểu, nên em muốn tất cả các đối tượng về một layer, màu: bylayer của đối tượng gốc chứ không phải của layer chứa block, được vậy thì cám ơn các bác lắm.
Gửi các bác một file mẫu:
Em Up mãi không được bác nào thương tình dowload giúp em ở đây, file chỉ 1,5MB thôi:
https://www.yousendi...tcWY4NVh2Wmc9PQ

Chào bạn Ksor Phong,
Bạn dùng thử lisp này nhé, Lisp chỉ đổi tất cả các đối tượng về cùng lớp mà bạn lựa chọn chứ chưa đổi màu các đối tượng có màu không phải là bylayer. Bạn dùng thử nếu thấy cần bổ sung gì thì hãy post lên nhé. Chúc bạn vui.

(defun c:chla (/ ss ln col n i en els en1 els1 col1 )
(command "undo" "be")
(setq ln (getstring "\n Nhap ten layer dich: ")
col (cdr (assoc 62 (tblsearch "layer" ln)))
ss (ssget)
n (sslength ss)
i 0)
(while (< i n)
(setq en (ssname ss i)
els (entget en))
(if (= (cdr (assoc 0 els)) "INSERT")
(if (= (cdr (assoc 66 els)) 1)
(progn
(setq en1 (entnext en)
els1 (entget en1))
(while (/= (cdr (assoc 0 els1)) "SEQEND")
(if (/= (assoc 62 els1) nil)
(progn
(setq ln1 (cdr(assoc 8 els1))
col1 (cdr (assoc 62 (tblsearch "layer" ln1)))
els1 (subst (cons 62 col1) (assoc 62 els1) els1)
)
)
)
(setq els1 (subst (cons 8 ln) (assoc 8 els1) els1))
(entmod els1)
(entupd en1)
(setq en1 (entnext en1)
els1 (entget en1))
)
)
)
)
(setq els (subst (cons 8 ln) (assoc 8 els) els))
(entmod els)
(setq i (1+ i))
)
(command "undo" "e")
(princ)
)

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

#1593 phuongdongvl

phuongdongvl

    biết zoom

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

Đã gửi 22 August 2010 - 07:13 PM

Mọi người ơi cho tớ hỏi ko biết do lisp hay do máy tớ hay do tớ ko biết sử dụng mà lisp tính diện tích tớ ko dùng đc.No đã hướng dẫn tích vào vùng cần tính diện tích rồi mà sau khi mình enter ko hiện ra j cả.Có ai giải quyết đc vẫn đề này ko.Cám ơn mọi người!
  • 0

#1594 ToTo08

ToTo08

    biết vẽ line

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

Đã gửi 22 August 2010 - 08:06 PM

Mọi người ơi cho tớ hỏi ko biết do lisp hay do máy tớ hay do tớ ko biết sử dụng mà lisp tính diện tích tớ ko dùng đc.No đã hướng dẫn tích vào vùng cần tính diện tích rồi mà sau khi mình enter ko hiện ra j cả.Có ai giải quyết đc vẫn đề này ko.Cám ơn mọi người!


Bạn thử lisp tính diện tích này nhé:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
(defun c:DDD();
(setvar "cmdecho" 0)
(setvar "DIMZIN" 0)
(if (= Ty_le nil)
(progn
(setq Ty_le (getreal "\\nNhËp Tû LÖ <1000>:"))
(if (= Ty_le nil)(setq Ty_le 1000.00))
)
(progn
(setq khaibaoTy_le (getstring (strcat "\\nTû LÖ = " (rtos Ty_le 2 0) " Cã Muèn Thay §æi Kh«ng ,C:")))
(if (= (strlen khaibaoTy_le) 0) (setq khaibaoTy_le "K"))
(if (or (= khaibaoTy_le "k") (= khaibaoTy_le "K"))
(progn
(princ (strcat "\\nTû LÖ = " (rtos Ty_le 2 0)))
)
(if (or (= khaibaoTy_le "c") (= khaibaoTy_le "C"))
(progn
(setq Ty_le (getreal "\\nNhËp Tû LÖ <1000>:"))
(if (= Ty_le nil)(setq Ty_le 1000.00))
)
)
)
)
)
(if (= So_Le nil)
(progn
(setq So_Le (getint "\\nNhËp Sè LÎ DiÖn TÝch <2>:"))
(if (= So_Le nil)(setq So_Le 2))
)
(progn
(setq khaibaoSo_Le (getstring (strcat "\\nSè LÎ DiÖn TÝch = " (rtos So_Le 2 0) " Cã Muèn Thay §æi Kh«ng ,C:")))
(if (= (strlen khaibaoSo_Le) 0) (setq khaibaoSo_Le "K"))
(if (or (= khaibaoSo_Le "k") (= khaibaoSo_Le "K"))
(progn
(princ (strcat "\\nSè LÎ DiÖn TÝch = " (rtos So_Le 2 0)))
)
(if (or (= khaibaoSo_Le "c") (= khaibaoSo_Le "C"))
(progn
(setq So_Le (getint "\\nNhËp Sè LÎ DiÖn TÝch <2>:"))
(if (= So_Le nil)(setq So_Le 2))
)
)
)
)
)
(setq He_so (/ 1000 Ty_le))
(setq He_so2 (* He_so He_so))
(setq dtl 0)
(setq ss (ssadd))
(setq oslast (getvar "OSMODE"))
(command "osnap" "")
(print)
(print)
(setq pt1 (getpoint "\\nChon Vung Kin Tinh Dien Tich : "))
(while (/= pt1 nil)
(command "-boundary" pt1 "")
(setq et (entlast))
(ssadd et ss)
(command "area" "e" "last")
(setq vsize ( /(getvar "VIEWSIZE") 50 ))
(command "hatch" "ANSI31" vsize "0" "last" "")
(setq et (entlast))
(ssadd et ss)
(setq dtcon (getvar "AREA"))
(setq dtl (+ dtcon dtl))
(print)
(print)
(setq pt1 (getpoint "\\nChon Vung Kin Tinh Dien Tich : "))
)
(command "setvar" "OSMODE" oslast)
(command "erase" ss "")
(setq ss nil)
(command "redraw")
(setq dtl (/ (/ dtl He_so2) 1))
(setq en (car (entsel "Thay cho so : ")))
(while (= en nil)
(setq en (car (entsel "Thay cho so : ")))
)
(setq elst (entget en))
(setq elstold (assoc 1 elst))
(setq elstnew (cons 1 (rtos dtl 2 So_Le)))
(setq elst (subst elstnew elstold elst))
(entmod elst)
(setq elst nil)
(setq dtl nil)
(command "_change" en "" "p" "c" "1" "")
(princ "\\nhttp:\\\\doanduyhung.googlepages.com")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Lisp này xuất kết quả dựa vào 1 text hiện có. Tiện đây mọi người sửa lại lisp trên giúp mình kết quả xuất sẽ là con số trên dòng command nếu nhấn enter hoặc trên text nếu chon text. Cám ơn.
  • 0

#1595 Sony2007

Sony2007

    biết lệnh copy

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

Đã gửi 23 August 2010 - 09:45 PM

Sony chịu khó tìm kiếm 1 chút nhé :
Lisp đó đây : http://www.cadviet.c...o...15016&st=20


Theo đường link của bác, e tìm thấy cái bác viết rất hay là NBPL. Nhưng liệu chỉ cần chèn vertex thôi (không dùng Break sau đó Join lại) được k bác....Vì e đang sử dụng phần mềm, nó nhận dạng 1 đường pline, nếu mình break và joint lại thì nó sẽ k hiểu đối tượng này.
  • 0

#1596 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 23 August 2010 - 09:57 PM

Theo đường link của bác, e tìm thấy cái bác viết rất hay là NBPL. Nhưng liệu chỉ cần chèn vertex thôi (không dùng Break sau đó Join lại) được k bác....Vì e đang sử dụng phần mềm, nó nhận dạng 1 đường pline, nếu mình break và joint lại thì nó sẽ k hiểu đối tượng này.

Tue_NV thật sự rất buồn khi bạn không đọc kỹ các bài viết ở đường Link mà Tue_NV đã đưa.
Chủ đề đó có 4 trang. Nó nằm ở trang thứ 2 chứ đâu???
Bạn không đọc kỹ lại còn post 2 bài viết ở 2 topic khác nhau. Vậy là vi phạm nội quy của diễn đàn.
Thiệt là buồn quá :D
  • 1

#1597 Sony2007

Sony2007

    biết lệnh copy

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

Đã gửi 24 August 2010 - 08:24 AM

Tue_NV thật sự rất buồn khi bạn không đọc kỹ các bài viết ở đường Link mà Tue_NV đã đưa.
Chủ đề đó có 4 trang. Nó nằm ở trang thứ 2 chứ đâu???
Bạn không đọc kỹ lại còn post 2 bài viết ở 2 topic khác nhau. Vậy là vi phạm nội quy của diễn đàn.
Thiệt là buồn quá :D

đồng ý với ý kiến của bác, nhưng các lisp khác k hiểu sao tôi k chạy được, đường pline vẫn còn nguyên, k thêm được điểm nào. Ví dụ như:
như lisp ADV, hay là IV của Nacata, hay lisp addvertex.lsp cũng k chạy được . Chỉ có lisp của bác là chạy được, và e cũng đã lục hết cả 4 trang rồi. E đang sử dụng Cad2010
  • 0

#1598 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 24 August 2010 - 12:36 PM

Bạn thử lisp tính diện tích này nhé:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
(defun c:DDD();
(setvar "cmdecho" 0)
(setvar "DIMZIN" 0)
(if (= Ty_le nil)
(progn
(setq Ty_le (getreal "\\nNhËp Tû LÖ <1000>:"))
(if (= Ty_le nil)(setq Ty_le 1000.00))
)
(progn
(setq khaibaoTy_le (getstring (strcat "\\nTû LÖ = " (rtos Ty_le 2 0) " Cã Muèn Thay §æi Kh«ng ,C:")))
(if (= (strlen khaibaoTy_le) 0) (setq khaibaoTy_le "K"))
(if (or (= khaibaoTy_le "k") (= khaibaoTy_le "K"))
(progn
(princ (strcat "\\nTû LÖ = " (rtos Ty_le 2 0)))
)
(if (or (= khaibaoTy_le "c") (= khaibaoTy_le "C"))
(progn
(setq Ty_le (getreal "\\nNhËp Tû LÖ <1000>:"))
(if (= Ty_le nil)(setq Ty_le 1000.00))
)
)
)
)
)
(if (= So_Le nil)
(progn
(setq So_Le (getint "\\nNhËp Sè LÎ DiÖn TÝch <2>:"))
(if (= So_Le nil)(setq So_Le 2))
)
(progn
(setq khaibaoSo_Le (getstring (strcat "\\nSè LÎ DiÖn TÝch = " (rtos So_Le 2 0) " Cã Muèn Thay §æi Kh«ng ,C:")))
(if (= (strlen khaibaoSo_Le) 0) (setq khaibaoSo_Le "K"))
(if (or (= khaibaoSo_Le "k") (= khaibaoSo_Le "K"))
(progn
(princ (strcat "\\nSè LÎ DiÖn TÝch = " (rtos So_Le 2 0)))
)
(if (or (= khaibaoSo_Le "c") (= khaibaoSo_Le "C"))
(progn
(setq So_Le (getint "\\nNhËp Sè LÎ DiÖn TÝch <2>:"))
(if (= So_Le nil)(setq So_Le 2))
)
)
)
)
)
(setq He_so (/ 1000 Ty_le))
(setq He_so2 (* He_so He_so))
(setq dtl 0)
(setq ss (ssadd))
(setq oslast (getvar "OSMODE"))
(command "osnap" "")
(print)
(print)
(setq pt1 (getpoint "\\nChon Vung Kin Tinh Dien Tich : "))
(while (/= pt1 nil)
(command "-boundary" pt1 "")
(setq et (entlast))
(ssadd et ss)
(command "area" "e" "last")
(setq vsize ( /(getvar "VIEWSIZE") 50 ))
(command "hatch" "ANSI31" vsize "0" "last" "")
(setq et (entlast))
(ssadd et ss)
(setq dtcon (getvar "AREA"))
(setq dtl (+ dtcon dtl))
(print)
(print)
(setq pt1 (getpoint "\\nChon Vung Kin Tinh Dien Tich : "))
)
(command "setvar" "OSMODE" oslast)
(command "erase" ss "")
(setq ss nil)
(command "redraw")
(setq dtl (/ (/ dtl He_so2) 1))
(setq en (car (entsel "Thay cho so : ")))
(while (= en nil)
(setq en (car (entsel "Thay cho so : ")))
)
(setq elst (entget en))
(setq elstold (assoc 1 elst))
(setq elstnew (cons 1 (rtos dtl 2 So_Le)))
(setq elst (subst elstnew elstold elst))
(entmod elst)
(setq elst nil)
(setq dtl nil)
(command "_change" en "" "p" "c" "1" "")
(princ "\\nhttp:\\\\doanduyhung.googlepages.com")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Lisp này xuất kết quả dựa vào 1 text hiện có. Tiện đây mọi người sửa lại lisp trên giúp mình kết quả xuất sẽ là con số trên dòng command nếu nhấn enter hoặc trên text nếu chon text. Cám ơn.

Chào bạn ToTo08,
Mình chưa chạy thử lisp bạn gửi, song với yêu cầu bổ sung việc xuất kết quả của bạn mình nghĩ bạn có thể thử như sau:
1/- Thay đoạn code xuất kết quả:
(while (= en nil)
(setq en (car (entsel "Thay cho so : ")))
)
(setq elst (entget en))
(setq elstold (assoc 1 elst))
(setq elstnew (cons 1 (rtos dtl 2 So_Le)))
(setq elst (subst elstnew elstold elst))
(entmod elst)
(setq elst nil)
(setq dtl nil)
(command "_change" en "" "p" "c" "1" "")
(princ "\\nhttp:\\\\doanduyhung.googlepages.com")

bằng đoạn code sau:
(if (= en nil)
(princ '\n (rtos dtl 2 So_le)")
(progn
(setq elst (entget en))
(if (= (cdr(assoc 0 elst)) "TEXT")
(progn
(setq elstold (assoc 1 elst))
(setq elstnew (cons 1 (rtos dtl 2 So_Le)))
(setq elst (subst elstnew elstold elst))
(entmod elst)
(setq elst nil)
(setq dtl nil)
(command "_change" en "" "p" "c" "1" "")
(princ "\\nhttp:\\\\doanduyhung.googlepages.com"))
(princ '\n (rtos dtl 2 So_le)") )))

Trong đoạn lisp sửa ở trên mình có bổ sung thêm việc kiểm tra xem liệu đối tượng chọn có phải là text hay không, Nếu đúng thì sẽ thay bàng giá trị mới còn nếu không thì sẽ trả giá tri text mới ra dòng command.
Hy vọng trúng ý bạn. Chúc bạn vui.
2/- Mặc dù chưa chạy thử nhưng mình thấy cái lisp trên của bạn viết khá rườm rà và nhiều đoạn code có thể rút gọn được. Rất mong bạn kiểm tra lại để lisp đơn giản và dễ hiểu hơn.
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.

#1599 ToTo08

ToTo08

    biết vẽ line

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

Đã gửi 24 August 2010 - 01:13 PM

Chào bạn ToTo08,
Mình chưa chạy thử lisp bạn gửi, song với yêu cầu bổ sung việc xuất kết quả của bạn mình nghĩ bạn có thể thử như sau:
1/- Thay đoạn code xuất kết quả:
Trong đoạn lisp sửa ở trên mình có bổ sung thêm việc kiểm tra xem liệu đối tượng chọn có phải là text hay không, Nếu đúng thì sẽ thay bàng giá trị mới còn nếu không thì sẽ trả giá tri text mới ra dòng command.
Hy vọng trúng ý bạn. Chúc bạn vui.
2/- Mặc dù chưa chạy thử nhưng mình thấy cái lisp trên của bạn viết khá rườm rà và nhiều đoạn code có thể rút gọn được. Rất mong bạn kiểm tra lại để lisp đơn giản và dễ hiểu hơn.
Chúc bạn vui.


Chào bạn phamthanhbinh, mình làm theo cách của bạn lúc load lisp báo lỗi ; error: extra right paren on input và kết quả xuất ra text không nhảy số. Bạn kiểm tra lại giúp mình. Đây là lisp mình sưu tầm được, mình thấy lisp rất hay nhưng chưa có nhiều thời gian để hoc lisp, bạn thông cảm.
  • 0

#1600 ksor_phong

ksor_phong

    biết vẽ circle

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

Đã gửi 24 August 2010 - 05:09 PM

Chào bạn Ksor Phong,
Bạn dùng thử lisp này nhé, Lisp chỉ đổi tất cả các đối tượng về cùng lớp mà bạn lựa chọn chứ chưa đổi màu các đối tượng có màu không phải là bylayer. Bạn dùng thử nếu thấy cần bổ sung gì thì hãy post lên nhé. Chúc bạn vui.


(defun c:chla (/ ss ln col n i en els en1 els1 col1 )
(command "undo" "be")
(setq ln (getstring "\n Nhap ten layer dich: ")
col (cdr (assoc 62 (tblsearch "layer" ln)))
ss (ssget)
n (sslength ss)
i 0)
(while (< i n)
(setq en (ssname ss i)
els (entget en))
(if (= (cdr (assoc 0 els)) "INSERT")
(if (= (cdr (assoc 66 els)) 1)
(progn
(setq en1 (entnext en)
els1 (entget en1))
(while (/= (cdr (assoc 0 els1)) "SEQEND")
(if (/= (assoc 62 els1) nil)
(progn
(setq ln1 (cdr(assoc 8 els1))
col1 (cdr (assoc 62 (tblsearch "layer" ln1)))
els1 (subst (cons 62 col1) (assoc 62 els1) els1)
)
)
)
(setq els1 (subst (cons 8 ln) (assoc 8 els1) els1))
(entmod els1)
(entupd en1)
(setq en1 (entnext en1)
els1 (entget en1))
)
)
)
)
(setq els (subst (cons 8 ln) (assoc 8 els) els))
(entmod els)
(setq i (1+ i))
)
(command "undo" "e")
(princ)
)

Cám ơn sếp đã quan tâm giúp đỡ, tuy nhiên là cái Lsp này chưa ăn thua sếp à, các cái block trong block và màu trong block vẫn chưa điều khiển được, sếp nghĩ giúp em thêm tý nữa, tkssss
  • 0