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

#3141 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 22 February 2011 - 10:47 PM

anh nói rõ dùm em chút. với lại sao down load ko được anh ơi. coi lại dùm em với

Nói rõ là nói rõ cái j hả bạn ?? Cách dùng hay thuật toán hay khó khăn hay ... ???? Nếu không down được thì bạn copy code, hoặc quote lại bài của mình để lấy code, bật Notepad, paste vào đó và save AS thành 1 file lisp, ví dụ "bf.lsp" rồi load thôi
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3142 applekangter

applekangter

    biết zoom

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

Đã gửi 23 February 2011 - 04:11 PM

http://www.cadviet.c...iles/3/vd_6.dwg

Gửi bác Hoành file ví dụ về cấy điểm tự động trên đường 3dply!
Mong bác và mọi người giúp đỡ!

Thanks.....
  • 0

#3143 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 February 2011 - 07:13 PM

http://www.cadviet.com/upfiles/3/vd_6.dwg

Gửi bác Hoành file ví dụ về cấy điểm tự động trên đường 3dply!
Mong bác và mọi người giúp đỡ!

Thanks.....

Hề hề hề,
Có phải bạn cần cái này không???
Hãy dùng thử và cho ý kiến xem cần chỉnh sửa thêm gì nhé.

(defun c:cd ( / pm tenlop lop en obj dis kc pt )
(vl-load-com)
(command "undo" "be")
(setq PM (getvar "pdmode"))
(setq tenlop (getstring t "\n Hay nhap ten layer ban muon: "))
(if (= (tblsearch "layer" tenlop) nil)
(command "layer" "n" tenlop "c" "1" tenlop "lt" "continuous" tenlop "")
)
(setq lop (getvar "clayer"))
(setvar "clayer" tenlop)
(setq en (car (entsel "\n Chon doi tuong 3dpolyline"))
obj (vlax-ename->vla-object en)
dis (vlax-curve-getdistatpoint obj (vlax-curve-getendpoint obj)))
(alert (strcat "\n Chieu dai duong 3dpolyline la " (rtos dis 2 2)))
(setq kc (getdist "\n Hay nhap khoang cach toi diem ban can cay: "))
(while (and (< kc dis) (> kc 0) (/= kc nil))
(setq pt (vlax-curve-getpointatdist obj kc))
(setvar "pdmode" 3)
(command "point" pt )
;;;; (setvar "pdmode" pm)
(setq kc (getdist "\n Hay nhap khoang cach toi diem ban can cay: "))
)
(setvar "clayer" lop)
(command "undo" "e")
(princ)
)

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

#3144 applekangter

applekangter

    biết zoom

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

Đã gửi 25 February 2011 - 03:33 PM

Thanks... bác phamthanhbinh! Nhưng khi minh chạy lisp lại bị báo lỗi như sau :
"
error: null function
(VL-LOAD-COM)
(C:CD)
*Cancel*"


Vì máy mình chạy sưu tầm cũng nhiều lisp! Không biết có phải do sung đột lisp ko!
Nếu được xin bác viết 1 lisp riêng chạy độc lập cấy điểm tự động trên đường 2dpoly gồm nhiều node!
Thanks và làm phiền bác nhiều...
  • 0

#3145 applekangter

applekangter

    biết zoom

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

Đã gửi 25 February 2011 - 03:52 PM

http://www.cadviet.c...es/3/3dpoly.dwg

xin gửi lại các bác ví dụ về cấy điểm tự động trên đường 3dpoly!

(VD lần trước mình gửi chưa được tổng quát ) Mong các bác xem và giúp đỡ nhiều..

Thanks.....
  • 0

#3146 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 25 February 2011 - 04:13 PM

Thanks... bác phamthanhbinh! Nhưng khi minh chạy lisp lại bị báo lỗi như sau :
"
error: null function
(VL-LOAD-COM)
(C:CD)
*Cancel*"


Vì máy mình chạy sưu tầm cũng nhiều lisp! Không biết có phải do sung đột lisp ko!
Nếu được xin bác viết 1 lisp riêng chạy độc lập cấy điểm tự động trên đường 2dpoly gồm nhiều node!
Thanks và làm phiền bác nhiều...

Hề hề hề,
Cái vụ lỗi này lần đầu tiên mình gặp nên cũng không rõ nó bị sao nữa. Cái hàm (vl-load-com) là hàm dùng để tải các chức năng mở rộng của Autolisp sử dụng Visual Lisp. Nó có sẵn trong Help của CAD rồi nên hơi vô lý khi Cad của bạn không đọc được cái hàm này.
Trong lisp của mình đâu có cái hàm (C:CD) nào đâu mà chỉ có đoạn code (defun c:cd ( ) .... mà thôi. Đó là định nghĩa của cái hàm cd dược dùng như một lệnh trong CAD. Vậy nên có thể việc bạn tải hay copy cái lisp của mình có vấn đề bạn ạ. Hãy kiểm tra lại đoạn code bạn xài có đầy đủ như trong bài pót của mình hay không bạn nhé.

Theo mình hiểu thì cái lisp mình viết cũng dùng được cho việc cấy điểm lên các 2dPolyline đấy bạn ạ. Hãy kiểm tra lại code và dùng thử xem sao. Nếu vẫn không được thì có nhẽ CAd của bạn có vấn đề vì đoạn code trên mình dùng thử với bản vẽ bạn đã post thì hoàn toàn tốt bạn ạ.
Chúc bạn vui,
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3147 applekangter

applekangter

    biết zoom

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

Đã gửi 27 February 2011 - 10:14 PM

Thanks...bác nhiều!
Nếu có thể cho mình xin địa chỉ mail để mình tiện liên hệ đc ko!
Làm phiền bác nhiều ...
  • 0

#3148 applekangter

applekangter

    biết zoom

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

Đã gửi 27 February 2011 - 10:40 PM

Khi mình xOá lệnh gọi hàm trong CAD thi chạy hàm trong Cad thi chạy dc lisp nhưng no lại báo lỗi tiếp như sau:

"
Hay nhap ten layer ban muon: CAY
Chon doi tuong 3dpolylineerror: null function
(VLAX-ENAME->VLA-OBJECT EN)
(SETQ EN (CAR (ENTSEL "\n Chon doi tuong 3dpolyline")) OBJ
(VLAX-ENAME->VLA-OBJECT EN) DIS (VLAX-CURVE-GETDISTATPOINT OBJ
(VLAX-CURVE-GETENDPOINT OBJ)))
"

Mong bạn xem giùm mình!

Vì mình ko down dc file lisp trực tiếp từ diễn đàn, rất mong lúc bạn xem xong gửi cho mình theo địa chỉ mail : " buidung.cantona@yahoo.com " Thanks ...bạn nhiều!
  • 0

#3149 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 February 2011 - 10:55 PM

Khẳ năng là bác Bình phải up file lên r ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3150 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 28 February 2011 - 08:08 AM

Thanks... bác phamthanhbinh! Nhưng khi minh chạy lisp lại bị báo lỗi như sau :
"
error: null function
(VL-LOAD-COM)
(C:CD)
*Cancel*"
................

nhưng no lại báo lỗi tiếp như sau:
"
Hay nhap ten layer ban muon: CAY
Chon doi tuong 3dpolylineerror: null function
(VLAX-ENAME->VLA-OBJECT EN)
..........

Tình hình có thể là applekangter đang sử dụng bản CAD rất là ư là xưa ?!
(không hỗ trợ Visual Lisp)
  • 1

#3151 vothanhdn

vothanhdn

    biết vẽ ellipse

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

Đã gửi 01 March 2011 - 01:36 PM

Chào mọi người!

Em đang có 1 ý mà không biết viết như thế nào, nhờ mọi người giúp đỡ.
E muốn copy 1 đối tượng đến các điểm trên 1 đường polyline sao cho các đối tượng được copy cách nhau 1 khoảng cho trước nhập vào.
- Chọn dtượng để copy
- chọn pline
- Hỏi khoảng cách giữa các đối tượng sau khi được copy

Mong mọi người giúp...
  • 0

Ứng dụng hỗ trợ thiết kế mạng lưới thoát nước VTD

  - Tính toán mạng lưới thoát nước

  - Vẽ trắc dọc, bình đồ thoát nước

......

Truy cập http://www.vtdvn.com

------------------------------------------------------------------------------------------

"Không có gì chắc chắn, chỉ có 1 điều chắc chắn là không có gì chắc chắn"...!!!


#3152 trangnhung

trangnhung

    biết vẽ pline

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

Đã gửi 01 March 2011 - 03:45 PM

chào các bác. e mới tham gia diễn đàn. Mới học cad nên còn nhiều bỡ ngỡ nhất là với lisp. e cần các bác giúp e một vấn đền: e vẽ 1 đường pline nét mảnh, nhưng sau này cần chuyển đường pline thành nét đậm. e không biết phải làm sao. các bác giúp e với. e chân thành cảm ơn.
  • 0

#3153 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 01 March 2011 - 04:30 PM

Chào mọi người!

Em đang có 1 ý mà không biết viết như thế nào, nhờ mọi người giúp đỡ.
E muốn copy 1 đối tượng đến các điểm trên 1 đường polyline sao cho các đối tượng được copy cách nhau 1 khoảng cho trước nhập vào.
- Chọn dtượng để copy
- chọn pline
- Hỏi khoảng cách giữa các đối tượng sau khi được copy

Mong mọi người giúp...

Hề hề hề,
Vấn đề này trên diễn đàn đã có kha khá lisp rồi bạn ạ. Bạn hãy cố gắng tìm kiếm với từ khóa là copy thử xem. Nếu tất cả các lisp đã có chưa thể đáp ứng yêu cầu của bạn thì hãy post một ví dụ cụ thể về cái bạn cần lên nhé. Nhớ là post cả file DWG trước và sau khi dùng lisp nhé để mọi người tiện nghiên cứu, tránh tình trạng bị lạc đề bạn hỉ....
Chúc bạn vui,
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3154 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 01 March 2011 - 04:47 PM

chào các bác. e mới tham gia diễn đàn. Mới học cad nên còn nhiều bỡ ngỡ nhất là với lisp. e cần các bác giúp e một vấn đền: e vẽ 1 đường pline nét mảnh, nhưng sau này cần chuyển đường pline thành nét đậm. e không biết phải làm sao. các bác giúp e với. e chân thành cảm ơn.

Hề hề hề,
Bạn thử xài thằng pedit xem sao hỉ????
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3155 applekangter

applekangter

    biết zoom

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

Đã gửi 05 March 2011 - 08:37 PM

Hề hề hề,
Cái vụ lỗi này lần đầu tiên mình gặp nên cũng không rõ nó bị sao nữa. Cái hàm (vl-load-com) là hàm dùng để tải các chức năng mở rộng của Autolisp sử dụng Visual Lisp. Nó có sẵn trong Help của CAD rồi nên hơi vô lý khi Cad của bạn không đọc được cái hàm này.
Trong lisp của mình đâu có cái hàm (C:CD) nào đâu mà chỉ có đoạn code (defun c:cd ( ) .... mà thôi. Đó là định nghĩa của cái hàm cd dược dùng như một lệnh trong CAD. Vậy nên có thể việc bạn tải hay copy cái lisp của mình có vấn đề bạn ạ. Hãy kiểm tra lại đoạn code bạn xài có đầy đủ như trong bài pót của mình hay không bạn nhé.

Theo mình hiểu thì cái lisp mình viết cũng dùng được cho việc cấy điểm lên các 2dPolyline đấy bạn ạ. Hãy kiểm tra lại code và dùng thử xem sao. Nếu vẫn không được thì có nhẽ CAd của bạn có vấn đề vì đoạn code trên mình dùng thử với bản vẽ bạn đã post thì hoàn toàn tốt bạn ạ.
Chúc bạn vui,



Đúng như bác gia_bach nói, mình sử dụng cad14 nên bị lỗi do cad không hỗ trợ Visual Lisp!
Khi chạy cad2008 thì lisp chạy ko báo lỗi, nhưng chắc do ban đầu mình chưa đề cập chi tiết về nội dung thực hiện của lisp nên cũng chưa rõ để bác Bình viết hoàn thiện ngay được!
Mình có upload lại file cad mong bác Bình editcode giùm lại nha
http://www.cadviet.c...ly_chi_tiet.dwg
Thanks …các bác nhiều! Mình mong nhận được sự giúp đỡ và góp ý của các bác nhiều
  • 0

#3156 trangnhung

trangnhung

    biết vẽ pline

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

Đã gửi 06 March 2011 - 08:14 PM

Cảm ơn bác phamthanhbinh nha. ! :rolleyes:
  • 0

#3157 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 08 March 2011 - 07:34 PM

Đúng như bác gia_bach nói, mình sử dụng cad14 nên bị lỗi do cad không hỗ trợ Visual Lisp!
Khi chạy cad2008 thì lisp chạy ko báo lỗi, nhưng chắc do ban đầu mình chưa đề cập chi tiết về nội dung thực hiện của lisp nên cũng chưa rõ để bác Bình viết hoàn thiện ngay được!
Mình có upload lại file cad mong bác Bình editcode giùm lại nha
http://www.cadviet.c...ly_chi_tiet.dwg
Thanks …các bác nhiều! Mình mong nhận được sự giúp đỡ và góp ý của các bác nhiều

Hề hề hề,
Bạn xem cái này xài được không nhé, mình sửa lại thêm một chút từ líp cũ.

(defun c:cd ( / pm tenlop lop en obj dis kc kc1 pt pt0 pt1 end m mo
elev lelev relev txt j i n gr gd )
(vl-load-com)
(command "undo" "be")
(setq PM (getvar "pdmode"))
(setq tenlop (getstring t "\n Hay nhap ten layer diem cay ban muon: "))
(if (= (tblsearch "layer" tenlop) nil)
(command "layer" "n" tenlop "c" "1" tenlop "lt" "continuous" tenlop "")
)
(setq tenlop1 (getstring t "\n Hay nhap ten layer nhan khoang cach ban muon: "))
(if (= (tblsearch "layer" tenlop1) nil)
(command "layer" "n" tenlop1 "c" "7" tenlop1 "lt" "continuous" tenlop1 "")
)
(setq lop (getvar "clayer"))
(setvar "clayer" tenlop1)
(setq en (car (entsel "\n Chon doi tuong 3dpolyline"))
obj (vlax-ename->vla-object en)
dis (vlax-curve-getdistatpoint obj (vlax-curve-getendpoint obj))
n (vlax-curve-getendParam obj)
i 1)
(alert (strcat "\n Chieu dai duong 3dpolyline la " (rtos dis 2 2)))
(setq kc (getdist "\n Hay nhap khoang cach giua cac diem ban can cay: "))
(setq kc1 (getdist "\n Hay nhap khoang cach tu text toi polyline : "))
;;;;;;;(setvar "cecolor" "7")
(setq pt (vlax-curve-getstartpoint obj))
(gotang obj pt)
(setq pt0 (list (car pt) (cadr pt) 0.0))
(setq pt1 (polar pt0 (+ gr (/ pi 2)) kc1))
(command "text" "j" "c" pt1 gd "0+000" )
(setq pt (vlax-curve-getendpoint obj))
(gotang obj pt)
(setq pt0 (list (car pt) (cadr pt) 0.0))
(setq pt1 (polar pt0 (+ gr (/ pi 2)) kc1))
(setq end (rtos dis 2 0)
m (strlen end))
(if (>= m 4)
(setq txt (strcat (substr end 1 (- m 3)) "+" (substr end (- m 2) 3)) )
(setq txt (strcat "0+" end))
)
(command "text" "j" "c" pt1 gd txt )
(while (and (< (* i kc) dis) (> kc 0) (/= kc nil))
(setvar "clayer" tenlop1)
(setq pt (vlax-curve-getpointatdist obj (* i kc)))
(setq elev (rtos (caddr pt) 2 2)
j 1)
(while (/= (substr elev j 1) ".")
(setq j (1+ j))
)
(setq lelev (substr elev 1 j)
relev (substr elev j))

(gotang obj pt)
(setq pt0 (list (car pt) (cadr pt) 0.0))
(setq pt1 (polar pt0 (+ gr (/ pi 2)) kc1))
(setq mo (rtos (* i kc) 2 0)
m (strlen mo))
(if (>= m 4)
(setq txt (strcat (substr mo 1 (- m 3)) "+" (substr mo (- m 2) 3)) )
(if (= m 3)
(setq txt (strcat "0+" mo))
(if (= m 2)
(setq txt (strcat "0+0" mo))
(if (= m 1)
(setq txt (strcat "0+00" mo))
)
)
)
)

;;;;;;; (entmake (list (cons 0 "TEXT") (cons 1 (rtos (* i kc) 2 2)) (cons 10 pt1) (cons 40 2)
;;;;;;;; (cons 50 gr) (cons 72 1) (cons 8 "STALBL") ))
(command "text" "j" "c" pt1 gd txt )
(setq i (1+ i))
(setvar "clayer" tenlop)
(command "insert" "Pointx" pt "1" "1" "" (rtos (+ n i) 2 0) lelev relev "DH" )
)
(setvar "clayer" lop)
(command "undo" "e")
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun gotang (obj pt)
(setq vtt (vlax-curve-getfirstderiv obj (vlax-curve-getparamatpoint obj pt)))
(if (/= (car vtt) 0)
(setq gr (atan (/ (cadr vtt) (car vtt))))
(setq gr (/ pi 2))
)
(setq gd (* 180 (/ gr pi)))
)

Hy vọng đúng với yêu cầu của ban. Mình đã chạy thử với cái bản vẽ bạn pót sau cùng thì thấy kết quả gần giống với cái bạn làm thủ công.

Bài viết đã được chỉnh sửa nội dung bởi phamthanhbinh: 09 March 2011 - 10:21 AM
Sửa lại theo góp ý của bác Tue_NV và yêu cầu bổ sung của bạn applekangter

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

#3158 applekangter

applekangter

    biết zoom

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

Đã gửi 08 March 2011 - 08:45 PM

Hề hề hề,
Bạn xem cái này xài được không nhé, mình sửa lại thêm một chút từ líp cũ.

Hy vọng đúng với yêu cầu của ban. Mình đã chạy thử với cái bản vẽ bạn pót sau cùng thì thấy kết quả gần giống với cái bạn làm thủ công.


Thanks bác Bình nhiều, thật nhiều ….
Mình vừa chạy lisp xong, vượt qua cả mong đợi của mình ban đầu. Lisp chạy cực chuẩn.
Ah! Mong bác Bình sửa hộ em 1 điểm nhỏ thôi, đó là cái nhãn của khoảng cách bác cho em vào luôn cái layer”nhan” chẳng hạn. Để sau này tiện quản lý thôi.
Thanks…bác + forum ! Chúc forum ngày một phát triển.
  • 0

#3159 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 March 2011 - 09:00 PM

[quote name='phamthanhbinh' date='08 March 2011 - 07:34 PM' timestamp='1299587654'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun getangle (obj pt)
(setq vtt (vlax-curve-getfirstderiv obj (vlax-curve-getparamatpoint obj pt)))
(if (/= (car vtt) 0)
(setq gr (atan (/ (cadr vtt) (car vtt))))
(setq gr (/ pi 2))
)
(setq gd (* 180 (/ gr pi)))
)
;;;;;;
[/quote]
Chào bác Bình
Có 1 nguyên tắc khi viết Lisp là không nên đặt tên hàm do mình định nghĩa trùng với hàm của Lisp. Hàm getangle do bác lập ra trùng với hàm của Lisp rồi ạ.
  • 1

#3160 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 09 March 2011 - 10:37 AM

Chào bác Bình
Có 1 nguyên tắc khi viết Lisp là không nên đặt tên hàm do mình định nghĩa trùng với hàm của Lisp. Hàm getangle do bác lập ra trùng với hàm của Lisp rồi ạ.

Chào bác Tue_NV,
Rất cám ơn bác đã nhắc nhở. Do cẩu thả mà mình quên mất cả những nguyên tắc sơ đẳng khi viết lisp. Mình đã sửa lại lisp trong bài post trên.
Rất mong bác thông cảm và hết lòng giúp đỡ.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.