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ị

dmg    0

yes, được rùi bác ssg ơi, chỉ cần set unit lại 2 con số 0 sau dấu phẩy là chuẩn rùi

thanks bác nhiều :unsure:

khi nào bác thiết kế các tòa nhà chung cư, hay office building lớn cứ gọi bọn em nhé, cty em chuyên về phủ sóng inbuilding di động và wireless trong các tòa nhà lớn, sóng outdoor không vào sâu được, hehe hợp tác mần ăn nha bác, bác có sóng ở mọi nơi, bọn em có xiền hàng tháng :unsure:

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
Bạn có thể post yêu cầu về autolisp ở topic này.

Em xin hỏi các bác một chút:

- Các câu lệnh khi viết lisp dựa trên chương trình nào? (VBA, Pascal....), tại sao lại cứ phải đóng mở ngoặc như thế?

- Em xin nhờ các bác viết hộ em một lisp để có thể tạo thành các điểm hoặc đường thẳng với cấu tạo tương tự như lệnh Array nhưng có khoảng cách không đều nhau.

Tức là giả sử ta có một file trong excel với cột A là khoảng cách các điểm 3m; 4m; 4,5m; 5m...... các điểm cách nhau không theo một quy luật nào, em muốn có thể dùng lệnh nào đó khi pick chuột vào một point hay line với một góc do mình chọn và tạo thành các điểm có khoảng cách theo file excel đó.

Không biết em giải thích như vậy đã được chưa ạ.

Rất mong các bác giúp đỡ. Em cảm ơ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
xaydung    12

Mình đang rất cần 1 lisp có chức năng ngăn không cho bản vẽ có thể Save as... được

nếu không nhập đúng password. cụ thể:

giả sử lisp đó đã được tải, khi vẽ xong bản vẽ tôi muốn save vào và đặt tên file

khi đó dòng lệnh command hỏi nhập pass, nếu nhập sai thì không save được (mã pass nằm trong file lsp )

nhập đúng sẽ hiện bảng Save Drawing as.

BÁc nào biết giúp mình nha, 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
Nguyen Hoanh    4.524
Em xin hỏi các bác một chút:

- Các câu lệnh khi viết lisp dựa trên chương trình nào? (VBA, Pascal....), tại sao lại cứ phải đóng mở ngoặc như thế?

- Em xin nhờ các bác viết hộ em một lisp để có thể tạo thành các điểm hoặc đường thẳng với cấu tạo tương tự như lệnh Array nhưng có khoảng cách không đều nhau.

Tức là giả sử ta có một file trong excel với cột A là khoảng cách các điểm 3m; 4m; 4,5m; 5m...... các điểm cách nhau không theo một quy luật nào, em muốn có thể dùng lệnh nào đó khi pick chuột vào một point hay line với một góc do mình chọn và tạo thành các điểm có khoảng cách theo file excel đó.

Không biết em giải thích như vậy đã được chưa ạ.

Rất mong các bác giúp đỡ. Em cảm ơn!

- Lisp được viết trên bất cứ trình soạn thảo nào, ví dụ như notepad, wordpad,... Nhưng tốt nhất là nên sử dụng Visual Lisp Editor nằm trong bộ AutoCAD bằng lệnh Vlide vì sự trực quan lúc soạn thảo của nó cũng như các chức năng gỡ rối, biên dịch....

 

- Lisp dưới đây là lệnh array bạn cần. Cách sử dụng: giống lệnh copy. Bạn chọn tập đối tượng, sau đó chọn điểm gốc, tiếp đến chọn hướng copy (các đối tượng sẽ được array theo hướng mà bạn pick), và cuối cùng là nhập vào các khoảng cách để lisp array.

 

Nếu bạn lấy dữ liệu bên excel, hãy sắp xếp các số liệu trên 1 cột của excel, nhấn Ctr+C, rồi quay sang CAD dùng lệnh ACD, lúc chương trình hỏi về các khoảng cách thì bạn nhấn Ctr+V.

 

(defun c:acd()
 (setq  ss (ssget)
 pgoc (getpoint "\nHay vao diem goc: ")
 plast (getpoint pgoc "\nPick vao huong array: ")
 kc (getdist "\nVao khoang cach dau tien: ")
        index 1
 goc (angle pgoc plast)	 
 plast (polar pgoc goc kc)
 )

 (while kc
   (luuos)
   (setvar "osmode" 0)
   (command ".copy" ss "" pgoc plast)
   (traos)
   (setq
     index (1+ index)
     kc (getdist (strcat "\nVao khoang cach thu " (itoa index) ": "))      
   )
   (if kc (setq plast (polar plast goc kc)))
 )
)
(defun luuos ()
 (setq
   HOANH_OSMODE   (getvar "OSMODE")
   HOANH_AUTOSNAP (getvar "AUTOSNAP")
 )
)
(defun traos ()
 (if HOANH_OSMODE
   (setvar "OSMODE" HOANH_OSMODE)
 )
 (if HOANH_AUTOSNAP
   (setvar "AUTOSNAP" HOANH_AUTOSNAP)
 )
)

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
Nếu bạn lấy dữ liệu bên excel, hãy sắp xếp các số liệu trên 1 cột của excel, nhấn Ctr+C, rồi quay sang CAD dùng lệnh ACD, lúc chương trình hỏi về các khoảng cách thì bạn nhấn Ctr+V.

Gửi bác Hoành!

Em rất cám ơn bác vì code này, khi em sử dụng em thấy rất ổn.

Bác giỏi thật đấy :unsure: .

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
xaydung    12

Mình đang rất cần 1 lisp có chức năng ngăn không cho bản vẽ có thể Save as... được

nếu không nhập đúng password. cụ thể:

giả sử lisp đó đã được tải, khi vẽ xong bản vẽ tôi muốn save vào và đặt tên file

khi đó dòng lệnh command hỏi nhập pass, nếu nhập sai thì không save được (mã pass nằm trong file lsp )

nhập đúng sẽ hiện bảng Save Drawing as.

BÁc nào biết giúp mình nha, 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
Nguyen Hoanh    4.524
Mình đang rất cần 1 lisp có chức năng ngăn không cho bản vẽ có thể Save as... được

nếu không nhập đúng password. cụ thể:

giả sử lisp đó đã được tải, khi vẽ xong bản vẽ tôi muốn save vào và đặt tên file

khi đó dòng lệnh command hỏi nhập pass, nếu nhập sai thì không save được (mã pass nằm trong file lsp )

nhập đúng sẽ hiện bảng Save Drawing as.

BÁc nào biết giúp mình nha, thanks!

Rất tiếc là lisp không thể nằm trong file và tự kích hoạt được. Chặn việc save as bằng cách thức như vậy (dùng lisp tự kích hoạt) là điều không thể.

 

Đây cũng là niềm vui của những người sử dụng ACAD bởi nếu không như vậy, virus lisp sẽ ngập tràn không khác gì virus macro của Word, Excel.

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
ph168xd    310

Anh Hoành ơi!Anh có thể tạo cho em 1 iish thế này không?

Em sử dụng Sketch Up khá nhìu, và em thấy lệnh COPY bên này rất hay, ta copy 1 đối tượng theo phương X(chẳng hạn) cách đối tượng cũ 1 khoảng A, sau đó ta nhấn phím X11 thì lập tức ta có 11 đối tượng như thế cách đều nhau 1 khoảng a. Nhấn /3 lập tức xẽ có 3 đối tượng nằm xen kẽ giữa đối tượng đầu và đối tượng đc copy trước đó.... (kiểu như array bên cad nhưng lại hiện đại và nhanh hơn rất nhìu). Vậy bi giờ em muốn làm điều đó bên Cad thì có được không anh. Anh giúp em lish này với nha! Thank anh rất nhì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
Nguyen Hoanh    4.524

 

 

Anh Hoành ơi!Anh có thể tạo cho em 1 iish thế này không?
Em sử dụng Sketch Up khá nhìu, và em thấy lệnh COPY bên này rất hay, ta copy 1 đối tượng theo phương X(chẳng hạn) cách đối tượng cũ 1 khoảng A, sau đó ta nhấn phím X11 thì lập tức ta có 11 đối tượng như thế cách đều nhau 1 khoảng a. Nhấn /3 lập tức xẽ có 3 đối tượng nằm xen kẽ giữa đối tượng đầu và đối tượng đc copy trước đó.... (kiểu như array bên cad nhưng lại hiện đại và nhanh hơn rất nhìu). Vậy bi giờ em muốn làm điều đó bên Cad thì có được không anh. Anh giúp em lish này với nha! Thank anh rất nhìu!

lệnh AC dưới đây làm theo cái bạn cần. AC là Array giống Copy Multi


(defun c:ac (/ dt p1 p2 sl index kc goc)
(init)
(setq dt (ssget)
p1 (getpoint "\nVao diem goc: ")
p2 (getpoint p1 "\nVao diem den: ")
sl (getint "\nVao so lan: ")
goc (angle p1 p2)
kc (distance p1 p2)
index 0
)
(luuos)
(setvar "osmode" 0)
(repeat sl
(setq index (1+ index))
(command ".copy" dt "" p1 (polar p1 goc (* kc index)))
)
(traos)
(done)
)
;;------------------------------------------------------------
(defun hoanh_newerror (msg)
(if (and (/= msg "Function cancelled")
(/= msg "quit / exit abort")
)
(princ (strcat "\n" msg))
)
(done)
)
;;----------
(defun init ()
(setq
HOANH_CMD (getvar "CMDECHO")
HOANH_OLDERROR *error*
*error* hoanh_newerror

)
(setvar "CMDECHO" 0)
(command ".undo" "BE")
)
;;----------
(defun done ()
(command ".redraw")
(command ".undo" "E")
(if HOANH_CMD
(setvar "CMDECHO" HOANH_CMD)
)
(if HOANH_OLDERROR
(setq *error* HOANH_OLDERROR)
)
(princ)
)
;;----------
(defun luuos ()
(setq
HOANH_OSMODE (getvar "OSMODE")
HOANH_AUTOSNAP (getvar "AUTOSNAP")
)
)
(defun traos ()
(if HOANH_OSMODE
(setvar "OSMODE" HOANH_OSMODE)
)
(if HOANH_AUTOSNAP
(setvar "AUTOSNAP" HOANH_AUTOSNAP)
)
)
  • 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
ph168xd    310

Đã ai trê anh Hoành nhà ta là " Quá nhiệt tình với mọi người chưa nhỉ ".Em vừa khó khăn đc 5' anh đã có mặt rùi.Hi, anh làm bon em hư đấy! :unsure:

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
Nguyen Hoanh    4.524
Đã ai trê anh Hoành nhà ta là " Quá nhiệt tình với mọi người chưa nhỉ ".Em vừa khó khăn đc 5' anh đã có mặt rùi.Hi, anh làm bon em hư đấy! :unsure:

có 'rì' đâu, lisp có sẵn, chỉ việc paste vào bài thôi mà!

  • 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
ph168xd    310

Copy và paste thảo nào nhanh, nên bác quên không trả lời hộ em 1 dòng nữa.

Thế bi giờ em mún copy ra 1 đối tượng cách đối tượng cũ giả sử 10000.

Sau đó em muốn khoảng 10000 đó có thêm 8 đối tượng nữa thì em đánh /8 lập tức sẽ có 8 đối tượng nắm cách đều nhau trong khoảng 10000 đó(giống y trong Sketch Up).

Nâng cấp lện cũ thêm cái này liệu có đc không bá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
ph168xd    310

Anh Hoành giúp em vụ này với!Em rất cần 1 lish là:

Thực hiện layon, layoff, layiso bên trong 1 lênh khác. Kiểu như thực hiện zoom='z, pan='p ý anh.

Em tin lish này sẽ được rất nhìu ng thích và áp dụng cho coi.

Bởi nó rất cần thiết với những bản bổ kỹ thuật rối tung rối mù.

Rất mong hồi âm của anh! :bigsmile:

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
ssg    1.088
Mọi ng đi đâu hệt trơn rùi.Giúp em với!

Thì cũng giống như bạn đã liệt kê ở trên: layer='la, sau đó bạn muốn on, off gì chẳng đượ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
ssg    1.088
Mọi ng đi đâu hệt trơn rùi.Giúp em với!

Còn đây là đoạn lisp theo yêu cầu của bạn (biên tập lại của bác Hoành và bổ sung thêm tùy chọn Multi/Divide).

Tùy chọn ở dòng nhắc "Copy Multi-n/Divide-n :"

- Ví dụ bạn nhập M5, nó sẽ copy 5 lần với khoảng cách và định hướng theo 2 điểm First và Second

- Nếu nhập D11, copy 11 lần với khoảng cách bằng 2 điểm đó chia cho 11

- Không nhập gì cả, bấm Enter sẽ lấy mặc định là D2

Theo bạn, lấy mặc định D2 có hợp lý không? Nếu không, đề xuất trị số khác, mình sẽ sửa chương trình.

 

(defun C:MD(/ ss opt p1 p2 d ag i oldos mode n) ;;;Muti/Divide copy
(setq
   ss (ssget)
   opt (strcase (getstring "\nCopy Multi-n/Divide-n :"))
   p1 (getpoint "\nFirst base point:")
   p2 (getpoint p1 "\nSecond base point:")
   d (distance p1 p2)
   ag (angle p1 p2)
   i 0
   oldos (getvar "osmode")
)
(if (= opt "") (setq opt "D2"))
(setq
   mode (substr opt 1 1)
   n (atoi (substr opt 2 (- (strlen opt) 1)))
)
(if (= mode "D") (setq d (/ d n)))
(setvar "osmode" 0)
(repeat n
   (setq i (1+ i))
   (command "copy" ss "" p1 (polar p1 ag (* i d)))
)
(setvar "osmode" oldos)
(princ)
)

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
Nguyen Hoanh    4.524
Các bác ơi cho mình xin lisp nối các đường line, arc thành 1 pline đã có trên diễn đàn. Mình tìm mãi không thấy.

Bạn vào mục tìm kiếm của diễn đàn (phía trên bên trái), tìm từ Nối Pline sẽ thấy ngay: http://www.cadviet.com/forum/index.php?showtopic=78

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
dacvien2007    10
Trả lời câu hỏi thứ nhất: Copy lisp từ codebox thì mất các dấu xuống dòng, bạn có thể tham khảo ở đây

 

http://www.cadviet.com/forum/index.php?showtopic=352

 

Trả lời câu hỏi thứ 2: error: no function definition: INIT

 

Bản chất của lỗi này là không thấy defun INIT.Có thể giải quyết bằng cách sử dụng thêm lisp hethong.lsp sau. Nhớ là khi load phải load lisp hethong.lsp trước ,sau đó mới đến các lisp Scale Block..:bigsmile:

 

;;------------------------------------------------------------
(defun hoanh_newerror (msg)
 (if (and (/= msg "Function cancelled")
   (/= msg "quit / exit abort")
     )
   (princ (strcat "\n" msg))
 )
 (done)
)
;;----------
(defun init ()
 (setq
   HOANH_CMD	   (getvar "CMDECHO")
   HOANH_OLDERROR *error*
   *error*	   hoanh_newerror

 )
 (setvar "CMDECHO" 0)
 (command ".undo" "BE")
)
;;----------
(defun done ()
 (command ".redraw")
 (command ".undo" "E")
 (if HOANH_CMD
   (setvar "CMDECHO" HOANH_CMD)
 )
 (if HOANH_OLDERROR
   (setq *error* HOANH_OLDERROR)
 )
 (princ)
)

(defun luuos ()
 (setq
   HOANH_OSMODE   (getvar "OSMODE")
   HOANH_AUTOSNAP (getvar "AUTOSNAP")
 )
)
(defun traos ()
 (if HOANH_OSMODE
   (setvar "OSMODE" HOANH_OSMODE)
 )
 (if HOANH_AUTOSNAP
   (setvar "AUTOSNAP" HOANH_AUTOSNAP)
 )
)

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
dacvien2007    10

Em ðang sử dụng việc vẽ trên acad, nhýng thýờng xuyên thay ðổi lớp, ở mổi lớp có loại ðýờng, ðộ nét và màu có khác nhau.

ví dụ nhý vẽ lớp ðýờng, sông, nhà,....

vậy thì cách viết một lisp thể hiện nhý thế nào nhờ các anh giúp

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
vndesperados    253
Em ðang sử dụng việc vẽ trên acad, nhýng thýờng xuyên thay ðổi lớp, ở mổi lớp có loại ðýờng, ðộ nét và màu có khác nhau.

ví dụ nhý vẽ lớp ðýờng, sông, nhà,....

vậy thì cách viết một lisp thể hiện nhý thế nào nhờ các anh giúp

 

 

Cái này mà viết LISP chưa chắc gì nhanh hơn cách chuyển đổi layer mà bạn đang dùng.

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
anhca21    0

Anh Hoanh ơi!Em đang làm đồ án và mún vẽ mặt bằng của một công trình.Nhưng để vễ xong cái mặt bằng thì hơi lâu và mất thời gian nên em nhờ anh viết cái lips như sau:

- Nhập chiều dài phuong L1.

- Nhập chiều dài theo phương L2.

- Nhập số nhịp theo L1

- Nhập số nhịp theo L2

=> Cái này để hình thành sơ bộ mặt bằng thôi.

Nếu cần anh hảy phát triển nó lên như sau:

Tương tự như tren nhưng có thêm 1 cái là nhiều khi nhịp của phương L1 hoặc theo phương L2 ko bằng nhau (VD : theo phương L1 có các nhịp 3m 3m 1.5m 3m 3m ) nên anh hãy bổ sung để có thể vẽ được nhịp 1.5m.

Một cái nữa là khi vẽ mặt bằng thì phải có trục số,nên anh hãy cho thêm các trực nữa.

Và cái cuối cùng là khi vẽ mặt bằng anh hãy cho nhập tiết dện cột tại các chỗ giao nhau của các trục nhá.

 

Em xin cám ơn anh rất 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
thoclep    143
Bạn có thể post yêu cầu về autolisp ở topic này.

Bac Hoanh ah!Em muon hoi bac 1 chut!

Theo em biet trong acad14 co lenh "PACK" voi tac dung gan cac font,linetype,... vao ban ve de khi ta chuyen sang may khac van su dung duoc ma khong can co nhung font,linetype...tren.Em thu lenh nap tren cac cad version cao hon nhung khong co lenh tren.

Bac co biet lam sao de lay lenh do tu cad14 ve cac cad kia khong?Hoac co liep nao thuc hien duoc lenh tren?

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.

×