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

#1 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 03 September 2009 - 06:03 PM

Đây là phần tiếp theo của topic Viết lisp theo yêu cầu, mời các bạn tiếp tục thảo luận.
  • 3

#2 kamezoko

kamezoko

    biết vẽ line

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

Đã gửi 03 September 2009 - 08:01 PM

em xin 1 lisp thực hiện như trong hình..
http://www.cadviet.c...iles/2/vd_3.dwg
em cám ơn nhiều... :s_big:
  • 0

#3 hnanal

hnanal

    biết zoom

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

Đã gửi 03 September 2009 - 09:59 PM

e xin 1 lisp lọc riêng số và chữ thuộc cùng 1layer, có các thuộc tính giống nhau. Đơn giản thế thôi ạ, xin các bro ra tay dùm
  • 2

#4 nvc

nvc

    biết pan

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

Đã gửi 03 September 2009 - 10:57 PM

chào nvc
......
2.Bạn chạy thử Lisp chọn các đối tượng cùng màu
Lisp chỉ chọn đối tuợng theo màu, việc copy, move, ChangeLayer , ... tùy bạn xử lý.
file: sbc.lsp
(defun c:sbc (/ ent col layers lay_lst filter ss);Select By Color
(defun get_layer(col / tbl lay_lst)
(setq tbl (tblnext "LAYER" T) lay_lst (list))
(while tbl
(if (= col (cdr (assoc 62 tbl)))
(setq lay_lst (cons (cdr(assoc 2 tbl)) lay_lst)) )
(setq tbl (tblnext "LAYER" ))
)
lay_lst
)
(if (setq ent (entsel "\nSelect object for color filter."))
(progn
(or (setq col (cdr(assoc 62 (entget (car ent)))))
(setq col (cdr (assoc 62
(tblsearch "layer"
(cdr (assoc 8 (entget (car ent)))))))); color is ByLayer, get layer color
)
(setq layers ""
lay_lst (get_layer col)) ; danh sach layer co mau "col"
(foreach lay lay_lst
(setq layers (strcat layers lay ",")))
(setq layers (substr layers 1 (1- (strlen layers)))); remove the last
(prompt (strcat "\n Chon doi tuong hay ENTER de chon tat ca doi tuong co color[ " (itoa col) " ]"))
(if layers ;; tao bo loc
(setq filter (append
(cons '(-4 . " )="" (list(cons="" 62="" col)))""> (list '(-4 . " )""> (cons 8 layers)
'(62 . 256) ; ByLayer
'(-4 . "AND>")
'(-4 . "OR>")
)))
(setq filter (list (cons 62 col)))
)
(sssetfirst nil)
(if (null (setq ss (ssget filter))) (setq ss (ssget "_X" filter)) )
(if (> (sslength ss) 0)
(progn
(prompt (strcat "\nChon duoc " (itoa (sslength ss))
" doi tuong co color[ " (itoa col) " ]"))
(sssetfirst nil ss)
))
))
(princ)
)

@ gia_bach
Bạn làm ơn xem lại lisp này hộ mình,khi load thì cad nhận nhưng khi sử dụng thì báo là :
function definition: CONS= và CAD không thực hiện lệnh.
Mình nghĩ chắc bị 1 lỗi nhỏ nào đấy.
Thank
  • 1

#5 hnanal

hnanal

    biết zoom

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

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

e xin 1 lisp lọc riêng số và chữ thuộc cùng 1layer, có các thuộc tính giống nhau. Đơn giản thế thôi ạ, xin các bro ra tay dùm


Mong các lisper ra tay giúp cho ạ, à có thêm chức năng chuyển số (hoặc chữ) sang layer khác thì càng tốt ạ. E muốn tách riêng 2 thứ để quản lý cho dễ ^^~
  • 0

#6 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 07 September 2009 - 09:00 AM

........
Bạn làm ơn xem lại lisp này hộ mình,khi load thì cad nhận nhưng khi sử dụng thì báo là :
function definition: CONS= và CAD không thực hiện lệnh.
Mình nghĩ chắc bị 1 lỗi nhỏ nào đấy.
Thank

Chào nvc
Do có lỗi trong Insert Code Box
Gửi bạn link dowload trực tiếp Lisp chọn các đối tượng cùng màu
download here
  • 1

#7 chandatn

chandatn

    biết pan

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

Đã gửi 07 September 2009 - 10:43 AM

Chào nvc
Do có lỗi trong Insert Code Box
Gửi bạn link dowload trực tiếp Lisp chọn các đối tượng cùng màu
download here



Tôi thấy ban viêt rất hay! bạn co the viet thêm phần chọn các đối tượng có cùng linetype ra nữa không?
  • 0

#8 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 07 September 2009 - 02:45 PM

Tôi thấy ban viêt rất hay! bạn co the viet thêm phần chọn các đối tượng có cùng linetype ra nữa không?

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

#9 Tuynh

Tuynh

    biết vẽ arc

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

Đã gửi 07 September 2009 - 03:45 PM

Chào Tuynh,
Bạn hãy tạo 1 ví dụ bảng excel chứa dữ liệu, gồm n cột, trong đó phải có 4 cột: tên node, X, Y, Z. Dữ liệu có hàng chục điểm như bạn nói hoặc nhiều hơn nữa. Upload lên, và Thiep sẽ gửi cho bạn 1 lisp tạo đường 3Dpolyline.
Còn ý tưởng 2: có phải bạn muốn nói thêm node trên polyline không? chứ các node tự động chuyển đến là sao?
Chỉ thêm text độ cao tại vị trí thêm node trên polyline hay thêm text toàn bộ các node của polyline?


  • 0

#10 chandatn

chandatn

    biết pan

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

Đã gửi 07 September 2009 - 05:32 PM

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


Cám ơn bạn đã phản hồi rất nhanh. Trình độ lisp cuả minh gà quá nên đọc vào nhưng ko hiểu được nhiều!
  • -1

#11 Tuynh

Tuynh

    biết vẽ arc

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

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

Chào bạn Tuệ bạn có lisp chuyển file số liệu thành đường 3d polyline rất hay, nhưng công việc của tớ rất nhàm chán là phải tạo đường 3d polyline thành đường 2d polyline từ nền hiện trạng khi công tác trắc địa tức là bản bình đồ hiện trạng họ đưa cho khi làm mặt cắt địa hình thì mình phải nhìn vào bản hiện trạng đó để sử lý số liệu tức là mình cần biến đường 2d p thành 3d p mà phải dựa vào số liệu bình đồ tức là số liệu cao độ để làm đường đứt gẫy địa hình các bạn viết các lisp trên cũng gần đúng ý mình rồi nhưng mình muốn các bạn tạo cho mình một lisp như thế này mình đưa bản vẽ lên:
http://www.cadviet.c.../drawing1_5.dwg
Cám ơn sự nhiệt tình của các bạn.
  • 0

#12 duongthanh85

duongthanh85

    biết vẽ pline

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

Đã gửi 07 September 2009 - 11:45 PM

Các huynh giúp đệ 1 cái Lisp như sau được không?
Trong file text: data.txt đệ định dạng như sau:

Diem 1 (tab) 1 (tab) 6 (tab) 0 (tab) 8 (tab) 0 (tab) 12
Diem 2 (tab) 1 (tab) 5 (tab) 0 (tab) 7 (tab) 5 (tab) 2
......

( (tab) ở hàng trên là dấu TAB để ngăn cách các giá trị)

Bây giờ em cần 1 LISP có tác dụng đọc từng hàng text trên, tìm trên toàn vùng chọn (hoặc trên toàn bản vẽ cũng được) Diem 1 và thay giá trị các text phía dưới lần lượt như hình minh họa.
(trong đó Diem 1 và các text phía dưới là các hàng của 1 Mtext)
  • 0
Dương Đình Thành


EDI.com.vn
Mobile : 0903.269.830
duongdinhthanh@edi.com.vn



Thiết kế thi công: Trạm biến áp, đường dây, cáp ngầm, hạ ngầm đường dây, điện tòa nhà, hệ điện thông minh ...

#13 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 08 September 2009 - 04:41 AM

Chào bạn Tuệ bạn có lisp chuyển file số liệu thành đường 3d polyline rất hay, nhưng công việc của tớ rất nhàm chán là phải tạo đường 3d polyline thành đường 2d polyline từ nền hiện trạng khi công tác trắc địa tức là bản bình đồ hiện trạng họ đưa cho khi làm mặt cắt địa hình thì mình phải nhìn vào bản hiện trạng đó để sử lý số liệu tức là mình cần biến đường 2d p thành 3d p mà phải dựa vào số liệu bình đồ tức là số liệu cao độ để làm đường đứt gẫy địa hình các bạn viết các lisp trên cũng gần đúng ý mình rồi nhưng mình muốn các bạn tạo cho mình một lisp như thế này mình đưa bản vẽ lên:
http://www.cadviet.c.../drawing1_5.dwg
Cám ơn sự nhiệt tình của các bạn.

Chào Tuynh
Code sau Tue_NV viết lại theo ý của bạn. Bạn chạy thử nhé :

(defun c:2d3d(/ curve pre i p lstdiem z lstpoint x ss oldos)
(vl-load-com)
(setvar "orthomode" 0)
(setvar "cmdecho" 0)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq curve (car(entsel "\n Pick chon POlyline 2D hoac Polyline 3D :")))
(setq pre (vlax-curve-getEndParam curve) i 0 lstdiem '() lstpoint '() ss (ssadd))
(setq cao (getdist "\n Chon chieu cao chu :"))

(while (<= i pre)
(setq p (vlax-curve-getPointAtParam curve i))
(setq lstdiem (append lstdiem (list p)))
(wtxt (rtos (caddr p) 2 2) p 0 cao)
(setq ss (ssadd (entlast) ss))
(setq i (1+ i))
)

(setq i 0)
(foreach x lstdiem
(setq z (getdist x (strcat "\n Nhap cao do cho diem nay <" (rtos (caddr x) 2 2) "> : ") ))
(setq lstpoint (append lstpoint (list(list (car x) (cadr x) z))))
(wtxt (rtos z 2 2) (list (car x) (cadr x) z) 0 cao)
(entdel (ssname ss i))
(setq i (1+ i))
)

(command "3dpoly")
(foreach y lstpoint (command y))
(command "")
(entdel curve)
(setvar "osmode" oldos)
(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 2) (cons 73 1) (cons 50 ang)
(cons 40 h) (cons 41 0.8))
)
)

:s_big:

Các huynh giúp đệ 1 cái Lisp như sau được không?
Trong file text: data.txt đệ định dạng như sau:

Diem 1 (tab) 1 (tab) 6 (tab) 0 (tab) 8 (tab) 0 (tab) 12
Diem 2 (tab) 1 (tab) 5 (tab) 0 (tab) 7 (tab) 5 (tab) 2
......

( (tab) ở hàng trên là dấu TAB để ngăn cách các giá trị)

Bây giờ em cần 1 LISP có tác dụng đọc từng hàng text trên, tìm trên toàn vùng chọn (hoặc trên toàn bản vẽ cũng được) Diem 1 và thay giá trị các text phía dưới lần lượt như hình minh họa.
(trong đó Diem 1 và các text phía dưới là các hàng của 1 Mtext)

@duongthanh85 : Bạn nên upload file .dwg và nói rõ hơn. Vì có thể mình chưa hiểu hết điều bạn nói
  • 1

#14 Tuynh

Tuynh

    biết vẽ arc

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

Đã gửi 08 September 2009 - 09:12 AM

Cám ơn Tuệ nhé lisp bạn chỉnh cho mình chạy ok thực sự cảm ơn sự nhiệt tình của Tuệ và các thành viên trong diễn đàn đã giúp đỡ mình lisp đó của bạn chạy đúng như ý tớ. Nhưng khi mình làm thì nảy sinh một vấn đề là khi mình chỉnh lại cao độ đường 3d polyline thì phải chạy lại lisp ý mình muốn thế này khi chỉnh lại cao độ đường 3d polyline thì chỉ cần chỉnh ở dạng text là cao độ đường 3d polyline cũng thay đổi theo không cần vào PROPERTIES hay chạy lại lisp nữa, mình muốn hiện cao độ ở dạng text có ý là như vậy. Nhưng thực sự lisp của bạn đã giúp tớ rất nhiều. Cám ơn bạn nhé :s_big:
  • -1

#15 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 08 September 2009 - 10:15 AM

Các bạn ơi! mình có mấy cái lisp này mình sưu tầm được nhưng chưa đúng ý mình, nhờ các bạn sửa lại dùm mình tí.
- Lisp thông số cống:nhờ các bạn sửa lại sao cho độ dốc cống bằng nghịch đảo của đường kính cống (đường kính tự mình nhập) (độ dốc lấy theo đơn vị phần ngàn ví dụ với đường kính là 400 thì độ dốc là 2.5) (hiện nay độ dốc cống đang mặc định là 0.0035 )
- Lisp thông số điện:
+ thì bỏ mũi tên đi (ko cần vẽ mũi tên)
+ bỏ ko cần ghi chiều dài luôn
+ tiết diện dây tự mình nhập (hiện nay mình nhập bất cứ số nào cũng mặc định là M-(3x240))
Chi tiết rõ hơn phiền các bạn xem bản vẽ mình gửi kèm nhé!
http://www.cadviet.c...s/2/thongso.dwg
http://www.cadviet.c.../2/filelisp.rar
Cảm ơn mọi người rất nhiều!
  • 0

#16 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 08 September 2009 - 10:16 AM

Cám ơn Tuệ nhé lisp bạn chỉnh cho mình chạy ok thực sự cảm ơn sự nhiệt tình của Tuệ và các thành viên trong diễn đàn đã giúp đỡ mình lisp đó của bạn chạy đúng như ý tớ. Nhưng khi mình làm thì nảy sinh một vấn đề là khi mình chỉnh lại cao độ đường 3d polyline thì phải chạy lại lisp ý mình muốn thế này khi chỉnh lại cao độ đường 3d polyline thì chỉ cần chỉnh ở dạng text là cao độ đường 3d polyline cũng thay đổi theo không cần vào PROPERTIES hay chạy lại lisp nữa, mình muốn hiện cao độ ở dạng text có ý là như vậy. Nhưng thực sự lisp của bạn đã giúp tớ rất nhiều. Cám ơn bạn nhé :s_big:

Cảm ơn Tuệ, Thiep bận rộn cả ngày hôm qua, Tuệ đã tiếp tay rất nhanh cho Tuynh.
Thiep chỉ gợi ý Tue rằng có 1 hàm trong thư viện Express tools tạo POLYLINE rất nhanh, đó là: acet-pline-make.
Còn lisp trên, Tuynh hãy đợi Tue_NV sẽ thêm vòng lặp để chọn đối tượng đến khi enter thì thôi
  • 0

#17 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 08 September 2009 - 11:28 AM

Mình tìm trên diễn đàn cái lisp ghi toa độ mà chưa tìm được cái đúng ý mình, Nhờ các bác sửa giúp mình cái lisp này với, hiện mình đang dùng nhưng lại có 2 điểm bấc tiện thế này:
1. Nó tự động lưu file .tdo vào nơi nào đó tuỳ thích, có lúc tìm hoài chẳng thấy luôn.
2. Mỗi lần kích điểm thì phải đặtt tên điểm, mình muốn nó tự đông nhảy từ 1 sau đó lên 2 rồi 3.4.5.6...
Mình up file không được đành coppy code lê nhé:
(defun c:gtd()
(setq file (getstring T "Ten file toa do : "))
(setq tenf (strcat file ".tdo"))
(setq f (open tenf "a"))
(setq ST1 (getstring "Ten diem : "))
(setq pt1 (getpoint "Toa do diem : "))
(while (/= pt1 nil)
(print)
(setq x1 (car pt1) y1 (cadr pt1))
(setq xx1 (rtos x1 2 4) yy1 (rtos y1 2 4))
(write-line (strcat ST1 "\t" xx1 "\t" yy1) f)
(setq ST1 (getstring "Ten diem : "))
(setq pt1 (getpoint "Toa do diem : "))
)
(close f)
(princ)
)
(prompt "\nTD : Ghi toa do diem ra file")
  • 0
Học học nữa học mãi.
Đúp học lại!

#18 duongthanh85

duongthanh85

    biết vẽ pline

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

Đã gửi 08 September 2009 - 11:45 AM

File cad và file data.txt
http://www.cadviet.c...s/2/caddata.zip


@Anh Tuệ:
Em có đổi một chút vấn đề để tùy biến mạnh hơn, Ý tưởng của em như sau:

Trong file text các hàng dữ liệu ngăn cách bởi dấu tab, đầu tiên là tên điểm (VD: "Diem 1")

Hình đã gửi

Bây giờ em mong được giúp làm 1 lisp:
- Đọc lần lượt từng hàng trong file text.
- Tách ra thành các chuỗi (các chuỗi trong hàng được ngăn cách bởi dấu tab - xem file data.txt đính kèm)
- Tìm trên toàn bản vẽ xem mtext nào có dòng đầu trùng với chuỗi đầu tiên (VD: tìm mtext có dòng đầu là "Diem 1")
- ghi lần lượt các chuỗi vừa tách vào các hàng tiếp theo của mtext đó.
- Tiếp tục với hàng tiếp theo trong data.txt (như trong file đính kèm là Diem 2)

+ Nếu không tìm thấy thì bỏ qua dòng text đó và nhảy xuống dòng tiếp theo trong file data.txt

Hình đã gửi
  • 0
Dương Đình Thành


EDI.com.vn
Mobile : 0903.269.830
duongdinhthanh@edi.com.vn



Thiết kế thi công: Trạm biến áp, đường dây, cáp ngầm, hạ ngầm đường dây, điện tòa nhà, hệ điện thông minh ...

#19 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 08 September 2009 - 03:03 PM

Mình tìm trên diễn đàn cái lisp ghi toa độ mà chưa tìm được cái đúng ý mình, Nhờ các bác sửa giúp mình cái lisp này với, hiện mình đang dùng nhưng lại có 2 điểm bấc tiện thế này:
1. Nó tự động lưu file .tdo vào nơi nào đó tuỳ thích, có lúc tìm hoài chẳng thấy luôn.
2. Mỗi lần kích điểm thì phải đặtt tên điểm, mình muốn nó tự đông nhảy từ 1 sau đó lên 2 rồi 3.4.5.6...
.....

Chào CongHoan, Thiep muốn tìm lại lisp gtd.lsp mà Hoan load được là của tác giả nào mà không thấy. Hoan chỉ giùm nhé
Bây giờ Thiep chỉnh lại lisp ấy đây:
(defun c:gtd (/ ST fn f x1 y1)
(setq fn (getfiled "Chon file ghi toa do: " "D:/" "tdo" 8))
(setq f (open fn "a"))
(setq ST 1)
(while (setq pt (getpoint "Toa do diem : "))
(setq x1 (rtos (car pt) 2 4)
y1 (rtos (cadr pt) 2 4))
(write-line (strcat (itoa ST) "\t" x1 "\t" y1) f)
(setq ST (1+ ST))
(terpri)
)
(close f)
(print)
)

  • 2

#20 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 08 September 2009 - 03:16 PM

Các bạn ơi! mình có mấy cái lisp này mình sưu tầm được nhưng chưa đúng ý mình, nhờ các bạn sửa lại dùm mình tí.
- Lisp thông số cống:nhờ các bạn sửa lại sao cho độ dốc cống bằng nghịch đảo của đường kính cống (đường kính tự mình nhập) (độ dốc lấy theo đơn vị phần ngàn ví dụ với đường kính là 400 thì độ dốc là 2.5) (hiện nay độ dốc cống đang mặc định là 0.0035 )
- Lisp thông số điện:
+ thì bỏ mũi tên đi (ko cần vẽ mũi tên)
+ bỏ ko cần ghi chiều dài luôn
+ tiết diện dây tự mình nhập (hiện nay mình nhập bất cứ số nào cũng mặc định là M-(3x240))
Chi tiết rõ hơn phiền các bạn xem bản vẽ mình gửi kèm nhé!
http://www.cadviet.c...s/2/thongso.dwg
http://www.cadviet.c.../2/filelisp.rar
Cảm ơn mọi người rất nhiều!

có ai giúp mình với!
  • 0