Chào bạn! Mình tạo Blog này để lưu giữ những bài viết của mình trên các diển đàn khác và vài tư liệu cá nhân. Chúc bạn vui khi ghé blog này.
(Đề phòng ai đó muốn mua quà tặng hoặc chiêu đãi mình).
-Quần áo thích JOHN HENRY: Áo thun cỡ M; Áo sơ mi dài tay cỡ S, ngắn tay cỡ M; Quần cỡ 29.
-Ăn vặt thích: Lựu; Sapoche; Hồng giòn; Bưởi; Thanh long.
-Món ăn chính thích: Mỳ Quảng; Bánh xèo; cơm chiên; xôi không + trứng tráng.
-Tạp chí thích: Văn nghệ quân đội; tạp chí kiến trúc; nhà đẹp; làm bạn với máy tính.
-Ca sỹ thích: Quang Dũng; Minh Quân; Đàm Vĩnh Hưng; Cao Thái Sơn; Ngọc Khuê;
Lê Cát Trọng Lý; Tuấn Ngọc.
1. Mình sẽ ko trả lời đồng thời xoá mọi câu hỏi với vai trò nặc danh. Các bạn vui lòng đọc thông báo trước khi đặt câu hỏi!
.
2. Mình đã trang bị đủ công cụ để tương tác với các bạn. Đừng bảo mình gửi mail hoặc liên hệ với các bạn khi các bạn nhờ mình!

Hướng dẩn viết lisp bài 21:

00:21 Được đăng bởi Phạm Quốc Duy

Bạn nên theo dỏi theo tên bài viết tăng từ nhỏ tới lớn thì mới đúng trình tự!

*Đến lúc này kiến thức về lisp của bạn đã đủ để viết lisp đánh cos cao độ rồi. Mình làm mẫu để bạn có thể quen dần với cách đặt và giải quyết vần đề bằng lisp nhé.
*Đặt vấn đề:
-Khi vẽ bạn có nhu cầu đánh cao độ cho các mặt đứng, mặt cắt. Cách thông thường là bạn có sẳn cái BLOCK rồi chèn vào COPY để tại các vị trí cần thiết xong đo và sửa các gía trị của text cho phù hợp. Cái phiền là bạn phải đo, tính theo tỉ lệ vẽ từ đó mới có giá trị điền vào các text, còn phải thêm dấu phía trước giá trị text nửa. Ví dụ +3.600.
-Giải quyết vấn đề bằng cách làm các công việc sau:
a/Tạo 1 BLOCK có tên caodo.dwg lưu vào thư mục nào đó (ở đây mình dùng C:\tailieukythuat\dwg\caodo.dwg). Khi tạo Block này bạn nên tạo ở Layer 0 có màu là bylayer, để khi chèn vào nó đi theo các thông số của layer hiện hành. Điểm chèn BLOCK nằm đúng mũi tên của BLOCK.
b/Viết lisp với các chức năng sau:
+Hỏi 1 mét vẽ bằng bao nhiêu: (dùng getreal)
+Hỏi chọn điểm đánh cao độ: (dùng getpoint)
+Hỏi chọn cao độ 0.000: (dùng getpoint) lúc này lưu chế độ bắt điểm lại và gán chế độ bắt điểm bằng 128 (bắt vuông góc).
+Chèn BLOCK caodo.dwg vào điểm đánh cao độ vừa chọn. Lúc này gán chế độ bắt điểm bằng 0.
+Tính toán tọa độ để viết text căn cứ vào tọa độ điểm vừa chèn.
+Đo khoảng cách từ điểm đánh cao độ đến điểm có cao độ 0.000.
+Chia khoảng cách đo được cho giá trị vẽ 1 mét.
+Làm tròn sau dấu phẩy là 3 chử số: (dùng rtos)
+Lấy giá trị y của điểm đánh cos trừ cho giá trị y của điểm cao độ 0.000
+Nếu giá trị này >0 thì gán dấu phía trước của text là dấu +.
+Nếu giá trị này <0 thì gán dấu phía trước của text là dấu -.
+Nếu giá trị này =0 thì gán dấu phía trước của text là dấu .
+Viết text gồm dấu phía trước và giá trị cao độ tại điểm vừa tính được.
-Dưới đây là hình minh họa về hình dáng BLOCK cao độ, các thông số về tọa độ viết text so với điểm chèn, độ lớn text mình sử dụng trong đoạn lisp mẫu.


(defun c:cos ()
(command "undo" "be")
(setq motmet (getreal "\nMot met ban ve bang bao nhieu: "))
(setq luubatdiem (getvar "osmode"))
(setq a (getpoint "\nChon diem muon danh cos: "))
(setvar "osmode" 128)
(setq b (getpoint a"\nChon cao do 0.000: "))
(setvar "osmode" 0)
(setq daiab (distance a b))
(setq giatri (/ daiab motmet))
(setq c (list (- (car a) 250) (+ (cadr a) 410)))
(setq trenduoi (- (cadr a) (cadr b)))
(if (= trenduoi 0) (PROGN
(setq dau "%%p ")
)
)
(if (> trenduoi 0) (PROGN
(setq dau "+ ")
)
)
(if (< trenduoi 0) (PROGN
(setq dau "- ")
)
)
(setq noidung (strcat dau (rtos giatri 2 3)))
(command "-style" "tlkt" "VNI-HELVE" "0" "1" "0" "n" "n")
(command ".TEXT" c 250 0 noidung)
(command "INSERT" "c:\\tailieukythuat\\dwg\\caodo.dwg" a 1 1 0)
(setvar "osmode" luubatdiem)
(command "undo" "end")
(princ)
)

Bạn để ý dòng dùng INSERT block caodo.dwg nhé phần đường dẩn đến file phải dùng \\ để thể hiện thư mục vì khi đọc lisp sẽ bỏ bớt một dấu \. Hoặc bạn thể hiện bằng dấu xẹt ngược cũng được:
(command "INSERT" "c:\\tailieukythuat\\dwg\\caodo.dwg" a 1 1 0)
(command "INSERT" "c:/tailieukythuat/dwg/caodo.dwg" a 1 1 0)

11 nhận xét:

  1. Nguyễn Cao Cường nói...

    Chào anh Duy !
    Anh cho em hỏi :
    (setq c (list (- (car a) 250) (+ (cadr a) 410 )))
    + Xa 250 + Ya 410 là sao ? Khi em cho lisp chạy thì vị trí của text không nằm trên cao độ và size của nó rất lớn . Em đang vẽ ở tỉ lệ 1-1 (getreal "\n Mot met = bao nhieu :") em nhập 1
    Anh Duy chỉ giúp em nhé

  2. Nguyễn Cao Cường nói...

    Để học tốt được Lisp thì em phải biết mã dxf và biến hệ thống đúng không anh , em có lên mạng tìm nhưng tìm không được anh Duy có tài liệu không send cho em với.Mấy bài ví dụ của anh rất hay nhưng anh mới dùng có ít hàm quá à , em có tham khảo thêm ở trên diễn đàn cadviet , ketcau nhưng đó chỉ là trao đổi những kinh nghiệm và mọi người đều biết sơ sơ cả rùi . còn như em thì chẳng biết gì cả , đọc thêm tài liệu thì tài liệu viết cũng rõ nhưng không có ví dụ kèm theo nên em cũng chẳng hiểu được nhiều . Em biết anh cũng bận lắm , không rảnh rỗi gì nhưng trong 1 tuần anh có thể viết 1 bài hướng dẫn chúng em được không ? Em đòi hỏi có quá lắm không hi hi tại rất thích học lisp và hơi chậm hiểu nên muốn nhờ tới anh . Có quá đáng thì cũng xin anh bỏ qua cho em nhé .
    Chúc anh luôn vui vẻ
    Cám ơn anh

  3. Phạm Quốc Duy nói...

    Do mình vẽ 1 mét = 1000 nên cái text của mình có độ cao là 250. Phần hỏi 1 mét bằng bao nhiêu của lisp chỉ là để tính toán giá trị khoảng cách thôi.
    Nếu bạn vẽ 1 mét bằng 1 thì chỉnh lại thành
    (setq c (list (- (car a) 0.25) (+ (cadr a) 0.41 )))



    (command ".TEXT" c 0.25 0 noidung)

    Vì đây là xác định điểm c dùng làm vị trí viết text và viết text tại điểm c độ lớn là 0.25 góc quay 0 nội dung là noidung.
    Bạn đọc tới bài này rồi và Mình đã giải thích cách xác định 1 điểm và cách viết 1 dòng text rồi chứ. Khi làm qua ví dụ nào thì bạn nên nhớ luôn các vần đề sẽ áp dụng vì sau đó thì mình ko nhắc lại cái vần đề này trong bài nửa mà.

  4. Nguyễn Cao Cường nói...

    cám ơn anh đã chỉ , ha ha em có nhớ đó chứ nhưng tại cứ mỗi lần chạy là text có size rất lớn và em đã thử đặt lại tỉ lệ bản vẽ nhưng vẫn không được có lẽ là do em tạo cái block cao độ nhỏ quá . Em không rành Acad lắm hi hi tại lang thang trên mạng thấy mọi người kháo nhau rằng viết Lisp thì không cần phải giỏi vẽ Acad đâu chỉ cần biết căn bản là được hi hi để khắc phục nhược điểm hè này em sẽ tu luyện cả 2 món .

  5. Phạm Quốc Duy nói...

    Trời ai mà nói vậy? Viết lisp cho cad thì phải rành cad chứ vì nó là gộp các bước thực hiện của cad vào thành 1 lệnh mà.

  6. Nguyễn Cao Cường nói...

    Ha Ha vậy mà em cứ tưởng ,em chỉ biết mấy cái lệnh vẽ cơ bản thôi hè này em sẽ cố gắng học . Ha ha Mai em Thi tiếp rồi bi giờ phải học bài cái đã mai em sẽ tiếp tục. Em sắp thành công 1 bài ví dụ tự làm đầu tiên của riêng em rồi ha ha vui lắm cám ơn anh Duy nhé .

  7. tuan nói...

    (setq c (list (- (car a) 250) (+ (cadr a) 410))); dòng này em chưa hiểu lắm anh Duy à. Anh có thể giải thích rõ giúp em được không ạ. Tại sao điểm c có tọa độ là Xa - 250, Ya + 410?

  8. Phạm Quốc Duy nói...

    a là điểm đầu của mũi tên ký hiệu cos. Mình muốn cái text nằm lui lại so với điểm đó 250 và cao hơn điểm đó 410 thì phải thế thôi.

  9. tuan nói...

    sao lisp này em viết lại mà vẫn không chạy được nhỉ?

  10. Phạm Quốc Duy nói...

    Đâu?

  11. tuan nói...

    đây anh, anh xem giúp em nó sai ở đâu nhé:


    (defun c:cos1 ()
    (command "undo" "be")
    (setq motmet (getreal "\nMot met ban ve bang bao nhieu:"))
    (setq luubatdiem (getvar "osmode"))
    (setq a (getpoint "\nChon diem muon danh cos: "))
    (setvar "osmode" 128)
    (setq b (getpoint a"\nChon cao do 0.000:"))
    (setvar "osmode" 0)
    (setq daiab (distance a b))
    (setq giatri (/ daiab motmet))
    (setq c (list (- (car a) 250)(+ (cadr a) 410)))
    (setq trenduoi (- (cadr a) (cadr b)))
    (if (= trenduoi 0)(progn
    (setq dau "%%p ")
    )
    )
    (if (> trenduoi 0)(progn
    (setq dau "+ ")
    )
    )
    (if (< trenduoi 0)(progn
    (setq dau "- ")
    )
    )
    (setq noidung (strcat dau (rtos giatri 2 3)))
    (setq "-style" "Tuan" "VNI-HELVE" "0" "1" "0" "n" "n")
    (setq ".text" c 250 noidung)
    (command "insert" "C:\\Users\\TUAN\\Desktop\\lisp\\caodo.dwg" a 1 1 0)
    (setvar "osmode" luubatdiem)
    (command "undo" "end")
    (princ)
    )

Đăng nhận xét

Khi viết nhận xét mong bạn không đứng vai trò nặc danh! Bạn có thể chọn Name/Url trong đó Url là http://duy782006.blogspot.com/ như vậy hay hơn nặc danh bạn nhé.

Lưu trữ các nội dung hay dùng cho bài viết
Giới thiệu tác giả!
Họ & tên: Phạm Quốc Duy
Sinh ngày: 08/08/1978
Quê: Tỉnh Quảng Ngãi
Giới tính: Nam
Tình trạng: Đã cưới
Nghề nghiệp: Kiến trúc Sư
Sở trường: Im lặng
Nhược điểm: vô số
Lá cải net và "bình lựng" của Duy782006
Hồng Nhung từng bị cấm hát >>> Sao không ai cấm cái tiêu đề hông dính gì tới bài viết này giùm tui cái.
*Không dám bàn sâu vào nội dung. Ở đây Duy782006 bày tỏ sự "ngưỡng mộ một cách sâu sắc" đến các cá nhân "kiệt sức" đã giật những cái tít lá cải góp phần xây dựng khu vườn cải trê net hiện nay.