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

#481 anhducna

anhducna

    biết vẽ arc

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

Đã gửi 21 February 2008 - 03:02 PM

đây là link http://www.cadviet.com/upfiles/Tn12dc.dwg
bác giúp nhé!

Đây là link file.Bác xem và giúp tôi nhé, cảm ơn bác!
  • 0

#482 dongkhanhlove

dongkhanhlove

    biết pan

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

Đã gửi 23 February 2008 - 03:16 PM

Chào năm mới !
Chào Cadviet !
Chào các bác !
Em vừa mới gia nhập vào và có một vài vấn đề xin các bác giúp cho :
1-Muốn tạo lisp để gán biến hệ thống "BLOCKEDITLOCK" và biến "DBLCLKEDIT" vào bản vẽ và có thể chỉnh lại thông qua biến đó (luôn đi kèm theo bản vẽ đó dù ở mọi máy ), và không cho phép những đối tượng là block được kiết xuất ra khỏi bản vẽ đó bằng các lệnh như :Ctrl+C,Ctrl+X,Write block,...
2-Khi người khác sử dụng các phương thức ánh xạ bên ngoài vào như XREF thì được nhưng không cho "bind",edit nó.
Nói tóm lại là "nội bất xuất,ngoại có nhập"
Xin càm ơn !
  • 0
Tri thức là vô giá !!!!!!!!!!!!!!!!!

#483 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 23 February 2008 - 03:27 PM

Chào năm mới !
Chào Cadviet !
Chào các bác !
Em vừa mới gia nhập vào và có một vài vấn đề xin các bác giúp cho :
1-Muốn tạo lisp để gán biến hệ thống "BLOCKEDITLOCK" và biến "DBLCLKEDIT" vào bản vẽ và có thể chỉnh lại thông qua biến đó (luôn đi kèm theo bản vẽ đó dù ở mọi máy ), và không cho phép những đối tượng là block được kiết xuất ra khỏi bản vẽ đó bằng các lệnh như :Ctrl+C,Ctrl+X,Write block,...
2-Khi người khác sử dụng các phương thức ánh xạ bên ngoài vào như XREF thì được nhưng không cho "bind",edit nó.
Nói tóm lại là "nội bất xuất,ngoại có nhập"
Xin càm ơn !

Lisp không làm được bạn ạ!

Nếu được thì đã có chương trình khóa bản vẽ theo dạng này!
  • 0

#484 dongkhanhlove

dongkhanhlove

    biết pan

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

Đã gửi 23 February 2008 - 04:00 PM

Chào bác Nguyen Hoanh !

Cám ơn bác đã cho biết, vậy em phải dùng theo cách của bác "thoclep" trên diễn đàn thôi, chỉ còn cái XREF không được là khiến em thật khó xử thôi. Nhân tiện nhờ bác xem thử có chỉnh sửa gì được trong lisp ấy để có thể dùng Xref đươc không !

Xin cảm ơn bác rất nhiểu, bác thật là nhiệt tình !
  • 0
Tri thức là vô giá !!!!!!!!!!!!!!!!!

#485 anhducna

anhducna

    biết vẽ arc

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

Đã gửi 29 February 2008 - 07:40 PM

Tôi muốn nhờ mọi người viết lisp này với
công việc của nó là đổi vị trí 2 đối tượng cho nhau, đối tượng ở đây có thể là text, hoặc hình vẽ.
  • 0

#486 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 29 February 2008 - 11:48 PM

Tôi muốn nhờ mọi người viết lisp này với
công việc của nó là đổi vị trí 2 đối tượng cho nhau, đối tượng ở đây có thể là text, hoặc hình vẽ.


Text thì dễ hiểu rồi.

Bạn muốn đổi chỗ hình vuông cho hình tròn như thế nào?
  • 0

#487 pooh_21

pooh_21

    biết zoom

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

Đã gửi 01 March 2008 - 02:28 PM

Khi vẽ đường dốc, mình toàn mất công lấy chiều cao chia cho chiều dài để biết được nó là nghiêng bao nhiêu %. Mình muốn xin một lisp thực hiện việc đó.
- Khi chạy lisp -----> chọn đối tượng (đường line, hoặc pline) ----->hiện ra một text có ghi độ nghiên theo phần trăm của đối tượng đó.
Cảm ơn các bạn nhiều.
  • 0

#488 anhducna

anhducna

    biết vẽ arc

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

Đã gửi 02 March 2008 - 12:50 PM

Text thì dễ hiểu rồi.

Bạn muốn đổi chỗ hình vuông cho hình tròn như thế nào?

à, với các hình đơn giản mình có thể dùng trọng tâm của nó để thay đổi vị trí. còn với các hình phức tạp có thể thay đổi bằng cách pick điểm trên màn hình.
hoặc nếu phức tạp chỉ thay đổi text cũng được!
  • 0

#489 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 02 March 2008 - 08:14 PM

à, với các hình đơn giản mình có thể dùng trọng tâm của nó để thay đổi vị trí. còn với các hình phức tạp có thể thay đổi bằng cách pick điểm trên màn hình.
hoặc nếu phức tạp chỉ thay đổi text cũng được!

Vấn đề phức tạp.
Nếu chỉ là text thì lệnh CT dưới đây sẽ đáp ứng điều bạn cần:
(defun c:ct( / e1 e2 a1 a2)
(setq e1 (car (entsel "\nDoi tuong 1: ")))
(redraw e1 3)
(setq e2 (car (entsel "\nDoi tuong 2: ")))
(redraw e1 4)
(setq
a1 (assoc 10 (entget e1))
a2 (assoc 10 (entget e2))
)
(entmod (subst a2 a1 (entget e1)))
(entmod (subst a1 a2 (entget e2)))
)

  • 1

#490 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 02 March 2008 - 08:27 PM

Khi vẽ đường dốc, mình toàn mất công lấy chiều cao chia cho chiều dài để biết được nó là nghiêng bao nhiêu %. Mình muốn xin một lisp thực hiện việc đó.
- Khi chạy lisp -----> chọn đối tượng (đường line, hoặc pline) ----->hiện ra một text có ghi độ nghiên theo phần trăm của đối tượng đó.
Cảm ơn các bạn nhiều.

Pline thì hơi phức tạp.

Nếu là line thì lệnh XD (xác định dốc) dưới đây sẽ giúp bạn:

(defun c:xd ()
(setq sel (entsel "\nPick vao line can xac dinh doc: ")
tt (entget (car sel))
)
(if (= "LINE" (cdr (assoc 0 tt)))
(progn
(setq
p (cadr sel)
p1 (cdr (assoc 10 tt))
p2 (cdr (assoc 11 tt))
dx (- (car p1) (car p2))
dy (- (cadr p1) (cadr p2))
i (strcat (rtos (* (abs (/ dy dx)) 100.0) 2 2) "%")
)
(wtxt i p)
)
(alert "Ban phai pick vao line!")
)
)

(defun wtxt (txt p / sty d h)
(setq
sty (getvar "textstyle")
d (tblsearch "style" sty)
h (cdr (assoc 40 d))
)
(entmake (list (cons 0 "TEXT")
(cons 7 sty)
(cons 1 txt)
(cons 10 p)
(if (> h 0)
(cons 40 h)
(assoc 40 d)
)
(assoc 41 d)
)
)
)

  • 1

#491 Ar_Chanwoo

Ar_Chanwoo

    biết lệnh break

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

Đã gửi 05 March 2008 - 01:41 AM

Em muốn hỏi các bác đôi điều :
-Em muốn biết khi ta Load các lisp (load tạm thời 1 bản vẽ và load cho cả các bản vẽ sau ) và khi ta Add 1đường dẫn nào đó ( Trong Support File Search Path) thì các thông số đó sẽ nằm ở đâu? Có thể viết cho em 1 Lisp mà khi ta gõ 1 lệnh nào đó của Lisp thì nó sẽ tạo cho ta các đường dẫn mà ta muốn trong Support File Search Path và load cho ta 1 số File nào đó.Như thế sẽ không phải cứ command : Op->File->Support File Search Path-> Add -> Browse.....
-Em có nhiều File nằm trong 1 Folder.Có thể viết 1 Lisp mà ta có thể Load hết tất cả các File trong Folder đó không(không phải Lisp liệt kê tất cả các File Lisp có trong Folder đó rồi Load đâu)
Cám ơn các bác!
  • 0

#492 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 05 March 2008 - 07:39 AM

Em muốn hỏi các bác đôi điều :
-Em muốn biết khi ta Load các lisp (load tạm thời 1 bản vẽ và load cho cả các bản vẽ sau ) và khi ta Add 1đường dẫn nào đó ( Trong Support File Search Path) thì các thông số đó sẽ nằm ở đâu? Có thể viết cho em 1 Lisp mà khi ta gõ 1 lệnh nào đó của Lisp thì nó sẽ tạo cho ta các đường dẫn mà ta muốn trong Support File Search Path và load cho ta 1 số File nào đó.Như thế sẽ không phải cứ command : Op->File->Support File Search Path-> Add -> Browse.....
-Em có nhiều File nằm trong 1 Folder.Có thể viết 1 Lisp mà ta có thể Load hết tất cả các File trong Folder đó không(không phải Lisp liệt kê tất cả các File Lisp có trong Folder đó rồi Load đâu)
Cám ơn các bác!

1) Khi appload bình thường, Acad không lưu thông số nào. Toàn bộ nội dung load nằm trong memory, sẽ không còn vết tích gì khi mở bản vẽ mới, thoát Acad hoặc tắt máy.

2) Acad chỉ ghi nhận và lưu thông số khi dùng Startup Suite. Cái này mình chưa tìm, còn Support File Search Path thì ở đây:
(getenv "ACAD") ;;;Chú ý là chữ ACAD phải viết HOA

3) Function bổ sung Support File Search Path:
(defun addspath(s);;;Add support file search path. S: string, specify path
(setenv "ACAD" (strcat (getenv "ACAD") ";" s))
)
Use example: (addspath "D:\\MyLisp")

4) Acad không chấp nhận kiểu "hàng loạt" (load "\\...\\*.lsp"), bạn phải làm như cái bạn đã đề cập trong dấu ngoặc đơn trên. Bản thân mình cũng làm như vậy và cho thằng acad.lsp autoload luôn.
  • 1

#493 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 05 March 2008 - 08:22 AM

-Em có nhiều File nằm trong 1 Folder.Có thể viết 1 Lisp mà ta có thể Load hết tất cả các File trong Folder đó không(không phải Lisp liệt kê tất cả các File Lisp có trong Folder đó rồi Load đâu)
Cám ơn các bác!


Đây là một câu hỏi cực kỳ ngớ ngẩn. Bất kỳ khi nào bạn làm một action nào trên một folder thì trước tiên HĐH cũng có thao tác list các file trong folder đó. Vậy nên nếu như có một actio nào dạng như là action ..\\*.LSP thì nó sẽ list file vào memory rồi một thực hiện action trên từng file
  • 1

#494 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 05 March 2008 - 09:34 AM

Em muốn hỏi các bác đôi điều :
-Em muốn biết khi ta Load các lisp (load tạm thời 1 bản vẽ và load cho cả các bản vẽ sau ) và khi ta Add 1đường dẫn nào đó ( Trong Support File Search Path) thì các thông số đó sẽ nằm ở đâu? Có thể viết cho em 1 Lisp mà khi ta gõ 1 lệnh nào đó của Lisp thì nó sẽ tạo cho ta các đường dẫn mà ta muốn trong Support File Search Path và load cho ta 1 số File nào đó.Như thế sẽ không phải cứ command : Op->File->Support File Search Path-> Add -> Browse.....
-Em có nhiều File nằm trong 1 Folder.Có thể viết 1 Lisp mà ta có thể Load hết tất cả các File trong Folder đó không(không phải Lisp liệt kê tất cả các File Lisp có trong Folder đó rồi Load đâu)
Cám ơn các bác!

Cái này có thể giải quyết yêu cầu 1 của bạn. Lưu ý phần màu xanh bạn sử lại theo cái của bạn.
;-------------------

(Defun C:run ( )
(setq OD (GETENV "ACAD"))
(setq NEW (strcat OD ";E:\\tienich\\dcl;E:\\tienich\\dwg;E:\\tienich\\hdt;E:\\tienich\\tvnd;E:\\tienich\\tvct"))
(setenv "ACAD" NEW)

(load"e:/tienich/lenh/thuvienndung")
(load"e:/tienich/lenh/thuvienchitiet")
(load"e:/tienich/lenh/tienichchonht")
(load"e:/tienich/lenh/thongke")
(load"e:/tienich/lenh/tienichdimht")
(load"e:/tienich/lenh/tienichblockht")


(Princ)
)

;-------------------

  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#495 Ar_Chanwoo

Ar_Chanwoo

    biết lệnh break

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

Đã gửi 06 March 2008 - 02:07 AM

Cám ơn các Pac.Lisp của mấy bác hướng dẫn đã chạy đc rồi.
Nhân tiên em muốn nhờ các bác viết hộ cho e lisp này :
E có 3 file : 1 file lệnh của cad là acad.pgp và 2 file hatch(acad.pat và acadiso.pat) nằm trong 1 thư mục có đường dẫn đã biết.Khi ta gõ lênh "Loadlenh" của lisp(mà các bác viết cho e)thì cad se hỏi ta 2 lựa chọn :
-Copy file acad.pgp vao thư mục cad để có thể sử dụng nhũng lệnh tắt mà mình đã sửa trong file đó cho những lần sau.
-Nếu chúng ta đã copy vào rồi và giờ chúng ta không muốn dùng nữa thì cad sẽ Remove về nguyên trạng thái ban đầu của file acad.pgp
Cũng tương tự như trên với 2file hatch hki ta gõ lệnh Loadhatch
thanks!!!!!!!
  • 0

#496 Ar_Chanwoo

Ar_Chanwoo

    biết lệnh break

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

Đã gửi 06 March 2008 - 02:18 AM

Ah wên!
Anh Hoanh còn nhớ cái lisp ẩn đối tượng theo màu không ?Giờ mình muốn hiện lại các đối tượng đó thì làm sao hả anh?
  • 0

#497 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 06 March 2008 - 06:56 AM

Ah wên!
Anh Hoanh còn nhớ cái lisp ẩn đối tượng theo màu không ?Giờ mình muốn hiện lại các đối tượng đó thì làm sao hả anh?


Tên lệnh vẫn như cũ, là VIS
  • 1

#498 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 06 March 2008 - 08:11 AM

Cám ơn các Pac.Lisp của mấy bác hướng dẫn đã chạy đc rồi.
Nhân tiên em muốn nhờ các bác viết hộ cho e lisp này :
E có 3 file : 1 file lệnh của cad là acad.pgp và 2 file hatch(acad.pat và acadiso.pat) nằm trong 1 thư mục có đường dẫn đã biết.Khi ta gõ lênh "Loadlenh" của lisp(mà các bác viết cho e)thì cad se hỏi ta 2 lựa chọn :
-Copy file acad.pgp vao thư mục cad để có thể sử dụng nhũng lệnh tắt mà mình đã sửa trong file đó cho những lần sau.
-Nếu chúng ta đã copy vào rồi và giờ chúng ta không muốn dùng nữa thì cad sẽ Remove về nguyên trạng thái ban đầu của file acad.pgp
Cũng tương tự như trên với 2file hatch hki ta gõ lệnh Loadhatch
thanks!!!!!!!

1) Về logic thì thế này:
Thay file A bằng file B?
- Rename A thành A0
- Copy B -> A

Trả lại nguyên trạng?
- Delete A
- Rename A0 thành A

2) Bạn lật Developer Help - Autolisp Reference - V-functions ra xem. Các họ functions dạng vl-file-xxxx có đủ "đồ chơi" cho các mục đích tương tự như trên. Mỗi function đều có ví dụ mẫu, bạn đọc là hiểu ngay.

3) Một ví dụ cụ thể: giả sử bạn có file cấu hình theo ý thích lưu ở D:\acad.pgp
Lệnh MCP thiết lập cấu hình theo ý thích, RCP trả lại nguyên trạng. Bạn đọc comments ở các dòng code sẽ hiểu rõ. Chương trình được lập ở dạng đơn giản nhất để bạn dễ đọc. Ngoài ra, bạn tự đặt thêm các điều kiện để hoàn thiện tiếp chương trình. Ví dụ: nếu không tìm thấy file thì xử lý thế nào?

;;;---------------------------------------------
(defun C:MCP( / fn1 fd1 fb1 fe1 fn0 fn2) ;;;Make Configuration Parameters
(setq
fn1 (findfile "acad.pgp") ;;;Full file name of acad.pgp
fd1 (vl-filename-directory fn1) ;;;Directory
fb1 (vl-filename-base fn1) ;;;Filename base
fe1 (vl-filename-extension fn1) ;;;Extension
fn0 (strcat fd1 "\\" fb1 "_bak" fe1) ;;;Backup file
fn2 "D:\\acad.pgp" ;;;Myfile
)
(vl-file-rename fn1 fn0) ;;;Rename acad.pgp to acad_bak.pgp
(vl-file-copy fn2 fn1) ;;;Copy Myfile to acad.pgp
(alert "Finish!")
)
;;;---------------------------------------------
(defun C:RCP( / fn1 fn0) ;;;Reset Configuration Parameters
(setq
fn1 (findfile "acad.pgp")
fn0 (findfile "acad_bak.pgp")
)
(vl-file-delete fn1) ;;;Delete current acad.pgp
(vl-file-rename fn0 fn1) ;;;Reset acad.pgp from backup file
(alert "Finish!")
)
;;;---------------------------------------------

  • 1

#499 arch_chien111

arch_chien111

    biết zoom

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

Đã gửi 07 March 2008 - 02:23 AM

;-------------------

(Defun C:run ( )
(setq OD (GETENV "ACAD"))
(setq NEW (strcat OD ";E:\\tienich\\dcl;E:\\tienich\\dwg;E:\\tienich\\hdt;E:\\tienich\\tvnd;E:\\tienich\\tvct"))
(setenv "ACAD" NEW)

(load"e:/tienich/lenh/thuvienndung")
(load"e:/tienich/lenh/thuvienchitiet")
(load"e:/tienich/lenh/tienichchonht")
(load"e:/tienich/lenh/thongke")
(load"e:/tienich/lenh/tienichdimht")
(load"e:/tienich/lenh/tienichblockht")


(Princ)
)

;-------------------


Em không hiểu tại sao khi e dùng lisp này để load các lisp ma e có thì chỉ load đc trong bản vẽ đang dùng, khi mở 1 file mới thì không đc,
Thanks bác SSG đã hướng dẫn e,đoạn lisp đó rất dễ đọc !!!!!!!!!!!!
  • 0
Children of bodom

#500 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 07 March 2008 - 07:30 AM

... Em không hiểu tại sao khi e dùng lisp này để load các lisp ma e có thì chỉ load đc trong bản vẽ đang dùng, khi mở 1 file mới thì không đc ...

Bạn xem ở đây:
http://www.cadviet.c...;st=0#entry6295

Ngoài ra, bạn có thể dùng tính năng autoload của file acad.lsp để làm việc này. Acad.lsp là file đặc biệt, Acad sẽ autoload toàn bộ nội dung của nó mỗi khi Start, Open hoặc New.
Ví dụ, bạn có file D:\MyFile.lsp. Bạn tạo file acad.lsp trong thư mục gốc của Acad, thư mục ...\Support, hoặc bất cứ thư mục nào đã được thiết lập "Support File Search Path" với nội dung sau: (load "D:\\MyFile.lsp")
Nếu acad.lsp đã có thì bổ sung thêm nội dung trên vào.
  • 0