Đến nội dung


Hình ảnh
* * * - - 8 Bình chọn

Viết lisp theo yêu cầu [phần 2]


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#1601 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 24 August 2010 - 08:19 PM

Cám ơn sếp đã quan tâm giúp đỡ, tuy nhiên là cái Lsp này chưa ăn thua sếp à, các cái block trong block và màu trong block vẫn chưa điều khiển được, sếp nghĩ giúp em thêm tý nữa, tkssss

Chào bạn Ksor Phong,
Thực tình không hiểu nổi ý của bạn, bạn muốn điều khiển màu trong block ra sao, hãy post một mẫu bản vẽ nguyên thủy và một bản vẽ thể hiện cái kết quả bạn muốn, đừng nói suông như vậy, không ai có thể hiểu vì mọi người không phải ai cũng đủ kiến thức về cái chuyên ngành của bạn.
Mình đã xem bản vẽ bạn gửi và chả hiểu bạn nói cái gì nữa. Hầu hết các block trên bản vẽ cửa bạn đếu là các block không chứa thuộc tính (Hoặc giả là mình chả tìm thấy các block có chứa thuộc tính của bạn trong ty tỷ cái block ấy). Vậy bạn muốn điều khiển màu của cái gì.???
Với các block không có thuộc tính, nếu bạn không cho phép explore ra thì mình thua ngay từ đầu, chả nghĩ ngợi gì nữa bạn ạ. Bởi vì trong các mã dxf của các block, chả có cái mã nào điều khiển màu của nó cả. Chỉ có các đối tượng riêng lẻ hay đối tượng thuộc tinh mới có mã màu mà thôi.
Cái khả năng hiểu biết của mình chỉ có như vậy, có nhẽ bạn nên xem lại cái yêu cầu của bạn và hãy post những cái mình nói ở trên, có thể sẽ có người hiểu được yêu cầu của bạn và tìm ra giải pháp giúp bạn.
Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1602 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 24 August 2010 - 08:32 PM

Chào bạn phamthanhbinh, mình làm theo cách của bạn lúc load lisp báo lỗi ; error: extra right paren on input và kết quả xuất ra text không nhảy số. Bạn kiểm tra lại giúp mình. Đây là lisp mình sưu tầm được, mình thấy lisp rất hay nhưng chưa có nhiều thời gian để hoc lisp, bạn thông cảm.

Chào bạn ToTo08,
Mình đã kiểm tra lại đoạn code ở trên và không thấy có lỗi bạn ạ. Có nhẽ bạn đã có sai lầm chi đó khi chép các code này. Cái lỗi nó báo là bạn bị dư ngoặc đóng. Bạn hãy đếm thử số ngoặc đóng và ngoặc mở trong đoạn líp trên sẽ rõ.
Như đã nói là mình không chạy thử líp của bạn nên không biết nó có lỗi gì hay không. Chỉ đơn giản là mình thay thế cái đoạn code xuất kết quả ra mà thôi. Các đoạn code khác vẫn giư nguyên bạn ạ.
Theo líp cũ của bạn thì nó yêu cầu bạn phải chọn một text có sẵn trên bản vẽ để thay thế giá trị mới vô. Nếu bạn không chọn một text thì nó cứ hỏi hoài cho tới khi bạn chọn một text.
Còn code mình sửa chỉ đơn giản là nếu bạn không chọn gì hoặc chọn phải đối tượng không đúng là text thì líp sẽ in giá trị mới ra dòng command bằng lệnh princ.
Còn nếu bạn chọn đúng là text thì nó sẽ thay giá trị mới này vào text.
Vì thế nếu lisp không xác định được giá trị mới thì có nhẽ là cái líp gốc của bạn có lỗi. Mình chưa kiểm tra lại lisp cũ của bạn được do chưa rảnh lắm. Mong bạn thông cảm......
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1603 phuongdongvl

phuongdongvl

    biết zoom

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

Đã gửi 25 August 2010 - 01:52 AM

Các pro ơi cho hỏi lisp vẽ cửa D1 dùng thế nào nhỉ.Mình đã dùng và ko thấy hiệu quả.Sau khi làm đúng theo từng bước lisp yêu cầu song cuối cùng lại chẳng hiện ra cái cửa nào cả .Mà khi mình thực hiện xong lệnh đó cũng coi như là tắt toàn bộ chế độ truy bắt điểm Osnap.Có phải lisp mọi người đưa lên bị lỗi j rồi ko.Mong các pro xử lý vụ này .Cám ơn nhiều!
  • 0

#1604 PHONGVAN1804

PHONGVAN1804

    biết zoom

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

Đã gửi 25 August 2010 - 10:47 AM

Các bạn giúp mình viết một lisp, sao cho khi tịnh tiến lên xuống đường địa chất trên trắc ngang để đạt được một giá trị diện tích phần đất và phần đá như mong muốn.
Các bạn xem file bản vẽ nhé !
http://www.cadviet.c.../trac_ngang.dwg
  • 0

#1605 ksor_phong

ksor_phong

    biết vẽ circle

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

Đã gửi 25 August 2010 - 11:47 AM

Chào bạn Ksor Phong,
Thực tình không hiểu nổi ý của bạn, bạn muốn điều khiển màu trong block ra sao, hãy post một mẫu bản vẽ nguyên thủy và một bản vẽ thể hiện cái kết quả bạn muốn, đừng nói suông như vậy, không ai có thể hiểu vì mọi người không phải ai cũng đủ kiến thức về cái chuyên ngành của bạn.
Mình đã xem bản vẽ bạn gửi và chả hiểu bạn nói cái gì nữa. Hầu hết các block trên bản vẽ cửa bạn đếu là các block không chứa thuộc tính (Hoặc giả là mình chả tìm thấy các block có chứa thuộc tính của bạn trong ty tỷ cái block ấy). Vậy bạn muốn điều khiển màu của cái gì.???
Với các block không có thuộc tính, nếu bạn không cho phép explore ra thì mình thua ngay từ đầu, chả nghĩ ngợi gì nữa bạn ạ. Bởi vì trong các mã dxf của các block, chả có cái mã nào điều khiển màu của nó cả. Chỉ có các đối tượng riêng lẻ hay đối tượng thuộc tinh mới có mã màu mà thôi.
Cái khả năng hiểu biết của mình chỉ có như vậy, có nhẽ bạn nên xem lại cái yêu cầu của bạn và hãy post những cái mình nói ở trên, có thể sẽ có người hiểu được yêu cầu của bạn và tìm ra giải pháp giúp bạn.
Chúc bạn vui.

Cám ơn bạn, mình nói lại nhé: mình muốn chuyển tất cả các block về cùng 1 layers và cùng một kiểu định dạng màu. (lưu ý là trong block có thể có block với nhiều kiểu định dạng màu khác nhau). các block này là block không có thuộc tính.
  • 0

#1606 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 25 August 2010 - 03:55 PM

Các bạn sửa giúp mình cái líp này nhé. Mình dựa theo cái lisp cua bác ssg

(defun BatDauVe() (setq OldOs (getvar "osmode")) (setvar "osmode" 0))

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

(defun KetThucVe() (setvar "osmode" OldOs) (princ))

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

(defun NhapSoLieu()

(setq

cao (getreal "\nCao cot: ")

chan (getreal "\nDuong kinh chan cot: ")

dau (getreal "\nDuong kinh dau cot: ")

rongnhat (getreal "\nDuong Kinh to nhat: ")

diemchuan (getpoint "\nDiem chuan: ")

)

)

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

(defun VeCot ( A B C D E / p2 p3 p4 p5 p6 p7 p8 p9 p10 OldOs)

(setq

p5 (polar E (/ pi 2) A)

p6 (polar p5 0.0 (/ B 2))

p10 (polar E 0.0 (/ C 2))

p2 (polar E (/ pi 2) (/ A 17))

p3 (polar E (/ pi 2) (/ A 6))

p4 (polar E (/ pi 2) (/ A (/ 3 2)))

p8 (polar p3 0.0 (/ D 2))

p7 (polar p4 0.0 (/ A 21))

p9 (polar p4 0.0 (/ A 20))


)

(BatDauVe)

(command "line" p1 p6 p7 p8 p9 p10 "c")

(KetThucVe)

)

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

(defun C:Cot (/ cao chan dau rongnhat diemchuan)

(NhapSoLieu)

(VeCot cao chan dau rongnhat chuan)

)

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



toàn bị báo lỗi

Diem chuan: ; error: bad argument type: 2D/3D point: nil
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#1607 ToTo08

ToTo08

    biết vẽ line

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

Đã gửi 25 August 2010 - 04:23 PM

Chào bạn ToTo08,
Mình đã kiểm tra lại đoạn code ở trên và không thấy có lỗi bạn ạ. Có nhẽ bạn đã có sai lầm chi đó khi chép các code này. Cái lỗi nó báo là bạn bị dư ngoặc đóng. Bạn hãy đếm thử số ngoặc đóng và ngoặc mở trong đoạn líp trên sẽ rõ.
Như đã nói là mình không chạy thử líp của bạn nên không biết nó có lỗi gì hay không. Chỉ đơn giản là mình thay thế cái đoạn code xuất kết quả ra mà thôi. Các đoạn code khác vẫn giư nguyên bạn ạ.
Theo líp cũ của bạn thì nó yêu cầu bạn phải chọn một text có sẵn trên bản vẽ để thay thế giá trị mới vô. Nếu bạn không chọn một text thì nó cứ hỏi hoài cho tới khi bạn chọn một text.
Còn code mình sửa chỉ đơn giản là nếu bạn không chọn gì hoặc chọn phải đối tượng không đúng là text thì líp sẽ in giá trị mới ra dòng command bằng lệnh princ.
Còn nếu bạn chọn đúng là text thì nó sẽ thay giá trị mới này vào text.
Vì thế nếu lisp không xác định được giá trị mới thì có nhẽ là cái líp gốc của bạn có lỗi. Mình chưa kiểm tra lại lisp cũ của bạn được do chưa rảnh lắm. Mong bạn thông cảm......


Thực sự khi load lisp nó báo lỗi và kết quả cũng không như mong muốn. Cám ơn bạn đã quan tâm.
  • 0

#1608 ToTo08

ToTo08

    biết vẽ line

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

Đã gửi 25 August 2010 - 04:24 PM

Chào bạn ToTo08,
Mình đã kiểm tra lại đoạn code ở trên và không thấy có lỗi bạn ạ. Có nhẽ bạn đã có sai lầm chi đó khi chép các code này. Cái lỗi nó báo là bạn bị dư ngoặc đóng. Bạn hãy đếm thử số ngoặc đóng và ngoặc mở trong đoạn líp trên sẽ rõ.
Như đã nói là mình không chạy thử líp của bạn nên không biết nó có lỗi gì hay không. Chỉ đơn giản là mình thay thế cái đoạn code xuất kết quả ra mà thôi. Các đoạn code khác vẫn giư nguyên bạn ạ.
Theo líp cũ của bạn thì nó yêu cầu bạn phải chọn một text có sẵn trên bản vẽ để thay thế giá trị mới vô. Nếu bạn không chọn một text thì nó cứ hỏi hoài cho tới khi bạn chọn một text.
Còn code mình sửa chỉ đơn giản là nếu bạn không chọn gì hoặc chọn phải đối tượng không đúng là text thì líp sẽ in giá trị mới ra dòng command bằng lệnh princ.
Còn nếu bạn chọn đúng là text thì nó sẽ thay giá trị mới này vào text.
Vì thế nếu lisp không xác định được giá trị mới thì có nhẽ là cái líp gốc của bạn có lỗi. Mình chưa kiểm tra lại lisp cũ của bạn được do chưa rảnh lắm. Mong bạn thông cảm......


Thực sự khi load lisp nó báo lỗi và kết quả cũng không như mong muốn. Cám ơn bạn đã quan tâm.
  • 0

#1609 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 25 August 2010 - 04:32 PM

Trước hết xin cám ơn các bác đã quan tâm giúp đỡ.
Sở dĩ em cần làm vậy vì trong các bản vẽ hiện trạng dung lượng rất lớn (có khi đến cả 500MB CAD) edit từng block là điều rất khó vì nó có vài trăm block; vài chục layer, mỗi thằng định dạng một kiểu, nên em muốn tất cả các đối tượng về một layer, màu: bylayer của đối tượng gốc chứ không phải của layer chứa block, được vậy thì cám ơn các bác lắm.
Gửi các bác một file mẫu:
Em Up mãi không được bác nào thương tình dowload giúp em ở đây, file chỉ 1,5MB thôi:
https://www.yousendi...tcWY4NVh2Wmc9PQ

Bạn thử lisp này xem đúng ý bạn không
(defun  C:CoBlk (/  i ss ls)
(princ "\n Chon Blocks doi mau thanh bylayer: ")
(setq i 0 ss (ssget '((0 . "INSERT"))))
(command ".UNDO" "BE")
(repeat (sslength ss)
(CoBylayer (ssname ss i))
(setq i (1+ i))
)
(command ".REGEN")
(command ".UNDO" "E")
(princ)
)
(defun CoBylayer (blk / e el s)
(setq s (cdr (assoc 2 (entget blk))))
(if (not (member s ls))
(progn
(setq ls (append ls (list s)))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (= "INSERT" (cdr (assoc 0 el)))
(CoBylayer e))
(entmod (subst (cons 62 256) (assoc 62 el) el))
(setq e (entnext e))
)
)
)
)

  • 2

#1610 ksor_phong

ksor_phong

    biết vẽ circle

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

Đã gửi 25 August 2010 - 05:05 PM

Bạn thử lisp này xem đúng ý bạn không

(defun  C:CoBlk (/  i ss ls)
(princ "\n Chon Blocks doi mau thanh bylayer: ")
(setq i 0 ss (ssget '((0 . "INSERT"))))
(command ".UNDO" "BE")
(repeat (sslength ss)
(CoBylayer (ssname ss i))
(setq i (1+ i))
)
(command ".REGEN")
(command ".UNDO" "E")
(princ)
)
(defun CoBylayer (blk / e el s)
(setq s (cdr (assoc 2 (entget blk))))
(if (not (member s ls))
(progn
(setq ls (append ls (list s)))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (= "INSERT" (cdr (assoc 0 el)))
(CoBylayer e))
(entmod (subst (cons 62 256) (assoc 62 el) el))
(setq e (entnext e))
)
)
)
)

Quá tốt rồi bạn ơi, chỉ còn vấn đề là làm sao chuyển tất cả về 1 layer, cho nó chỉ còn 1 layer nữa là hoàn hảo, cám ơn bạn nhiều nhiều.
Lips thật là vĩ đại :D
  • 0

#1611 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 25 August 2010 - 05:36 PM

Các bạn sửa giúp mình cái líp này nhé. Mình dựa theo cái lisp cua bác ssg

Bạn sửa biến chuan o cuoi cung thanh diemchuan
trong hàm vecot có biến p1 nhưng chưa có định giá trị cho điểm này
nên cũng không sử dụng được líp nay đâu.
liên hệ với tác giả đi.
  • 0

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#1612 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 25 August 2010 - 06:37 PM

Các bạn sửa giúp mình cái líp này nhé. Mình dựa theo cái lisp cua bác ssg

(defun BatDauVe() (setq OldOs (getvar "osmode")) (setvar "osmode" 0))

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

(defun KetThucVe() (setvar "osmode" OldOs) (princ))

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

(defun NhapSoLieu()

(setq

cao (getreal "\nCao cot: ")

chan (getreal "\nDuong kinh chan cot: ")

dau (getreal "\nDuong kinh dau cot: ")

rongnhat (getreal "\nDuong Kinh to nhat: ")

diemchuan (getpoint "\nDiem chuan: ")

)

)

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

(defun VeCot ( A B C D E / p2 p3 p4 p5 p6 p7 p8 p9 p10 OldOs)

(setq

p5 (polar E (/ pi 2) A)

p6 (polar p5 0.0 (/ B 2))

p10 (polar E 0.0 (/ C 2))

p2 (polar E (/ pi 2) (/ A 17))

p3 (polar E (/ pi 2) (/ A 6))

p4 (polar E (/ pi 2) (/ A (/ 3 2)))

p8 (polar p3 0.0 (/ D 2))

p7 (polar p4 0.0 (/ A 21))

p9 (polar p4 0.0 (/ A 20))


)

(BatDauVe)

(command "line" p1 p6 p7 p8 p9 p10 "c")

(KetThucVe)

)

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

(defun C:Cot (/ cao chan dau rongnhat diemchuan)

(NhapSoLieu)

(VeCot cao chan dau rongnhat chuan)

)

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

toàn bị báo lỗi

Diem chuan: ; error: bad argument type: 2D/3D point: nil

Chào bạn nguyentuyen6,
Bạn lưu ý trong đoạn lisp bạn viết có lỗi như sau:
1/- Tên biến của bạn không thống nhất trên toàn bộ chương trình. Cùng một biến mà bạn đặt cho nó quá nhiều tên nên rất dễ nhầm lẫn. Cái biến diemchuan đó của bạn chính là bien d9uoc nhập vào từ hàm con (nhapsolieu) . Sang hàm con (vecot...) nó chính là cái biến toan cục E. Vậy nhưng khi thực liện lệnh line thì bạn lại coi nó là biến p1 trong khi bạn không hề định nghĩa cho cái biến p1 này là gì. Do vậy cái lệnh này nó không chịu vẽ vì không tìm được biến p1 và thế là toàn bộ cái công sức chạy lisp từ đầu đến đây thành công cốc.
Ngay cả khi bạn vô tình đã có điểm p1 thì lại dính đòn ở cái biến chuan trong hàm con (vecot ...... chuan) ở chương trình chính vì lisp cũng chả biết cái biến chuan này là cái của nợ gì.
Vì thế để có thể chạy được lisp này bạn phải: Hoặc là tạo thêm các hàm để định nghĩa lại các biến này cho thống nhất, hoặc là bạn tự chọn lấy một cái tên khoai khoái và giũ nó thống nhất trong chương trình của bạn.
Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1613 tiendaica

tiendaica

    biết zoom

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

Đã gửi 25 August 2010 - 10:22 PM

Một lần nữa mong được giúp đỡ , anh nào có lisp tạo đối tượng ở mắc lưới toạ độ như ở trong topo hay viết giùm anh em trắc địa rất xin cám ơn!!!!!!! một lần nữa xin được giúp đỡ !
  • 0

#1614 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 26 August 2010 - 12:17 AM

Chào bạn nguyentuyen6,
Bạn lưu ý trong đoạn lisp bạn viết có lỗi như sau:
1/- Tên biến của bạn không thống nhất trên toàn bộ chương trình. Cùng một biến mà bạn đặt cho nó quá nhiều tên nên rất dễ nhầm lẫn. Cái biến diemchuan đó của bạn chính là bien d9uoc nhập vào từ hàm con (nhapsolieu) . Sang hàm con (vecot...) nó chính là cái biến toan cục E. Vậy nhưng khi thực liện lệnh line thì bạn lại coi nó là biến p1 trong khi bạn không hề định nghĩa cho cái biến p1 này là gì. Do vậy cái lệnh này nó không chịu vẽ vì không tìm được biến p1 và thế là toàn bộ cái công sức chạy lisp từ đầu đến đây thành công cốc.
Ngay cả khi bạn vô tình đã có điểm p1 thì lại dính đòn ở cái biến chuan trong hàm con (vecot ...... chuan) ở chương trình chính vì lisp cũng chả biết cái biến chuan này là cái của nợ gì.
Vì thế để có thể chạy được lisp này bạn phải: Hoặc là tạo thêm các hàm để định nghĩa lại các biến này cho thống nhất, hoặc là bạn tự chọn lấy một cái tên khoai khoái và giũ nó thống nhất trong chương trình của bạn.
Chúc bạn vui.


Cảm ơn bạn nhe. Mình đã sửa được rồi.

Mình cũng sửa lại lisp như sau (có thêm 1 tý ):

;; free lisp from cadviet.com
(defun BatDauVe() (setq OldOs (getvar "osmode")) (setvar "osmode" 0))

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

(defun KetThucVe() (setvar "osmode" OldOs) (princ))

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

(defun NhapSoLieu()

(setq
;; A
cao (getreal "\nCao cot: ")
;; B
rongnhat (getreal "\nDuong Kinh to nhat: ")
;; C
diemchuan (getpoint "\nDiem chuan: ")

)

)

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

(defun VeCot ( A B C / p2 p3 p4 p5 p6 p7 p8 p9 p10 p61 p71 p81 p91 p101 OldOs)

(setq

p5 (polar C (/ pi 2) A)

p6 (polar p5 0.0 (* B 0.3))

p61 (polar p5 pi (* B 0.3))

p10 (polar C 0.0 (* B 0.38))

p101 (polar C pi (* B 0.38))

p2 (polar C (/ pi 2) (/ A 15))

p3 (polar C (/ pi 2) (/ A 7))

p4 (polar C (/ pi 2) (* A 0.6667))

p8 (polar p3 0.0 (* B 0.5))

p81 (polar p3 pi (* B 0.5))

p7 (polar p4 0.0 (* B 0.42))

p71 (polar p4 pi (* B 0.42))

p9 (polar p2 0.0 (* B 0.455))

p91 (polar p2 pi (* B 0.455))


)

(BatDauVe)

(command "line" p6 p7 p8 p9 p10 p101 p91 p81 p71 p61 "c")

(KetThucVe)

)

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

(defun C:VeCot (/ cao rongnhat diemchuan)

(NhapSoLieu)

(VeCot cao rongnhat diemchuan)

)

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



cho mình hỏi thêm là:

Ca^u 1:

Khi viết:

(defun VeCot ( A B C / p2 p3 p4 p5 p6 p7 p8 p9 p10 p61 p71 p81 p91 p101 OldOs)

Thi` A B C nó tự nhận lần lượt 3 tham số của đoạn này ah:


(defun NhapSoLieu()

(setq
;; A
cao (getreal "\nCao cot: ")
;; B
rongnhat (getreal "\nDuong Kinh to nhat: ")
;; C
diemchuan (getpoint "\nDiem chuan: ")





Câu 2: Mình muốn cho đoạn p6,p7,p8,p9,p10 chuyển thành SPLINE thay cho LINE thì phải dùng lệnh SPLINE như thế nào
. Vì khi muốn dừng lệnh SPLINE phải ấn Space 3 lần mới đẹp. (Chuyển 4 đoạn thẳng nối p6,p7,p8,p9,p10 thành 1 SPLINE tạo bởi 5 điểm p6,p7,p8,p9,p10)
Hình đã gửi



CẢm ơn bạn rất nhiều.
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#1615 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 26 August 2010 - 07:40 AM

Câu 2: Mình muốn cho đoạn p6,p7,p8,p9,p10 chuyển thành SPLINE thay cho LINE thì phải dùng lệnh SPLINE như thế nào
. Vì khi muốn dừng lệnh SPLINE phải ấn Space 3 lần mới đẹp. (Chuyển 4 đoạn thẳng nối p6,p7,p8,p9,p10 thành 1 SPLINE tạo bởi 5 điểm p6,p7,p8,p9,p10)

Trong lisp thì enter là "" vậy sửa như sau:
(command "spline" p6 p7 p8 p9 p10 p101 p91 p81 p71 p61 "" "" "")
  • 0

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


#1616 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 26 August 2010 - 09:30 AM

Quá tốt rồi bạn ơi, chỉ còn vấn đề là làm sao chuyển tất cả về 1 layer, cho nó chỉ còn 1 layer nữa là hoàn hảo, cám ơn bạn nhiều nhiều.
Lips thật là vĩ đại :D

Lisp này đổi tất cả về layer hiện hành.
Nếu bạn muốn đổi về layer khác VD "DAN CU" thì
comment dòng
(setq la (getvar "CLAYER"))
bỏ dấu ; đầu dòng
(setq la "DAN CU")
(defun  C:CoBlk (/  i ss ls la)
(setq la (getvar "CLAYER"))
;(setq la "DAN CU")
(princ "\n Chon Blocks doi mau bylayer: ")
(setq i 0 ss (ssget '((0 . "INSERT"))))
(command ".UNDO" "BE")
(repeat (sslength ss)
(CoBylayer (ssname ss i))
(setq i (1+ i))
)
(command ".REGEN")
(command ".UNDO" "E")
(princ)
)
(defun CoBylayer (blk / e el s)
(setq s (cdr (assoc 2 (entget blk))))
(if (not (member s ls))
(progn
(setq ls (append ls (list s)))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (= "INSERT" (cdr (assoc 0 el)))
(CoBylayer e)
)
(setq el (subst (cons 8 la) (assoc 8 el) el))
(entmod (subst (cons 62 256) (assoc 62 el) el))
(setq e (entnext e))
)
)
)
)

  • 0

#1617 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 26 August 2010 - 11:08 AM

Cảm ơn bạn duy78 nhiều nhes. mình mới tập tẹo viết lisp nên có chững câu hỏi ngu ngu vậy đó. Các bạn thông cảm nhé
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#1618 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 26 August 2010 - 01:38 PM

Gửi bạn LISP : Chuyển sang lớp KT-Dim, Thực hiện lệnh _dimlinear, Chuyển về Layer trước đó
các lệnh khác thực hiện tương tự (thay thế tên lệnh dimlinear).

(defun c:1(/ ov vl)
(defun *error* (msg)
(if ov (mapcar 'setvar vl ov)); reset Sys Vars
(if (not(wcmatch (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
(princ (strcat "\n** Error: " msg " **")))
(princ))

(setq vl '("clayer" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old values
(setvar "cmdecho" 1)
(if (tblsearch "layer" "KT-Dim")
(setvar "CLAYER" "KT-Dim")
(command "-layer" "M" "KT-Dim" "" ) )

(command "_dimlinear" )
(while (= (getvar "CMDACTIVE") 1 ) (command pause) )
(mapcar 'setvar vl ov) ; reset Sys Vars
(princ)
)

Em muốn áp dụng lệnh này cho lệnh hatch,tức là khi đang vẽ,dùng lệnh h thì layer chuyển về lớp kt-hatch,hiện hộp thoại hatch ,sử dụng lệnh hatch xong thì trả về lớp hiện tại.
Nếu bê nguyên code trên thì lệnh hatch nhận các thông số cũ,nên k thấy hiện hộp thoại,mà chọn luôn cả loại hatch cũ làm hatch hiện thời luôn (trong khi e muốn đổi loại).Thêm 1 vấn đề nữa,e muốn đặt hg là sẽ tự động chọn loại hatch ansi đầu tiên chẳng hạn,thì làm sao??Mong các bác giúp đỡ
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#1619 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 26 August 2010 - 03:08 PM

Em muốn áp dụng lệnh này cho lệnh hatch,tức là khi đang vẽ,dùng lệnh h thì layer chuyển về lớp kt-hatch,hiện hộp thoại hatch ,sử dụng lệnh hatch xong thì trả về lớp hiện tại.
Nếu bê nguyên code trên thì lệnh hatch nhận các thông số cũ,nên k thấy hiện hộp thoại,mà chọn luôn cả loại hatch cũ làm hatch hiện thời luôn (trong khi e muốn đổi loại).Thêm 1 vấn đề nữa,e muốn đặt hg là sẽ tự động chọn loại hatch ansi đầu tiên chẳng hạn,thì làm sao??Mong các bác giúp đỡ

-Để chọn loại hatch ansi:
(setvar "hpname" "ansi")
-Trong lisp muốn hiện hộp thoại hatch thì mình cũn đang bí hiện tại mình phải viết nguyên 1 hộp thoại dùng cho việc này.
  • 0

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


#1620 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 26 August 2010 - 03:29 PM

-Để chọn loại hatch ansi:
(setvar "hpname" "ansi")
-Trong lisp muốn hiện hộp thoại hatch thì mình cũn đang bí hiện tại mình phải viết nguyên 1 hộp thoại dùng cho việc này.

Đơn giản mà anh :D
(defun c:shat();show hatch
(initdia)
(command "hatch")
)
Nó hay lắm đó. Nó còn dùng để hiện các hộp thoại khác nữa à. :D
  • 2