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

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

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

Cảm ơn bạn ,kết quả ra đúng ,nhưng mình không hiểu sao nếu không có hàm fixR của bạn thì kết quả lại sai.

Mình muốn viết thêm gì để kết quả như 199.0200 như bây giờ là 199 2 0 trở thành được 199 02 00

Nhờ bạn chỉ dẫn.

Đó là 1 lỗi khó hiểu của Lisp.

Bác thử cái này nhé :

(setq a ( nth 0 LL1))

(setq b (atof a))

(setq c (fixR B))

(setq d (prefix0 C))

 

(setq e (- b (fixR B)))

(setq e1 (* e 100))

(setq e2 (fixR e1))

(setq e3 (prefix0 e2))

 

 

(setq g (- e1 (fixR e1)))

(setq g1 (* g 100))

(setq g2 (fixR g1))

(setq g3 (prefix0 g2))

;;;;;

(defun fixR (s) (fix(atof(rtos s))))

(defun prefix0 (s)

(if (

(strcat "0" (itoa s))

(itoa s)

)

)

Chỉnh sửa theo Tue_NV
  • Vote tăng 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
Cảm ơn bạn ,kết quả ra đúng ,nhưng mình không hiểu sao nếu không có hàm fixR của bạn thì kết quả lại sai.

Mình muốn viết thêm gì để kết quả như 199.0200 như bây giờ là 199 2 0 trở thành được 199 02 00

Nhờ bạn chỉ dẫn.

Chào bạn NDBNGO,

Lỗi của bạn là do cái hàm fix của lisp nó gây ra. Vì sao thì bạn chịu khó hỏi thằng Autodesk chứ mình cũng không giải thích được bạn ạ.

Để khắc phục cái lỗi này, mình dùng kiểu cắt chuỗi.

Bạn xài thử xem nhé. Nhớ là khi nhập chuỗi thì bạn phải nhập đúng định dạng mà bạn đã post, tức là sử dụng dấu chấm thập phân và phần thập phân có 4 chữ số bạn nhé. Nếu không líp nó chê xấu giai nó không cưới đâu. Cô nàng này đỏng đảnh lắm.

Như vậy nó cũng khắc phục được luôn cái lỗi như của lisp bác Tue_NV đã viết tức là 199.0299 sẽ thành 199 02 99 chứ không phải 199 2 99.

Bạn thử coi sao nhé.

(defun c:doit ()
(setq txt (getstring "\n Nhap text can doi: "))
(if (not (wcmatch txt "*.####"))
  (alert "\Text sai dinh dang, hay lam lai")
  (progn
         (setq n (strlen txt)
                 i 0)
         (repeat n
                (if (= (substr txt (1+ i) 1) ".")
                    (setq k (1+ i))
                )
                (setq i (1+ i))
         )
         (setq t1 (substr txt 1 (1- k))
                 t2 (substr txt (1+ k) 2)
                 t3 (substr txt (+ 3 k) 2)
                 txt (strcat t1 " " t2 " " t3)
         )
    )
)
)

Chúc bạn vui.

Nếu có gì chưa vừa ý thì hãy post lên nhé để mình hoàn thiện nó.

 

À mà quên mất, nếu bạn đã có một list các góc theo đúng dịnh dạng trên thì bạn có thể sử dụng (setq txt (nth 0 LL1)) thay cho (setq txt (gestring .....)).

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
Đó là 1 lỗi khó hiểu của Lisp.

Bác thử cái này nhé :

(setq a ( nth 0 LL1))

(setq b (atof a))

(setq c (fixR B ))

(setq d (prefix0 C))

 

(setq e (- b (fixR B )))

(setq e1 (* e 100))

(setq e2 (fixR e1))

(setq e3 (prefix0 e2))

(setq g (- e1 (fixR e1)))

(setq g1 (* g 100))

(setq g2 (fixR g1))

(setq g3 (prefix0 g2))

;;;;;

(defun fixR (s) (fix(atof(rtos s))))

(defun prefix0 (s)

(if (< s 10)

(strcat "0" (itoa s))

(itoa s)

)

)

Về lý thuyết thì khi thêm đoạn mã của bạn vào thì sẽ thêm số o đằng trước những số nhỏ hơn 10 ,nhưng thực tế mình cho vào chạy kết quả vẫn như cũ ,nghĩa là số o không được hiện thị.

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ào bạn NDBNGO,

Lỗi của bạn là do cái hàm fix của lisp nó gây ra. Vì sao thì bạn chịu khó hỏi thằng Autodesk chứ mình cũng không giải thích được bạn ạ.

Để khắc phục cái lỗi này, mình dùng kiểu cắt chuỗi.

Bạn xài thử xem nhé. Nhớ là khi nhập chuỗi thì bạn phải nhập đúng định dạng mà bạn đã post, tức là sử dụng dấu chấm thập phân và phần thập phân có 4 chữ số bạn nhé. Nếu không líp nó chê xấu giai nó không cưới đâu. Cô nàng này đỏng đảnh lắm.

Như vậy nó cũng khắc phục được luôn cái lỗi như của lisp bác Tue_NV đã viết tức là 199.0299 sẽ thành 199 02 99 chứ không phải 199 2 99.

Bạn thử coi sao nhé.

(defun c:doit ()
(setq txt (getstring "\n Nhap text can doi: "))
(if (not (wcmatch txt "*.####"))
  (alert "\Text sai dinh dang, hay lam lai")
  (progn
         (setq n (strlen txt)
                 i 0)
         (repeat n
                (if (= (substr txt (1+ i) 1) ".")
                    (setq k (1+ i))
                )
                (setq i (1+ i))
         )
         (setq t1 (substr txt 1 (1- k))
                 t2 (substr txt (1+ k) 2)
                 t3 (substr txt (+ 3 k) 2)
                 txt (strcat t1 " " t2 " " t3)
         )
    )
)
)

Chúc bạn vui.

Nếu có gì chưa vừa ý thì hãy post lên nhé để mình hoàn thiện nó.

 

À mà quên mất, nếu bạn đã có một list các góc theo đúng dịnh dạng trên thì bạn có thể sử dụng (setq txt (nth 0 LL1)) thay cho (setq txt (gestring .....)).

Đoạn lisp mà mình viết ,là 1 chương trình con trong cả 1 chương trình về lisp về lisp đã hoàn thiện ,mình chỉ thay 1 số định dạng để cho phù hợp .Vây bạn có thể viết trực tiếp thêm đoạn lisp của TUE_NV để kêt quả ra đúng được không.

Cảm ơn nhiểu.

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ào bạn NDBNGO,

Lỗi của bạn là do cái hàm fix của lisp nó gây ra. Vì sao thì bạn chịu khó hỏi thằng Autodesk chứ mình cũng không giải thích được bạn ạ.

Để khắc phục cái lỗi này, mình dùng kiểu cắt chuỗi.

Bạn xài thử xem nhé. Nhớ là khi nhập chuỗi thì bạn phải nhập đúng định dạng mà bạn đã post, tức là sử dụng dấu chấm thập phân và phần thập phân có 4 chữ số bạn nhé. Nếu không líp nó chê xấu giai nó không cưới đâu. Cô nàng này đỏng đảnh lắm.

Như vậy nó cũng khắc phục được luôn cái lỗi như của lisp bác Tue_NV đã viết tức là 199.0299 sẽ thành 199 02 99 chứ không phải 199 2 99.

Bạn thử coi sao nhé.

(defun c:doit ()
(setq txt (getstring "\n Nhap text can doi: "))
(if (not (wcmatch txt "*.####"))
  (alert "\Text sai dinh dang, hay lam lai")
  (progn
         (setq n (strlen txt)
                 i 0)
         (repeat n
                (if (= (substr txt (1+ i) 1) ".")
                    (setq k (1+ i))
                )
                (setq i (1+ i))
         )
         (setq t1 (substr txt 1 (1- k))
                 t2 (substr txt (1+ k) 2)
                 t3 (substr txt (+ 3 k) 2)
                 txt (strcat t1 " " t2 " " t3)
         )
    )
)
)

Chúc bạn vui.

Nếu có gì chưa vừa ý thì hãy post lên nhé để mình hoàn thiện nó.

 

À mà quên mất, nếu bạn đã có một list các góc theo đúng dịnh dạng trên thì bạn có thể sử dụng (setq txt (nth 0 LL1)) thay cho (setq txt (gestring .....)).

Tuy nhiên, Code trên đầy đủ định dạng thì Lisp mới chạy.

Với code trên của bài viết trên của Tue_NV thì không cần đúng định dạng (có 4 chữ số thập phân) nó vẫn chạy như thường????

Lisp nào có chê xâu chai hay là đẹp chai đâu hở bác? Nó đâu có chê, chỉ cần chăm chỉ, cần cù thật tâm đến với nó là nó chịu liền à??

 

Ôi, bác Bình ơi. Lisp mà Tue_Nv viết có lỗi chi đâu Bác Bình ơi?

Bác đã thử code của Tue_NV chưa mờ kiu lỗi dậy???

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
Đó là 1 lỗi khó hiểu của Lisp.

Bác thử cái này nhé :

Bác Tue_NV ơi,

Tham khảo về cái hàm (prefix..... ) này ở đâu vậy bác ??? Mình tìm trong help developer của CAD hổng thấy nó bác ạ.Và như vậy chắc có cả hàm suffix nữa phải không bác???

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
Bác Tue_NV ơi,

Tham khảo về cái hàm (prefix..... ) này ở đâu vậy bác ??? Mình tìm trong help developer của CAD hổng thấy nó bác ạ.Và như vậy chắc có cả hàm suffix nữa phải không bác???

Bác tham khảo bài viết số 2922. Em có viết rõ ràng lắm mà

 

Về lý thuyết thì khi thêm đoạn mã của bạn vào thì sẽ thêm số o đằng trước những số nhỏ hơn 10 ,nhưng thực tế mình cho vào chạy kết quả vẫn như cũ ,nghĩa là số o không được hiện thị.

Bác NGO có thể cho biết công việc của bác đang làm không?

Bác đang làm chương trình gì mà chạy nó không được

Tue_NV thử chạy đoạn code ở trên nó ra đúng như bác yêu cầu cơ mà????

Bác có thể upload những cái mà bác đang làm và nói rõ hơn được 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
Không sao bạn ạ ,chương trình của bạn chưa giúp cho mình thì giúp cho nhiều bạn khác .

Cảm ơn bạn đã quan tâm .

bạn xem có hàm gì để giá trị không có nghĩa 0 hiện lên sau đoạn mã đó Ví dụ :125 02 03 or 00 00 01 chứ không phải như bây giờ là 125 2 3 và 0 0 1

Bạn thử đoạn này xem :

(setq a ( nth 0 LL1))
(setq b (atof a))
(setq c (fix b))
(setq d (rtos c 2 0 ))
;;; nha^.p phan phut
(setq e (- b (fix B)))
(setq e1 (* e 100))
(setq e2 (fix (+ e1 0.0001)))
(if (< e2 10) (setq e3 (strcat "0" (rtos e2 2 0))) (setq e3 (rtos e2 2 0)))
;;; nha^.p phan giay
(setq g (- e1 (fix e1)))
(setq g1 (* g 100))
(setq g2 (fix g1))
(if (< g2 10) (setq g3 (strcat "0" (rtos g2 2 0))) (setq g3 (rtos g2 2 0)))

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
Bác tham khảo bài viết số 2922. Em có viết rõ ràng lắm mà

Bác NGO có thể cho biết công việc của bác đang làm không?

Bác đang làm chương trình gì mà chạy nó không được

Tue_NV thử chạy đoạn code ở trên nó ra đúng như bác yêu cầu cơ mà????

Bác có thể upload những cái mà bác đang làm và nói rõ hơn được không?

Hề hề hề,

Sorry bác Tue_NV nhé,

Mắt mũi kèm nhèm cứ tưởng cái thằng (prefix0 ... ) là (prefix 0 ....) nên gán ngay cho nó là hàm của lisp để chúi mũi vào mò....

Ai dè nó là cái thằng cu của bác đẻ ra. Tí nữa thì uýnh nhầm. Khổ quá. Mong bác tha lỗi nhé. Vậy là yên tâm chẳng hề có thằng Suffix nào cả mà đi tìm bác hỉ. Thôi thì ráng đợii đến khi bác nào có hứng cho thằng prefix0 này nó có em thì ngắm vậy.

Hề hề hề,....

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
Bạn thử đoạn này xem :

(setq a ( nth 0 LL1))
(setq b (atof a))
(setq c (fix b))
(setq d (rtos c 2 0 ))
;;; nha^.p phan phut
(setq e (- b (fix B)))
(setq e1 (* e 100))
(setq e2 (fix (+ e1 0.0001)))
(if (< e2 10) (setq e3 (strcat "0" (rtos e2 2 0))) (setq e3 (rtos e2 2 0)))
;;; nha^.p phan giay
(setq g (- e1 (fix e1)))
(setq g1 (* g 100))
(setq g2 (fix g1))
(if (< g2 10) (setq g3 (strcat "0" (rtos g2 2 0))) (setq g3 (rtos g2 2 0)))

Cảm ơn bạn ,phần ghép số 0 đã thực hiện rất tôt nhưng ban cần kiểm tra lại việc lấy dữ liêu góc:

Khi chạy sẽ có hiện tượng sau

Góc 207.2200 sẽ thành 207 22 99

348.5800 = 348 58 99

Rất cảm ơn bạn đoạn sau đã chạy tốt

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
Bác tham khảo bài viết số 2922. Em có viết rõ ràng lắm mà

Bác NGO có thể cho biết công việc của bác đang làm không?

Bác đang làm chương trình gì mà chạy nó không được

Tue_NV thử chạy đoạn code ở trên nó ra đúng như bác yêu cầu cơ mà????

Bác có thể upload những cái mà bác đang làm và nói rõ hơn được không?

Mình đang viết các chương trình chuyển đổi các định dạng góc,khoảng cách ....ở các định dạng khác nhau do người dùng yêu cầu về 1 format đã quy định.

Hàm fixR của bạn rất hay ,đã giải quyết được thắc mắc của mình đưa ra kết quả đúng,vì mình không nghĩ rằng hàm fix lại có lỗi như thế (rất nhiều bạn không kiểm soát đã bị mắc lỗi này và phải sửa lại bằng thủ công) .

Phần ghép o cho các chữ số <10 của bạn ,có lẽ không sai nhưng không hiểu sao lại không cho ra kết quả mới (kết quả vẫn như cũ chưa thêm hàm prefix0 (s) .Mình ghép đoạn của ban NguyenNdait (if (< g2 10) (setq g3 (strcat "0" (rtos g2 2 0))) (setq g3 (rtos g2 2 0))) thì lại chạy ra kết quả tốt.

Nghĩa là của bạn 70% NguyenNdait 25 % thì đã được như ý mình.

Cảm ơn tất cả các bạn .

( Bạn Tue_NV có thể giải thích giúp mình do lý do tại sao 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
Cảm ơn bạn ,phần ghép số 0 đã thực hiện rất tôt nhưng ban cần kiểm tra lại việc lấy dữ liêu góc:

Khi chạy sẽ có hiện tượng sau

Góc 207.2200 sẽ thành 207 22 99

348.5800 = 348 58 99

Rất cảm ơn bạn đoạn sau đã chạy tốt

Chào bác NDBNGO

Bác thay dòng

(setq g2 (fix g1))

thành dòng

(setq g2 (fix (+ g1 0.0001)))

trong code của bác NguyenNdaiT là được. Hoặc sử dụng hàm FixR mà Tue_NV đã viết

Đây có lẽ là lỗi làm tròn của hàm Fix

Về hàm prefix0 thì Tue_NV đã chạy thử không thấy lỗi gì cả.

Và đã viết lại hàm con prefix0 (thay hàm itoa bằng rtos), bác chạy thử đoạn code này thử nhé :

(defun c:fso()
(setq b (getreal "\n Nhap so :"))
(setq c (fixR B ))
(setq d (prefix0 C))

(setq e (- b (fixR B )))
(setq e1 (* e 100))
(setq e2 (fixR e1))
(setq e3 (prefix0 e2))
(setq g (- e1 (fixR e1)))
(setq g1 (* g 100))
(setq g2 (fixR g1))
(setq g3 (prefix0 g2))
 (alert (strcat d "  "e3 "  "  g3))
)
;;;;;
(defun fixR (s) (fix(atof(rtos s))))
(defun prefix0 (s)
(if ((strcat "0" (rtos s 2 0))
(rtos s 2 0)
)
)

CHúc bác thành công

  • Vote tăng 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
Chào bác NDBNGO

Bác thay dòng

(setq g2 (fix g1))

thành dòng

(setq g2 (fix (+ g1 0.0001)))

trong code của bác NguyenNdaiT là được. Hoặc sử dụng hàm FixR mà Tue_NV đã viết

Đây có lẽ là lỗi làm tròn của hàm Fix

Về hàm prefix0 thì Tue_NV đã chạy thử không thấy lỗi gì cả.

Và đã viết lại hàm con prefix0 (thay hàm itoa bằng rtos), bác chạy thử đoạn code này thử nhé :

(defun c:fso()
(setq b (getreal "\n Nhap so :"))
(setq c (fixR B ))
(setq d (prefix0 C))

(setq e (- b (fixR B )))
(setq e1 (* e 100))
(setq e2 (fixR e1))
(setq e3 (prefix0 e2))
(setq g (- e1 (fixR e1)))
(setq g1 (* g 100))
(setq g2 (fixR g1))
(setq g3 (prefix0 g2))
 (alert (strcat d "  "e3 "  "  g3))
)
;;;;;
(defun fixR (s) (fix(atof(rtos s))))
(defun prefix0 (s)
(if (< (float s) 10.0)
(strcat "0" (rtos s 2 0))
(rtos s 2 0)
)
)

CHúc bác thành công

Cảm ơn sự giúp đỡ nhiệt tình của bạn ,mã cảu bạn đã chạy rất tốt.

Nhờ bạn đã giúp nhiêu hơn về tư duy viêt mã lisp.

Xin cảm ơn ban lần nữa.

  • Vote tăng 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

xin chào các bạn. chúc mọi người sẽ có một giáng sinh vui vẻ bên người thương và gia đình.. mình có một thỉnh cầu nhỏ mong mọi người giúp đỡ với. Mình làm bên thiết kế nên thuờng xuyên phải chạy đường bằng Nova ,có những đoạn đường dài nên không thể nhập tên cọc bằng sslt được( máy cùi mà :undecided: ) mà dùng stc chắc mình chết mất. mong mọi người viết hộ lisp đổi tên cọc, hoặc có lisp copy nào có thể áp dụng thì cho minh xin... Chân thành cảm ơn tất cả.

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
xin chào các bạn. chúc mọi người sẽ có một giáng sinh vui vẻ bên người thương và gia đình.. mình có một thỉnh cầu nhỏ mong mọi người giúp đỡ với. Mình làm bên thiết kế nên thuờng xuyên phải chạy đường bằng Nova ,có những đoạn đường dài nên không thể nhập tên cọc bằng sslt được( máy cùi mà :cheers: ) mà dùng stc chắc mình chết mất. mong mọi người viết hộ lisp đổi tên cọc, hoặc có lisp copy nào có thể áp dụng thì cho minh xin... Chân thành cảm ơn tất cả.

Chào bạn Nam.cad

Bạn viết dùng stc : phải chăng Stc là sửa Thủ Công ???

Còn bằng sslt -> Chịu, không hiểu được :undecided:

Bạn nên trình bày, minh họa rõ hơn điều mình nói bằng file .dwg thì may ra có thể giúp được.

Bạn cần tránh, không nên viết những yêu cầu bằng những từ viết tắt nhé. Vì để mọi người dễ hiểu hơn, và có thiện cảm với bài viết của bạn hơn.

Bạn nên trình bày rõ ràng hơn, vì nếu viết như bài viết trên thì chắc có lẽ các bác mà đã từng sử dụng NOVA mới hiểu được bạn muốn gì?? Và cũng có lẽ là không hiểu được ???? :leluoi:

  • Vote tăng 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
xin chào các bạn. chúc mọi người sẽ có một giáng sinh vui vẻ bên người thương và gia đình.. mình có một thỉnh cầu nhỏ mong mọi người giúp đỡ với. Mình làm bên thiết kế nên thuờng xuyên phải chạy đường bằng Nova ,có những đoạn đường dài nên không thể nhập tên cọc bằng sslt được( máy cùi mà :undecided: ) mà dùng stc chắc mình chết mất. mong mọi người viết hộ lisp đổi tên cọc, hoặc có lisp copy nào có thể áp dụng thì cho minh xin... Chân thành cảm ơn tất cả.

Vào sslt xuất tuyến ra file ntd, vào excel chỉnh sửa tên cọc, xong paste lại đúng chỗ sslt.

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

Khi ta tạo lệnh tắt bằng lisp của lệnh hatch:

(defun c:h() (command "hatch")).

Giờ muốn khi nhấn h thì mặc định mẫu hatch sẽ là ANSI31 và scale là 10 thì phải viết thêm gì.Mong các bác 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
Khi ta tạo lệnh tắt bằng lisp của lệnh hatch:

(defun c:h() (command "hatch")).

Giờ muốn khi nhấn h thì mặc định mẫu hatch sẽ là ANSI31 và scale là 10 thì phải viết thêm gì.Mong các bác giúp đỡ.

Bạn sửa thế này nhé này nhé

(defun c:h() 
(command "-hatch" "p" "ANSI31" "10" "" pause)
)

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 nhờ các bác viết giùm e 1 đoạn lisp :

- Khóa các layer đã chọn,hoặc tất cả.

- Mở khóa các layer đã chọn,hoặc tất cả

- Khóa tất cả,trừ các layer đã chọn

Những cái này e tìm thấy ở đâu đó r mà tìm lại không được :undecided:

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ào bạn Nam.cad

Bạn viết dùng stc : phải chăng Stc là sửa Thủ Công ???

Còn bằng sslt -> Chịu, không hiểu được :undecided:

Bạn nên trình bày, minh họa rõ hơn điều mình nói bằng file .dwg thì may ra có thể giúp được.

Bạn cần tránh, không nên viết những yêu cầu bằng những từ viết tắt nhé. Vì để mọi người dễ hiểu hơn, và có thiện cảm với bài viết của bạn hơn.

Bạn nên trình bày rõ ràng hơn, vì nếu viết như bài viết trên thì chắc có lẽ các bác mà đã từng sử dụng NOVA mới hiểu được bạn muốn gì?? Và cũng có lẽ là không hiểu được ???? :leluoi:

Đây là các lệnh của phần mềm thiết kế đuờng Nova bác ạ.

SSLT: sửa số liệu tuyến

STC: sửa tên cọc.

@Nam.cad: tuyến của bạn quá dài, vậy thì trên đó chắc không chỉ có các cọc lý trình bình thuờng mà còn có các cọc đặc biệt như các cọc trong đuờng cong, cọc H, cọc đánh dấu vị trí cống và các công trình đặc biệt trên tuyến. Đổi hàng loạt kiểu gì? Bảo sếp bạn đầu tư máy xịn đê

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 nhờ các bác viết giùm e 1 đoạn lisp :

- Khóa các layer đã chọn,hoặc tất cả.

- Mở khóa các layer đã chọn,hoặc tất cả

- Khóa tất cả,trừ các layer đã chọn

Những cái này e tìm thấy ở đâu đó r mà tìm lại không được :undecided:

 

Bạn thử cái này xem sao.Lisp thao tác thông qua các đối tượng được chọn

Mình đang đặt lệnh tắt như bên dưới,bạn có thể thay đổi cho tiện sử dụng

- lock : khoá layer(s)

- ulock : mở khoá layer(s)

- rlock : khoá tất cả,trừ layer(s) đc chọn

(defun c:lock () ;khoa layers(lkllk "lock" "l" "Chon doi tuong hoac an Enter de khoa tat ca" " Da duoc khoa"))(defun c:ulock () ;mo khoa layers(lkllk "unlock" "l" "Chon doi tuong hoac an Enter de mo khoa tat ca" " Da duoc mo khoa"))(defun c:rlock () ;Khoa tat ca,tru cai duoc chon(lkllk "unlock" "rl" "Chon doi tuong hoac an Enter de mo khoa tat ca" " Da duoc giu lai"))(defun lkllk ( lenh opt msg1 msg2 / NewLayers Layer1 Set1)(princ msg1)  		(setq Set1 (ssget))	(if (= Set1 nil)(command "-layer" lenh "*" "")		(progn			(setq i 0)			(repeat (sslength Set1)				(setq Layer1 (list (cdr(	assoc 8 (entget(ssname Set1 i))))))				(if NewLayers       				(setq NewLayers (append NewLayers Layer1))       				(setq NewLayers Layer1)				)				(setq i (+ i 1))			)			(princ NewLayers)			(if (= opt "l")(command  "layer") 						(command  "layer"  "lock" "*")			)			(mapcar  '(lambda (x) (command lenh x)) NewLayers)			(command "")						(princ (sslength Set1))			(princ msg2)))			;			(setq lenh nil 				msg1 nil 				msg2 nil)				(princ))

  • Vote tăng 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

vâng , em xin cám ơn các bác. Bác Tue hiểu chưa hết ý em rùi.hì. em đã nói trên là dùng Nova rùi mà, mà anh nào dùng nova chẳng biết sslt. Vậy các bác cao thủ có cao kiến gì hay giúp em trong việc sửa tên cọc với được không ạ? Các bác bảo em là xuất sang ntd rùi sang excel nhưng toàn bị đơ máy thôi bác ạ... em xin cám ơn tất cả.

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
Vào sslt xuất tuyến ra file ntd, vào excel chỉnh sửa tên cọc, xong paste lại đúng chỗ sslt.

cám ơn bác , nhưng máy em mỗi lần sửa trên excel thì với tuyến dài 5-10km thì bị đơ bác à, có cách nào khắc phục không bác?cám ơn bác đã hồi âm

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
Mình load lisp theo hướng dẫn của bạn, nhưng không chạy được.

Không hiểu sao ...?

Mong được Bạn giúp đở.

Cám ơn

Xin lỗi bạn. Vì ctrình của mình trích ra từ 1 ctrình lớn hơn nên còn thiếu đoạn này.

Bạn cho nó vào chung với file lvtcu nha

;Chon cac doi tuong hien huu tren man hinh
(defun ssget_scr ( / cen hight p1 p2 p3 p4)
(if (null (tblsearch "layer" "khongin")) (command "layer" "N" "khongin" ""))
 (setq cen (getvar "viewctr")
	hight (getvar "viewsize"))
 (setq p1 (polar (polar cen 0.0 (* hight 0.75)) (* Pi 0.5) (* hight 0.5)))
 (setq p2 (polar p1 pi (* hight 1.5))
	p3 (polar p2 (* pi 1.5) hight)
	p4 (polar p3 0.0 (* hight 1.5)))
 (ssget "C" p4 p2))

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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×