Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
11 replies to this topic

#1 phamduyanh

phamduyanh

    biết zoom

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

Đã gửi 02 April 2012 - 04:38 PM

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.
  • 0

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 April 2012 - 04:44 PM

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))))))

  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#3 phamduyanh

phamduyanh

    biết zoom

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

Đã gửi 02 April 2012 - 05:11 PM

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
  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 April 2012 - 05:36 PM

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ẻ!
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#5 quang_lac

quang_lac

    biết lệnh mirror

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

Đã gửi 18 October 2013 - 04:13 PM

sao ko chọn được text nhỉ @Doan Van Ha ơi


  • 0

#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 18 October 2013 - 04:17 PM

sao ko chọn được text nhỉ @Doan Van Ha ơi

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ì?


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#7 quang_lac

quang_lac

    biết lệnh mirror

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

Đã gửi 18 October 2013 - 04:32 PM

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ự


  • 0

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 18 October 2013 - 04:34 PM

ý 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.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#9 quang_lac

quang_lac

    biết lệnh mirror

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

Đã gửi 18 October 2013 - 04:47 PM

file của mình đây

dfdf


  • 0

#10 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 18 October 2013 - 04:56 PM

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.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#11 quang_lac

quang_lac

    biết lệnh mirror

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

Đã gửi 18 October 2013 - 05:08 PM

mình đã sửa chút lisp của bạn cho phù hợp với bản vẽ của mình rồi, cám ơn bạn nhé


  • 0

#12 trieubb

trieubb

    biết vẽ ellipse

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

Đã gửi 25 November 2013 - 08:42 AM

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


  • 0