Đến nội dung


Hình ảnh
- - - - -

Nhờ các bác viết dùm Lisp đánh cao độ


  • Please log in to reply
43 replies to this topic

#21 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 14 September 2012 - 11:42 AM

Bạn tham khảo link
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#22 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 14 September 2012 - 01:18 PM

lisp dc của ketxu mình cũng sưu tầm nó lâu rùi. Lisp đó rất chuẩn. Nhưng công việc mình đang cần theo dạng của bác Tuenv như trên, lựa chọn vị trí điểm mốc, chọn cao độ mốc là text trên bản vẽ (hoặc nhập tay vào) ==> chọn vị trí điểm mới và chèn blog cao độ vào đó. (mà không cần chèn blog cao độ vào điểm mốc)
  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#23 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 14 September 2012 - 09:20 PM

Nhờ các Bác viết hộ lisp thước cao độ như hình vẽ trên :http://www.cadviet.c...66_drawing2.dwg
  • 0

#24 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 15 September 2012 - 05:38 AM

Mình thấy lisp này rất hay, tuy nhiên có nhược điểm là khi "nhao cao do diem moc" nếu là 0.00 thì lisp chạy chính xác, nhưng nếu nhập con số khác 0, thì nó hiểu bị ngược. ví dụ tôi nhập 3 thì khi move lên 1 đơn vị kết quả sẽ là -2 (nếu đúng là 4), nếu tôi nhập -1 thì khi tôi move xuống 1 đơn vị thì kết quả là 0 (nếu đúng là -2). Bạn Tue_NV sửa lại chỗ này giúp mình, cám ơn.

Lisp này của bác rất tuyệt. Mong bác chỉnh sửa thêm cho lisp hoàn thiện:
- Lỗi gặp phải là cao độ điểm mốc khác 0 thì lisp tính phần cao độ tại các điểm thấp hơn chưa đúng. (Thay vì trừ đi khoảng cách giữa 2 điểm thì nó lại lấy cao độ mốc cộng thêm vào và điền dấu trừ phía trước, mặc dù cao độ mốc là 5.00 và khoảng cách giảm xuống là 2.00: Kết quả đúng phải là +3.00 nhưng lisp tính là: -7.00)
- Khi lựa chọn cao độ mốc, thêm chức năng chọn text trực tiếp trên bản vẽ (Hiện tại chỉ có 1 lựa chọn nhập số bằng tay)
Thanks

Nhờ các Bác viết hộ lisp thước cao độ như hình vẽ trên :http://www.cadviet.c...66_drawing2.dwg

Tue_NV chỉnh sửa lại Lisp

(defun c:dcd(/ tlv blm blname dmo cdm cd dm cdmi dmoc bl)
(setvar "attreq" 1)
(setvar "cmdecho" 0)
(setq oldim (getvar "DimZin"))
(setvar "Dimzin" 0)
(setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/")))
(setq bl (car(entsel "\n Pick chon Block mau / Text mau :")))
(setq blm (entget bl))
(setq dmo (getpoint "\n Pick diem moc : "))

(setq cdm (getreal "\n Nhap cao do cua diem moc \ Enter pick text cao do : "))
(if (null cdm) (setq cdm (atof (cdr(assoc 1 (entget(car (entsel "pick text cao do : "))))))) )
(if cdm (progn
(if (= cdm 0) (setq cd (strcat "%%p" (rtos cdm 2 3))))
(if (> cdm 0) (setq cd (strcat "+" (rtos cdm 2 3))))
(if (< cdm 0) (setq cd (rtos cdm 2 3)))
(command "copy" bl "" "_non" (cdr(assoc 10 blm)) "_non" dmo)
(if (and (wcmatch (cdr(assoc 0 (entget (entlast)))) "INSERT") (= (cdr(assoc 66 (entget (entlast)))) 1))
(setq el (entget (entnext (entlast)) )))
(if (wcmatch (cdr(assoc 0 (entget (entlast)))) "TEXT") (setq el (entget (entlast))) )
(entmod (subst (cons 1 cd) (assoc 1 el) el))
(setq dmoc dmo)
(while (setq dm (getpoint dmoc "\n Pick diem tiep theo :"))
(if (> (cadr dm) (cadr dmo)) (setq cdmi (+ (* (- (cadr dm) (cadr dmo)) tlv) cdm) ) )
(if (<= (cadr dm) (cadr dmo)) (setq cdmi (- cdm (* (- (cadr dmo) (cadr dm)) tlv) ) ) )
(if (= cdmi 0) (setq cdi (strcat "%%p" (rtos cdmi 2 3))))
(if (> cdmi 0) (setq cdi (strcat "+" (rtos cdmi 2 3))))
(if (< cdmi 0) (setq cdi (rtos cdmi 2 3)))
(command "copy" bl "" "_non" (cdr(assoc 10 blm)) "_non" dm)
(if (and (wcmatch (cdr(assoc 0 (entget (entlast)))) "INSERT") (= (cdr(assoc 66 (entget (entlast)))) 1))
(setq el (entget (entnext (entlast)) )))
(if (wcmatch (cdr(assoc 0 (entget (entlast)))) "TEXT") (setq el (entget (entlast))) )
(entmod (subst (cons 1 cdi) (assoc 1 el) el))
(setq dmoc dm)
)
(setvar "Dimzin" oldim)
))
(princ)
)
Có thể sử dụng với Text
  • 2

#25 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 16 September 2012 - 08:20 AM

Tue_NV chỉnh sửa lại Lisp

 (defun c:dcd(/ tlv blm blname dmo cdm cd dm cdmi dmoc bl) (setvar "attreq" 1) (setvar "cmdecho" 0) (setq oldim (getvar "DimZin")) (setvar "Dimzin" 0) (setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/"))) (setq bl (car(entsel "\n Pick chon Block mau / Text mau :"))) (setq blm (entget bl)) (setq dmo (getpoint "\n Pick diem moc : ")) (setq cdm (getreal "\n Nhap cao do cua diem moc \ Enter pick text cao do : ")) (if (null cdm) (setq cdm (atof (cdr(assoc 1 (entget(car (entsel "pick text cao do : "))))))) ) (if cdm (progn (if (= cdm 0) (setq cd (strcat "%%p" (rtos cdm 2 3)))) (if (> cdm 0) (setq cd (strcat "+" (rtos cdm 2 3)))) (if (< cdm 0) (setq cd (rtos cdm 2 3))) (command "copy" bl "" "_non" (cdr(assoc 10 blm)) "_non" dmo) (if (and (wcmatch (cdr(assoc 0 (entget (entlast)))) "INSERT") (= (cdr(assoc 66 (entget (entlast)))) 1)) (setq el (entget (entnext (entlast)) ))) (if (wcmatch (cdr(assoc 0 (entget (entlast)))) "TEXT") (setq el (entget (entlast))) ) (entmod (subst (cons 1 cd) (assoc 1 el) el)) (setq dmoc dmo) (while (setq dm (getpoint dmoc "\n Pick diem tiep theo :")) (if (> (cadr dm) (cadr dmo)) (setq cdmi (+ (* (- (cadr dm) (cadr dmo)) tlv) cdm) ) ) (if (<= (cadr dm) (cadr dmo)) (setq cdmi (- cdm (* (- (cadr dmo) (cadr dm)) tlv) ) ) ) (if (= cdmi 0) (setq cdi (strcat "%%p" (rtos cdmi 2 3)))) (if (> cdmi 0) (setq cdi (strcat "+" (rtos cdmi 2 3)))) (if (< cdmi 0) (setq cdi (rtos cdmi 2 3))) (command "copy" bl "" "_non" (cdr(assoc 10 blm)) "_non" dm) (if (and (wcmatch (cdr(assoc 0 (entget (entlast)))) "INSERT") (= (cdr(assoc 66 (entget (entlast)))) 1)) (setq el (entget (entnext (entlast)) ))) (if (wcmatch (cdr(assoc 0 (entget (entlast)))) "TEXT") (setq el (entget (entlast))) ) (entmod (subst (cons 1 cdi) (assoc 1 el) el)) (setq dmoc dm) ) (setvar "Dimzin" oldim) )) (princ) ) 
Có thể sử dụng với Text

E tìm mãi ko ra. Không biết dòng nào của bác Tuenv làm cho blog insert ra có giá trị đều giống blog mẫu mà không nhận cao độ. Hic... Còn phần mở rộng thêm cho text thì oki rùi.
  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#26 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 16 September 2012 - 09:16 AM


;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=12103&st=0
(defun c:dcs(/ tlv blm blname dmo cdm cd dm cdmi dmoc)
(setvar "attreq" 1)
(setvar "cmdecho" 0)
(setq oldim (getvar "DimZin"))
(setvar "Dimzin" 0)
(setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/")))
(setq blm (entget(car(entsel "\n Pick chon Block mau :"))))
(setq blname (cdr(assoc 2 blm)))
(setq TLX (cdr(assoc 41 blm)))
(setq TLY (cdr(assoc 42 blm)))
(setq dmo (getpoint "\n Pick diem moc : "))
(setq cdm (getreal "\n Nhap cao do cua diem moc \ Enter pick text cao do : "))
(if (null cdm) (setq cdm (atof (cdr(assoc 1 (entget(car (entsel "pick text cao do : "))))))) )
(if cdm (progn))
(if (= cdm 0) (setq cd (strcat "%%p" (rtos cdm 2 2))))
(if (> cdm 0) (setq cd (strcat "+" (rtos cdm 2 2))))
(if (< cdm 0) (setq cd (rtos cdm 2 2)))
;(command "insert" blname dmo TLX TLY "0" cd)
(setq dmoc dmo)
(while (setq dm (getpoint dmoc "\n Pick diem tiep theo :"))
(if (> (cadr dm) (cadr dmo)) (setq cdmi (+ (* (- (cadr dm) (cadr dmo)) tlv) cdm) ) )
(if (<= (cadr dm) (cadr dmo)) (setq cdmi (- cdm (* (- (cadr dmo) (cadr dm)) tlv) ) ) )
(if (= cdmi 0) (setq cdi (strcat "%%p" (rtos cdmi 2 2))))
(if (> cdmi 0) (setq cdi (strcat "+" (rtos cdmi 2 2))))
(if (< cdmi 0) (setq cdi (rtos cdmi 2 2)))
(command "insert" blname dm TLX TLY "0" cdi)
(setq dmoc dm)
)
(setvar "Dimzin" oldim)
(princ)
)

Đoạn lisp trên e kết hợp 2 lần chỉnh sửa của bác Tuenv và đã cho ra kết quả đúng của dạng blog.
Tuy nhiên khi blog insert ra thì lại bị scan nhỏ đi rất nhiều so với blog mẫu.
Các bác cho e hỏi nguyên nhân tại sao lại như vậy?
  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#27 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 16 September 2012 - 10:12 AM


;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=12103&st=0
(defun c:dcs(/ tlv blm blname dmo cdm cd dm cdmi dmoc)
(setvar "attreq" 1)
(setvar "cmdecho" 0)
(setq oldim (getvar "DimZin"))
(setvar "Dimzin" 0)
(setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/")))
(setq blm (entget(car(entsel "\n Pick chon Block mau :"))))
(setq blname (cdr(assoc 2 blm)))
(setq TLX (cdr(assoc 41 blm)))
(setq TLY (cdr(assoc 42 blm)))
(setq dmo (getpoint "\n Pick diem moc : "))
(setq cdm (getreal "\n Nhap cao do cua diem moc \ Enter pick text cao do : "))
(if (null cdm) (setq cdm (atof (cdr(assoc 1 (entget(car (entsel "pick text cao do : "))))))) )
(if cdm (progn))
(if (= cdm 0) (setq cd (strcat "%%p" (rtos cdm 2 2))))
(if (> cdm 0) (setq cd (strcat "+" (rtos cdm 2 2))))
(if (< cdm 0) (setq cd (rtos cdm 2 2)))
;(command "insert" blname dmo TLX TLY "0" cd)
(setq dmoc dmo)
(while (setq dm (getpoint dmoc "\n Pick diem tiep theo :"))
(if (> (cadr dm) (cadr dmo)) (setq cdmi (+ (* (- (cadr dm) (cadr dmo)) tlv) cdm) ) )
(if (<= (cadr dm) (cadr dmo)) (setq cdmi (- cdm (* (- (cadr dmo) (cadr dm)) tlv) ) ) )
(if (= cdmi 0) (setq cdi (strcat "%%p" (rtos cdmi 2 2))))
(if (> cdmi 0) (setq cdi (strcat "+" (rtos cdmi 2 2))))
(if (< cdmi 0) (setq cdi (rtos cdmi 2 2)))
(command "insert" blname dm TLX TLY "0" cdi)
(setq dmoc dm)
)
(setvar "Dimzin" oldim)
(princ)
)

Đoạn lisp trên e kết hợp 2 lần chỉnh sửa của bác Tuenv và đã cho ra kết quả đúng của dạng blog.
Tuy nhiên khi blog insert ra thì lại bị scan nhỏ đi rất nhiều so với blog mẫu.
Các bác cho e hỏi nguyên nhân tại sao lại như vậy?

Lisp đầu trước khi sửa có bị tình trạng như vậy
Lisp sau khi sửa ở bài viết số #24 chạy ok, không bị vậy nữa

E tìm mãi ko ra. Không biết dòng nào của bác Tuenv làm cho blog insert ra có giá trị đều giống blog mẫu mà không nhận cao độ. Hic... Còn phần mở rộng thêm cho text thì oki rùi.

Tue_NV thử lisp chạy ở bài viết số #24 -> ok
  • 1

#28 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 16 September 2012 - 01:56 PM

Lisp đầu trước khi sửa có bị tình trạng như vậy
Lisp sau khi sửa ở bài viết số #24 chạy ok, không bị vậy nữa


Tue_NV thử lisp chạy ở bài viết số #24 -> ok

Thanks bác. E vừa tìm ra nguyên nhân. Blog insert ra theo lisp #24 rất chuẩn.
Nhưng sau khi có kết quả phải re lại bản vẽ nó mới hiện lên cao độ của điểm mới. Lúc đầu e chọn blog mẫu xong, nhập cao độ mốc xong, thì vẫn thấy cao độ điểm mới bằng cao độ của blog mẫu. Hjj làm phiền bác Tuenv ngày chủ nhật vui vẻ roài. (Lúc đầu e lại ko có dùng re) :P :D
  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#29 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 16 September 2012 - 02:54 PM

Thanks bác. E vừa tìm ra nguyên nhân. Blog insert ra theo lisp #24 rất chuẩn.
Nhưng sau khi có kết quả phải re lại bản vẽ nó mới hiện lên cao độ của điểm mới. Lúc đầu e chọn blog mẫu xong, nhập cao độ mốc xong, thì vẫn thấy cao độ điểm mới bằng cao độ của blog mẫu. Hjj làm phiền bác Tuenv ngày chủ nhật vui vẻ roài. (Lúc đầu e lại ko có dùng re) :P :D

Mình chạy thì không cần RE mà Block vẫn đổi giá trị
Vậy bạn thêm dòng này :
(entupd (entlast))
xuống dưới dòng (entmod (subst (cons 1 cd) (assoc 1 el) el))
và xuống dưới dòng : (entmod (subst (cons 1 cdi) (assoc 1 el) el))
ở code lisp của bài viết số #24
Bạn thử xem
  • 1

#30 nguyenkhoadng

nguyenkhoadng

    biết vẽ line

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

Đã gửi 16 September 2012 - 03:56 PM

Cảm ơn bạn Tue_NV vì cái lisp hay. :)
Bạn có thể điều chỉnh sao cho nếu mình chỉnh sửa giá trị cốt ban đầu thì các giá trị sau sẽ tự động thay đổi theo đc ko?
VD:
cốt điểm mốc ban đầu là 0.000
sau được thay đổi tăng lên thành +0.200
thì mình chỉ việc sửa cao độ điểm mốc là các cao độ khác cũng sẽ tự động tăng thêm +0.200
Cảm ơn!
  • 0

#31 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 18 September 2012 - 11:04 AM

Mình chạy thì không cần RE mà Block vẫn đổi giá trị
Vậy bạn thêm dòng này :
(entupd (entlast))
xuống dưới dòng (entmod (subst (cons 1 cd) (assoc 1 el) el))
và xuống dưới dòng : (entmod (subst (cons 1 cdi) (assoc 1 el) el))
ở code lisp của bài viết số #24
Bạn thử xem

Các bác cho e hỏi: E muốn giữ lại tỉ lệ vẽ, và blog mẫu đã chọn để mỗi lần thực hiện lệnh lần tiếp theo không phải chọn lại tỉ lệ vẽ và blog mẫu thì xây dựng thêm code như thế nào ah?
Khi kết thúc lệnh lần đầu và thực hiện lệnh tiếp tục sẽ bắt đầu ngay ở bước: Pick điểm mốc
  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#32 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 September 2012 - 11:12 AM

Phần đỏ là bạn phải xóa đi
Phần xanh là thêm vào

(defun c:dcs(/ tlv blm blname dmo cdm cd dm cdmi dmoc)

.....

(or tlv (setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/"))))
(or blm (setq blm (entget(car(entsel "\n Pick chon Block mau :")))))


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#33 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 18 September 2012 - 01:31 PM

Phần đỏ là bạn phải xóa đi
Phần xanh là thêm vào

Với code ở bài #24, đã sửa theo gợi ý của Ketxu. Nhưng chưa bớt được thao tác nhập ban đầu: chọn blog mẫu

;; free lisp from cadviet.com
;;; this lisp was downloaded from
http://www.cadviet.com/forum/index.php?showtopic=12103&st=20
(defun c:dcd(/ blname dmo cdm cd dm cdmi dmoc bl)
(setvar "attreq" 1)
(setvar "cmdecho" 0)
(setq oldim (getvar "DimZin"))
(setvar "Dimzin" 0)
(or tlv (setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/"))))
(or bl (setq bl (car(entsel "\n Pick chon Block mau / Text mau :"))))
(or blm (setq blm (entget bl)))
(setq dmo (getpoint "\n Pick diem moc : "))
(setq cdm (getreal "\n Nhap cao do cua diem moc \ Enter pick text cao
do : "))
(if (null cdm) (setq cdm (atof (cdr(assoc 1 (entget(car (entsel "pick
text cao do : "))))))) )
(if cdm (progn
(if (= cdm 0) (setq cd (strcat "%%p" (rtos cdm 2 2))))
(if (> cdm 0) (setq cd (strcat "+" (rtos cdm 2 2))))
(if (< cdm 0) (setq cd (rtos cdm 2 2)))
(setq dmoc dmo)
(while (setq dm (getpoint dmoc "\n Pick diem tiep theo :"))
(if (> (cadr dm) (cadr dmo)) (setq cdmi (+ (* (- (cadr dm) (cadr dmo))
tlv) cdm) ) )
(if (<= (cadr dm) (cadr dmo)) (setq cdmi (- cdm (* (- (cadr dmo) (cadr
dm)) tlv) ) ) )
(if (= cdmi 0) (setq cdi (strcat "%%p" (rtos cdmi 2 2))))
(if (> cdmi 0) (setq cdi (strcat "+" (rtos cdmi 2 2))))
(if (< cdmi 0) (setq cdi (rtos cdmi 2 2)))
(command "copy" bl "" "_non" (cdr(assoc 10 blm)) "_non" dm)
(if (and (wcmatch (cdr(assoc 0 (entget (entlast)))) "INSERT") (=
(cdr(assoc 66 (entget (entlast)))) 1))
(setq el (entget (entnext (entlast)) )))
(if (wcmatch (cdr(assoc 0 (entget (entlast)))) "TEXT") (setq el (entget
(entlast))) )
(entmod (subst (cons 1 cdi) (assoc 1 el) el))
(entupd (entlast))
(setq dmoc dm)
)
(setvar "Dimzin" oldim)
)))
(princ)
)


  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#34 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 September 2012 - 01:33 PM

Xóa chữ bl trong dòng đầu tiên đi bạn ! (defun ....)
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#35 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 18 September 2012 - 01:35 PM

Với code ở bài #24, đã sửa theo gợi ý của Ketxu. Nhưng chưa bớt được thao tác nhập ban đầu: chọn blog mẫu


;; free lisp from cadviet.com
;;; this lisp was downloaded from
http://www.cadviet.com/forum/index.php?showtopic=12103&st=20
(defun c:dcd(/ blname dmo cdm cd dm cdmi dmoc bl)
(setvar "attreq" 1)
(setvar "cmdecho" 0)
(setq oldim (getvar "DimZin"))
(setvar "Dimzin" 0)
(or tlv (setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/"))))
(or bl (setq bl (car(entsel "\n Pick chon Block mau / Text mau :"))))
(or blm (setq blm (entget bl)))
(setq dmo (getpoint "\n Pick diem moc : "))
(setq cdm (getreal "\n Nhap cao do cua diem moc \ Enter pick text cao
do : "))
(if (null cdm) (setq cdm (atof (cdr(assoc 1 (entget(car (entsel "pick
text cao do : "))))))) )
(if cdm (progn
(if (= cdm 0) (setq cd (strcat "%%p" (rtos cdm 2 2))))
(if (> cdm 0) (setq cd (strcat "+" (rtos cdm 2 2))))
(if (< cdm 0) (setq cd (rtos cdm 2 2)))
(setq dmoc dmo)
(while (setq dm (getpoint dmoc "\n Pick diem tiep theo :"))
(if (> (cadr dm) (cadr dmo)) (setq cdmi (+ (* (- (cadr dm) (cadr dmo))
tlv) cdm) ) )
(if (<= (cadr dm) (cadr dmo)) (setq cdmi (- cdm (* (- (cadr dmo) (cadr
dm)) tlv) ) ) )
(if (= cdmi 0) (setq cdi (strcat "%%p" (rtos cdmi 2 2))))
(if (> cdmi 0) (setq cdi (strcat "+" (rtos cdmi 2 2))))
(if (< cdmi 0) (setq cdi (rtos cdmi 2 2)))
(command "copy" bl "" "_non" (cdr(assoc 10 blm)) "_non" dm)
(if (and (wcmatch (cdr(assoc 0 (entget (entlast)))) "INSERT") (=
(cdr(assoc 66 (entget (entlast)))) 1))
(setq el (entget (entnext (entlast)) )))
(if (wcmatch (cdr(assoc 0 (entget (entlast)))) "TEXT") (setq el (entget
(entlast))) )
(entmod (subst (cons 1 cdi) (assoc 1 el) el))
(entupd (entlast))
(setq dmoc dm)
)
(setvar "Dimzin" oldim)
)))
(princ)
)

Mình đọc qua và thấy bạn bỏ cái biến bl màu đỏ ở đây là được:
(defun c:dcd(/ blname dmo cdm cd dm cdmi dmoc bl)
  • 1

#36 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 18 September 2012 - 01:50 PM

Lisp đã wonderul. Đa tạ các cao nhân a hùng đã ra tay giúp đỡ. :P :D
Đây là bản chỉnh sửa lần cuối, bạn nào cần lisp này như mình thì mời xơi ở đây nhé :D

;; free lisp from cadviet.com
;;; this lisp was downloaded from
http://www.cadviet.com/forum/index.php?showtopic=12103&st=20
(defun c:dcd(/ blname dmo cdm cd dm cdmi dmoc)
(setvar "attreq" 1)
(setvar "cmdecho" 0)
(setq oldim (getvar "DimZin"))
(setvar "Dimzin" 0)
(or tlv (setq tlv (/ 1 (getreal "\n Nhap ti le ve : 1/"))))
(or bl (setq bl (car(entsel "\n Pick chon Block mau / Text mau :"))))
(or blm (setq blm (entget bl)))
(setq dmo (getpoint "\n Pick diem moc : "))
(setq cdm (getreal "\n Nhap cao do cua diem moc \ Enter pick text cao
do : "))
(if (null cdm) (setq cdm (atof (cdr(assoc 1 (entget(car (entsel "pick
text cao do : "))))))) )
(if cdm (progn
(if (= cdm 0) (setq cd (strcat "%%p" (rtos cdm 2 2))))
(if (> cdm 0) (setq cd (strcat "+" (rtos cdm 2 2))))
(if (< cdm 0) (setq cd (rtos cdm 2 2)))
(setq dmoc dmo)
(while (setq dm (getpoint dmoc "\n Pick diem tiep theo :"))
(if (> (cadr dm) (cadr dmo)) (setq cdmi (+ (* (- (cadr dm) (cadr dmo))
tlv) cdm) ) )
(if (<= (cadr dm) (cadr dmo)) (setq cdmi (- cdm (* (- (cadr dmo) (cadr
dm)) tlv) ) ) )
(if (= cdmi 0) (setq cdi (strcat "%%p" (rtos cdmi 2 2))))
(if (> cdmi 0) (setq cdi (strcat "+" (rtos cdmi 2 2))))
(if (< cdmi 0) (setq cdi (rtos cdmi 2 2)))
(command "copy" bl "" "_non" (cdr(assoc 10 blm)) "_non" dm)
(if (and (wcmatch (cdr(assoc 0 (entget (entlast)))) "INSERT") (=
(cdr(assoc 66 (entget (entlast)))) 1))
(setq el (entget (entnext (entlast)) )))
(if (wcmatch (cdr(assoc 0 (entget (entlast)))) "TEXT") (setq el (entget
(entlast))) )
(entmod (subst (cons 1 cdi) (assoc 1 el) el))
(entupd (entlast))
(setq dmoc dm)
)
(setvar "Dimzin" oldim)
)))
(princ)
)


  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#37 nguyenkhoadng

nguyenkhoadng

    biết vẽ line

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

Đã gửi 18 September 2012 - 04:36 PM

Lisp đã wonderul. Đa tạ các cao nhân a hùng đã ra tay giúp đỡ. :P :D
Đây là bản chỉnh sửa lần cuối, bạn nào cần lisp này như mình thì mời xơi ở đây nhé :D



theo lisp này thì cái cao độ điểm mốc ko thấy xuất hiện nữa bạn ah.

nhờ bạn nào giúp mình câu hỏi ở #30 với.
Mình cảm ơn!
  • 0

#38 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 18 September 2012 - 09:33 PM



theo lisp này thì cái cao độ điểm mốc ko thấy xuất hiện nữa bạn ah.

nhờ bạn nào giúp mình câu hỏi ở #30 với.
Mình cảm ơn!

Cái này do bạn bach1212 sửa lại lisp của tác giả mà không ghi tên tác giả vô Lisp ấy mà :D
Bạn bach1212 chú ý lại Code lisp gốc của Tue_NV ở bài 24 nhé! :rolleyes:

@nguyenkhoadng: Bạn hỏi có viết được không? => Được : bằng cách dùng field
Có điều nảy sinh là Khi sửa cao độ mốc thì có thể có trường hợp + chuyển sang - hoặc từ - sang + thì cái dấu này không thể cập nhật được
Chi bằng gom những cái cao độ vừa tạo ra vô 1 tập chọn rồi viết thêm cái lisp cộng trừ cos cao độ là xong. Nếu cos dương thì thêm dấu + phía trước, cos âm thì thêm dấu - đằng trước
  • 1

#39 nguyenkhoadng

nguyenkhoadng

    biết vẽ line

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

Đã gửi 18 September 2012 - 10:52 PM


Chi bằng gom những cái cao độ vừa tạo ra vô 1 tập chọn rồi viết thêm cái lisp cộng trừ cos cao độ là xong. Nếu cos dương thì thêm dấu + phía trước, cos âm thì thêm dấu - đằng trước


bạn Tue_NV cho mình hỏi đã có bạn nào viết lisp đó chia sẻ lên diễn đàn chưa vậy?
lisp cộng trừ cos cao độ kết hợp với cái này thì hoàn hảo quá :)
Cảm ơn!
  • 0

#40 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 19 September 2012 - 05:29 AM


bạn Tue_NV cho mình hỏi đã có bạn nào viết lisp đó chia sẻ lên diễn đàn chưa vậy?
lisp cộng trừ cos cao độ kết hợp với cái này thì hoàn hảo quá :)
Cảm ơn!

Cái này cũng đã có rồi, bạn search thử xem.
Ở đây có nè bạn :
http://www.cadviet.c...showtopic=15838

@bach1212: Mình nghĩ bạn nên lưu lại tỉ lệ mẫu hay block/text mẫu cho việc sử dụng lần sau hay hơn
Nếu nhập tỉ lệ mới hay block/text mẫu mới thì bạn nhập và chọn -> lưu cho lần sau để sử dụng,
còn chấp nhận tỉ lệ mẫu cũ hay block/text mẫu cũ thì enter là xong

chứ không nên sửa code như vầy, trường hợp bạn muốn thay đổi tỉ lệ hay block/text sử dụng thì lisp trên ko sử dụng được.
Giả dụ: Bạn nhập nhầm tỉ lệ và chọn nhầm Block/text mẫu -> Bạn muốn thay đổi -> Sửa code vậy thì chịu rồi
  • 1