Chuyển đến nội dung
Diễn đàn CADViet
be_chanh

Ứng dụng LISP để vẽ bản vẽ kiến trúc (phần cơ bản)

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

Hết sức cảm phục JIKIBO. Bạn giỏi hơn Kiến Thợ nhiều, và rất hòa phóng nữa.

Lúc trước Kiến Thợ cứ tưởng mình đã là khá, nay gặp bạn mới thấy mình đúng chỉ là kiến thợ.

Cảm ơn sự chia sẻ!

Chúc bạn nhiều may 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

ừ xin lỗi các bạn nhé, dạo này bận quá, công việc nó cứ nối đuôi nhau tới, hix, rồi JI sẽ trả lời hết :">

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
Thế đấy ! Giờ thì bản vẽ đã ổn thỏa. Chẳng còn gì để làm nữa. Nhưng với đống LISP kia thì sao nhỉ? Nhiều file *.LSP quá @_@. Làm gì?

 

Bài 12: Chuyển LSP sang VLX

Công cụ này thì cực hay. Vì từ hàng trăm file LSP ta có thể chuyển thành 1 file VLX, gọn, nhẹ, bảo mật cao hơn...

 

1.jpg

 

Các bước thực hiện.

 

Bước 1: Khởi động Cad, tại dòng Command nhập lệnh vlide.

 

2.jpg

 

Bước 2: Trong cửa sổ Visual Lisp for AutoCad, nhấn vào File/Make Application/New Application Wizard

 

3.jpg

 

Bước 3: Chọn Simple vầ nhấn Next

 

4.jpg

 

Bước 4: Lựa chọn đường dẫn (Application Location) và tên file (Application Name) Rồi nhấn Next

 

5.jpg

 

Bước 5: Nhấn vào nút Add, 1 cửa sổ chọn file hiện ra, select tất cả các file LSP, rồi nhấn Open

 

6.jpg

 

Bước 6: Các file LSP vừa lựa chọn được cập nhật và bảng danh sách, nhấn Next

 

7.jpg

 

Bước 7: Nhấn Finish để kết thúc.

 

8.jpg

 

Quá trình này kết thúc thành công bàng 1 thông báo hoàn thành

 

9.jpg

 

Ok. Giờ thì file VLX duy nhất đã được tạo ra, rất gọn, rất nhẹ và bảo mật cao hơn..0_0

 

Nếu bạn không muốn mất thời gian, có thể tải file vlxcoban.vlx tại đây:

 

http://thunglungden.org/cadviet/cad/lisp/v...an/vlxcoban.vlx

 

Kết thúc. Chúc các bạn thành công với bộ lisp cơ bản này. Hẹn gặp lại lần sau với một bộ lisp năng cao, phát huy hết các tính năng của CAD.

 

Chào thân á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
Ờ nhỉ tí quến. Thế khi vẽ tim và tường thì làm thế nào cho nhanh. Co người thì dùng MLine, co người thì dùng Line. MLine thì không bàn, nhanh, nhưng không phải ai cũng quen. Vậy làm thế nào khi đã ve xong tim tường rồi? OFFSET ?

 

Bài 7: Offset line sang 2 bên

 

(defun c:oo(/ data_m)

(defun import_data(/ i)
   (setq data_m (ssget))
   (if (= nil distan_m) (setq distan_m 110.0))
   (princ "Distance (")
   (princ distan_m)
   (princ "):")
   (setq i (getreal ))
   (if (not (= nil i)) (setq distan_m i))
)

(defun process(/ ent check)

(defun p_check()
   (setq check 0)
   (if (= "LINE" (cdr (assoc 0 ent))) (setq check 1))
   (princ)
)

(defun p_d_offset(/ p1 p2 p3 p4)

(defun makeline(/ e2 e5)
;    (princ ent)
;    (setq e5 nil)
;    (setq e5 (cdr (assoc 5 ent)))
;    (princ e5)
;    (if (= nil e5) (setq e5 ))

   (setq la (list (cons 0 "LINE")
       (cons 5 (cdr (assoc 5 ent)) )
       (cons 8 (cdr (assoc 8 ent)) )
       (cons 10 p3)
       (cons 11 p4)
   ))
;    (princ la)
   (entmake la)
   (princ)
)

   (setq p1 (cdr (assoc 10 ent)) p2 (cdr (assoc 11 ent)) )
   (if (not (= p1 p2)) (progn
       (if (< (abs (- (nth 0 p1) (nth 0 p2))) 0.000001) (progn
           (setq p3 (list (+ (nth 0 p1) distan_m) (nth 1 p1) (nth 2 p1) ) )
           (setq p4 (list (+ (nth 0 p2) distan_m) (nth 1 p2) (nth 2 p2) ) )
           (makeline)
           (setq p3 (list (- (nth 0 p1) distan_m) (nth 1 p1) (nth 2 p1) ) )
           (setq p4 (list (- (nth 0 p2) distan_m) (nth 1 p2) (nth 2 p2) ) )
           (makeline)
       ))
       (if (< (abs (- (nth 1 p1) (nth 1 p2))) 0.000001) (progn
           (setq p3 (list (nth 0 p1) (+ (nth 1 p1) distan_m) (nth 2 p1) ) )
           (setq p4 (list (nth 0 p2) (+ (nth 1 p2) distan_m) (nth 2 p2) ) )
           (makeline)
           (setq p3 (list (nth 0 p1) (- (nth 1 p1) distan_m) (nth 2 p1) ) )
           (setq p4 (list (nth 0 p2) (- (nth 1 p2) distan_m) (nth 2 p2) ) )
           (makeline)
       ))

   ))
   (princ)
)

   (if (not (= nil data_m)) (progn
       (setq i 0)
       (while (< i (sslength data_m)) (progn
           (setq ent (entget (ssname data_m i)))
           (p_check)
           (if (= 1 check) (p_d_offset))
           (setq i (+ i 1))
       ))
   ))
   (princ)
)
   (import_data)
 	(ai_undo_push)
   (process)
 	(ai_undo_pop)
   (princ)
)

 

Lênh để offset line sang 2 bên là oo.

....

Còn lắm nhưng mà ăn cơm đã..hè hè

 

 

Thông thường khi vẽ kiến trúc người ta sẽ vẽ tim đầu tiên, sau đó offset sang 2 bên hoặc dùng lệnh mline để vẽ, lisp trên của a theo e còn có hạn chế là sau khi offset sang 2 bên thì đối tượng mới trùng layer với đối tượng cũ, như vậy sẽ rất khó khăn khi tách (theo kiểu on/off layer) đối tượng ra để chỉnh sửa trong những bản vẽ phưc tạ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

Ở đây toàn dân xây dựng với kiến trúc vậy. Có ai dân Giao Thông không.

Tôi thấy nếu viết lisp kiểu này thì chúng ta có thể nghĩ đến 1 lisp thay luôn chương trình nova không

Trình độ cad của mình hơi non nên hỏi vậy. Các bác thấy thế nào?

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

Mãi chưa thấy phần nâng cao .hic...Sao em dùng lệnh cửa đí đến bước chọn Hướng vào của em đã kick ra 1 điêm khác ko thẳng hàng rồi mà nó chả hiện ra cái rì dòng lệnh nhảy về COMMAND màn hình vẫn trắng tinh ??????????????? Thứ nữa là cái file VLX bác JIKIBO up lên sao em mở ra toàn thấy ô vuông .... Lỗi font chăng ?

Có gì ko phải xin bỏ quá cho

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
Mãi chưa thấy phần nâng cao .hic...Sao em dùng lệnh cửa đí đến bước chọn Hướng vào của em đã kick ra 1 điêm khác ko thẳng hàng rồi mà nó chả hiện ra cái rì dòng lệnh nhảy về COMMAND màn hình vẫn trắng tinh ??????????????? Thứ nữa là cái file VLX bác JIKIBO up lên sao em mở ra toàn thấy ô vuông .... Lỗi font chăng ?

Có gì ko phải xin bỏ quá cho

Không phải lỗi font đâu bạn ? Đó là file lisp đã đc mã hoá để người khác không chỉnh sửa đc ! Tất nhiên là có chương trình dịch ngược nhưng số người có cái này hạn chế lắ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
Mình thử lại thì lệnh HACTH được rồi nhưng mấy cái cửa thì chịu thua

a` còn thằng nối LINE này nữa

Command: jl ; error: no function definition: INIT

 

Sao vẫn không dc nhỉ. Ặc ặc!

Mình cũng bị lỗi lệnh nối line. Mong AE fix lỗi giúp.

Command: jl

 

Error:no function definition: INIT; error: An error has occurred inside the

*error* functionbad argument type: fixnump: "BYLAYER"

nhập lệnh xong nó báo thế đó. mình đã kiểm tra kỹ code lưu về với code trên diễn đàn thi thấy hoàn toàn giống nhau.

Down file VLX về vẫn báo lỗi như thế đấy. bó tay luô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
các lỗi bạn mắc phải hoàn toàn là do bạn. như ở lisp vẽ cửa thì bạn chọn 3 điểm thẳng hàng nhau nên không được. có thể bạn để chế độ bắt điểm nên không để ý đến điểm vừa bắt. các lisp khác bạn tự tìm nguyên nhân nhé...

 

 

 

 

ko phai vay dau bac oi.3 diem ko thang hang cung ko dc.

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
Một bản vẽ mới được thiết lập. Vẫn những layer đó, vẫn những kiểu text đó, vẫn những kiểu dim đó...Bạn không cần thiết phải làm lại từ đầu vì quá mất thời gian. Vậy làm thế nào???

 

( Tất cả các LISP CODE bạn chỉ việc copy rồi save ra file cùng tên với lệnh lisp và có phần mở rộng la .LSP (ví dụ: TaoL.LSP) là ok :s_big: )

 

Bài 1: Tạo Layer

 

(defun c:TaoL()
 (command "layer" "m" "!tuong" "c" "2" "" "")
 (command "layer" "m" "!tim" "c" "1" "" "")
 (command "layer" "m" "!thay" "c" "7" "" "")
 (command "layer" "m" "!noithat" "c" "8" "" "")
 (command "layer" "m" "!hatch" "c" "8" "" "")
 (command "layer" "m" "!chu" "c" "3" "" "")
 (command "layer" "m" "!kichthuoc" "c" "8" "" "")
 (princ)  
) 

 

Với lisp này lệnh để tạo layer sẽ là TaoL.

 

Bài 2: Tạo Text Style ( kiểu chữ )

 

(defun c:TaoC()
 (command "style" "!vnAvanH" ".VnAvantH" "" "" "" "" "")
 (princ)
)

 

Với lisp này lệnh để tạo kiểu chữ sẽ là TaoC.

 

Bài 3: Tạo Dim Style ( kiểu kích thước )

 

(defun c:TaoK (/ scl fcal scal );dmasz dexo dexo dtxt dgap dclre dclrt dsn ao ad obj)
(vl-load-com)
(setq scl (getstring "\nTY LE BAN VE: "))
(setq fcal (atof (substr scl 1 1))) 
(setq scal (atof (substr scl 3 3))) 
(setq tyle (/ fcal scal))

(setq caochu (getint "\nCHIEU CAO CUA CHU: "))
(setvar "DIMALTF" 25)
(setvar "DIMALTTZ" 13) 
(setvar "DIMALTZ" 13) 
(setvar "DIMBLK" "ArchTick") 
(setvar "DIMBLK1" "ArchTick")
(setvar "DIMBLK2" "ArchTick")
(setvar "DIMASZ" (/ caochu 2))
(setvar "DIMCEN" -50)  
(setvar "DIMCLRD" 9)
(setvar "DIMDLE" (/ caochu 2))
(setvar "DIMTOFL" 1)
(setvar "DIMDLI" 0)
(setvar "DIMCLRE" 9)
(setvar "DIMEXE" (/ caochu 2))
(setvar "DIMEXO" 0)
(setvar "DIMTMOVE" 2)
(setvar "DIMLDRBLK" "ArchTick")
(setvar "DIMDEC" 0)
(setvar "DIMCLRT" 9)
(setvar "DIMTXT" caochu)
(setvar "DIMLFAC" TYLE) 
(setvar "DIMTIX" 1)
(setvar "DIMTIH" 0)
(setvar "DIMGAP" (/ caochu 2))
(setvar "DIMTOH" 0)
(setvar "DIMTAD" 1)
(setvar "DIMTXSTY" "!vnAvanH")
(setvar "DIMTDEC" 0)
(setvar "DIMTZIN" 13)
(setvar "DIMZIN" 13)
;-------------------------------------------------------------
(setq dsn (getstring "\nTEN CUA KIEU DIM MOI: ")) 
(setq ao (vlax-get-acad-object)) 
(setq ad (vla-get-ActiveDocument ao)) 
(setq obj (vla-add (vla-get-dimstyles ad) dsn)) 
(vla-copyfrom Obj ad) 
(vla-put-activedimstyle ad Obj) 
(princ) 
) 

 

Với lisp này lệnh để tạo kiểu kích thước sẽ là TaoK.

Các thông số cần nhập

1. Tỷ lệ bản vẽ: (Thường là 1/1, cũng có thể là 1/2 tùy vào kiểu dim bạn muốn tạo)

2. Chiều cao chữ: (Tùy thuộc vào bản vẽ của bạn)

3. Tên kiểu dim mới: (Nên đặt theo chiều cao của chữ)

 

 

CÁI NÀY HAY QUÁ HA. THANKS.....

NHƯNG BÂY GIỜ EM MUỐN TẠO KIỂU DIM KHÁC VÍ DỤ KIỂU CHỮ KHÁC, KIỂU MŨI TÊN KHÁC, KÍCH THƯỚC MŨI TÊN KHÁC,..... VÀ MỘT SỐ GIÁ TRỊ KHÁC. THÌ EM PHẢI BIẾT Ý NGHĨA CỦA CÁC BIẾN VAR BÊN TRÊN, EM CHỈ BIẾT MỘT SỐ, CÒN MỘT SỐ BIẾN EM TÌM MÃI KHÔNG RA. MONG BÁC CHỈ GIÙM. CẢM ƠN 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
Ờ nhỉ tí quến. Thế khi vẽ tim và tường thì làm thế nào cho nhanh. Co người thì dùng MLine, co người thì dùng Line. MLine thì không bàn, nhanh, nhưng không phải ai cũng quen. Vậy làm thế nào khi đã ve xong tim tường rồi? OFFSET ?

 

Bài 7: Offset line sang 2 bên

 

(defun c:oo(/ data_m)

(defun import_data(/ i)
   (setq data_m (ssget))
   (if (= nil distan_m) (setq distan_m 110.0))
   (princ "Distance (")
   (princ distan_m)
   (princ "):")
   (setq i (getreal ))
   (if (not (= nil i)) (setq distan_m i))
)

(defun process(/ ent check)

(defun p_check()
   (setq check 0)
   (if (= "LINE" (cdr (assoc 0 ent))) (setq check 1))
   (princ)
)

(defun p_d_offset(/ p1 p2 p3 p4)

(defun makeline(/ e2 e5)
;    (princ ent)
;    (setq e5 nil)
;    (setq e5 (cdr (assoc 5 ent)))
;    (princ e5)
;    (if (= nil e5) (setq e5 ))

   (setq la (list (cons 0 "LINE")
       (cons 5 (cdr (assoc 5 ent)) )
       (cons 8 (cdr (assoc 8 ent)) )
       (cons 10 p3)
       (cons 11 p4)
   ))
;    (princ la)
   (entmake la)
   (princ)
)

   (setq p1 (cdr (assoc 10 ent)) p2 (cdr (assoc 11 ent)) )
   (if (not (= p1 p2)) (progn
       (if (< (abs (- (nth 0 p1) (nth 0 p2))) 0.000001) (progn
           (setq p3 (list (+ (nth 0 p1) distan_m) (nth 1 p1) (nth 2 p1) ) )
           (setq p4 (list (+ (nth 0 p2) distan_m) (nth 1 p2) (nth 2 p2) ) )
           (makeline)
           (setq p3 (list (- (nth 0 p1) distan_m) (nth 1 p1) (nth 2 p1) ) )
           (setq p4 (list (- (nth 0 p2) distan_m) (nth 1 p2) (nth 2 p2) ) )
           (makeline)
       ))
       (if (< (abs (- (nth 1 p1) (nth 1 p2))) 0.000001) (progn
           (setq p3 (list (nth 0 p1) (+ (nth 1 p1) distan_m) (nth 2 p1) ) )
           (setq p4 (list (nth 0 p2) (+ (nth 1 p2) distan_m) (nth 2 p2) ) )
           (makeline)
           (setq p3 (list (nth 0 p1) (- (nth 1 p1) distan_m) (nth 2 p1) ) )
           (setq p4 (list (nth 0 p2) (- (nth 1 p2) distan_m) (nth 2 p2) ) )
           (makeline)
       ))

   ))
   (princ)
)

   (if (not (= nil data_m)) (progn
       (setq i 0)
       (while (< i (sslength data_m)) (progn
           (setq ent (entget (ssname data_m i)))
           (p_check)
           (if (= 1 check) (p_d_offset))
           (setq i (+ i 1))
       ))
   ))
   (princ)
)
   (import_data)
 	(ai_undo_push)
   (process)
 	(ai_undo_pop)
   (princ)
)

 

Lênh để offset line sang 2 bên là oo.

....

Còn lắm nhưng mà ăn cơm đã..hè hè

Hi pro.e chưa làm đc lệnh oo này.xin chỉ lại chi tiết cho e đc ko.thanks pro.:lol:

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

Các bác giúp tôi chuyển file có đuôi lsp sang vlx với. Tôi có 3 file mà khi chuyển nó báo lỗi:

; Compilation aborted

; error: compiler found fatal error "4 C.lsp"

; Compilation aborted

; error: compiler found fatal error "16 C.lsp"

; Compilation aborted

; error: compiler found fatal error "21 C.lsp"

http://www.cadviet.com/upfiles/Vlx_lsp.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
Các bác giúp tôi chuyển file có đuôi lsp sang vlx với. Tôi có 3 file mà khi chuyển nó báo lỗi:

; Compilation aborted

; error: compiler found fatal error "4 C.lsp"

; Compilation aborted

; error: compiler found fatal error "16 C.lsp"

; Compilation aborted

; error: compiler found fatal error "21 C.lsp"

http://www.cadviet.com/upfiles/Vlx_lsp.rar

Bác Jikibo, bác Nguyễn Hoành, bác ssg và các bác khác đâu sao không giúp cho tôi cái. Cảm ơn các bác nhiều.

Tôi không hiểu về lisp nên nhờ các bác bớt chút thời gian giúp tôi với 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
Bác Jikibo, bác Nguyễn Hoành, bác ssg và các bác khác đâu sao không giúp cho tôi cái. Cảm ơn các bác nhiều.

Tôi không hiểu về lisp nên nhờ các bác bớt chút thời gian giúp tôi với nhé.

 

lisp của bạn có chạy được đâu mà biên dịch ra vlx.

bạn đã thử chạy lisp của bạn chưa?

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
lisp của bạn có chạy được đâu mà biên dịch ra vlx.

bạn đã thử chạy lisp của bạn chưa?

Chạy được đấy bác ạ. Em đang dùng mà

File 30.lsp dùng cho file 4 C.lsp. Còn file 21 C.lsp em copy file acadiso.pat và file acad.slb vào mục

C:\Documents and Settings\Thanh Hai\Application Data\Autodesk\AutoCAD 2007\R17.0\enu\Support

là dùng được. Từ trước đến giờ em vẫn dùng bình thường. Nhưng nhiều file lisp quá thấy các anh chỉ cho cách

tạo thành file có đuôi vlx nên em làm thử mà nó bị lỗi. Anh chỉ cho em cái nhé. Đây là những file của em đang dùng

kèm với các file mà em đã gửi trước http://www.cadviet.com/upfiles/30.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
Chạy được đấy bác ạ. Em đang dùng mà

File 30.lsp dùng cho file 4 C.lsp. Còn file 21 C.lsp em copy file acadiso.pat và file acad.slb vào mục

C:\Documents and Settings\Thanh Hai\Application Data\Autodesk\AutoCAD 2007\R17.0\enu\Support

là dùng được. Từ trước đến giờ em vẫn dùng bình thường. Nhưng nhiều file lisp quá thấy các anh chỉ cho cách

tạo thành file có đuôi vlx nên em làm thử mà nó bị lỗi. Anh chỉ cho em cái nhé. Đây là những file của em đang dùng

kèm với các file mà em đã gửi trước http://www.cadviet.com/upfiles/30.rar

Tôi cũng giống như ACAD stupid lắm, không quan tâm đến chức năng lisp của bạn là gì đâu,

chỉ biết rằng load cả 3 file của bạn lên đều báo lỗi: ; error: extra right paren on input

 

Load lên còn báo lỗi, làm sao biên dịch đượ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
Tôi cũng giống như ACAD stupid lắm, không quan tâm đến chức năng lisp của bạn là gì đâu,

chỉ biết rằng load cả 3 file của bạn lên đều báo lỗi: ; error: extra right paren on input

 

Load lên còn báo lỗi, làm sao biên dịch được.

Em được người khác chỉ cho làm và xem ở trên diễn đàn nên thử sửa thành của mình và đổi đuôi theo chỉ dẫn của các anh mà nó báo lỗi. Em mù mờ về lisp lắm nên mới nhờ anh. Anh sửa các file lisp đấy giúp em cái. Anh giúp em cái 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
...............

Em mù mờ về lisp lắm nên mới nhờ anh.

.....................

Bác "mù mờ về LISP" thì chuyễn qua file *.vlx làm chi ?

Bản chất của LISP là "mở" thì cứ để như thế (*.lsp), anh em còn giúp bác sửa lổi được.

 

T/hợp muốn gom vào 1 file : bác cứ việc open các file rồi copy & paste thành 1 file.

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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×