Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
phamduyanh

(Yêu cầu) Lisp cộng một số không đổi vào lý trình khi thiết kế đườn

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

Chào mọi người, lần đầu gửi bài viết chưa đọc nội quy nên bị admin cho vao thung rác nên giờ post lại chủ đề này . Hihi

 

Tình hình là khi làm nova có đoạn dịch tyến mình sửa tuyến những đoạn cục bộ, các đoạn sau không thay đổi,

tuy nhiên là lý trình của đoạn sau sẽ bị cộng dồn lên hoặc bớt đi.

 

Nên mình muốn đơn giản hóa công việc bằng lisp:

 

- Nhập khoảng tăng (hoặc giảm): vd :100.00

- Chọn các đối tượng là lý trinh (trên trắc dọc hoặc của các trắc ngang) : có dạng : KM 2+12.45 , KM 2 +980.00

- Kết quả trả về là : KM 2+ 112.45 , KM 3 +080.00

 

Nó cùng gần như lisp cộng các số với một số không đổi, tuy nhiên phức tạp hơn một chút.

Đây là file mình gửi kèm :

http://www.cadviet.c...3/5005_giup.dwg

 

Ah, đối tượng nó dạng text (Km:0+00.00) nhưng cùng layer với nó còn có đối tượng text nữa có dạng : Cọc:DD

nên bạn lọc mình cho mình đối tượng này nha.

Thanks.

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 mọi người, lần đầu gửi bài viết chưa đọc nội quy nên bị admin cho vao thung rác nên giờ post lại chủ đề này . Hihi

Tình hình là khi làm nova có đoạn dịch tyến mình sửa tuyến những đoạn cục bộ, các đoạn sau không thay đổi,

tuy nhiên là lý trình của đoạn sau sẽ bị cộng dồn lên hoặc bớt đi.

Nên mình muốn đơn giản hóa công việc bằng lisp:

- Nhập khoảng tăng (hoặc giảm): vd :100.00

- Chọn các đối tượng là lý trinh (trên trắc dọc hoặc của các trắc ngang) : có dạng : KM 2+12.45 , KM 2 +980.00

- Kết quả trả về là : KM 2+ 112.45 , KM 3 +080.00

Nó cùng gần như lisp cộng các số với một số không đổi, tuy nhiên phức tạp hơn một chút.

Đây là file mình gửi kèm :

http://www.cadviet.c...3/5005_giup.dwg

Ah, đối tượng nó dạng text (Km:0+00.00) nhưng cùng layer với nó còn có đối tượng text nữa có dạng : Cọc:DD

nên bạn lọc mình cho mình đối tượng này nha.

Thanks.

Thử cái này xem đã đúng ý chưa.

;Doan Van Ha - CADViet.com - Ngay 02/4/2012
;Muc dich: tang/giam nhieu ly trinh voi cung 1 gia tri (VD ky hieu ly trinh: "Km:0+00.00", can tang 100.00)
;So chu so le phu thuoc ket qua.
(defun C:HA( / entlst tang)
(princ "\nChon cac Text ly trinh can tang/giam...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "*TEXT") (1 . "Km:*")))))))
(setq tang (getreal "\nNhap gia tri (met) tang/giam: "))
(foreach ent entlst
 (entmod (subst (cons 1 (HA (cdr (assoc 1 (entget ent))) tang)) (assoc 1 (entget ent)) (entget ent))))
(princ))
;----- VD: txtcu = "Km:0+20.32" ; tang = 100.00
(defun HA(txtcu tang / trai phai txtmoi)
(setq somoi (+ (* (atoi (TRAI_STR (substr txtcu 4) "+")) 1000) (atof (PHAI_STR (substr txtcu 4) "+")) tang))
(setq trai (fix (/ somoi 1000.0)))
(setq phai (- somoi (* trai 1000)))
(strcat "Km:" (itoa trai) "+" (if (= phai (atoi (rtos phai 2 0))) (rtos phai 2 0) (rtos phai 2 2))))
(defun TRAI_STR(str str1) (if (acet-str-find str1 str) (substr str 1 (- (acet-str-find str1 str) 1))))
(defun PHAI_STR(str str1) (if (TRAI_STR str str1) (substr str (+ 1 (strlen str1) (strlen (TRAI_STR str str1))))))

  • Vote tăng 2

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

Trời, chuẩn không cần chỉnh. Cảm ơn bạn nhiều nha. Nếu bạn ở Kontum thì Pm mình uống vài chai nhỉ .hi

Nick: hoangphihong21176@yahoo.com

Đổi Beer lấy "Like This" cho nó rẻ!

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

Hỏi lạ lùng! Lisp này viết cho Phamduyanh, có những quy định riêng trên bản vẽ của bạn ấy.

Ai biết của bạn là cái gì?

ý mình là mình cũng có định dạng như bạn ý dạng km:0+00 nhưng của bạn ấy chọn đuợc còn của mình ko chọn được, ý mình muốn là sửa như thế nào để chọn text cho các bản vẽ khác tương 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

ý mình là mình cũng có định dạng như bạn ý dạng km:0+00 nhưng của bạn ấy chọn đuợc còn của mình ko chọn được, ý mình muốn là sửa như thế nào để chọn text cho các bản vẽ khác tương tự

Vậy thì đưa bản vẽ của bạn lên đây xem sao.

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ôi không biết chuyên ngành của bạn nên bạn đừng gởi 1 bản vẽ đồ sộ như thế (45MB) mà không chú thích một lời nào.

Chừng nào bạn làm cho tôi có thể hiểu được thì tôi sẽ giúp bạn, còn với bản vẽ đó thì bó tay.

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

 

Thử cái này xem đã đúng ý chưa.

;Doan Van Ha - CADViet.com - Ngay 02/4/2012
;Muc dich: tang/giam nhieu ly trinh voi cung 1 gia tri (VD ky hieu ly trinh: "Km:0+00.00", can tang 100.00)
;So chu so le phu thuoc ket qua.
(defun C:HA( / entlst tang)
 (princ "\nChon cac Text ly trinh can tang/giam...")
 (setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "*TEXT") (1 . "Km:*")))))))
 (setq tang (getreal "\nNhap gia tri (met) tang/giam: "))
 (foreach ent entlst
  (entmod (subst (cons 1 (HA (cdr (assoc 1 (entget ent))) tang)) (assoc 1 (entget ent)) (entget ent))))
 (princ))
;----- VD: txtcu = "Km:0+20.32" ; tang = 100.00
(defun HA(txtcu tang / trai phai txtmoi)
 (setq somoi (+ (* (atoi (TRAI_STR (substr txtcu 4) "+")) 1000) (atof (PHAI_STR (substr txtcu 4) "+")) tang))
 (setq trai (fix (/ somoi 1000.0)))
 (setq phai (- somoi (* trai 1000)))
 (strcat "Km:" (itoa trai) "+" (if (= phai (atoi (rtos phai 2 0))) (rtos phai 2 0) (rtos phai 2 2))))
(defun TRAI_STR(str str1) (if (acet-str-find str1 str) (substr str 1 (- (acet-str-find str1 str) 1))))
(defun PHAI_STR(str str1) (if (TRAI_STR str str1) (substr str (+ 1 (strlen str1) (strlen (TRAI_STR str str1))))))

Lisp hay nhưng bác xem lại có 1 lỗi như sau: VD Km:1+5.45 cộng vào 5m nữa kết quả thành Km:0+10.45

Thứ hai là bác có thể sửa cái chữ số m ấy lúc nào cũng là 3 số VD Km:1+5.45 thành Km:1+005.45

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

Đăng nhập để thực hiện theo  

×