Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Nguyen Hoanh

Viết Lisp theo yêu cầu

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

moihoclisp    0

Cám ơn bác Gia bach đã giúp đỡ. em xin đưa ra nội dung dự án của em để mọi người góp ý.

Em lập trình VB6.0 để tạo 1 Form có tác dụng insert các text trong textbox mình nhập vào và insert 1 bản vẽ có sẵn vào CAD theo vị trí định sẵn. Tuy nhiên để insert 1 bản vẽ vào CAD theo vị trí mình muốn thì phải đặt lại biến INSBASE cho bản vẽ đó. Do đó em muốn viết 1 LISP khi chạy sẽ tự động Select toàn bộ đối tượng trên bản vẽ (có thể dùng Command: _AI_SELALL) rồi tự động tính ra Xmax, Ymax, Xmin, Ymin từ đó tính toạ độ trung bình của 2 điểm Max, Min trên rồi gán toạ độ đó cho biến INSBASE của bản vẽ. Khi insert sẽ dùng BASEPOINT của bản vẽ này để đặt đúng vị trí mình muốn (bởi vì mặc định biến INSBASE của bản vẽ là (0.000,0.000,0.000)).

Có thể em viết hơi trừu tượng nhưng mong các bác giúp em cái LISP này. Em xin cảm ơn 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
Hình như bạn cũng biết về lisp mà, bạn dung vòng lặp while cho các lần pick là được

(setq p1 (getpoint) tong_chieu_dai 0)

 

(while (setq p2 (getpoint "\nDiem tiep theo:" p1))

(setq tong_chieu_dai (+ tong_chieu_dai (distance p1 p2))

p1 p2)

)

 

cảm ơn cuongtk2 nhiều,nhưng mà thú thật là tớ ko bit viết lisp :s_big: nhờ mọi người hoàn chỉnh dùng mình nhé.cảm ơn mọi 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
Tue_NV    3.841
cảm ơn cuongtk2 nhiều,nhưng mà thú thật là tớ ko bit viết lisp :s_big: nhờ mọi người hoàn chỉnh dùng mình nhé.cảm ơn mọi người

Không biết Nguyenkhoadung đã đọc bài viết trả lời của Tue_NV cho bạn chưa?

Nó nằm ở đây : Viết Lisp theo yêu cầu - Bài viết số 2597

  • Vote tăng 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
tomboy    20
có bác nào viết giúp 1 đoạn lisp xác định 1 điểm trên spline có chiều dài từ điểm gốc đến điểm cần xác định cho trước. thanks

ok, của bạn đây, lisp này do mình viết vội quá nên không kịp test kỹ, bạn chạy thử rồi cho ý kiến nhé

link nè: http://www.cadviet.com/upfiles/2/glt.rar

note: đọc kỹ hướng dẫn trong file HUONG DAN.DOC nhé

Lệnh là: GLT (get lý trình đấy 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
HoangSon614    66
Bạn Hoàng Sơn 614 thân mến, mình test lại rồi, chạy êm mà. Bạn chú ý nhé:

nếu ví dụ bạn có 1 cái ao hình chữ nhật với mỗi chiều là 1m và 2m

khi bạn vẽ lên máy với đơn vị là: m thì các cạch tương ứng trong autocad sẽ là: 1 và 2 tỉ lệ 1/n trong chương trình sẽ là: 1

----------------------------------- :Dm --------------------------------------------- -- : 10 và 20 ------------------------------------ : 10

----------------------------------- :cm ------------------------------------------------ : 100 và 200 ------------------------------------- : 100

------------------------------------ :mm ------------------------------------------------ : 1000 và 2000 ------------------------------------- : 1000

hoặc bạn có thể xác định tỉ lệ bản vẽ của bạn bằng cách đo khoảng cách cạnh AB trên Autocad và chia cho khoảng cách thực ở ngoài thực địa nhé

ví dụ bạn đo chiều dài cái nhà là 4.50 tương ứng ở thực địa là 9m như vậy tỉ lệ bản vẽ sẽ là 4.5 / 9 = 0.5.

Bạn lấy thương số đó lắp vào tỉ lệ 1/n của chương trình tính diện tích nhé.

note: xoá hết cái lisp cũ nhé rồi down lại cái bản vá lỗi về nhé.

nhớ làm theo hướng dẫn trong file "huong dan.doc" nhé...

Cảm ơn tomboy đã quan tâm tới mình, nhưng mình vẫn còn một số chưa rõ, bạn giải thích giúp mình nhé

1. Theo như ý bạn (chiều dài cái nhà là 4.50 tương ứng ở thực địa là 9m như vậy tỉ lệ bản vẽ sẽ là 4.5 / 9 = 0.5) thì mình hiểu là vẽ tỷ lệ 1/2

Nên lấy 1/2 = 0.5 và nhập 0.5 vào để tính diện tích đúng không bạn

2. Vậy mình có một mặt bằng nhà (13x8)m = 136m2 vẽ với tỷ lệ 1/200, vậy tỷ lệ nhập vào = 0.02 nhưng kết quả là sai.

Vậy nguyên tắc chung nhất như thế nào để có kết quả là chính xác và là một số thực với bất kỳ tỷ lệ vẽ nào

Cụ thể như: với kích thước nhà 20x5=100m2

Với tỷ lệ vẽ 1/100 = 100m2

1/10 = 100m2

1/50 = 100m2

Và mình nhờ bạn giải thích thêm bạn tính tỷ lệ như thế nào mà ra kết quả như trên (phần màu đỏ phía trên)

Mình vẫn chưa thông, bạn thông cảm cố giúp mình cho trót. Cảm ơn bạn 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
HoangSon614    66
thanhks, bạn nói đúng, tại vì mình chỉ tập trung tìm lỗi của chương trình đó là lỗi thiếu font trong autocad và lỗi vòng lặp khi đọc dữ liệu từ tệp ra thôi nên mình không để ý tới vấn đề đó. mình sẽ rút kinh nghiệm để những bản vá sau được hoàn thiện hơn.

Cố gắng hoàn thiện trong thời gian sớm nhất có thể nha bạn và chính điều đó có thể giúp ích được cho nhiều người trên diễn đàn đó. Chúc bạn bạn sớm hoàn thà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
tivanteo    17
ok, của bạn đây, lisp này do mình viết vội quá nên không kịp test kỹ, bạn chạy thử rồi cho ý kiến nhé

link nè: http://www.cadviet.com/upfiles/2/glt.rar

note: đọc kỹ hướng dẫn trong file HUONG DAN.DOC nhé

Lệnh là: GLT (get lý trình đấy mà)

 

Cám ơn tomboy đã giúp đỡ.Mình đã test rồi ct của bạn không nhận đường spline, mình cần là 1 điểm trên spline, mình đã test ct của bác gia bach viết , nói chung là đúng ý mình cần rồi, bạn có thể giúp đỡ mình viết thêm 1 đoạn lisp để vẽ 1 đường spline lên các điểm đã xác định trên các đườn spline trước

thank bac GIA BACH 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
tomboy    20
Cảm ơn tomboy đã quan tâm tới mình, nhưng mình vẫn còn một số chưa rõ, bạn giải thích giúp mình nhé

1. Theo như ý bạn (chiều dài cái nhà là 4.50 tương ứng ở thực địa là 9m như vậy tỉ lệ bản vẽ sẽ là 4.5 / 9 = 0.5) thì mình hiểu là vẽ tỷ lệ 1/2

Nên lấy 1/2 = 0.5 và nhập 0.5 vào để tính diện tích đúng không bạn

2. Vậy mình có một mặt bằng nhà (13x8)m = 136m2 vẽ với tỷ lệ 1/200, vậy tỷ lệ nhập vào = 0.02 nhưng kết quả là sai.

Vậy nguyên tắc chung nhất như thế nào để có kết quả là chính xác và là một số thực với bất kỳ tỷ lệ vẽ nào

Cụ thể như: với kích thước nhà 20x5=100m2

Với tỷ lệ vẽ 1/100 = 100m2

1/10 = 100m2

1/50 = 100m2

Và mình nhờ bạn giải thích thêm bạn tính tỷ lệ như thế nào mà ra kết quả như trên (phần màu đỏ phía trên)

Mình vẫn chưa thông, bạn thông cảm cố giúp mình cho trót. Cảm ơn bạn nhiều

thường thì khi vẽ bản vẽ kỹ thuật đơn vị sẽ là mm. Ví dụ vẽ một cái cốt xe honda có đường kính D10 hay R5 tức là 10mm . Nếu vẽ đơn vị là m thì phải ghi là D0.01m, với cách ghi này rất là khó chịu khi mình đọc bản vẽ, nếu như cái cốt xe đó có đường kính là 1m thì người ta phải vẽ là D1000 , do đó tỉ lệ thay đổi diện tích là m=1000,

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
gia_bach    1.442
............

Do đó em muốn viết 1 LISP khi chạy sẽ tự động Select toàn bộ đối tượng trên bản vẽ (có thể dùng Command: _AI_SELALL) rồi tự động tính ra Xmax, Ymax, Xmin, Ymin từ đó tính toạ độ trung bình của 2 điểm Max, Min trên rồi gán toạ độ đó cho biến INSBASE của bản vẽ. Khi insert sẽ dùng BASEPOINT của bản vẽ này để đặt đúng vị trí mình muốn (bởi vì mặc định biến INSBASE của bản vẽ là (0.000,0.000,0.000)).

Có thể em viết hơi trừu tượng nhưng mong các bác giúp em cái LISP này. Em xin cảm ơn nhiều

Chào moihoclisp

Bạn chạy thử LISP tính ra Xmax, Ymax, Xmin, Ymin của LayOut hiện hành từ đó tính toạ độ trung bình của 2 điểm Max, Min.

(gán toạ độ đó cho biến INSBASE của bản vẽ.)

(defun C:test(/ vl ov ss lst_pt mid)
 (defun boundarySS (ss / lst_max lst_min ll maxpt minpt ur)
   (vl-load-com)
   (setq lst_min (list)
  lst_max (list) )
   (foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
     (vla-GetBoundingBox ent 'minpt 'maxpt)
     (setq lst_min (cons (vlax-safearray->list minpt) lst_min)
    lst_max (cons (vlax-safearray->list maxpt) lst_max)  )
     )
   (setq ll (list (car (vl-sort (mapcar 'car lst_min) '<))
	   (car (vl-sort (mapcar 'cadr lst_min) '<))
	   )
  ur (list (last (vl-sort (mapcar 'car lst_max) '<))
	   (last (vl-sort (mapcar 'cadr lst_max) '<))
	   )
  )
   (list ll ur)
   )
 ; ham chinh
 (if (setq ss (ssget "_X" (list (cons 410 (getvar "Ctab")))))
   (progn
     (command "undo" "be")
     (setq vl '("osmode"  "cmdecho") ; Sys Var list
    ov (mapcar 'getvar vl))   ; Get Old values
     (mapcar 'setvar vl '(0 0))
     (setq lst_pt (boundarySS ss)
    mid (mapcar '/ (mapcar '+ (car lst_pt) (cadr lst_pt)) '(2.0 2.0))
    )
     (princ (strcat "\n Point_Min  X = " (rtos(car mid)) "; Y = " (rtos(cadr mid))))
     (entmake (list '(0 . "POINT")(cons 10 mid)) )
     ;(setvar "InsBase" mid)
     (mapcar 'setvar vl ov) ; reset Sys Vars
     (command "undo" "e")(princ)
     )
   )
 )

 

 

Mình đang tìm cái lisp cộng, trừ, nhân, chia giữa các phần tử tương ứng của 2 hàng text.

Mình nhớ Bác Hoành đã post nó trong topic này nhưng tìm hoài không ra.

Bạn nào nhớ nó ở khoảng trang bao nhiêu thì nhắc mình với. Chức năng tìm kiếm của diễn đàn với 4 từ khóa trên cũng chịu thua rồi :s_big:

To Thaistreetz

Có phải bạn nói dòng này :

(mapcar '/ (mapcar '+ (car lst_pt) (cadr lst_pt)) '(2.0 2.0))

  • Vote tăng 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
Chào Hoan, thiep kiểm tra nhiều lần mà có lỗi gì đâu? khi chọn đối tượng, Hoan nhớ chọn theo kiểu cửa sổ từ phải qua trái, có 5 đối tượng được chọn, gồm 1 pline tự nhiên, 4 line giới hạn. Trong 4 line giới hạn màu vàng, có 2 line cắt qua pline. Điểm cắt này là điểm bắt đầu vẽ đường nạo vét. Sau khi chọn xong nhấn enter, nếu lần đầu khi chạy lisp, lisp sẽ hỏi các thông số. Tiếp tục chọn các mặt cắt khác, khi chọn xong, enter, chọn, enter.... cho đến khi hết mặt cắt, mỏi tay thì ẻnter kết thúc. Còn lisp chọn 1 lần các mặt cắt 1 lúc, Thiep đã viết xong đang test. Hãy đợi đấy nhé.

Mình cũng chẳng hiểu sao lại lỗi ngư thế nữa, mình test (trên cad2007) nhiều lần mà mà vẫn như thế, mặt cắt đầu tiên chạy OK còn các mặt cắt tiếp theo thì không được. Thiệp xem lại giúp mình nhé. Cảm ơn nhiều!

Nó báo như thế này:

Command: AP APPLOAD khd_vbu.lsp successfully loaded.

Command:

Command:

Command: VB Undo Current settings: Auto = On, Control = All, Combine = Yes

Enter the number of operations to undo or [Auto/Control/BEgin/End/Mark/Back]

<1>: begin

Command: UCS

Current ucs name: *WORLD*

Specify origin of UCS or [Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis]

: W

Command: VB Unknown command "VB". Press F1 for help.

Command: Chon cac curve be mat nao vet:

Select objects: Specify opposite corner: 5 found

Select objects:

Chon goc doc nao vet ben PHAI (mau so): 1

Chon goc doc nao vet ben TRAI (mau so): 1

Chieu sau nao vet: 1

Chon chieu cao chu: 1

Select objects: Specify opposite corner: 5 found

Select objects: bad argument type: lselsetp nil

File mình test bị lối nè: http://www.cadviet.com/upfiles/2/tnct_5.dwg

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
Không biết Nguyenkhoadung đã đọc bài viết trả lời của Tue_NV cho bạn chưa?

Nó nằm ở đây : Viết Lisp theo yêu cầu - Bài viết số 2597

cảm ơn bạc TUE, mình tìm thấy rồi, rất tuyệt bạn ah , thanks thanks and thanks

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
tomboy    20
Cảm ơn tomboy đã quan tâm tới mình, nhưng mình vẫn còn một số chưa rõ, bạn giải thích giúp mình nhé

1. Theo như ý bạn (chiều dài cái nhà là 4.50 tương ứng ở thực địa là 9m như vậy tỉ lệ bản vẽ sẽ là 4.5 / 9 = 0.5) thì mình hiểu là vẽ tỷ lệ 1/2

Nên lấy 1/2 = 0.5 và nhập 0.5 vào để tính diện tích đúng không bạn

2. Vậy mình có một mặt bằng nhà (13x8)m = 136m2 vẽ với tỷ lệ 1/200, vậy tỷ lệ nhập vào = 0.02 nhưng kết quả là sai.

Vậy nguyên tắc chung nhất như thế nào để có kết quả là chính xác và là một số thực với bất kỳ tỷ lệ vẽ nào

Cụ thể như: với kích thước nhà 20x5=100m2

Với tỷ lệ vẽ 1/100 = 100m2

1/10 = 100m2

1/50 = 100m2

Và mình nhờ bạn giải thích thêm bạn tính tỷ lệ như thế nào mà ra kết quả như trên (phần màu đỏ phía trên)

Mình vẫn chưa thông, bạn thông cảm cố giúp mình cho trót. Cảm ơn bạn nhiều

Mình sửa lại cho bạn rồi nè: http://www.cadviet.com/upfiles/2/gdt_1.rar

Thông cảm nhé, và các link cũ mình cũng sửa luôn rồi

  • Vote tăng 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
thiep    263
Mình cũng chẳng hiểu sao lại lỗi ngư thế nữa, mình test (trên cad2007) nhiều lần mà mà vẫn như thế, mặt cắt đầu tiên chạy OK còn các mặt cắt tiếp theo thì không được. Thiệp xem lại giúp mình nhé. Cảm ơn nhiều!

Nó báo như thế này:

Command: AP APPLOAD khd_vbu.lsp successfully loaded.

Command:

Command:

Command: VB Undo Current settings: Auto = On, Control = All, Combine = Yes

Enter the number of operations to undo or [Auto/Control/BEgin/End/Mark/Back]

<1>: begin

Command: UCS

Current ucs name: *WORLD*

Specify origin of UCS or [Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis]

: W

Command: VB Unknown command "VB". Press F1 for help.

Command: Chon cac curve be mat nao vet:

Select objects: Specify opposite corner: 5 found

Select objects:

Chon goc doc nao vet ben PHAI (mau so): 1

Chon goc doc nao vet ben TRAI (mau so): 1

Chieu sau nao vet: 1

Chon chieu cao chu: 1

Select objects: Specify opposite corner: 5 found

Select objects: bad argument type: lselsetp nil

File mình test bị lối nè: http://www.cadviet.com/upfiles/2/tnct_5.dwg

Không phải lệnh VB, mà là lệnh VBU. Nhưng Cad đã không hiểu lệnh rồi mà sao vẫn yêu cầu "Chon goc doc nao vet ben PHAI (mau so):"....???

  • Vote tăng 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
tomboy    20
Cố gắng hoàn thiện trong thời gian sớm nhất có thể nha bạn và chính điều đó có thể giúp ích được cho nhiều người trên diễn đàn đó. Chúc bạn bạn sớm hoàn thành

ok, mình đã sửa lại như nhận xét của bạn Thaistrestz rồi nhé

link đây: http://www.cadviet.com/upfiles/2/tdc_1.rar

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
HoangSon614    66
Mình sửa lại cho bạn rồi nè: http://www.cadviet.com/upfiles/2/gdt_1.rar

Thông cảm nhé, và các link cũ mình cũng sửa luôn rồi

Được rồi tomboy à. Cảm ơn bạn đã nhiệt tình. Chúc bạn sức khoẻ và thành công trong công việc

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
HoangSon614    66
Các bạn giúp mình sửa lại cái lisp chạy Trắc dọc cống .

*Hiện trạng:

Lisp này dùng để vẽ trắc dọc cống

-Sau khi nhập các số liệu thiết kế vào five của Excel sau đó save as chúng lại dưới dạng đuôi .prn

-Từ Autocad R14 AP lisp TDC2005-v9.lsp, nhập lệnh tdc rồi mở five vừa save thi => bve TDOC

(lisp này chạy được khi cad R14 có font ( Vn_vni.shx)

*Sửa chữa:

-Vì lisp này chỉ chạy ổn định trên cad R14 còn các CAD khác thì 1 là chạy không được ,2 là bị lỗi do đó nhờ các bạn trên diễn đàn CADViet chuyển giúp lisp này chạy trên Cad2007 và không phụ thuộc vào font trên .

Nếu lisp này hoàn thiện nó sẽ giúp ích rất nhiều cho các bạn làm bên mảng thoát nước .

-Rất mong được sự giúp đỡ của các anh em trên diễn đàn và sớm nhận được hồi âm.

Thân chào

Đây là five mình đã upload

http://www.cadviet.com/upfiles/2/tdc.zip

Bạn chia sẽ file nhập bằng Excell và hướng dẫn sử dụng lên diễn đàn cho mọi người sử dụng luôn đi bạ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
duytrung    2
Bạn chia sẽ file nhập bằng Excell và hướng dẫn sử dụng lên diễn đàn cho mọi người sử dụng luôn đi bạn

Trước hết mình rất cảm ơn bạn Thaistreets và bạn Tomboy đã giúp đỡ .bây giờ thì nó đã chạy được trên môi trường Cad còn lại.

Đây là link đầy đủ, còn cách sử dụng thì mình đã nêu ở baì trước rồi.

http://www.cadviet.com/upfiles/2/tdc_4_cad2008.zip

  • Vote tăng 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
Không phải lệnh VB, mà là lệnh VBU. Nhưng Cad đã không hiểu lệnh rồi mà sao vẫn yêu cầu "Chon goc doc nao vet ben PHAI (mau so):"....???

Cái này mình biết rồi, mình chỉ đổi lệnh lại để cho tiện sử dụng thôi. Mình cũng chẳng hiểu tại sao không biết lệnh mà lại yêu cầu như thế nửa, mà thiệp test trên cad nào vậ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
lich_pro    0

Mọi người ơi tôi học cad được có vài hôm mà cô giáo đã bắt vẽ các đò vật 3D mình tự chọn để làm bài tập lớn.Tôi định vẽ chiếc quạt điện nhưng chẳng rõ vẽ như thế nào?Ai có bản vẽ đó thì gửi cho tôi với.Nếu có các lệnh vẽ theo từng đoạn thì tốt.Cám ơn nhìu!!

Nếu ai có thì gửi mail cho mình nhé:khinaoemve1989@yahoo.com

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
Thaistreetz    515
Mọi người ơi tôi học cad được có vài hôm mà cô giáo đã bắt vẽ các đò vật 3D mình tự chọn để làm bài tập lớn.Tôi định vẽ chiếc quạt điện nhưng chẳng rõ vẽ như thế nào?Ai có bản vẽ đó thì gửi cho tôi với.Nếu có các lệnh vẽ theo từng đoạn thì tốt.Cám ơn nhìu!!

Nếu ai có thì gửi mail cho mình nhé:khinaoemve1989@yahoo.com

=)) vẽ con rubik đi bạn. mới học vẽ cad mà bạn chọn vẽ cái quạt điện thì nộp bài cô giáo cũng phát hoảng đấy, chả dám dạy bạn nữa đâ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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×