Chuyển đến nội dung
Diễn đàn CADViet
toai

NHỜ BỔ SUNG NỘI DUNG TRONG LISP "GHI CAO DO DIEM TREN TRAC NGANG by Thaistreetz"

Các bài được khuyến nghị

Mình đang dùng lisp này để hoàn công cao độ trên trắc ngang. Nhờ các ACE trên DD bổ sung giúp  thêm chức năng đổi màu các text cao độ khi được thay thế ạ.

Trân trọng cảm ơn. 

P/S: Thanks HuuThais vì lisp rất hữu ích!

Sua cao do SCD(Ghi vao text co san khong co +-).lsp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
8 giờ trước, toai đã nói:

Mình đang dùng lisp này để hoàn công cao độ trên trắc ngang. Nhờ các ACE trên DD bổ sung giúp  thêm chức năng đổi màu các text cao độ khi được thay thế ạ.

Trân trọng cảm ơn. 

P/S: Thanks HuuThais vì lisp rất hữu ích!

Sua cao do SCD(Ghi vao text co san khong co +-).lsp

Đã sửa. bạn có thể đổi sang màu khác bằng cách mở lisp rồi tìm dòng dưới đây, sửa số 1 thành số màu tương ứng,  1= red, 3 = yellow ...

(setq oldEntity (subst '(62 . 1) (assoc 62 oldEntity) oldEntity))

Sua cao do SCD.lsp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Có cách nào để cắt bớt việc chọn tỷ lệ theo trục x không bạn? và lặp lại lệnh  đỡ phải gõ nhiều chỉ cần thực hiện lệnh là nó đã hiện cái tỷ lệ mình đã chọn từ trước, nếu cần tỷ lệ khác thì nhập lại

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
8 giờ trước, doductiep đã nói:

Đã sửa. bạn có thể đổi sang màu khác bằng cách mở lisp rồi tìm dòng dưới đây, sửa số 1 thành số màu tương ứng,  1= red, 3 = yellow ...

(setq oldEntity (subst '(62 . 1) (assoc 62 oldEntity) oldEntity))

Sua cao do SCD.lsp

+ @doductiep  Với đối tượng  Text có màu sắc thuộc "Bylayer" thì sao? (assoc 62 oldEntily) = nil do không tồn tại.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
18 giờ trước, toai đã nói:

Mình đang dùng lisp này để hoàn công cao độ trên trắc ngang. Nhờ các ACE trên DD bổ sung giúp  thêm chức năng đổi màu các text cao độ khi được thay thế ạ.

Trân trọng cảm ơn. 

P/S: Thanks HuuThais vì lisp rất hữu ích!

Sua cao do SCD(Ghi vao text co san khong co +-).lsp

Bạn xem cái này có hữu ích không??

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
5 giờ trước, Danh Cong đã nói:

+ @doductiep  Với đối tượng  Text có màu sắc thuộc "Bylayer" thì sao? (assoc 62 oldEntily) = nil do không tồn tại.

Đúng là không có bác ạ. Giờ em mới biết ^^. Vậy trường hợp này tính sao bác, chuyển text từ bylayer color sang truecolor rồi mới làm theo cách này? Nếu chuyển sang truecolor thì làm thế nào? Nhớ bác chỉ!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
1 giờ} trướ}c, doductiep đã nói:

Đúng là không có bác ạ. Giờ em mới biết ^^. Vậy trường hợp này tính sao bác, chuyển text từ bylayer color sang truecolor rồi mới làm theo cách này? Nếu chuyển sang truecolor thì làm thế nào? Nhớ bác chỉ!

(command "_change" oldEntity "" "p" "c" "1" "")

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
1 giờ} trướ}c, doductiep đã nói:

Đúng là không có bác ạ. Giờ em mới biết ^^. Vậy trường hợp này tính sao bác, chuyển text từ bylayer color sang truecolor rồi mới làm theo cách này? Nếu chuyển sang truecolor thì làm thế nào? Nhớ bác chỉ!

+ Ngoài cách của bác @huunhantvxdts ra, còn có thể xài: (vla-put-color (vlax-ename->vla-object doitt) 1) . Xài các hàm Vla có ưu diểm riêng, đặc biệt như đổi màu text trong Dimension, cái này dùng lisp thuần túy thì è cổ .

+ Trong lisp hơi có vấn đề ở dòng : (setq pt0 (osnap (getpoint "Diem tim TN tu nhien") "end")), không biết các bản Cad khác thế nào. Chứ Cad 2012 của mình là chịu, không chạy được nổi lisp nếu không bỏ Osnap đi? 

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

*** Chỉ cần thế này thôi (thằng gốc có 62 hay không, không quan trọng):

(entmod (append (entget ent) '((62 . 1))))

*** Mình sửa lại Lisp trên (Công thêm yêu cầu của Chien_LV):

 

(defun c:tt  (/ cd ed h0 pt pt0 x0 y y0 tmp v)
 (or #tyle# (setq #tyle# 1))
 (setq tmp t)
 (if (and (while (and tmp
                      (not (initget "S"))
                      (setq pt0 (getpoint
                                 (strcat "\n[Setting]. Ty le: <" (rtos #tyle# 2 2) ">. Diem tim TN tu nhien!"))))
           (cond ((eq pt0 "S")
                  (setq #tyle# (cond ((getreal (strcat "\nTy le <" (rtos #tyle# 2 2) ">: ")))
                                     (#tyle#)))
                  (setq pt0 nil))
                 ((listp pt0) (setq tmp nil) t)
                 (t (setq tmp nil))))
          (setq ed (car (entsel "\nChon Text cao do tim: ")))
          (wcmatch (cdr (assoc 0 (entget ed))) "TEXT,MTEXT")
          (if (wcmatch (setq cd (cdr (assoc 1 (entget ed)))) "%%p*")
           (setq h0 (distof (substr cd 4)))
           (setq h0 (distof (cdr (assoc 1 (entget ed))))))
          (setq x0 (car pt0)
                y0 (cadr pt0)))
  (while (and (setq pt (getpoint "\nChon diem chuan : "))
              (setq ed (car (entsel "\nChon text de chinh sua: ")))
              (wcmatch (cdr (assoc 0 (setq ed (entget ed)))) "TEXT,MTEXT"))
   (setq y (- (cadr pt) y0 (- h0))
         v (cond ((> y 0) (strcat "+" (rtos (* y #tyle#) 2 2)))
                 ((< y 0) (rtos (* y #tyle#) 2 2))
                 (t "%%p0.00")))
   (entmod (append (subst (cons 1 v) (assoc 1 ed) ed) '((62 . 1))))))
 (princ))

 

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Lisp anh quocmanh04tt chỉnh lại hình như phần chọn tỷ lệ đã được mặc định sẵn rồi thì phải (1/1), nếu muốn chọn tỷ lệ khác thì phải sửa trong lisp đúng không ạ? thay vì việc sửa lisp mình có thể nhập từ màn hình được không anh? 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
1 giờ} trướ}c, chien_lv đã nói:

Lisp anh quocmanh04tt chỉnh lại hình như phần chọn tỷ lệ đã được mặc định sẵn rồi thì phải (1/1), nếu muốn chọn tỷ lệ khác thì phải sửa trong lisp đúng không ạ? thay vì việc sửa lisp mình có thể nhập từ màn hình được không anh? 

Khi gọi lệnh, đầu tiên có 2 lựa chọn: 1 là pick điểm để lấy cao độ TN, hoặc gõ S -> Entter để đặt lại tỷ lệ (Nhớ xem dòng nhắc ở command...!)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Anh quocmanh04tt cho em hỏi đối tới TL 1/100 thì kết quả chạy đúng nhưng nếu với tỷ lệ khác ví dụ 1/50 hoặc 1/25 thì không cho ra kết quả mong muốn , em gửi file đính kèm

Drawing3.dwg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
28 phút trước, chien_lv đã nói:

Anh quocmanh04tt cho em hỏi đối tới TL 1/100 thì kết quả chạy đúng nhưng nếu với tỷ lệ khác ví dụ 1/50 hoặc 1/25 thì không cho ra kết quả mong muốn , em gửi file đính kèm

Drawing3.dwg

Do mình không quan tâm đến nội dung, mà dựa theo kết quả của lisp ban đầu. Mình chỉ sửa phần chủ thớt và bạn yêu cầu ở trên...

Bạn muốn kết quả sau khi dùng lisp thế nào?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Em thấy nó đúng trong trường hợp cao độ ban đầu là +0.00 nếu là khác +0.00 thì không cho kết quả đúng. Em muốn nhờ anh chỉnh thêm một chút là khi dùng lisp thì nó sẽ tính cao độ từ giá trị cốt mình chọn ví dụ ở đây em chọn là +42.03 khi cộng với 1 với hstl (0.5) nó sẽ thành 43.03. Em cảm ơn anh đã giúp đỡ

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Có phải thế này không???

(defun c:tt  (/ cd ed h0 pt pt0 x0 y y0 tmp v k)
 (or (and #tyle# (member (type #tyle#) '(REAL INT))) (setq #tyle# 1))
 (setq tmp t)
 (if (and (while (and tmp
                      (not (initget "S"))
                      (setq pt0 (getpoint
                                 (strcat "\n[Setting]. Ty le: <" (rtos #tyle# 2 2) ">. Diem tim TN tu nhien!"))))
           (cond ((eq pt0 "S")
                  (setq #tyle# (cond ((getreal (strcat "\nTy le <" (rtos #tyle# 2 2) ">: ")))
                                     (#tyle#)))
                  (setq pt0 nil))
                 ((listp pt0) (setq tmp nil) t)
                 (t (setq tmp nil))))
          (setq ed (car (entsel "\nChon Text cao do tim: ")))
          (wcmatch (cdr (assoc 0 (entget ed))) "TEXT,MTEXT")
          (if (wcmatch (setq cd (cdr (assoc 1 (entget ed)))) "%%p*")
           (setq h0 (distof (substr cd 4)))
           (setq h0 (distof (cdr (assoc 1 (entget ed))))))
          (setq x0 (car pt0)
                y0 (cadr pt0)))
  (while (and (setq pt (getpoint "\nChon diem chuan : "))
              (setq ed (car (entsel "\nChon text de chinh sua: ")))
              (wcmatch (cdr (assoc 0 (setq ed (entget ed)))) "TEXT,MTEXT"))
   (setq y (+ (* (- (cadr pt) y0) #tyle#) h0)
         k (rtos y 2 2)
         v (cond ((> y 0) (strcat "+" k))
                 ((< y 0) k)
                 (t "%%p0.00")))
   (entmod (append (subst (cons 1 v) (assoc 1 ed) ed) '((62 . 1))))))
 (princ))

 

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×