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

[NHỜ VIẾT LISP] ĐÁNH SỐ STT THEO ĐƯỜNG DẪN

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

Chào anh chị, hôm nay em muốn nhờ anh chị viết giúp em lisp với các yêu cầu sau:

1. Vẽ 1 polyline, như hình sau.

image.thumb.png.3b3e5cf7e35eeb39017becd74a8f52d0.png

2. Đánh lệnh lisp, chọn polyline, máy sẽ tự động đánh số thứ tự theo polyline em đã vẽ (như hình sau), và tọa độ text là tọa độ của các điểm của polyline.

image.thumb.png.4414246f200a837451169dea8fc84c13.png

Em xin cám ơ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
(defun c:vername (/ e i j m n p s)
  (if (and (setq s (ssget '((0 . "LWPOLYLINE"))))
	   )
    (repeat (setq i (sslength s))
      (setq e (ssname s (setq i (1- i)))
	    n (cdr (assoc 210 (entget e)))
	    m (vlax-curve-getendparam e)
	    j -1
      )
      (while (<= (setq j (1+ j)) m)
	(setq p (trans (vlax-curve-getpointatparam e j) 0 e))
	(entmakex
	  (list
	    (cons 0 "TEXT")
	    (cons 7 (getvar 'TEXTSTYLE))
	    (cons 40 (getvar 'TEXTSIZE))
	    (cons 10 p)
	    (cons 11 p)
	    (cons 72 1)
	    (cons 73 2)
	    (cons 1 (itoa (1+ j)))
	    (cons 210 n)
	  )
	)
      )
    )
  )
  (princ)
)

Gửi bạ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

hay quá, em cám ơn anh nhiều! mình có thể mở rộng ra cho nó đánh số bằng attribute block được k anh? với att block do mình chọn, như vậy em có thể move att ra vị trí kế bên mà vẫn không thay đổi tọa độ.

  • Vote giảm 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
Kịp thời}}, phamthanhbinh cho biết:

Hề hề hề,

Hãy gửi cái block thuộc tính mà bạn cần add lên nhé. May ra co thể giúp bạn được.

Bác bình có sửa được code trên như vậy ko ạ? nếu được thì cảm ơn bác 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
2 giờ trước, timmaimotnguoi cho biết:

Bác bình có sửa được code trên như vậy ko ạ? nếu được thì cảm ơn bác nhiều ạ.

 

Hề hề hề,

Yêu cầu của bạn có thể thực hiện như sau

1/- Thêm dòng code (setq K (getint "Nhap so bat dau can thiet")) vào đầu lisp, dưới dòng code (defun.....

2/- Sửa dòng code  (cons 1 (itoa (1+ j))) thành (cons 1 (itoa  (+ j k 1)))

Bạn hãy tự làm thử coi sao nhé.

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
2 giờ trước, phamthanhbinh cho biết:

Hề hề hề,

Yêu cầu của bạn có thể thực hiện như sau

1/- Thêm dòng code (setq K (getint "Nhap so bat dau can thiet")) vào đầu lisp, dưới dòng code (defun.....

2/- Sửa dòng code  (cons 1 (itoa (1+ j))) thành (cons 1 (itoa  (+ j k 1)))

Bạn hãy tự làm thử coi sao nhé.

^^ Ok rồi bác sao nó đơn giản nhỉ chỉ 2 dòng code thành một cái code hay hơn nhiều :)

1/ Nếu muốn có một text cố định mình tự nhập vào ví dụ: BV-HC-02

2/ Thì ở đây nó cũng giống như cái code trên nhưng nó chỉ nhảy số BV-HC-02-> BV-HC-03-> BV-HC-04....( nếu nhập BV-HC-03 thì bắt đầu là  BV-HC-04->......)

Bác cho e đáp án được không ạ :)

  • Vote giảm 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
2 phút trước, timmaimotnguoi cho biết:

^^ Ok rồi bác sao nó đơn giản nhỉ chỉ 2 dòng code thành một cái code hay hơn nhiều :)

1/ Nếu muốn có một text cố định mình tự nhập vào ví dụ: BV-HC-02

2/ Thì ở đây nó cũng giống như cái code trên nhưng nó chỉ nhảy số BV-HC-02-> BV-HC-03-> BV-HC-04....( nếu nhập BV-HC-03 thì bắt đầu là  BV-HC-04->......)

Hề hề hề,

Cái muốn này cũng không khó. Tuy nhiên nó phức tạp vì người viết lisp không thể hiểu hết được các yêu cầu sẽ phát sinh của người dùng lisp. Bởi vậy mình chỉ có thể hướng dẫn bạn làm như sau:

1/- Thay dòng code (setq k (getint .....)) thành (setq k (getstring " Nhap vao doan text co dinh"))

Tỷ như đoạn text của bạn là BV-HC-02 thì đoạn text cố định bạn cần là BV-HC-02

2/-  bạn phải tách chuỗi text cố định trên thành chuỗi  BV-HC- với số k. Việc tách này có thể sử dụng hàm (substr ....) và đặt cho nó thành biến k1, với biến k lúc này phải được chuyển thành giá trị số.

3/- Thay thế dòng code (cons 1 (itoa  (+ j k 1))) thành (cons 1 (strcat  k1 (itoa  (+ j k 1)))). Ở đây cần lưu ý kiểm tra xem nếu (+ j k 1) <=9 thì phải thêm số 0 phía trước đi

 

Thực tế chỉ cần như vậy nhưng nếu bạn chưa rành rẽ về lisp thì làm cũng hơi nhọc. bạn nên tìm hiểu thêm một chút để có thể chủ động trong việc sử dụng lisp của mình

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, phamthanhbinh cho biết:

Hề hề hề,

Cái muốn này cũng không khó. Tuy nhiên nó phức tạp vì người viết lisp không thể hiểu hết được các yêu cầu sẽ phát sinh của người dùng lisp. Bởi vậy mình chỉ có thể hướng dẫn bạn làm như sau:

1/- Thay dòng code (setq k (getint .....)) thành (setq k (getstring " Nhap vao doan text co dinh"))

Tỷ như đoạn text của bạn là BV-HC-02 thì đoạn text cố định bạn cần là BV-HC-02

2/-  bạn phải tách chuỗi text cố định trên thành chuỗi  BV-HC- với số k. Việc tách này có thể sử dụng hàm (substr ....) và đặt cho nó thành biến k1, với biến k lúc này phải được chuyển thành giá trị số.

3/- Thay thế dòng code (cons 1 (itoa  (+ j k 1))) thành (cons 1 (strcat  k1 (itoa  (+ j k 1)))). Ở đây cần lưu ý kiểm tra xem nếu (+ j k 1) <=9 thì phải thêm số 0 phía trước đi

 

Thực tế chỉ cần như vậy nhưng nếu bạn chưa rành rẽ về lisp thì làm cũng hơi nhọc. bạn nên tìm hiểu thêm một chút để có thể chủ động trong việc sử dụng lisp của mình

Cảm ơn Bác quan tâm. Mới đầu học mà gặp đúng cái bài khó quá :(

Bác cho e cái lisp hoàn chỉnh để e nghiên cứu được không ạ. Đọc thì cũng hiểu bản chất nhưng viết được lại khó quá tại e mới tập tành tìm hiểu chưa sâu lắ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
3 phút trước, timmaimotnguoi cho biết:

Cảm ơn Bác quan tâm. Mới đầu học mà gặp đúng cái bài khó quá :(

Bác cho e cái lisp hoàn chỉnh để e nghiên cứu được không ạ. Đọc thì cũng hiểu bản chất nhưng viết được lại khó quá tại e mới tập tành tìm hiểu chưa sâu lắm

Hề hề hề,

Bước 1 chắc bạn OK rồi .

Bước 2 : tách chuỗi. Giả tỷ chuỗi của bạn nhập y như ví dụ bạn sẽ có biến k lúc này là BV-HC-02

Bạn viết các hàm tách chuỗi sau:

(setq k1 (substr k 1 6) k (atoi (substr k 7)))

Như vậy bạn sẽ có biến k1 là chuỗi BV-HC- và biến k là số 2

Bước 3: Bạn thay (cons 1 (itoa  (+ j k 1))) bằng (cons 1 (strcat  k1 (if (> (+ j k 1) 9) (itoa  (+ j k 1)) (strcat "0" (itoa (+ j k 1))))))

 

Bạn làm thử coi sao nhé.

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
20 phút trước, timmaimotnguoi cho biết:

Cảm ơn Bác quan tâm. Mới đầu học mà gặp đúng cái bài khó quá :(

Bác cho e cái lisp hoàn chỉnh để e nghiên cứu được không ạ. Đọc thì cũng hiểu bản chất nhưng viết được lại khó quá tại e mới tập tành tìm hiểu chưa sâu lắm

Hề hề hề,

Bạn lưu ý rằng nếu chuỗi nhập khác thì việc tách chuỗi cũng sẽ khác. Do vậy bạn nên tìm hiểu kỹ về các hàm tách chuỗi nà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
14 phút trước, phamthanhbinh cho biết:

Hề hề hề,

Bước 1 chắc bạn OK rồi .

Bước 2 : tách chuỗi. Giả tỷ chuỗi của bạn nhập y như ví dụ bạn sẽ có biến k lúc này là BV-HC-02

Bạn viết các hàm tách chuỗi sau:

(setq k1 (substr k 1 6) k (atoi (substr k 7)))

Như vậy bạn sẽ có biến k1 là chuỗi BV-HC- và biến k là số 2

Bước 3: Bạn thay (cons 1 (itoa  (+ j k 1))) bằng (cons 1 (strcat  k1 (if (> (+ j k 1) 9) (itoa  (+ j k 1)) (strcat "0" (itoa (+ j k 1))))))

 

Bạn làm thử coi sao nhé.

Ok e đã làm được thanks bác. (setq k1 (substr k 1 6) k (atoi (substr k 7))) e hiểu cái dòng code này ( k 1 6 ) là nó lấy số cố định từ trái sang phải là 6 số nếu số cố định e dài hơn thì e tăng số 6 đó lên thôi ^^. e vẫn hiểu được bản chất nhưng dùng hàm thì e ko hiểu các hàm ấy lắm :( muốn học mà khó quá ko biết bắt đầu từ đâu đi nhờ mãi cũng ngạ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
26 phút trước, timmaimotnguoi cho biết:

Ok e đã làm được thanks bác. (setq k1 (substr k 1 6) k (atoi (substr k 7))) e hiểu cái dòng code này ( k 1 6 ) là nó lấy số cố định từ trái sang phải là 6 số nếu số cố định e dài hơn thì e tăng số 6 đó lên thôi ^^. e vẫn hiểu được bản chất nhưng dùng hàm thì e ko hiểu các hàm ấy lắm :( muốn học mà khó quá ko biết bắt đầu từ đâu đi nhờ mãi cũng ngại

Hề hề hề,

Để hiểu các hàm, bạn cần có một chút tiếng ANh, sau đó chui vào Help của CAD để đọc rồi ứng dụng thử là vỡ ào ào, Hơn lũ miền trung ấy chứ. Hãy cố lên, Học được 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
3 phút trước, phamthanhbinh cho biết:

Hề hề hề,

Để hiểu các hàm, bạn cần có một chút tiếng ANh, sau đó chui vào Help của CAD để đọc rồi ứng dụng thử là vỡ ào ào, Hơn lũ miền trung ấy chứ. Hãy cố lên, Học được mà.

Bác có riêng cái file help của cad được dịch sang tiếng việt không ạ. giống như excel e cũng có nó dịch sang tiếng việt nên dùng nó dễ hơn e nghĩ hàm cad nó cũng giống hàm của excel thô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
10 phút trước, timmaimotnguoi cho biết:

Bác có riêng cái file help của cad được dịch sang tiếng việt không ạ. giống như excel e cũng có nó dịch sang tiếng việt nên dùng nó dễ hơn e nghĩ hàm cad nó cũng giống hàm của excel thôi

Hề hề hề,

Tài liệu tiếng Việt về lisp cũng có nhiều đây chứ. Có điều cần chịu khó tìm trên mạng là ra. Mình vì lười và dốt IT nên cứ đọc trong Help cho nó..... điên nặng thô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
2 phút trước, phamthanhbinh cho biết:

Hề hề hề,

Tài liệu tiếng Việt về lisp cũng có nhiều đây chứ. Có điều cần chịu khó tìm trên mạng là ra. Mình vì lười và dốt IT nên cứ đọc trong Help cho nó..... điên nặng thôi mà

:) Đúng là không thầy đố mày làm nên rồi đâ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
7 phút trước, phamthanhbinh cho biết:

Hề hề hề,

Tài liệu tiếng Việt về lisp cũng có nhiều đây chứ. Có điều cần chịu khó tìm trên mạng là ra. Mình vì lười và dốt IT nên cứ đọc trong Help cho nó..... điên nặng thôi mà

Bác có facebook cho e xin với :) gạ làm quen 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
4 phút trước, timmaimotnguoi cho biết:

Bác có facebook cho e xin với :) gạ làm quen hề hề hề

Hề hề hề,

Mặt thì có mà sách thì không. Cho nên cái sách mặt chỉ có nhõn một nửa.....

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
6 phút trước, phamthanhbinh cho biết:

Hề hề hề,

Mặt thì có mà sách thì không. Cho nên cái sách mặt chỉ có nhõn một nửa.....

Hề Hề Hề

Kiếm được thầy giỏi cũng khó nhỉ :) bác vui lòng tìm facebook hoặc zalo số này cho e với nhá 0988 705 579 ^^ 

 

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
2 phút trước, timmaimotnguoi cho biết:

Hề Hề Hề

Kiếm được thầy giỏi cũng khó nhỉ :) bác vui lòng tìm facebook hoặc zalo số này cho e với nhá 0988 705 579 ^^ 

 

Hề hề hề,

OK xa lem, thầy dốt thì sẵn , nhưng quan trọng là trò phải giỏi thôi. Trò mà giỏi thì thầy được ăn theo chớ thầy có giỏi cũng chả được cái chi chi đâ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
17 phút trước, phamthanhbinh cho biết:

Hề hề hề,

OK xa lem, thầy dốt thì sẵn , nhưng quan trọng là trò phải giỏi thôi. Trò mà giỏi thì thầy được ăn theo chớ thầy có giỏi cũng chả được cái chi chi đâu......

Hề Hề

Thanks thầy Bình trước. trái đất tròn mà bác bình biết đâu em và bác va vào nhau thì sao hehe. e dốt lắm được cái hay cãi thầy thô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

@timmaimotnguoi: 

Bạn có thể nghiên cứu thêm hàm sau : 


(defun tachchuoi (str / str1)

(list (setq str1  (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" str))

            (vl-string-left-trim str1 str)

)

)

test: 

Command: (TACHCHUOI "BH-BV-02")
("BH-BV-" "02")

Command: (TACHCHUOI "BH-02")
("BH-" "02")

Command: (TACHCHUOI "BH-1")
("BH-" "1")

Command: (TACHCHUOI "BH-100")
("BH-" "100")

 

 

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
Kịp thời}}, Tue_NV cho biết:

@timmaimotnguoi: 

Bạn có thể nghiên cứu thêm hàm sau : 

 



 
  • cadvietlisp.lsp
    lisp help
  •  


(defun tachchuoi (str / str1)

(list (setq str1  (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" str))

            (vl-string-left-trim str1 str)

)

)

 

test: 

Command: (TACHCHUOI "BH-BV-02")
("BH-BV-" "02")

Command: (TACHCHUOI "BH-02")
("BH-" "02")

Command: (TACHCHUOI "BH-1")
("BH-" "1")

Command: (TACHCHUOI "BH-100")
("BH-" "100")

 

 

Anh Tuệ cho e hỏi: hàm kia là nó tách text với số riêng ra luôn à 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

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

×