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ị

đúng code nầy chep zo dau zay ban

 

sử dụng lệnh AP để load lisp nhé. cái này căn bản. bạn nên đọc kỹ hơn trong sách :unsure:

  • 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
Pac Jikibo đã chỉ cách tạo các layer định sẵn bằng 1 lisp rồi, Pác chỉ em luôn cách đặt các thuộc tính cho layer với, vi du: layer "tim" em muốn nó là đường Center lun. Mong được chỉ giáo.

 

hô hô, bạn nười quá đấ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
Nhanh quá! Cái lisp NN kia giúp tôi đỡ được bao nhiêu công khi phải BO line thanh PLINE.

 

Giờ đến vễ cửa, cửa đi, cửa sổ... nhiều quá. Copy từ thư viện ra thì lại phải SCALE rồi làng nhằng LAYER không đúng với bản vẽ của mình ! Vậy thì co cách nào không nhỉ?

 

Bài 5: Vẽ cửa đi

 

;-------------------------------------------------------------------------------------
;ve cua di 1 canh
;-------------------------------------------------------------------------------------
(defun c:c1 (/ p1 p2 p3 p4 p5 daicua x y)
(setq osm (getvar "osmode"))  
(setq	p1     (getpoint "\nHay vao diem goc cua: ")

p2     (getpoint p1 "\nHay vao diem mut cua: ")
p3     (getpoint p1 "\nHay vao huong cua: ")
daicua (distance p1 p2)
x      (car p1)
y      (car (cdr p1))
x      25
y      daicua
p4     (list x y)
p5     (list daicua 0)
 )
 (setvar "OSMODE" 0)
 (if (l3d_khongthanghang p1 p2 p3)
   (progn
     (command ".UCS" "3" p1 p2 p3)
     (command ".rectangle" "0,0" p4)
     (command ".Arc" p5 "C" "0,0" p4)
     (command ".UCS" "P")
   )
   (princ "\n3 diem nhap vao khong duoc thang hang")
 )
(setvar "osmode" osm)       
)
;-------------------------------------------------------------------------------------
;ve cua di 2 canh
;-------------------------------------------------------------------------------------
(defun c:c2 (/ p1 p2 p3 p4 p5 daicua x y)
 (setq osm (getvar "osmode"))  
 (setq	p1     (getpoint "\nHay vao diem goc cua: ")
p2     (getpoint p1 "\nHay vao diem mut cua: ")
p3     (getpoint p1 "\nHay vao huong cua: ")
daicua (/ (distance p1 p2) 2.0)
x      (car p1)
y      (car (cdr p1))
x      25
y      daicua 
p4     (list x y)
p5     (list daicua 0)
 )
 (setvar "OSMODE" 0)
 (if (l3d_khongthanghang p1 p2 p3)
   (progn
     (command ".UCS" "3" p1 p2 p3)
     (command ".rectangle" "0,0" p4)
     (command ".Arc" p5 "C" "0,0" p4)
     (command ".UCS" "P")

     (command ".UCS" "3" p2 p1 p3)
     (command ".rectangle" "0,0" p4)
     (command ".Arc" p5 "C" "0,0" p4)
     (command ".UCS" "P")

   )

   (princ "\n3 diem nhap vao khong duoc thang hang")
 )
 (setvar "osmode" osm)       
)
;-------------------------------------------------------------------------------------
;ve cua di 4 canh
;-------------------------------------------------------------------------------------
(defun c:c4 (/ p1 p2 p3 p4 p5 daicua x y)
 (setq osm (getvar "osmode"))    
 (setq	p1     (getpoint "\nHay vao diem goc cua: ")
p2     (getpoint p1 "\nHay vao diem mut cua: ")
p3     (getpoint p1 "\nHay vao huong cua: ")
daicua (/ (distance p1 p2) 4.0)
x      (car p1)
y      (car (cdr p1))
x      25
y      daicua 
p4     (list x y)
p5     (list daicua 0)
 )
 (setvar "OSMODE" 0)
 (if (l3d_khongthanghang p1 p2 p3)
   (progn

     (setq diem1 (diemgiua p1 (diemgiua p1 p2)))
     (setq diem2 (diemgiua p1 p2))
     (setq diem3 (diemgiua p2 (diemgiua p1 p2)))      

     (command ".UCS" "3" p1 p2 p3)
     (command ".rectangle" "0,0" p4)
     (command ".Arc" p5 "C" "0,0" p4)
     (command ".UCS" "P")

     (command ".UCS" "3" diem1 p2 p3)
     (command ".rectangle" "0,0" p4)
     (command ".Arc" p5 "C" "0,0" p4)     
     (command ".UCS" "P")      

     (command ".UCS" "3" p2 p1 p3)
     (command ".rectangle" "0,0" p4)
     (command ".Arc" p5 "C" "0,0" p4)
     (command ".UCS" "P")

     (command ".UCS" "3" diem3 p1 p3)
     (command ".rectangle" "0,0" p4)
     (command ".Arc" p5 "C" "0,0" p4)
     (command ".UCS" "P")

   )

   (princ "\n3 diem nhap vao khong duoc thang hang")
 )
(setvar "osmode" osm)         
)
;-----------------------------------------------------------------------------

 

Có 3 lệnh trong lisp này.

c1: vẽ cửa đi 1 cánh

c2: vẽ cửa đi 2 cánh

c4: vẽ cửa đi 4 cánh

 

Thế còn cửa sổ thì sao nhỉ ?

 

Bài 6: Vẽ cửa sổ

 

(defun c:w1(/ data_m l1 l2 p1 p2 check)

(defun wd_import(/ p3 p4 p5 p6)
   (setq data_m (ssget))
   (setq p1 (getpoint "\nfirst point :") p2 (getpoint "\nsecond point :"))
   (setq l1 nil l2 nil check 1)
   (if (not (= nil data_m)) (progn
       (setq l1 (entget (ssname data_m 0)))
       (setq l2 (entget (ssname data_m 1)))
       (if (or (= nil l1) (not (= "LINE" (cdr (assoc 0 l1))))) (setq check 0))
       (if (or (= nil l2) (not (= "LINE" (cdr (assoc 0 l2))))) (setq check 0))
       (if (not (= 0 (-(sslength data_m) 2))) (setq check 0))
       (if (= 1 check) (progn
           (setq p3 (cdr (assoc 10 l1))) (setq p3 (list (nth 0 p3) (nth 1 p3)))
           (setq p4 (cdr (assoc 11 l1))) (setq p4 (list (nth 0 p4) (nth 1 p4)))
           (setq p5 (cdr (assoc 10 l2))) (setq p5 (list (nth 0 p5) (nth 1 p5)))
           (setq p6 (cdr (assoc 11 l2))) (setq p6 (list (nth 0 p6) (nth 1 p6)))
           (if (not (= nil (inters p3 p4 p5 p6 nil))) (setq check 0))
       ))
   ) (setq check 0))
   (princ)
)

(defun wd_procced()

(defun mkv(/ p3 p4 p5 p6 p7 p8 p9 ls1 ls2 getom ll1)

   (setq p3 (cdr (assoc 10 l1))) 
   (setq p4 (cdr (assoc 11 l1))) 
   (setq p5 (cdr (assoc 10 l2))) 
   (setq p6 (cdr (assoc 11 l2))) 
   (if (> (abs (- (nth 1 p1) (nth 1 p3)))
          (abs (- (nth 1 p3) (nth 1 p4))) ) (setq check 0))
   (if (> (abs (- (nth 1 p1) (nth 1 p4)))
          (abs (- (nth 1 p3) (nth 1 p4))) ) (setq check 0))
   (if (> (abs (- (nth 1 p2) (nth 1 p5)))
          (abs (- (nth 1 p5) (nth 1 p6))) ) (setq check 0))
   (if (> (abs (- (nth 1 p2) (nth 1 p6)))
          (abs (- (nth 1 p5) (nth 1 p6))) ) (setq check 0))
   (if (= 0 check) (princ "\ninvalid data") (progn
       (setq ls1 (arlst (list (nth 1 p1) (nth 1 p2) (nth 1 p3) (nth 1 p4) )))
;        (princ ls1)
       (setq p7 (list (nth 0 p3) (nth 0 ls1) 0))
       (setq p8 (list (nth 0 p3) (nth 1 ls1) 0))
       (mkline p7 p8 l1)
       (setq p7 (list (nth 0 p3) (nth 2 ls1) 0))
       (setq p8 (list (nth 0 p3) (nth 3 ls1) 0))
       (mkline p7 p8 l1)

       (setq ls1 (arlst (list (nth 1 p1) (nth 1 p2) (nth 1 p5) (nth 1 p6) )))
;        (princ ls1)
       (setq p7 (list (nth 0 p5) (nth 0 ls1) 0))
       (setq p8 (list (nth 0 p5) (nth 1 ls1) 0))
       (mkline p7 p8 l1)
       (setq p7 (list (nth 0 p5) (nth 2 ls1) 0))
       (setq p8 (list (nth 0 p5) (nth 3 ls1) 0))
       (mkline p7 p8 l1)

       (setq p7 (list (nth 0 p3) (nth 1 ls1) 0))
       (setq p8 (list (nth 0 p5) (nth 1 ls1) 0))
       (mkline p7 p8 l1)
       (setq p7 (list (nth 0 p3) (nth 2 ls1) 0))
       (setq p8 (list (nth 0 p5) (nth 2 ls1) 0))
       (mkline p7 p8 l1)

       (setq getom (getvar "osmode"))
       (setvar "osmode" 0)

       (setq ls2 (arlst (list (nth 0 p3) (nth 0 p5))))
       (setq p7 (list (nth 0 ls2) (nth 1 ls1) 0))
       (setq p8 (list (nth 1 ls2) (nth 2 ls1) 0))

       (setq ll1 (list
           (cons 0 "line")
           (cons 8 (getvar "clayer"))
       ))

       (drawrt2 p7 p8 ll1)

       (setvar "osmode" getom)
       (command "erase" data_m "")

   ))
   (princ)
)

(defun mkh(/ p3 p4 p5 p6 p7 p8 p9 ls1 ls2 getom ll1)

   (setq p3 (cdr (assoc 10 l1))) 
   (setq p4 (cdr (assoc 11 l1))) 
   (setq p5 (cdr (assoc 10 l2))) 
   (setq p6 (cdr (assoc 11 l2))) 

   (if (> (abs (- (nth 0 p1) (nth 0 p3)))
          (abs (- (nth 0 p3) (nth 0 p4))) ) (setq check 0))
   (if (> (abs (- (nth 0 p1) (nth 0 p4)))
          (abs (- (nth 0 p3) (nth 0 p4))) ) (setq check 0))
   (if (> (abs (- (nth 0 p2) (nth 0 p5)))
          (abs (- (nth 0 p5) (nth 0 p6))) ) (setq check 0))
   (if (> (abs (- (nth 0 p2) (nth 0 p6)))
          (abs (- (nth 0 p5) (nth 0 p6))) ) (setq check 0))

   (if (= 0 check) (princ "\ninvalid data") (progn

       (setq ls1 (arlst (list (nth 0 p1) (nth 0 p2) (nth 0 p3) (nth 0 p4) )))
;        (princ ls1)
       (setq p7 (list (nth 0 ls1) (nth 1 p3) 0))
       (setq p8 (list (nth 1 ls1) (nth 1 p3) 0))
       (mkline p7 p8 l1)
       (setq p7 (list (nth 2 ls1) (nth 1 p3) 0))
       (setq p8 (list (nth 3 ls1) (nth 1 p3) 0))
       (mkline p7 p8 l1)

       (setq ls1 (arlst (list (nth 0 p1) (nth 0 p2) (nth 0 p5) (nth 0 p6) )))
;        (princ ls1)
       (setq p7 (list (nth 0 ls1) (nth 1 p5) 0))
       (setq p8 (list (nth 1 ls1) (nth 1 p5) 0))
       (mkline p7 p8 l1)
       (setq p7 (list (nth 2 ls1) (nth 1 p5) 0))
       (setq p8 (list (nth 3 ls1) (nth 1 p5) 0))
       (mkline p7 p8 l1)

       (setq p7 (list (nth 1 ls1) (nth 1 p3) 0))
       (setq p8 (list (nth 1 ls1) (nth 1 p5) 0))
       (mkline p7 p8 l1)
       (setq p7 (list (nth 2 ls1) (nth 1 p3) 0))
       (setq p8 (list (nth 2 ls1) (nth 1 p5) 0))
       (mkline p7 p8 l1)

       (setq getom (getvar "osmode"))
       (setvar "osmode" 0)

       (setq ls2 (arlst (list (nth 1 p3) (nth 1 p5))))
       (setq p7 (list (nth 1 ls1) (nth 0 ls2) 0))
       (setq p8 (list (nth 2 ls1) (nth 1 ls2) 0))

       (setq ll1 (list
           (cons 0 "line")
           (cons 8 (getvar "clayer"))
       ))

       (drawrt3 p7 p8 ll1)

       (setvar "osmode" getom)
       (command "erase" data_m "")
   ))
   (princ)
)

   (setvar "cmdecho" 0) (command "undo" "mark") (setvar "cmdecho" 1)
   (if (= 0 check) (princ "\ninvalid data") (progn
       (if (< (abs (- (nth 0 (cdr (assoc 10 l1)))
                      (nth 0 (cdr (assoc 11 l1))) )) 0.00001) (mkv))
       (if (< (abs (- (nth 1 (cdr (assoc 10 l1)))
                      (nth 1 (cdr (assoc 11 l1))) )) 0.00001) (mkh))


   ))

   (princ)

)
   (wd_import)
 	(ai_undo_push)
   (wd_procced)
 	(ai_undo_pop)	
)
(defun c:w2(/ data_m l1 l2 p1 p2 check)

(defun wd_import(/ p3 p4 p5 p6)
   (setq data_m (ssget))
   (setq p1 (getpoint "\nfirst point :") p2 (getpoint "\nsecond point :"))
   (setq l1 nil l2 nil check 1)
   (if (not (= nil data_m)) (progn
       (setq l1 (entget (ssname data_m 0)))
       (setq l2 (entget (ssname data_m 1)))
       (if (or (= nil l1) (not (= "LINE" (cdr (assoc 0 l1))))) (setq check 0))
       (if (or (= nil l2) (not (= "LINE" (cdr (assoc 0 l2))))) (setq check 0))
       (if (not (= 0 (-(sslength data_m) 2))) (setq check 0))
       (if (= 1 check) (progn
           (setq p3 (cdr (assoc 10 l1))) (setq p3 (list (nth 0 p3) (nth 1 p3)))
           (setq p4 (cdr (assoc 11 l1))) (setq p4 (list (nth 0 p4) (nth 1 p4)))
           (setq p5 (cdr (assoc 10 l2))) (setq p5 (list (nth 0 p5) (nth 1 p5)))
           (setq p6 (cdr (assoc 11 l2))) (setq p6 (list (nth 0 p6) (nth 1 p6)))
           (if (not (= nil (inters p3 p4 p5 p6 nil))) (setq check 0))
       ))
   ) (setq check 0))
   (princ)
)

(defun wd_procced()

(defun mkv(/ p3 p4 p5 p6 p7 p8 p9 ls1 ls2 getom ll1)

   (setq p3 (cdr (assoc 10 l1))) 
   (setq p4 (cdr (assoc 11 l1))) 
   (setq p5 (cdr (assoc 10 l2))) 
   (setq p6 (cdr (assoc 11 l2))) 
   (if (> (abs (- (nth 1 p1) (nth 1 p3)))
          (abs (- (nth 1 p3) (nth 1 p4))) ) (setq check 0))
   (if (> (abs (- (nth 1 p1) (nth 1 p4)))
          (abs (- (nth 1 p3) (nth 1 p4))) ) (setq check 0))
   (if (> (abs (- (nth 1 p2) (nth 1 p5)))
          (abs (- (nth 1 p5) (nth 1 p6))) ) (setq check 0))
   (if (> (abs (- (nth 1 p2) (nth 1 p6)))
          (abs (- (nth 1 p5) (nth 1 p6))) ) (setq check 0))
   (if (= 0 check) (princ "\ninvalid data") (progn
       (setq ls1 (arlst (list (nth 1 p1) (nth 1 p2) (nth 1 p3) (nth 1 p4) )))
;        (princ ls1)
       (setq p7 (list (nth 0 p3) (nth 0 ls1) 0))
       (setq p8 (list (nth 0 p3) (nth 1 ls1) 0))
       (mkline p7 p8 l1)
       (setq p7 (list (nth 0 p3) (nth 2 ls1) 0))
       (setq p8 (list (nth 0 p3) (nth 3 ls1) 0))
       (mkline p7 p8 l1)

       (setq ls1 (arlst (list (nth 1 p1) (nth 1 p2) (nth 1 p5) (nth 1 p6) )))
;        (princ ls1)
       (setq p7 (list (nth 0 p5) (nth 0 ls1) 0))
       (setq p8 (list (nth 0 p5) (nth 1 ls1) 0))
       (mkline p7 p8 l1)
       (setq p7 (list (nth 0 p5) (nth 2 ls1) 0))
       (setq p8 (list (nth 0 p5) (nth 3 ls1) 0))
       (mkline p7 p8 l1)

       (setq p7 (list (nth 0 p3) (nth 1 ls1) 0))
       (setq p8 (list (nth 0 p5) (nth 1 ls1) 0))
       (mkline p7 p8 l1)
       (setq p7 (list (nth 0 p3) (nth 2 ls1) 0))
       (setq p8 (list (nth 0 p5) (nth 2 ls1) 0))
       (mkline p7 p8 l1)

       (setq ls2 (arlst (list (nth 0 p3) (nth 0 p5))))

       (setq ll1 (list
           (cons 0 "line")
           (cons 8 (getvar "clayer"))
       ))

	(if (< (nth 0 p1) (nth 0 ls2)) (progn
       	(setq p7 (list (nth 0 ls2) (nth 1 ls1) 0))
		(setq p8 (list (nth 1 ls2) (nth 2 ls1) 0))
		(setq p7 (list (* (+ (nth 0 p7) (nth 0 p8)) 0.5) (nth 1 p7) 0))
       	(drawrt2 p7 p8 ll1)

		(setq p7 (list (- (nth 0 ls2) 70) (- (nth 1 ls1) 100) 0))
		(setq p8 (list (- (nth 0 ls2) 70) (+ (nth 2 ls1) 100) 0))
		(mkline p7 p8 ll1)

		(setq p9 (list (+ (nth 0 p7) 70) (nth 1 p7) 0))
		(mkline p7 p9 ll1)

		(setq p9 (list (+ (nth 0 p8) 70) (nth 1 p8) 0))
		(mkline p8 p9 ll1)
    )(progn
	   	(setq p7 (list (nth 0 ls2) (nth 1 ls1) 0))
		(setq p8 (list (nth 1 ls2) (nth 2 ls1) 0))
		(setq p8 (list (* (+ (nth 0 p7) (nth 0 p8)) 0.5) (nth 1 p8) 0))
       	(drawrt2 p7 p8 ll1)

		(setq p7 (list (+ (nth 1 ls2) 70) (- (nth 1 ls1) 100) 0))
		(setq p8 (list (+ (nth 1 ls2) 70) (+ (nth 2 ls1) 100) 0))
		(mkline p7 p8 ll1)

		(setq p9 (list (- (nth 0 p7) 70) (nth 1 p7) 0))
		(mkline p7 p9 ll1)

		(setq p9 (list (- (nth 0 p8) 70) (nth 1 p8) 0))
		(mkline p8 p9 ll1)
	))


       (command "erase" data_m "")

   ))
   (princ)
)

(defun mkh(/ p3 p4 p5 p6 p7 p8 p9 ls1 ls2 getom ll1)

   (setq p3 (cdr (assoc 10 l1))) 
   (setq p4 (cdr (assoc 11 l1))) 
   (setq p5 (cdr (assoc 10 l2))) 
   (setq p6 (cdr (assoc 11 l2))) 

   (if (> (abs (- (nth 0 p1) (nth 0 p3)))
          (abs (- (nth 0 p3) (nth 0 p4))) ) (setq check 0))
   (if (> (abs (- (nth 0 p1) (nth 0 p4)))
          (abs (- (nth 0 p3) (nth 0 p4))) ) (setq check 0))
   (if (> (abs (- (nth 0 p2) (nth 0 p5)))
          (abs (- (nth 0 p5) (nth 0 p6))) ) (setq check 0))
   (if (> (abs (- (nth 0 p2) (nth 0 p6)))
          (abs (- (nth 0 p5) (nth 0 p6))) ) (setq check 0))

   (if (= 0 check) (princ "\ninvalid data") (progn

       (setq ls1 (arlst (list (nth 0 p1) (nth 0 p2) (nth 0 p3) (nth 0 p4) )))
;        (princ ls1)
       (setq p7 (list (nth 0 ls1) (nth 1 p3) 0))
       (setq p8 (list (nth 1 ls1) (nth 1 p3) 0))
       (mkline p7 p8 l1)
       (setq p7 (list (nth 2 ls1) (nth 1 p3) 0))
       (setq p8 (list (nth 3 ls1) (nth 1 p3) 0))
       (mkline p7 p8 l1)

       (setq ls1 (arlst (list (nth 0 p1) (nth 0 p2) (nth 0 p5) (nth 0 p6) )))
;        (princ ls1)
       (setq p7 (list (nth 0 ls1) (nth 1 p5) 0))
       (setq p8 (list (nth 1 ls1) (nth 1 p5) 0))
       (mkline p7 p8 l1)
       (setq p7 (list (nth 2 ls1) (nth 1 p5) 0))
       (setq p8 (list (nth 3 ls1) (nth 1 p5) 0))
       (mkline p7 p8 l1)

       (setq p7 (list (nth 1 ls1) (nth 1 p3) 0))
       (setq p8 (list (nth 1 ls1) (nth 1 p5) 0))
       (mkline p7 p8 l1)
       (setq p7 (list (nth 2 ls1) (nth 1 p3) 0))
       (setq p8 (list (nth 2 ls1) (nth 1 p5) 0))
       (mkline p7 p8 l1)

	(setq getom (getvar "osmode"))
       (setvar "osmode" 0)

	(setq ll1 (list
            (cons 0 "line")
            (cons 8 (getvar "clayer"))
        ))
	(setq ls2 (arlst (list (nth 1 p3) (nth 1 p5))))
	;(princ ls2)

	(if (> (nth 1 p1) (nth 1 ls2)) (progn

       	(setq p7 (list (nth 1 ls1) (nth 0 ls2) 0))
       	(setq p8 (list (nth 2 ls1) (nth 1 ls2) 0))
		(setq p8 (list (nth 2 ls1) (* (+ (nth 1 p7) (nth 1 p8)) 0.5) 0))

       	(drawrt3 p7 p8 ll1)

		(setq p7 (list (- (nth 1 ls1) 100) (+ (nth 1 ls2) 70) 0))
		(setq p8 (list (+ (nth 2 ls1) 100) (+ (nth 1 ls2) 70) 0))
		(mkline p7 p8 ll1)

		(setq p9 (list (nth 0 p7) (- (nth 1 p7) 70) 0))
		(mkline p7 p9 ll1)

		(setq p9 (list (nth 0 p8) (- (nth 1 p8) 70) 0))
		(mkline p8 p9 ll1)
	)(progn
	  	(setq p7 (list (nth 1 ls1) (nth 0 ls2) 0))
       	(setq p8 (list (nth 2 ls1) (nth 1 ls2) 0))
		(setq p7 (list (nth 1 ls1) (* (+ (nth 1 p7) (nth 1 p8)) 0.5) 0))

		(drawrt3 p7 p8 ll1)


		(setq p7 (list (- (nth 1 ls1) 100) (- (nth 0 ls2) 70) 0))
		(setq p8 (list (+ (nth 2 ls1) 100) (- (nth 0 ls2) 70) 0))
		(mkline p7 p8 ll1)

		(setq p9 (list (nth 0 p7) (+ (nth 1 p7) 70) 0))
		(mkline p7 p9 ll1)

		(setq p9 (list (nth 0 p8) (+ (nth 1 p8) 70) 0))
		(mkline p8 p9 ll1)


	))

	(setvar "osmode" getom)

       (command "erase" data_m "")
   ))
   (princ)
)

   (setvar "cmdecho" 0) (command "undo" "mark") (setvar "cmdecho" 1)
   (if (= 0 check) (princ "\ninvalid data") (progn
       (if (< (abs (- (nth 0 (cdr (assoc 10 l1)))
                      (nth 0 (cdr (assoc 11 l1))) )) 0.00001) (mkv))
       (if (< (abs (- (nth 1 (cdr (assoc 10 l1)))
                      (nth 1 (cdr (assoc 11 l1))) )) 0.00001) (mkh))


   ))

   (princ)

)
   (wd_import)
   (wd_procced)
)

 

Có 2 lệnh trong lisp này.

w1: vẽ cửa sổ kiểu 1

w2: vẽ cửa sổ kiểu 2

jikibo ơi,bạn có thể xem lại 2 cái lisp này ko,2 lisp này mình load về toàn ko sử dụng được toàn báo lỗi .Bạn có thể sửa lại được ko?Mình xin cảm ơn bạn trướ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
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 ! :unsure:

 

 

 

Hình như đường link này hư rồi. E không vào để tải về được. Anh có thể gửi lại cho em được không? thanhgam2003@yahoo.com

 

Cảm ơn anh.

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)
) :unsure: :unsure:  

 

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

....

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

sao minh lam khong duoc nhi

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
Lỗi này là khi bạn dùng 1 trong 3 lisp vẽ cửa đi (c1,c2,c4). Khi bạn chọn hướng của cửa, bạn phải chọn vào 1 trong mặt vùng được ngăn cách bằng đường thẳng nối từ 2 điểu đầu và cuối (vừa pick).

 

 

Trước tiên cám ơn bác ji đã chia sẽ cho anh em trên diễn đàn. các lệnh dùng tốt nhưng mình vẫn bị lỗi khi dùngcác lsp sau:

thứ nhất là lsp vẽ cửa đi và cửa sổ.

Command: c1

Hay vao diem goc cua: >>

Hay vao diem goc cua:

Hay vao diem mut cua:

Hay vao huong cua: ; error: no function definition: L3D_KHONGTHANGHANG

ve cua so

Command: w2 1 found

first point :

second point :; error: bad argument type: lentityp nil

Command:

thứ hai là: Hiệu chỉnh Hatch

trong các lệnh

1. hc: Copy Hatch

2. hm: Move Hatch

3. ha: Chỉnh góc của mấu Hatch

4. hs: Chỉnh độ Scale của mẫu Hatch

thì chỉ dùng được hc, còn hm, ha, hs không dùng đc. không biết máy mình có bị lỗi gì không

Mong được chỉ giáo :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

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é...

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é...

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!

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

Rất cám ơn bạn đã chỉ cho cách hướng dẫn từ LSP sang VLX, Tôi đã convert thành công nhưng bây giờ tôi không biết đưa vào Cad kiểu gì để nhận các lệnh đó, cái VLX tôi không biết một tý gì cả, Mong Bạn giúp đỡ tôi cái đó.

Còn một cái nữa tôi muốn hỏi bạn về lệnh "mo PROPERTIES" làm sao để lúc sử dụng lệnh đó hiện lên giao diện giống như Cad14.

Cám ơn bạ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
Rất cám ơn bạn đã chỉ cho cách hướng dẫn từ LSP sang VLX, Tôi đã convert thành công nhưng bây giờ tôi không biết đưa vào Cad kiểu gì để nhận các lệnh đó, cái VLX tôi không biết một tý gì cả, Mong Bạn giúp đỡ tôi cái đó.

Còn một cái nữa tôi muốn hỏi bạn về lệnh "mo PROPERTIES" làm sao để lúc sử dụng lệnh đó hiện lên giao diện giống như Cad14.

Cám ơn bạn rất nhiều

Mình trả lời được một cái thôi

Load file*.VLX như load lisp vậy

Command: ap

APPLOAD

chọn file bạn vừa convert-->OK

 

còn của sổ PROPERTIES các cao thủ sẽ giúp cho 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

Lạ quá! Mình làm hệt như Jikibo nói, để chuyển từ LSP sang VLX. Nhưng không hiểu có lỗi gì mà không thể thực hiện đc các lệnh của Lish.

Reinit cad báo:

Syntax error in acad.pgp file on line 361 in field 1

Thực hiện lệnh cad báo:

cx Unknown command "CX". Press F1 for help.

Jikibo giúp mình xem như thế là bị làm sao?

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

anh ơi cho hỏi em làm đúng như các chỉ dẫn ở trên ra được file *.VLX rồi, nhưng sao vào CAD lại hok sử dụng được các lệnh vừa tạo ra.

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
anh ơi cho hỏi em làm đúng như các chỉ dẫn ở trên ra được file *.VLX rồi, nhưng sao vào CAD lại hok sử dụng được các lệnh vừa tạo ra.

AutoCAD báo gì hả 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
Xong phần khởi động. Giờ là bắt đấu vẽ với LINE, với ARC...

- Ồ! những đường Line này sao không phải là PLINE nhỉ? Vừa dễ quản lý vừa nhẹ bản vẽ. Phải làm sao đây? BO lại à ? OH không !!!

 

Bài 4. Nối LINE và ARC thành PLINE

 

(defun c:nn (/ tdt ssdt sodt index)
(defun ObjName (ssdt /)
(cdr (assoc '0 (entget ssdt)))
)
(defun MoPL (ssdt /)
(= (cdr (assoc '70 (entget ssdt))) 0)
)
(defun NoiPL (ssdt /)
(if (MoPL ssdt)
(command ".PEDIT" ssdt "J" "All" "" "X")
)
)
(defun NoiLC (ssdt /)
(command ".PEDIT" ssdt "Y" "J" "All" "" "X")
)
(setq
tdt (ssget)
sodt (sslength tdt)
index 0
)
(repeat sodt
(setq
ssdt (ssname tdt index)
index (1+ index)
)
(if (or (= (Objname ssdt) "LWPOLYLINE")
(= (Objname ssdt) "POLYLINE")
)
(NoiPL ssdt)
)
(if (or (= (Objname ssdt) "LINE") (= (Objname ssdt) "ARC"))
(NoiLC ssdt)
)
)
(princ)
)

 

Lệnh để nối LINE và ARC thành PLINE là nn

 

sao em ko nối đượ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
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 ! :bigsmile:

anh ơi link die rồi, co thể send cho em được ko?

friday13th_death@yahoo.com

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
pro ơi, sao em ko load được, help mi

thanks pro!

Không load được thì cứ coppy mấy đoạn lisp trên rồi về tự converter thanh` *.VLX . cách này vừ học thêm dược cách chuyển đổi nữa. Mình cũng làm được 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
Sao ko thống kê lệnh bằng một txt cho tiện jikibo ơi

Bác nói đúng đó, thống kê mấy lệnh bằng một txt đễ mấy bác nào nhác chỉ dow VXLCOBAN.VLX Biết đường mà lần

CÒn ai có thời gian thì đọc lại mấy bài của ssg, trên đó có đầ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
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 :bigsmile: )

 

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ữ)

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 :bigsmile: )

 

 

 

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ữ)

 

BÁC JI SÓ THỂ CHỈNH LẠI CHO TỰ NHẬP SCALE FACTOR KHÔNG

VÍ DỤ

TÔI TẠO 1 KÍCH THƯỚC CÓ TÊN 100 BẰNG LISP NÀY

Command: TAOK

 

TY LE BAN VE: 1:1

 

CHIEU CAO CUA CHU: 250

 

TEN CUA KIEU DIM MOI: 100

KHI KIỂU DIM NÀY ĐƯỢC TẠO THÌ HỆ SỐ SCALE FACTOR TRONG TAB PRIMARY UNITS LÀ 1

 

BÂY GIỜ TẠO THÊM 1 DIM STYLE 50

Command: TAOK

 

TY LE BAN VE: 1:1

 

CHIEU CAO CUA CHU: 250

 

TEN CUA KIEU DIM MOI: 50

KHI KIỂU DIM NÀY ĐƯỢC TẠO THÌ HỆ SỐ SCALE FACTOR TRONG TAB PRIMARY UNITS LÀ 0.5

TƯƠNG TỰ VỚI CÁC DIM KHÁC (25 THÌ SCALE FACTOR=0.25, 20 THÌ SCALE FACTOR=0.2...)

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

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


×