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

(HELP) Nhờ viết lisp cộng lý trình trắc ngang

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

Mình đang rất cần 1 cao nhân viết dùm cái lisp này, mong các bác giúp đỡ :D. Cụ thể như sau:

- Trong các Trắc ngang ở trong file này có 1 cái block ( mình đã khoanh tròn vị trí của block)

- Dùng lệnh " ATE " chọn vào block đấy, sẽ hiện ra 1 cái bảng

- Có 1 hàng " STATION" có ghi lý trình của trắc ngang đấy ( ví dụ TN lý trình 0+050.00 thì trong hàng STATION đấy sẽ ghi là 50.00)

----> Mong các cao nhân viết giúp mình lisp có thể cộng dồn ( hoặc giảm) số trong hàng STATION đấy  ( có thể quét nhiều Trắc ngang để cùng cộng hoặc cùng giảm )

Khi viết lisp sẽ như sau : + Nhập khoảng tăng ( hoặc giảm): ví dụ là cùng cộng 50

                                            + Chọn các Trắc ngang muốn cùng tăng lý trình ( hoặc cùng giảm)  -> enter

                                            + Kết quả trả về :  Khi dùng lệnh " ATE" chọn vào block  trong mỗi Trắc ngang đã chọn, số trong hàng " STATION" đã cộng thêm 50 ( ví dụ ban đầu đang là 50 thì sau khi dùng lisp thì nó sẽ thành 100 )

TN viet lisp.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
7 phút trước, minhmani đã nói:

Mình đang rất cần 1 cao nhân viết dùm cái lisp này, mong các bác giúp đỡ :D. Cụ thể như sau:

- Trong các Trắc ngang ở trong file này có 1 cái block ( mình đã khoanh tròn vị trí của block)

- Dùng lệnh " ATE " chọn vào block đấy, sẽ hiện ra 1 cái bảng

- Có 1 hàng " STATION" có ghi lý trình của trắc ngang đấy ( ví dụ TN lý trình 0+050.00 thì trong hàng STATION đấy sẽ ghi là 50.00)

----> Mong các cao nhân viết giúp mình lisp có thể cộng dồn ( hoặc giảm) số trong hàng STATION đấy  ( có thể quét nhiều Trắc ngang để cùng cộng hoặc cùng giảm )

Khi viết lisp sẽ như sau : + Nhập khoảng tăng ( hoặc giảm): ví dụ là cùng cộng 50

                                            + Chọn các Trắc ngang muốn cùng tăng lý trình ( hoặc cùng giảm)  -> enter

                                            + Kết quả trả về :  Khi dùng lệnh " ATE" chọn vào block  trong mỗi Trắc ngang đã chọn, số trong hàng " STATION" đã cộng thêm 50 ( ví dụ ban đầu đang là 50 thì sau khi dùng lisp thì nó sẽ thành 100 )

TN viet lisp.dwg

Cộng Attribute có tên Station trong block thì đơn giản, nhưng còn lý trình ở trên trắc ngang sao k thấy nhắc đến nhỉ ? 

  • 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

Lý trình trên trắc ngang mình không cần cộng lý trình bạn ơi :D. Mình dùng phần mềm nó sẽ tự nhảy, mình chỉ cần sửa cái trong Block thui :D

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
22 phút trước, minhmani đã nói:

Lý trình trên trắc ngang mình không cần cộng lý trình bạn ơi :D. Mình dùng phần mềm nó sẽ tự nhảy, mình chỉ cần sửa cái trong Block thui :D

(defun c:ct (/ up ss i ent num att_set att_get tag val entatt)
     (defun att_set (ent tag val)
  (setq tag (strcase tag))
  (vl-some
    '(lambda (att)
       (if (= tag (strcase (vla-get-tagstring att)))
	 (progn (vla-put-textstring att val) val)
	 )
       )
    (vlax-invoke (vlax-ename->vla-object ent) 'getattributes)
    )
  )
    (defun att_get (entatt / att)
  (if entatt
    (mapcar '(lambda (att) (cons (vla-get-tagstring att) (vla-get-textstring att)))
	    (vlax-invoke (vlax-ename->vla-object entatt) 'getattributes)
	    )
    )
  )
  (or *up (setq *up 1))
  (or (setq up (getreal (strcat "\nNh\U+1EADp kho\U+1EA3ng t\U+0103ng (ho\U+1EB7c gi\U+1EA3m):< " (rtos *up 2) ">")))
      (setq up *up))
  (setq *up up)
  (if (setq ss (ssget (list (cons 0 "INSERT") (cons 2 "xs_def2"))))
  (progn
    (setq i 0)
    (while (setq ent (ssname ss i))
      (setq i (1+ i))
      (if (setq num (cdr (assoc "STATION" (att_get ent)))) (progn
   (setq num (+ (atof num) *up))
   (att_set ent "STATION" (rtos num 2))))
      )
    ))
  )
 

Áp dụng cho các bản vẽ có Block có tên "xs_def2"

Bạn có thể đổi tên block ở dòng (cons 2 "xs_def2")

  • 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

ths bác, nhưng mà sao mình vẫn không dùng được lisp của bác nhỉ, nó báo lỗi là :   error: no function definition: VLAX-ENAME->VLA-OBJECT

Mong bác chỉ giáo :D

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
19 phút trước, minhmani đã nói:

ths bác, nhưng mà sao mình vẫn không dùng được lisp của bác nhỉ, nó báo lỗi là :   error: no function definition: VLAX-ENAME->VLA-OBJECT

Mong bác chỉ giáo :D

Bạn thử thêm dòng (vl-load-com) lên đầu lisp xem có chạy được khô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

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

×