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 [phần 2]

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

phamthanhbinh    3.123
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.

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
phamthanhbinh    3.123
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......

  • 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

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!

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ạ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.com/upfiles/3/trac_ngang.dwg

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
ksor_phong    1
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.

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
nguyentuyen6    127

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

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
ToTo08    2
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.

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
ToTo08    2
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.

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
ndtnv    396
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.yousendit.com/download/aHlUQ1ZtcWY4NVh2Wmc9PQ

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

  • 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
ksor_phong    1
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

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
master_worse    87
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.

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
phamthanhbinh    3.123
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.

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

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 đỡ !

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
nguyentuyen6    127
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)

untitled-2.jpg

 

 

 

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
duy782006    1.373
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 "" "" "")

  • 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
ndtnv    396
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))
		)
	)
)
)

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
nguyentuyen6    127

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é

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
ketxu    2.649
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 đỡ

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
duy782006    1.373
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.

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
Tue_NV    3.841
-Để 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

  • 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
phamngoctukts    708

Các đại ca cho em hỏi cái

em có cái lisp này khi dùng ấn esc thì không quay về lúc ban đầu được. Em đã đọc bài viết của bác Hoành và làm theo nhưng không ăn thua.

http://www.cadviet.com/upfiles/3/phaohoa.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
truongthanh    7

Chào các bạn!Mình đã dùng chức năng search của diễn đàn mà vẫn ko tìm ra, nay mình mạo muội nhờ các bạn viết dùm mình LISP đổi Global Width trong Block, chẳng là mình có rất nhiều Block nhà cửa, trong đó được vẽ bằng các Pline đã được định sẵn Global Width, bây giờ mình muốn chuyển hết tất cả các Pline trong các block đó về cùng 1 giá trị Global width, lisp thực hiện như sau:

- gọi lệnh

- chọn block (không cần quan tâm block đó là gì, trong bãn vẽ có bao nhiêu block thì chọn hết)

- nhập giá trị global width mới

- kết thúc lệnh

Thanks mọi người 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
duy782006    1.373
Đơ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

Là thành viên lâu năm mình biết cách tốt nhất để cảm ơn là nhấn nút thank nhưng cái này đúng là buồn ngủ gặp chiếu manh. Làm 1 bài để cảm ơn Tuệ vậy (vốn cái này có hỏi bác Hoành 1 lần nhưng cũng ko có đáp án). Rất cảm ơn Tuệ!

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
ketxu    2.649
-Để 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

 

 

Là thành viên lâu năm mình biết cách tốt nhất để cảm ơn là nhấn nút thank nhưng cái này đúng là buồn ngủ gặp chiếu manh. Làm 1 bài để cảm ơn Tuệ vậy (vốn cái này có hỏi bác Hoành 1 lần nhưng cũng ko có đáp án). Rất cảm ơn Tuệ!

Vậy cho e thị phạm 2 lisp thực hiện việc trên với(mừng như vớ được và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
Tue_NV    3.841
Vậy cho e thị phạm 2 lisp thực hiện việc trên với(mừng như vớ được vàng)^^

Hề hề, cho Vàng bạn luôn. :D

Anh Duy và bạn kẽtu hãy thử Lisp này

(defun c:1(/ ov vl)
(setvar "hpname" "ansi31") 
 (setq vl '("clayer" "cmdecho"); Sys Var list
ov (mapcar 'getvar vl)); Get Old values
 (setvar "cmdecho" 1) 
 (if (tblsearch "layer" "KT-Hatch")
(setvar "CLAYER" "KT-Hatch")
(command "-layer" "M" "KT-Hatch" "" ) )
 (initdia)
 (command "hatch")
 (while (	(command pause)
 ) 
 (vl-cmdf "change" "L" "" "P" "LA" "KT-Hatch" "")
 (mapcar 'setvar vl ov); reset Sys Vars
 (princ)
 )

  • 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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×