Đến nội dung


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

Viết Lisp theo yêu cầu


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

#641 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 12 April 2008 - 01:37 PM

Ok, cảm ơn bạn rất nhiều. Mình thấy bạn rất giỏi về visualisp, bạn có tài liệu gì về hướng dẫn lập trình VL ko, nếu có cho mình tham khảo được không?

Ssg không dám nhận, chỉ mò mẫm tự học, tự làm và tự chiêm nghiệm kết quả khi chạy chương trình.
Mình không có bất cứ một cuốn sách hay tài liệu gì về Cad và Lisp ngoài cái Help có sẵn của AutoCAD!
  • 0

#642 hoangtrongbang

hoangtrongbang

    biết pan

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

Đã gửi 15 April 2008 - 09:34 AM

@hoangtrongbang lênh qdim có sẵn trong cad làm được điều bạn yêu cầu.
[/quote]

Mình cảm ơn bạn tuy nhiên,lệnh QDim nó chưa thực hiện hết được theo ý của mình, Ý của mình là muốn nó ghi kích thước của một loạt đường thẳng và DIM nằm luôn tại vị trí của đường thẳng đó cơ. Lệnh QDim thì nó lại kéo tất cả các đường DIM về cùng một vị trí nên rất khó theo dõi. Mình mong các bạn hãy cố giúp mình với.
  • 0

#643 hiepga1981

hiepga1981

    biết zoom

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

Đã gửi 15 April 2008 - 11:26 AM

các bác ơi, cứu e với, lâu nay e không có thời gian vào diễn đàn vì đang phải làm 1 con quy hoạch chi tiết tỉ lệ 1/500 khoảng 2.000 ha. Bọn e hì hục vẽ xong đến lúc đi in thì mới toát mồ hôi các bác ạ : 1 bản vẽ của bọn e in tỉ lệ 1/500 trên layout gồm 198 tờ A0 ghép lại (hu hu...). e vừa đi in thử 1 bản vẽ mất 01 ngày trời... :bigsmile: . Vì thế e lên đây cầu cứu các bác cao thủ trên diễn đàn giúp e có được cái lisp nào tự động in tất cả các khung in trên layout mà không cần ngồi pick in từng bản (in xong đống hồ sơ của e chắc tay e cơ bắp nổi cuồn cuộn mất)....mong các bác tận tình giúp đỡ, gửi tất cả các bác lời chào thân ái và quyết thắng !
  • 0

#644 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

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

Đã gửi 15 April 2008 - 11:34 AM

các bác ơi, cứu e với, lâu nay e không có thời gian vào diễn đàn vì đang phải làm 1 con quy hoạch chi tiết tỉ lệ 1/500 khoảng 2.000 ha. Bọn e hì hục vẽ xong đến lúc đi in thì mới toát mồ hôi các bác ạ : 1 bản vẽ của bọn e in tỉ lệ 1/500 trên layout gồm 198 tờ A0 ghép lại (hu hu...). e vừa đi in thử 1 bản vẽ mất 01 ngày trời... :bigsmile: . Vì thế e lên đây cầu cứu các bác cao thủ trên diễn đàn giúp e có được cái lisp nào tự động in tất cả các khung in trên layout mà không cần ngồi pick in từng bản (in xong đống hồ sơ của e chắc tay e cơ bắp nổi cuồn cuộn mất)....mong các bác tận tình giúp đỡ, gửi tất cả các bác lời chào thân ái và quyết thắng !

Trên diễn đàn có cách tách bản vẽ, mỗi bản vẽ lại là 1 khung, sau đó dùng chức năng của MPlot (tg: NGUYEN HOANH) xem!
  • 0
Hãy ước cho trọn 1 ước mơ!

#645 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 15 April 2008 - 01:05 PM

các bác ơi, cứu e với, lâu nay e không có thời gian vào diễn đàn vì đang phải làm 1 con quy hoạch chi tiết tỉ lệ 1/500 khoảng 2.000 ha. Bọn e hì hục vẽ xong đến lúc đi in thì mới toát mồ hôi các bác ạ : 1 bản vẽ của bọn e in tỉ lệ 1/500 trên layout gồm 198 tờ A0 ghép lại (hu hu...). e vừa đi in thử 1 bản vẽ mất 01 ngày trời... :bigsmile: . Vì thế e lên đây cầu cứu các bác cao thủ trên diễn đàn giúp e có được cái lisp nào tự động in tất cả các khung in trên layout mà không cần ngồi pick in từng bản (in xong đống hồ sơ của e chắc tay e cơ bắp nổi cuồn cuộn mất)....mong các bác tận tình giúp đỡ, gửi tất cả các bác lời chào thân ái và quyết thắng !

Bạn hãy đặt mỗi một khung tên trên 1 layout.

Sau đó, chọn tất cả các layout (bằng cách click rồi giữ shift) sau đó phải chuột chọn Publish selected layouts.
  • 0

#646 hiepga1981

hiepga1981

    biết zoom

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

Đã gửi 16 April 2008 - 04:38 PM

cám ơn các bác rất nhiều nhưng bản vẽ của e bắt buộc phải để 1 layout, còn 199 cái khung để in A0 kia phải xếp cạnh nhau (tiếp giáp biên để khi in ra có thể ghép trùng khớp với nhau được - bản vẽ của e nó ghép mảnh bản đồ như cái google map ý, bao gồm nhiều hình vuông dữ liệu ghép lại và phải trùng khớp với nhau). Nếu tách mỗi bản vẽ 1 layout thì e không thể ghép với nhau được sau khi in ra, mong các bác chỉ bảo e cách nào giải quyết khác với. Mong tin các bác sớm
  • 0

#647 conghoa

conghoa

    biết lệnh attdef

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

Đã gửi 18 April 2008 - 11:47 AM

Cho mình xin một lisp chuyển đổi block.

- Mình có 2 block (A, B ) ở hai vị trí khác nhau, bây giờ mình muốn chuyển đổi vị trí của block A và block B cho nhau.

Ví dụ:
chạy lisp ----> chọn block A, B -----> lisp sẽ tự động chuyển đổi vị trí 2 điểm chèn của block A và block B cho nhau!

Thanks!
  • 0

#648 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 18 April 2008 - 01:00 PM

Cho mình xin một lisp chuyển đổi block.

- Mình có 2 block (A, B ) ở hai vị trí khác nhau, bây giờ mình muốn chuyển đổi vị trí của block A và block B cho nhau.

Ví dụ:
chạy lisp ----> chọn block A, B -----> lisp sẽ tự động chuyển đổi vị trí 2 điểm chèn của block A và block B cho nhau!

Thanks!


lệnh SWB (SWap block) sẽ làm điều bạn muốn:
(defun c:swb( / ent1 ent2 tt1 tt2 o1 o2)
(setq ent1 (car (entsel "\nHay pick vao block A: ")))
(redraw ent1 3)
(setq ent2 (car (entsel "\nHay pick vao block B: "))
tt1 (entget ent1)
tt2 (entget ent2)
o1 (assoc 10 tt1)
o2 (assoc 10 tt2)
tt1 (subst o2 o1 tt1)
tt2 (subst o1 o2 tt2)
)
(entmod tt1)
(entmod tt2)
(redraw ent2 4)
(princ)
)

  • 1

#649 missone's

missone's

    biết vẽ rectang

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

Đã gửi 20 April 2008 - 10:14 AM

Em muốn Trim nhiều đối tượng mà dùng một dao cắt- Giống như là khi có một loạt đường thẳng-nó hơi dài nên em phải vẽ một đường thẳng để Trim nó ấy- em phải lựa chọn từng cái một.
Có ai có thể giúp em chút- có thể dùng lệnh hoặc lisp
Em xin cảm ơn nhiều!
(Em ko thấy chỗ up ảnh nên ko up được- Các bác thông cảm chút nghe!)
@Em có tham khảo một số bài viết trên 4room rồi but mà ko rõ lắm- với lại cũng là phải chọn từng điểm căt một- Các bác chỉ cụ thể cho em cái nha!
Chúc mọi người tuần mới vui vẻ!
  • 0
neverforever

#650 Nộ Thiên

Nộ Thiên

    biết lệnh ddedit

  • Members
  • PipPipPipPip
  • 297 Bài viết
Điểm đánh giá: 133 (tàm tạm)

Đã gửi 20 April 2008 - 12:05 PM

Em muốn Trim nhiều đối tượng mà dùng một dao cắt- Giống như là khi có một loạt đường thẳng-nó hơi dài nên em phải vẽ một đường thẳng để Trim nó ấy- em phải lựa chọn từng cái một.
Có ai có thể giúp em chút- có thể dùng lệnh hoặc lisp
Em xin cảm ơn nhiều!
(Em ko thấy chỗ up ảnh nên ko up được- Các bác thông cảm chút nghe!)
@Em có tham khảo một số bài viết trên 4room rồi but mà ko rõ lắm- với lại cũng là phải chọn từng điểm căt một- Các bác chỉ cụ thể cho em cái nha!
Chúc mọi người tuần mới vui vẻ!

Gõ "trim" enter
select đối tượng để chọn dao cắt xong
gõ "f", rồi pick 2 điểm để cắt hàng loạt
Xong.
  • 1

#651 namng

namng

    biết zoom

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

Đã gửi 23 April 2008 - 12:06 PM

Bac Hoang viet dum toi cai lisp co noi dung sau nha, Tui viet mai khong dc
Noi dung lisp:
1. Chon 1 pline
2. Nhap mot muc cao do chuan
3. Ve duong dong tai cac dinh pline den duong nam ngang co cao do chuan vua nhap ( ve mat cat ngang y ma)
Bac giup em voi nha
  • 0

#652 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 23 April 2008 - 08:34 PM

Bac Hoang viet dum toi cai lisp co noi dung sau nha, Tui viet mai khong dc
Noi dung lisp:
1. Chon 1 pline
2. Nhap mot muc cao do chuan
3. Ve duong dong tai cac dinh pline den duong nam ngang co cao do chuan vua nhap ( ve mat cat ngang y ma)
Bac giup em voi nha


lệnh DONG dưới đây sẽ làm điều bạn muốn:
(defun c:dong ( / ent py)
(setq ent (car (entsel "\nChon 1 pline:"))
py (cadr (trans (getpoint "\nNhap mot muc cao do chuan: ") 1 0))
)
(mapcar '(lambda (x)(if (= (car x) 10) (entmake (list (cons 0 "line") x (list 11 (cadr x) py)))))(entget ent))
(princ)
)

  • 1

#653 namng

namng

    biết zoom

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

Đã gửi 24 April 2008 - 01:05 PM

Cam on bac Nguyen Hoanh. Bac co the giai thich ro ho em cai cau lenh nay khong
*****
(mapcar '(lambda (x)(if (= (car x) 10) (entmake (list (cons 0 "line") x (list 11 (cadr x) py)))))(entget ent))
*****
Em doc mai ma van khong hieu trinh tu the nao.
Bac giup em voi nha.
Thank.
  • 0

#654 duongsatdn

duongsatdn

    biết lệnh adcenter

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

Đã gửi 24 April 2008 - 02:15 PM

Gõ "trim" enter
select đối tượng để chọn dao cắt xong
gõ "f", rồi pick 2 điểm để cắt hàng loạt
Xong.

Với CAD2008 không cần gõ thêm "f", chỉ cần chọn nhiều đối tượng theo kiểu cửa sổ.
  • 0

#655 crazylisp

crazylisp

    biết vẽ line

  • CADViet Team
  • PipPip
  • 20 Bài viết
Điểm đánh giá: 14 (tàm tạm)

Đã gửi 26 April 2008 - 04:12 PM

Cam on bac Nguyen Hoanh. Bac co the giai thich ro ho em cai cau lenh nay khong
*****
(mapcar '(lambda (x)(if (= (car x) 10) (entmake (list (cons 0 "line") x (list 11 (cadr x) py)))))(entget ent))
*****
Em doc mai ma van khong hieu trinh tu the nao.
Bac giup em voi nha.
Thank.

Bạn mới học lisp đừng đú theo bác Hoành, kẻo tẩu hoả nhập ma.
  • 0

#656 namng

namng

    biết zoom

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

Đã gửi 28 April 2008 - 03:13 PM

Mình cũng biết một ít về Lisp mà. Đang định dùng cái Lisp của bác Hoanh để viết tiếp cái tính khoảng cách giữa các đỉnh của pline theo phương ngang và phương đứng. Nhưng mà đọc mãi cái dòng lệnh đó mà không hiểu. Bác Hoanh hay bác nao đó giúp tôi với.
  • 0

#657 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 28 April 2008 - 04:18 PM

Mình cũng biết một ít về Lisp mà. Đang định dùng cái Lisp của bác Hoanh để viết tiếp cái tính khoảng cách giữa các đỉnh của pline theo phương ngang và phương đứng. Nhưng mà đọc mãi cái dòng lệnh đó mà không hiểu. Bác Hoanh hay bác nao đó giúp tôi với.

Xin phép anh Hoành, ssg thêm mấy dòng giải thích cho bạn namng:
1) Biểu thức (entget ent) lấy data của pline
2) Trong đám data đó, cái nào có car bằng 10 là các đỉnh pline. Hàm if lọc bỏ những cái không thoả điều kiện này.
3) (list 11 (cadr x) py) là điểm có cùng hoành độ với điểm đang xét, tung độ là py
4) Entmake tạo 1 line tương ứng với 2 điểm vừa đề cập
5) Lambda là hàm khuyết danh, với argument x.
6) Mapcar thực hiện lambda lần lượt cho tất cả các thành phần của data. Kết hợp với if, nó chỉ thực hiện với các thành phần chứa toạ độ các đỉnh của pline.
Nếu bạn chưa thoả mãn với các giải thích trên thì có lẽ crazylisp có lý! Bạn nên "luyện công" với các kỹ thuật đơn giản hơn.
Ví dụ như cái này, hy vọng là bạn hiểu được:
(defun C:DONG2( / ent data py x p)
(setq
ent (car (entsel "\nChon 1 pline:"))
data (entget ent)
py (cadr (trans (getpoint "\nNhap mot muc cao do chuan: ") 1 0))
)
(foreach x data
(if (= (car x) 10) (progn
(setq p (list (cadr x) py))
(entmake (list (cons 0 "line") x (cons 11 p)))
))
)
)

Cung cách hoạt động của 2 chương trình trên giống y chang nhau, chỉ khác ở cách viết. Bạn hiểu DONG2 thì có thể hiểu được DONG của anh Hoành.
  • 0

#658 tienlagiay_dxt

tienlagiay_dxt

    biết lệnh trim

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

Đã gửi 29 April 2008 - 10:17 AM

Mình có 1 loạt block attribute, mình muốn thống kê tọa độ các tại các điểm chèn của nhũng block att kia
Có ai có lisp giúp mình thực hiện được cong việc kia ko, tọa độ của các điểm chèn các block at kia dc ghi ra dưới dang x==, y== thì càng tốt
  • 0

#659 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 29 April 2008 - 10:20 AM

Mình có 1 loạt block attribute, mình muốn thống kê tọa độ các tại các điểm chèn của nhũng block att kia
Có ai có lisp giúp mình thực hiện được cong việc kia ko, tọa độ của các điểm chèn các block at kia dc ghi ra dưới dang x==, y== thì càng tốt

bạn có thể upload file dwg lên được không, trong file dwg có block attribute của bạn?
  • 0

#660 tienlagiay_dxt

tienlagiay_dxt

    biết lệnh trim

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

Đã gửi 29 April 2008 - 10:28 AM

bạn có thể upload file dwg lên được không, trong file dwg có block attribute của bạn?

Đây là file bản vẽ của mình, mình có các ranh mốc ct là các block att, mình muốn có tọa độ của các ranh mốc đó(chính là tọa độ) của các điểm chèn
http://www.cadviet.com/upfiles/MOC.rar
  • 0