Đến nội dung


Hình ảnh
* * * - - 8 Bình chọn

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


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#201 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 30 September 2009 - 05:39 PM

Cảm ơn bác gia_bach. như vậy là đủ rồi. Điều em muốn ở đây không phải là thống kê tên chủ trên BĐĐC mà là đoạn code tự động lấy Text theo Layer để gán vào biến từ đó xử lý biến này theo ý mình.

Cảm ơn TRUNGNGAMY đã quan tâm. Đúng là trên BDDC không có số điện thoại hay gì gì đó, còn BDDC thì mình hiểu rõ vì mình làm BDDC chính quy bạn ah. Trên thực tế chẳng có ai đi thống kê tên chủ như trên bởi vì BDDC được thành lập bằng Microstation + Famis, khi Export sang AutoCAD không tương thích Font nên các chữ không sử dụng được. Hơn nữa đã có sổ địa chính, sổ mục kê ... thống kê đầy đủ rồi.

Mình kg hiểu ý bạn. Nếu bạn đã có file BĐĐC hoàn chỉnh trên Famis và các file dữ liệu kèm theo thì việc của bạn có vẻ thừa. Nếu trên Famis bạn đã đọc đc tiếng Việt thì khi chuyển sang cad, bạn chỉ cần đổi font là đc rồi. Còn cái danh sách số thửa, tên chủ, địa chỉ, bạn có thể sử dụng trực tiếp file của BĐĐC hoặc nếu cần xử lý thì cũng xử lý trên các file này
  • 1

#202 moihoclisp

moihoclisp

    biết zoom

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

Đã gửi 30 September 2009 - 05:50 PM

Mình kg hiểu ý bạn. Nếu bạn đã có file BĐĐC hoàn chỉnh trên Famis và các file dữ liệu kèm theo thì việc của bạn có vẻ thừa. Nếu trên Famis bạn đã đọc đc tiếng Việt thì khi chuyển sang cad, bạn chỉ cần đổi font là đc rồi. Còn cái danh sách số thửa, tên chủ, địa chỉ, bạn có thể sử dụng trực tiếp file của BĐĐC hoặc nếu cần xử lý thì cũng xử lý trên các file này

Ý mình ở đây không phải là viết cái lisp để làm trên BDDC mà là đọan Code tự động lấy các text trên 1 Layer nào đó gán vào biến để xử lý. Cái File mình Up lên chỉ là ví dụ để dễ hình dung thôi
  • 0

#203 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 30 September 2009 - 06:43 PM

Ý mình ở đây không phải là viết cái lisp để làm trên BDDC mà là đọan Code tự động lấy các text trên 1 Layer nào đó gán vào biến để xử lý. Cái File mình Up lên chỉ là ví dụ để dễ hình dung thôi

Chào bác moihoclisp,
Mình không hiểu rõ lắm ý của bạn, nhưng nếu chỉ là việc lấy tập hợp các text trên một layer thì bạn có thể sử dụng hàm ssget với tham số "x" và các filter list là ok mà.
Ví dụ:
(setq tenlayer (gestring "\n Hay nhap ten layer chua text"))
(setq ss (ssget "x" (list ( 0. "TEXT") (cons 8 tenlayer))))

Như vậy bạn sẽ có tập ss bao gồm tất cả các text trên layer có tên mà bạn đã chọn. Từ đó để lấy riêng mỗi text ra bạn có thể sử dụng các vòng lặp foreach hay while hay if tùy ý bạn và tha hồ chặt chém nó.

Bạn hãy thử xem có đúng với cái ý của bạn không nhé.
Xin lỗi bạn nếu mình hiểu chưa đúng cái bạn cần.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#204 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 30 September 2009 - 08:22 PM

Đúng rồi Thaistreets!
Mình thiết kết trắc ngang nhưng khi xuất qua cad rồi mà có một số thay đổi nên cao độ thiết kế tại một số điểm trên mặt cắt bị sai. Nhưng cao độ thiết kế tại tim đường (của mỗi mặt cắt) thì vẫn đúng. Nên mình muốn dựa vào cao độ thiết kế tại tim đường của mỗi mặt cắt để tình lại cao độ tại các điểm bị sai.
Cảm ơn Thaistreets đã giúp đỡ!

Chiều nay em bận quá, giờ mới post lên cho bác được.
Lisp của bác đây ạ:
- Pick điểm tim trắc ngang -> Pick chọn text cao độ tương ứng của tim
- Pick các điểm cần lấy cao độ thiết kế -> Pick chọn text để ghi cao độ điểm đó. -> tiếp tục pick các điểm khác... Enter để kết thúc.

(defun DXF (code elist) (cdr (assoc code elist)))
(prompt"\n[cmd : CTN] - GHI CAO DO TRAC NGANG\n")
(defun c:ctn ()
(command "Undo" "BEGIN")
(setq CMLAST (getvar "cmdecho"))
(setq OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 0)
(setvar "cmdecho" 0)
(command "osmode" 1)
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien") "end")) (print)
(setq y0 (cadr pt0))
(setq ed (entget (car (entsel "\nChon text cao do tim: "))))
(setq H0 (read (DXF 1 ed)))
(command "osmode" 4335)
(setq pt (getpoint "\nDiem tra cao do: "))
(While (/= pt nil)
(setq y (- (cadr pt) y0 (- H0)) out 0)
(while (= out 0)
(setq res (entsel "\n Chon text ghi cao do"))
(if res
(progn
(setvar "dimzin" 0)
(entmod (subst (cons 1 (rtos y 2 2)) (assoc 1 (entget (car res))) (entget (car res))))
(setq out 1)
);progn
);if
);while
(setvar "DIMZIN" DZ)
(command "osmode" 4335)
(setq pt (getpoint "\nDiem chen: "))
);while
(setvar "OSMODE" OSLAST)
(setvar "ORTHOMODE" OT)
(setvar "cmdecho" CMLAST)
(prompt"\n[GHI CAO DO TREN TRAC NGANG] by Thaistreetz - huuthais@yahoo.com\n")
(command "Undo" "End")
(princ)
);end
;---------------------------------------------------------------

  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#205 moihoclisp

moihoclisp

    biết zoom

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

Đã gửi 01 October 2009 - 12:19 AM

Chào bác moihoclisp,
Mình không hiểu rõ lắm ý của bạn, nhưng nếu chỉ là việc lấy tập hợp các text trên một layer thì bạn có thể sử dụng hàm ssget với tham số "x" và các filter list là ok mà.
Ví dụ:
(setq tenlayer (gestring "\n Hay nhap ten layer chua text"))
(setq ss (ssget "x" (list ( 0. "TEXT") (cons 8 tenlayer))))

Như vậy bạn sẽ có tập ss bao gồm tất cả các text trên layer có tên mà bạn đã chọn. Từ đó để lấy riêng mỗi text ra bạn có thể sử dụng các vòng lặp foreach hay while hay if tùy ý bạn và tha hồ chặt chém nó.

Bạn hãy thử xem có đúng với cái ý của bạn không nhé.
Xin lỗi bạn nếu mình hiểu chưa đúng cái bạn cần.

Đúng ý em rồi bác ah. nhưng em viết y như vậy mà chạy thử không được
(defun c:gan (/ hoten diachi sdthoai)
(setq hoten(ssget "X"(list (cons 0 "Text")(cons 8 "tchu"))))
(setq diachi(ssget "X"(list(cons 0 "Text")(cons 8 "dchi"))))
(setq sdthoai(ssget "X"(list(cons 0 "Text")(cons 8 "dthoai"))))
(princ hoten ); in thử trên dòng command xem có được không
)

Trên bản vẽ đã có các text thuộc các layer trên. (giả sử mỗi Layer chỉ có 1 text)
Bác xem thử dùm em nhé. Bác thông cảm kiến thức lisp của em đúng như tên em vậy.
  • 0

#206 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 01 October 2009 - 12:31 AM

Đúng ý em rồi bác ah. nhưng em viết y như vậy mà chạy thử không được
(defun c:gan (/ hoten diachi sdthoai)
(setq hoten(ssget "X"(list (cons 0 "Text")(cons 8 "tchu"))))
(setq diachi(ssget "X"(list(cons 0 "Text")(cons 8 "dchi"))))
(setq sdthoai(ssget "X"(list(cons 0 "Text")(cons 8 "dthoai"))))
(princ hoten ); in thử trên dòng command xem có được không
)

Trên bản vẽ đã có các text thuộc các layer trên. (giả sử mỗi Layer chỉ có 1 text)
Bác xem thử dùm em nhé. Bác thông cảm kiến thức lisp của em đúng như tên em vậy.

Ngay từ đầu bạn đưa đoạn code này lên có phải nhanh hơn kg. Chẳng qua bạn viết sai cú pháp thôi
(defun c:gan( / hoten diachi sdthoai)
(setq hoten (ssget "X" (list (cons 0 "Text") (cons 8 "tchu"))))
(setq diachi (ssget "X" (list (cons 0 "Text") (cons 8 "dchi"))))
(setq sdthoai (ssget "X" (list (cons 0 "Text") (cons 8 "dthoai"))))
(princ hoten); in thử trên dòng command xem có được không
)

Câu lệnh (princ hoten) kg cho bạn thấy text mà chỉ thấy một tập hợp chọn
  • 0

#207 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 01 October 2009 - 08:01 AM

Chiều nay em bận quá, giờ mới post lên cho bác được.
Lisp của bác đây ạ:
- Pick điểm tim trắc ngang -> Pick chọn text cao độ tương ứng của tim
- Pick các điểm cần lấy cao độ thiết kế -> Pick chọn text để ghi cao độ điểm đó. -> tiếp tục pick các điểm khác... Enter để kết thúc.


(defun DXF (code elist) (cdr (assoc code elist)))
(prompt"\n[cmd : CTN] - GHI CAO DO TRAC NGANG\n")
(defun c:ctn ()
(command "Undo" "BEGIN")
(setq CMLAST (getvar "cmdecho"))
(setq OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 0)
(setvar "cmdecho" 0)
(command "osmode" 1)
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien") "end")) (print)
(setq y0 (cadr pt0))
(setq ed (entget (car (entsel "\nChon text cao do tim: "))))
(setq H0 (read (DXF 1 ed)))
(command "osmode" 4335)
(setq pt (getpoint "\nDiem tra cao do: "))
(While (/= pt nil)
(setq y (- (cadr pt) y0 (- H0)) out 0)
(while (= out 0)
(setq res (entsel "\n Chon text ghi cao do"))
(if res
(progn
(setvar "dimzin" 0)
(entmod (subst (cons 1 (rtos y 2 2)) (assoc 1 (entget (car res))) (entget (car res))))
(setq out 1)
);progn
);if
);while
(setvar "DIMZIN" DZ)
(command "osmode" 4335)
(setq pt (getpoint "\nDiem chen: "))
);while
(setvar "OSMODE" OSLAST)
(setvar "ORTHOMODE" OT)
(setvar "cmdecho" CMLAST)
(prompt"\n[GHI CAO DO TREN TRAC NGANG] by Thaistreetz - huuthais@yahoo.com\n")
(command "Undo" "End")
(princ)
);end
;---------------------------------------------------------------

Cảm ơn Thaistreets! Đúng cái mình cần rồi, Lisp tốt lắm!
  • 0
Học học nữa học mãi.
Đúp học lại!

#208 quangktw

quangktw

    Chưa sử dụng CAD

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

Đã gửi 01 October 2009 - 11:28 AM

có thể chỉnh phím esc thành phím "chuột phải" được ko ? mình ít khi dùng chuột phải.mà ko muốn với tay lên phím esc (lười). giúp mình với hay.thank truớc
  • 0

#209 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 458 (tốt)

Đã gửi 02 October 2009 - 11:53 AM

Chào các bác,
Vừa rồi có tìm thấy 1 cái ứng dụng, của lệnh ATTI
http://www.cadviet.c...es/2/sannen.rar
http://www.cadviet.c...s/2/control.rar (phải apload cả 2 file mới dùng được)

Vì là file VLX, trong đó lại có rất nhiều ứng dụng, e dùng cái phần mềm để biến thành file lisp, chỉ để tách 1 ứng dụng lệnh ATT thôi
http://www.cadviet.c...files/2/1_2.rar
http://www.cadviet.com/upfiles/2/2.rar
Khổ nỗi, chỉnh sửa mãi mà không được vừa ý
đây là file sau khi biên dịch, nhờ các bác sửa dùm để có lệnh ATTI như file gốc
Trân thành cảm ơn!

Các bác ơi, giúp em với!
  • 0
Hãy ước cho trọn 1 ước mơ!

#210 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 02 October 2009 - 12:34 PM

Đúng ý em rồi bác ah. nhưng em viết y như vậy mà chạy thử không được
(defun c:gan (/ hoten diachi sdthoai)
(setq hoten(ssget "X"(list (cons 0 "Text")(cons 8 "tchu"))))
(setq diachi(ssget "X"(list(cons 0 "Text")(cons 8 "dchi"))))
(setq sdthoai(ssget "X"(list(cons 0 "Text")(cons 8 "dthoai"))))
(princ hoten ); in thử trên dòng command xem có được không
)

Trên bản vẽ đã có các text thuộc các layer trên. (giả sử mỗi Layer chỉ có 1 text)
Bác xem thử dùm em nhé. Bác thông cảm kiến thức lisp của em đúng như tên em vậy.

Chào bạn moihoclisp,
Vì bạn mới học lisp nên bạn nên chú ý về cú pháp của các hàm lisp ngay từ đầu và các mã DXF của đối tượng bạn nhé.
1/- Bất cứ hàm lisp nào thì giữa các tên hàm, đối số , tham số và các biến đều phải có một khoảng trắng bạn ạ. Bạn đừng làm liền tù tì như trên mà có khi lisp nó chả phân biệt được bạn định bảo nó làm gì bạn nhé.
2/- Với mã DXF là 0 thì nó chỉ tên loại đối tượng trên bản vẽ và tên này luôn luôn là một chuỗi text in hoa.
Với mã DXF là 8 thì nó chỉ tên lớp chứa đối tượng và tên lớp có thể là chữ hoa hay chữ thường tùy ý bạn nhưng phải đúng với tên đã dùng trên bản vẽ.

Do vậy các hàm trên của bạn nên viết lại như sau:
(defun c:gan (/ hoten diachi sdthoai)
(setq hoten (ssget "X" (list (cons 0 "TEXT") (cons 8 "tchu"))))
(setq diachi (ssget "X" (list (cons 0 "TEXT") (cons 8 "dchi"))))
(setq sdthoai (ssget "X" (list (cons 0 "TEXT") (cons 8 "dthoai"))))
(princ hoten ); in thử trên dòng command tên tập chọn trong acad của biến hoten
)


Nếu bạn muốn in ra nội dung các text trong tập chọn này bạn có thể thêm vào phía trước dấu ngoặc kết thúc hàm defun như sau:
(setq i 0
a (sslength hoten))
(while (< i a)
(setq ent (ssname hoten i)
txt (cdr (assoc 1 (entget ent))))
(princ (strcat "" txt ""))
(setq i (1+ i))
)

Chúc bạn thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#211 saudong102

saudong102

    biết pan

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

Đã gửi 02 October 2009 - 09:28 PM

các bác cho em xin một lisp đơn giản hơn dùng cho việc điền kích thước vào nhiều tuyến cống trên một mặt bằng
1> lisp có tác dụng : điền một text song song với đường pl ( spl và line nữa càng tốt ) tại đúng điểm kích vào đường pl đó ( giáp tuyến với đường pl ), chiều của text theo chiều đường pl, cách đường pl một khoảng nhỏ
2> lisp điền một BLOCK song song với đường pl tại đúng điểm kích chọn đường pl đó ( giáp tuyến với đường pl ), block có thể được định nghĩa từ trước, block sau khi điền cách đường pl một khoảng được định nghĩa từ trước
em đang phải vẽ rất nhiều loại này, dùng các lệnh copy và rote, ed text rất mất thời gian, các bác giúp em với
  • 0

#212 Xaydung_KT

Xaydung_KT

    Chưa sử dụng CAD

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

Đã gửi 02 October 2009 - 09:39 PM

Bác nào có lisp thống kê số lượng dầm, cột cho tôi xin với nhé, thanks
  • 0

#213 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 03 October 2009 - 07:56 PM

Chào các anh chị trên Diễn đàn! Chúc mọi người có một trung thu ấm áp bên gia đình và người thân!
Hôm nay em muốn nhờ các anh, chị viết giùm em 2 lisp như sau:

1. Em cần 1 lisp giống với lisp anh Tue_NV và Thaistreetz đã viết giúp em ở Bài viết số 2636 và 2637 ở topic này .
Nhưng khác như sau:
+ Nhập lệnh.
+ Nhập tiền tố, hoặc hâu tố. Ví dụ: P.
+ Nhập số bắt đầu (từ bàn phím), ví dụ số 9.
+ Nhập khoảng cách (độ tăng, giảm), ví dụ 1.
+ Dùng chuột pick vào 1 điểm bất kỳ, ở điểm đó sẽ xuất hiện text P.9.
+ Màn hình hỏi nhập góc quay của text, có thể lựa chọn góc quay bằng chuột.
+ Pick vào điểm thứ 2, điểm đó xuất hiện text P.10, pick vào điểm thứ 3, ở điểm đó xuất hiện text P.11 ...

2. Em muốn xin 1 lisp thống kê text. Cụ thể như sau:
+ Nhập lệnh.
+ Chọn vị trí lập bảng thống kê.
+ Chọn các text cần sắp xếp. (các text này có nội dung bất kỳ, góc quay bất kỳ và thuộc các layer bất kỳ).
+ Sau khi enter (hoặc space), các text sẽ được copy ra một vị trí khác, sắp xếp thành hàng ngang (song song với Ox).
+ Tiếp tục enter, quay lại lệnh, chọn các text cần sắp xếp, các text cũng được copy và sắp xếp vào vị trí ngay dưới hàng text phía trên.
...
Rất cảm ơn và mong được giúp đỡ!
  • 0
http://khuyen.space

#214 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1433 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 04 October 2009 - 07:57 AM

................................
2. Em muốn xin 1 lisp thống kê text. Cụ thể như sau:
+ Nhập lệnh.
+ Chọn vị trí lập bảng thống kê.
+ Chọn các text cần sắp xếp. (các text này có nội dung bất kỳ, góc quay bất kỳ và thuộc các layer bất kỳ).
+ Sau khi enter (hoặc space), các text sẽ được copy ra một vị trí khác, sắp xếp thành hàng ngang (song song với Ox).
+ Tiếp tục enter, quay lại lệnh, chọn các text cần sắp xếp, các text cũng được copy và sắp xếp vào vị trí ngay dưới hàng text phía trên.
...
Rất cảm ơn và mong được giúp đỡ!

Bạn nói rõ qui luật sắp xếp các text thành hàng ngang:
- thứ tự sắp xếp Text ? các Text cách đều nhau 1 khoảng bằng hằng số ?
- các Text nối với nhau thành 1 Text ?
Bạn chạy thử Lisp này :
(defun c:sapxep (/ dsach pt pt1 ss ten txtsiz)
(setq pt (getpoint "\nDiem dat Bang thong ke Text:" )
txtsiz (* (getvar "dimtxt")(getvar "dimscale")) )
(princ "\nChon Text can sap xep :")
(while (setq ss (ssget (list (cons 0 "Text"))))
(setq dsach (list) pt1 pt)
(foreach e (mapcar 'entget (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(setq ten (cdr (assoc 1 e))
dsach (append (list ten) dsach) )
)
(foreach ten dsach
(Make_Text_bl pt1 ten txtsiz)
(setq pt1 (polar pt1 0 (* 10 txtsiz)))
)
(setq pt (polar pt (/ pi -2) (* 1.5 txtsiz)))
(princ "\nChon Text can sap xep :")
)
(princ)
)

(defun Make_Text_bl(pt val TextSize)
(entmake (list '(0 . "TEXT")
(cons 10 pt)
(cons 40 TextSize)
(cons 1 val)
(cons 7 (getvar "TEXTSTYLE"))
'(71 . 0)
'(72 . 0)
'(73 . 1)
(cons 11 pt))))

  • 1

#215 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 04 October 2009 - 08:55 AM

Bạn nói rõ qui luật sắp xếp các text thành hàng ngang:
- thứ tự sắp xếp Text ? các Text cách đều nhau 1 khoảng bằng hằng số ?
- các Text nối với nhau thành 1 Text ?

Rất cảm ơn anh gia_bach!
Lisp của anh đã gần đúng với mong muốn của em. Chỉ còn một điểm, nhờ anh sửa hộ như sau:
Lisp của anh sắp xếp text được chọn theo chiều từ phải sang trái, nhưng em muốn text được sắp xếp theo chiều từ trái sang phải.
Thêm nữa: các text không cần nối với nhau thành 1 text.

Có lẽ để anh và mọi người hiểu rõ hơn vì sao em cần lisp này, em xin mô tả như sau:
Em cần thống kê tên nút, tên ống, chiều dài - đường kính ống và cao độ tại nút trong một sơ đồ mạng lưới để nhập số liệu vào Excel và Epanet. (Chiều dài ống em đã đo bằng chính lisp Dinfo.lsp của anh gia_bach).
Vì các ống và các text sắp xếp không theo trật tự nào nên nếu em cứ zoom đi zoom lại bản vẽ để xem text và chép vào giấy thì sẽ lâu hơn nếu có một lisp giúp em sắp xếp chúng thành hàng trước khi chép vào giấy.
Đây là file mô tả:
http://www.cadviet.c...cap_nuock_1.dwg
Cảm ơn anh đã giúp đỡ!
  • 0
http://khuyen.space

#216 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 04 October 2009 - 11:15 AM

......
1. Em cần 1 lisp giống với lisp anh Tue_NV và Thaistreetz đã viết giúp em ở Bài viết số 2636 và 2637 ở topic này .
Nhưng khác như sau:
+ Nhập lệnh.
+ Nhập tiền tố, hoặc hâu tố. Ví dụ: P.
+ Nhập số bắt đầu (từ bàn phím), ví dụ số 9.
+ Nhập khoảng cách (độ tăng, giảm), ví dụ 1.
+ Dùng chuột pick vào 1 điểm bất kỳ, ở điểm đó sẽ xuất hiện text P.9.
+ Màn hình hỏi nhập góc quay của text, có thể lựa chọn góc quay bằng chuột.
+ Pick vào điểm thứ 2, điểm đó xuất hiện text P.10, pick vào điểm thứ 3, ở điểm đó xuất hiện text P.11 ...
....

Em dùng Lisp này thử xem nhé :

(defun c:nhaplenh(/ oldim ans tto hto so ang delta tp so cao p)
(setq oldim (getvar "Dimzin"))
(setvar "Dimzin" 0)
(initget "T H")
(setq ans (getkword "\n Nhap tien to hoac hau to :"))
(if (= ans "T")
(progn
(if (not ttoo) (setq ttoo " "))
(setq tto (getstring (strcat "\n Nhap tien to <" ttoo "> :")))
(if (not tto) (setq tto ttoo) (setq ttoo tto))
)
)

(if (= ans "H")
(progn
(if (not htoo) (setq htoo " "))
(setq hto (getstring (strcat "\n Nhap hau to <" htoo "> :")))
(if (not hto) (setq hto htoo) (setq htoo hto))
)
)

(if (not soo) (setq soo 1))
(setq so (getreal (strcat "\n Nhap so bat dau <" (rtos soo 2 2) "> :")))
(if (not so) (setq so soo) (setq soo so))


(if (not deltao) (setq deltao 1))
(setq delta (getreal (strcat "\gia so <" (rtos deltao 2 2) "> :")))
(if (not delta) (setq delta deltao) (setq deltao delta))

(if (not tpo) (setq tpo 0))
(setq tp (getint (strcat "\n So chu so thap phan <" (itoa tpo) "> :")))
(if (not tp) (setq tp tpo) (setq tpo tp))
(setq cao (getdist "\n Chon chieu cao Text :"))

(if (= ans "T")
(progn
(while (setq p (getpoint "\n Chon diem dat Text :"))
(if (not ango) (setq ango 0))
(setq ang (getangle (strcat "\n Chon goc quay cua Text <" (rtos (/ (* ango 180) pi) 2 0) "> :")))
(if (not ang) (setq ang ango) (setq ango ang))
(wtxt (strcat tto (rtos so 2 tp)) p ang cao)
(setq so (+ so delta))
);while
);progn

(progn
(while (setq p (getpoint "\n Chon diem dat Text :"))

(if (not ango) (setq ango 0))
(setq ang (getangle (strcat "\n Chon goc quay cua Text <" (rtos (/ (* ango 180) pi) 2 0) "> :")))
(if (not ang) (setq ang ango) (setq ango ang))

(wtxt (strcat (rtos so 2 tp) hto) p ang cao)
(setq so (+ so delta))
);while
);progn
);if

(setvar "Dimzin" oldim)
(princ)
)
;
(defun wtxt (txt p ang h / sty)
(setq sty (getvar "textstyle"))
(entmake (list (cons 0 "TEXT") (cons 7 sty)
(cons 1 txt) (cons 10 p) (cons 11 p)
(cons 72 0) (cons 73 1) (cons 50 ang)
(cons 40 h) (cons 41 1))
)
)

Đường Link mà svba gửi ở bài viết số 242 bị lỗi không down load được. Em xem lại đường Link nhé
  • 1

#217 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 04 October 2009 - 11:30 AM

Cảm ơn anh Tue_NV!
Anh xem lại lisp trên giùm em, vì em đã thử appload lisp ở cả 2 máy khác nhau. Sau khi gõ NHAPLENH rồi Enter, không thấy xuất hiện gì cả, kể cả "Unknown command NHAPLENH" như nhiều lúc em vẫn thấy.
Em đã sửa lại đường link ở bài viết số 242. (Em nhận thấy lỗi là do em sử dụng trợ giúp bbcode).
Nhờ anh và mọi người xem giúp!
  • 0
http://khuyen.space

#218 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 458 (tốt)

Đã gửi 04 October 2009 - 12:51 PM

Chào các bác,
Vừa rồi có tìm thấy 1 cái ứng dụng, của lệnh ATTI
http://www.cadviet.c...es/2/sannen.rar
http://www.cadviet.c...s/2/control.rar (phải apload cả 2 file mới dùng được)

Vì là file VLX, trong đó lại có rất nhiều ứng dụng, e dùng cái phần mềm để biến thành file lisp, chỉ để tách 1 ứng dụng lệnh ATT thôi
http://www.cadviet.c...files/2/1_2.rar
http://www.cadviet.com/upfiles/2/2.rar
Khổ nỗi, chỉnh sửa mãi mà không được vừa ý
đây là file sau khi biên dịch, nhờ các bác sửa dùm để có lệnh ATTI như file gốc
Trân thành cảm ơn!
  • 0
Hãy ước cho trọn 1 ước mơ!

#219 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 04 October 2009 - 01:07 PM

Cảm ơn anh Tue_NV!
Anh xem lại lisp trên giùm em, vì em đã thử appload lisp ở cả 2 máy khác nhau. Sau khi gõ NHAPLENH rồi Enter, không thấy xuất hiện gì cả, kể cả "Unknown command NHAPLENH" như nhiều lúc em vẫn thấy.
Em đã sửa lại đường link ở bài viết số 242. (Em nhận thấy lỗi là do em sử dụng trợ giúp bbcode).
Nhờ anh và mọi người xem giúp!

Không hiểu tại sao em load không được.
Đây là Lisp gốc. Hãy chạy lại thử nhé :
http://www.cadviet.c.../2/nhaplenh.lsp
Còn file ở bài viết số 242 của svba thì Tue_NV có xem qua nhưng vẫn chưa hiểu được ý của svba

Có lẽ Svba nên nói rõ hơn ngay ở trong file, mô tả càng chi tiết càng tốt điều mà em muốn Lisp thực hiện.
Input -> process -> Output
Chú ý lưu file dưới dạng CAD2000 nhé
Chúc vui vẻ
  • 1

#220 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1433 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 04 October 2009 - 02:18 PM

Lisp của anh đã gần đúng với mong muốn của em. Chỉ còn một điểm, nhờ anh sửa hộ như sau:
....... em muốn text được sắp xếp theo chiều từ trái sang phải.

Chào svba1608
Đã cập nhật theo yêu cầu, bạn check lại nhé.
(defun c:sapxep (/ lst pt pt1 ss ten txtsiz)
(defun dxf (tag obj) (cdr (assoc tag obj)))
(setq pt (getpoint "\nDiem dat Bang thong ke Text:" )
txtsiz (* (getvar "dimtxt")(getvar "dimscale")) )
(princ "\nChon Text can sap xep :")
(while (setq ss (ssget (list (cons 0 "Text"))))
(setq pt1 pt)
(setq lst (vl-sort (mapcar 'entget (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
'(lambda (x y) (if (equal (car(setq x1 (dxf 10 x))) (car(setq y1 (dxf 10 y))))
(> (cadr x1) (cadr y1))
(< (car x1) (car y1))
))))
(foreach e lst
(setq ten (dxf 1 e))
(Make_Text_bl pt1 ten txtsiz)
(setq pt1 (polar pt1 0 (* 10 txtsiz)))
)
(setq pt (polar pt (/ pi -2) (* 2.0 txtsiz)))
(princ "\nChon Text can sap xep :")
)
(princ)
)

(defun Make_Text_bl(pt val TextSize)
(entmake (list '(0 . "TEXT")
(cons 10 pt)
(cons 40 TextSize)
(cons 1 val)
(cons 7 (getvar "TEXTSTYLE"))
'(71 . 0)
'(72 . 0)
'(73 . 1)
(cons 11 pt))))

  • 1