Đế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

#161 khaosat2009

khaosat2009

    biết lệnh offset

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

Đã gửi 24 September 2009 - 07:40 AM

Hình đã gửi Thật khó tin bạn là dân khảo sát đấy.
Paste to original coordnates bạn không biết ah? :cheers:

Ờ, việc ấy thì mình hiểu. Nhưng làm thủ công thôi. Mở file này copy và paste file kia với lệnh .Paste to original coordnates.
Nhưng ý mình là : Trong bản vẽ lớn đó, phải chia ra nhiều mảnh bản đồ với các khung hình chử nhật ( ví dụ như 4 khung ) Nhờ bạn giúp Lisp khi chọn vào vị trí khung 1 , thì sẻ thực hiện save đó với tên đặt mới và sẻ tự động cắt tất cà các đối tượng ngoài khung. Nghĩa là chì còn các đối đượng ở khung 1 đó. ta lần lược chọn tiếp.....
*** Nếu được cao siêu hơn, thì Lisp thực hiện yêu cầu phân khung theo chiều dài x rộng ...> tạo các lưới ô.
đánh số khung, như K1, K2,...
Phân mảnh......> thì tự động save file theo tên khung K1, k2 ... và cắt hết các đối tượng ngoài khung, Tạo lưới khung bản đồ.
Mục đích cuối của mình nhờ bạn và cấc anh giúp là thế đó.
rất mong được giúp đở.
  • 0

#162 moihoclisp

moihoclisp

    biết zoom

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

Đã gửi 24 September 2009 - 11:04 PM

Xin lỗi mình đã post bài này rồi nhưng không ai trả lời nên mình post lại mong các cao thủ giúp đỡ
trên bản vẽ có các text thuộc các layer khác nhau.
VD:
Họ tên ---------> layer: hten
Địa chỉ ---------> layer: dchi
số dt ---------> layer: dthoai
bây giờ em muốn cái Lisp khi chạy sẽ tự động gán text "Họ tên" vào biến hoten ; "Địa chỉ" vào biến diachi ; "số dt" -> biến sdthoai.
Thanks các Bác nhiều!
  • 0

#163 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 25 September 2009 - 01:43 PM

Xin lỗi mình đã post bài này rồi nhưng không ai trả lời nên mình post lại mong các cao thủ giúp đỡ
trên bản vẽ có các text thuộc các layer khác nhau.
VD:
Họ tên ---------> layer: hten
Địa chỉ ---------> layer: dchi
số dt ---------> layer: dthoai
bây giờ em muốn cái Lisp khi chạy sẽ tự động gán text "Họ tên" vào biến hoten ; "Địa chỉ" vào biến diachi ; "số dt" -> biến sdthoai.
Thanks các Bác nhiều!

Chào moihoclisp
Đúng là truớc đây tui có đọc đuợc 1 nôi dung yêu cầu tuơng tự, nhưng thực sự đọc đi đọc lại chẳng hiểu đuợc yêu cầu của bạn là gì !
Chắc mọi nguời cũng vậy thôi, không hiểu làm sao trả lời bạn đuợc.
Bạn có thể mô tả chi tiết hơn ?
Cách tốt nhất là đưa file có minh họa truớc và sau khi dùng LISP.
  • 0

#164 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 25 September 2009 - 04:09 PM

Chào moihoclisp
Đúng là truớc đây tui có đọc đuợc 1 nôi dung yêu cầu tuơng tự, nhưng thực sự đọc đi đọc lại chẳng hiểu đuợc yêu cầu của bạn là gì !
Chắc mọi nguời cũng vậy thôi, không hiểu làm sao trả lời bạn đuợc.
Bạn có thể mô tả chi tiết hơn ?
Cách tốt nhất là đưa file có minh họa truớc và sau khi dùng LISP.

ý bạn này chắc muốn tạo 1 danh sách trong đó mỗi phần tử gồm có 3 thành phần như trên đó mà.
  • 0

#165 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 25 September 2009 - 04:30 PM

- Bản vẽ A có một Text (gọi là nguồn)
- Bản vẽ B, C ... có rất nhiều text (gọi là đích) có các nội dung không giống nhau
- Sau khi thực hiện lệnh [chọn đối tượng nguồn >enter> chọn các đối tựong đích >enter> ]thì các đối tượng đích sẽ có nội dung của đối tượng nguồn.
(giống lệnh lisp match text trên diễn đàn nhưng cho dùng tổ hợp phím CTRL+Tab để chọn đối tượng trên bản vẽ khác)
Các tiền bối giúp em được không
  • 0

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#166 dvdcad

dvdcad

    biết vẽ arc

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

Đã gửi 27 September 2009 - 02:03 AM

Chào chandatn
Cập nhật Lisp chọn các đối tượng theo màu hay linetype
download here

;;;;;;;
Tôi thử lisp của bạn rồi
nhưng ko dc
khi tôi chọn đối tương có màu 6 chẳn hạn thì tất cảc các đối tượng có màu 6 phải chọn chứ đây lại thoat luôn ra
  • 0

#167 moihoclisp

moihoclisp

    biết zoom

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

Đã gửi 27 September 2009 - 04:04 PM

Chào moihoclisp
Đúng là truớc đây tui có đọc đuợc 1 nôi dung yêu cầu tuơng tự, nhưng thực sự đọc đi đọc lại chẳng hiểu đuợc yêu cầu của bạn là gì !
Chắc mọi nguời cũng vậy thôi, không hiểu làm sao trả lời bạn đuợc.
Bạn có thể mô tả chi tiết hơn ?
Cách tốt nhất là đưa file có minh họa truớc và sau khi dùng LISP.

Vậy mình UP bản vẽ và 1 đọan Lisp minh họa mong ban giabach giúp mình nhé. Thanks
http://www.cadviet.c...files/2/gan.rar
  • 0

#168 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 27 September 2009 - 05:35 PM

Xin bác Nguyen Hoanh và các cao thủ giúp em viết cái LISP thực hiện công việc sau:
http://www.cadviet.c...pfiles/2/cn.dwg

Chào trieubb!
Mình có xem file cad của bạn, đó là mặt cắt ngang, có phải là bạn làm bên cầu đường không? Bạn dùng chương trình gì chạy trắc nagng mà nó chẳng có thẳng hàng gì hết vậy? Mình cũng dùng nhiều chương trình mà chẳng có cái nào lại xuất ra kiểu như bạn cả. Mà hơn nữa bản vẽ của bạn có tới 1000 mặt cắt, không biết bạn có phóng đại lên không nữa. Mình làm đường mấy chục KM thì cũng phải chia hồ sơ ra nhiều đoạn nên mỗi File cũng không đến nỗi nhiều như thế. Bạn có thể up file của bạn lên để bác để mọi người tham khảo nhé. Hơn nữa lisp dùng để làm đi làm lại nhiều lần cho khỏi tốn nhiều thời gian, nếu công việc của bạn có nhiều bản vẽ như thế thì yêu cầu chứ có một file duy nhất thì bạn nên MOVE còn nhanh hơn thời gian viết lisp nhiều đó.
Mình chỉ góp ý không có ý gì khác mong ban tiếp thu nhé. Chúc bạn thành công!
  • 0
Học học nữa học mãi.
Đúp học lại!

#169 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 27 September 2009 - 07:06 PM

Vậy mình UP bản vẽ và 1 đọan Lisp minh họa mong ban giabach giúp mình nhé. Thanks
http://www.cadviet.c...files/2/gan.rar

(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 ", " diachi ", " sdthoai)
)
Xin phép lão tiền tiền bối giabach nha!
Có phải ý bạn là

TRUNGNGAMY Gửi vào Sep 25 2009, 16:0
bạn này chắc muốn tạo 1 danh sách trong đó mỗi phần tử gồm có 3 thành phần như trên đó mà.

hay ...
Bạn Up file chi có

NGUYỄN VĂN A

QUẬN 10-TP HCM

0909999999

và đọn code trên thì lão giabach chắc cũng không hiểu đâu :cheers:
  • 0

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#170 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 28 September 2009 - 09:54 AM

....
lão giabach chắc cũng không hiểu đâu :cheers:

To master_worse
he he : đồng ý với bạn là tui cũng có tí tuổi nhưng chưa đến độ lão đâu. <_<

Vậy mình UP bản vẽ và 1 đọan Lisp minh họa mong ban giabach giúp mình nhé. Thanks
http://www.cadviet.c...files/2/gan.rar

To moihoclisp
Như bạn master_worse nhận xét, file Upload của bạn không có ý nghĩa trong thực tế !
Tuy nhiên gửi bạn đoạn code tham khảo.
Lisp chọn tất cả các Text trên lớp tchu,dchi,dthoai -> in ra màn hình.
Coi chừng Tên ông này cắm nhầm địa chỉ bà kia. :cheers:
(defun c:gan (/ hoten diachi sdthoai DATABASE I LAY_NAME NOIDUNG)
(setq hoten (list) diachi(list) sdthoai (list) i 0)
; chon tat ca cac Text tren lop tchu,dchi,dthoai
(if (setq database (ssget "X" '((-4 . "< AND")(0 . "Text")(8 . "tchu,dchi,dthoai")(-4 . "AND >"))))
(foreach e (mapcar 'entget (mapcar 'cadr (ssnamex database)))
(setq lay_name (cdr (assoc 8 e));ten lop
noidung (cdr (assoc 1 e)))
(cond
((= lay_name "TCHU") (setq hoten (append (list noidung) hoten)))
((= lay_name "DCHI") (setq diachi (append (list noidung) diachi)))
((= lay_name "DTHOAI") (setq sdthoai (append (list noidung) sdthoai)))
)
)
)
(princ "\nBang thong ke :")
(repeat (min (length hoten) (length diachi) (length diachi))
(princ (strcat "\n" (nth i hoten) " " (nth i diachi) " " (nth i sdthoai)) )
(setq i (1+ i))
)
(princ)
)

  • 0

#171 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 28 September 2009 - 10:32 AM

;;;;;;;
Tôi thử lisp của bạn rồi
nhưng ko dc
khi tôi chọn đối tương có màu 6 chẳn hạn thì tất cảc các đối tượng có màu 6 phải chọn chứ đây lại thoat luôn ra

Tại dòng nhắc : Chon doi tuong mau :
-> bạn phải chọn đối tuợng có màu(color) mong muốn.
Có phải bạn đã nhập số 6 tại dòng nhắc này ?
  • 0

#172 thuyvan0210

thuyvan0210

    biết zoom

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

Đã gửi 28 September 2009 - 02:15 PM

Xin nhờ các bạn viết giúp mình đoạn lisp như sau:
- mình muốn tính tổng diện tích các region đang lựa chọn.
  • 0

#173 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 28 September 2009 - 02:42 PM

Xin nhờ các bạn viết giúp mình đoạn lisp như sau:
- mình muốn tính tổng diện tích các region đang lựa chọn.

Bạn chạy thử Lisp tính diện tích các region
(defun c:AreaR (/ cnt tot ss obj );Region Area
(vl-load-com)
(princ "\nChon doi tuong Region de tinh dien tich : ")
(if (setq ss (ssget '((0 . "REGION"))))
(progn
(setq cnt 0 tot 0)
(foreach e (mapcar 'vlax-ename->vla-Object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(if (vlax-property-available-p e 'Area)
(setq cnt (1+ cnt)
tot (+ tot (vla-get-Area e))
)))
(princ (strcat "\nTong dien tich cua "(itoa cnt) " Region la : " (rtos tot) ))
(if (and
(setq obj (entsel "\nChon text de ghi ket qua hay Enter de ket thuc."))
(setq obj (vlax-ename->vla-object (car obj)))
(eq (vlax-get obj 'ObjectName) "AcDbText")
)
(vla-put-TextString obj (rtos tot))
)
(princ)
)
(princ "\nKhong co doi tuong Region nao duoc chon." )
)
(princ)
)

  • 1

#174 moihoclisp

moihoclisp

    biết zoom

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

Đã gửi 28 September 2009 - 04:56 PM

To master_worse
he he : đồng ý với bạn là tui cũng có tí tuổi nhưng chưa đến độ lão đâu. <_<
To master_worse
Như bạn master_worse nhận xét, file Upload của bạn không có ý nghĩa trong thực tế !
Tuy nhiên gửi bạn đoạn code tham khảo.
Lisp chọn tất cả các Text trên lớp tchu,dchi,dthoai -> in ra màn hình.
Coi chừng Tên ông này cắm nhầm địa chỉ bà kia. :cheers:

(defun c:gan (/ hoten diachi sdthoai DATABASE I LAY_NAME NOIDUNG)
(setq hoten (list) diachi(list) sdthoai (list) i 0)
; chon tat ca cac Text tren lop tchu,dchi,dthoai
(if (setq database (ssget "X" '((-4 . "< AND")(0 . "Text")(8 . "tchu,dchi,dthoai")(-4 . "AND >"))))
(foreach e (mapcar 'entget (mapcar 'cadr (ssnamex database)))
(setq lay_name (cdr (assoc 8 e));ten lop
noidung (cdr (assoc 1 e)))
(cond
((= lay_name "TCHU") (setq hoten (append (list noidung) hoten)))
((= lay_name "DCHI") (setq diachi (append (list noidung) diachi)))
((= lay_name "DTHOAI") (setq sdthoai (append (list noidung) sdthoai)))
)
)
)
(princ "\nBang thong ke :")
(repeat (min (length hoten) (length diachi) (length diachi))
(princ (strcat "\n" (nth i hoten) " " (nth i diachi) " " (nth i sdthoai)) )
(setq i (1+ i))
)
(princ)
)

Cám ơn bác Giabach. Đúng là đoạn code trên khong có ý nghĩa trong thực tế nhưng em cần có nó để phát triển cái Lisp của em.
Ví dụ như trên bản đồ địa chính có các layer tên chủ, loại đất, diện tích bây giờ em muốn lập bảng thống kê gồm 1 cột tên chủ, 1 cột diện tích, 1 cột loại đất thì phải có đoạn code này. Mong bác giúp
Cái lisp của bác hình như còn lỗi gì đó. Nó chạy đến chỗ "bảng thống kê" rồi trở về dòng Command. Bác xem lại dùm em nhé.
  • 0

#175 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 28 September 2009 - 05:05 PM

Xin nhờ các bạn viết giúp mình đoạn lisp như sau:
- mình muốn tính tổng diện tích các region đang lựa chọn.

sao ko dùng lệnh UNI vậy bạn?
  • 0

#176 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 28 September 2009 - 05:53 PM

Cám ơn bác Giabach. Đúng là đoạn code trên khong có ý nghĩa trong thực tế nhưng em cần có nó để phát triển cái Lisp của em.
Ví dụ như trên bản đồ địa chính có các layer tên chủ, loại đất, diện tích bây giờ em muốn lập bảng thống kê gồm 1 cột tên chủ, 1 cột diện tích, 1 cột loại đất thì phải có đoạn code này. Mong bác giúp
Cái lisp của bác hình như còn lỗi gì đó. Nó chạy đến chỗ "bảng thống kê" rồi trở về dòng Command. Bác xem lại dùm em nhé.

Xin phép lão tiền bối gia_bach

(setq database (ssget "X" '((-4 . "< AND")(0 . "Text")(8 . "tchu,dchi,dthoai")(-4 . "AND >"))))
bỏ khoảng trắng chỗ in đậm

((= lay_name "tchu") (setq hoten (append (list noidung) hoten)))
((= lay_name "dchi") (setq diachi (append (list noidung) diachi)))
((= lay_name "dthoai") (setq sdthoai (append (list noidung) sdthoai)))

chỗ gạch dưới có phân biệt chữ hoa và chữ thường

Coi chừng Tên ông này cắm nhầm địa chỉ bà kia


------------------------------------------
PS: Cho hỏi làm sao để đưa tên lão tiền bối gia_bach vào sau chữ Trích dẫn
  • 0

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#177 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 29 September 2009 - 01:00 AM

PS: Cho hỏi làm sao để đưa tên lão tiền bối gia_bach vào sau chữ Trích dẫn

ý bạn fải chăng là thế này:

khụ khụ, tớ cũng có tý tuổi đấy, nhưng chưa già đâu nhá, liệu hồn :cheers:


  • 0

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


#178 thuyvan0210

thuyvan0210

    biết zoom

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

Đã gửi 29 September 2009 - 07:28 AM

Bạn chạy thử Lisp tính diện tích các region

(defun c:AreaR (/ cnt tot ss obj );Region Area
(vl-load-com)
(princ "\nChon doi tuong Region de tinh dien tich : ")
(if (setq ss (ssget '((0 . "REGION"))))
(progn
(setq cnt 0 tot 0)
(foreach e (mapcar 'vlax-ename->vla-Object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(if (vlax-property-available-p e 'Area)
(setq cnt (1+ cnt)
tot (+ tot (vla-get-Area e))
)))
(princ (strcat "\nTong dien tich cua "(itoa cnt) " Region la : " (rtos tot) ))
(if (and
(setq obj (entsel "\nChon text de ghi ket qua hay Enter de ket thuc."))
(setq obj (vlax-ename->vla-object (car obj)))
(eq (vlax-get obj 'ObjectName) "AcDbText")
)
(vla-put-TextString obj (rtos tot))
)
(princ)
)
(princ "\nKhong co doi tuong Region nao duoc chon." )
)
(princ)
)

Cảm ơn bạn nha. lisp đúng như mình mong muốn.
  • 0

#179 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 29 September 2009 - 07:42 AM

.................
Cái lisp của bác hình như còn lỗi gì đó. Nó chạy đến chỗ "bảng thống kê" rồi trở về dòng Command. Bác xem lại dùm em nhé.


Hiện nay thì codebox đang bị lỗi do hiểu dấu mở ngoặc là mã HTML. Nếu bác cách ra một dấu cách, ví dụ < or Enter to exit> thì không sao, bởi hệ thống nhận ra đó không phải là HTML .

Do lỗi codebox , bạn xóa một dấu cách chỗ in đậm
(setq database (ssget "X" '((-4 . "< AND")(0 . "Text")(8 . "tchu,dchi,dthoai")(-4 . "AND >"))))

PS: bạn nên Upload file Cad bản đồ địa chính có các layer tên chủ, loại đất, diện tích cần thống kê.
  • 0

#180 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 29 September 2009 - 08:21 AM

Các lão tiền bối cho hậu bối hỏi ngoài lề chút nha[]
To Thaistreetz

Trích dẫn(Lão tiền bối Gia Bách @ Sep 09 9999, 09:09)
khụ khụ, tớ cũng có tý tuổi đấy, nhưng chưa già đâu nhá, liệu hồn

làm sao được vậy???
  • 0

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)