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

Sửa Lisp Đã Có

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

Chào Anh (chị).

 

- Mình có 1 bản vẽ gồm các đối tượng ở dạng TEXT (Ban nguon.dwg) và mình tìm kiếm diễn đàn thấy có LISP tạo khối các đối tượng (Tao Block.lisp).

 

 - Mình không biết cách sửa LISP đã có để khi chạy chỉ việc chọn ĐIỂM CHÈN CỦA BLOCK và chọn các ĐỐI TƯỢNG cần tạo khối 1 lần thay vì phải chọn nhiều lần. Mong các bác sửa giúp.

 

- Chân thành cảm ơn.http://www.cadviet.com/upfiles/5/3003_sua_lisp_de_tao_block.rar

  • Vote giảm 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

Chưa thấy chỗ nào trong code quy định chọn nhiều lần ???

Vâng. Mình muốn gộp 4 đối tượng có trong từng thửa thành 1 khối. Như vậy nếu bản vẽ có n thửa thì phải chạy n lần mới xong, mỗi lần chạy lại phải nhập tọa độ điểm chèn (x,y=0,0), chọn các đối tượng để tạo khối nên rất tốn công (ở bản vẽ đính kèm mình phải chạy 8 lần để tạo ra 8 khối).

 

Mình muốn sửa lại LISP đã có để chạy 1 lần là tạo ra được các khối cho n thửa thay vì phải chạy n lần nhưng lại không biết cách sửa.

 

Cảm ơn bác.

  • Vote giảm 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
ketxu    2.653

Thế n điểm chèn của n khối đấy bạn định cho nằm ở đâu nếu k muốn chỉ định. Để 0,0 hết hay để ở đâ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

Thế n điểm chèn của n khối đấy bạn định cho nằm ở đâu nếu k muốn chỉ định. Để 0,0 hết hay để ở đâu ?

Để 0,0 hết bạn à (nghĩa là liên kết các đối tượng trong mỗi thửa thành 1 khối và tọa độ các đối tượng đó không thay đổ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
ketxu    2.653

Quick code, mỗi nhóm một phát Space nhé bạn :)  :

(defun c:mbl(/ _mBlock _ss->l)
	;; Private function
	(defun _ss->l (s / n e l)
	  (setq n (sslength s))
	  (while (setq e (ssname s (setq n (1- n))))
		(setq l (cons e l))
	  )  
	)
	(defun _mBlock(s p)			
	(entmake
	(list '(0 . "INSERT")
		(cons 2 
				(cond ((entmake (list '(0 . "BLOCK")
					(cons 2 "*anon")
					(cons 70  1)
					(cons 10 p)
					)
				)
				(mapcar '(lambda(i)
					(entmake (vl-remove-if '(lambda(x)(= (car x) 5)) (entget i)))
					(entdel i))
					(_ss->l s)
				)
				 (entmake '((0 . "ENDBLK")))			
				))
		)
	(cons 10 p)
	))
	(entmake (list (cons 0   "SEQEND")))
	)
	;Main 
	(while (setq s (ssget '((0 . "TEXT,LINE"))))
			(_mBlock s '(0 0))
	)
)

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

 

Quick code, mỗi nhóm một phát Space nhé bạn :)  :

(defun c:mbl(/ _mBlock _ss->l)
	;; Private function
	(defun _ss->l (s / n e l)
	  (setq n (sslength s))
	  (while (setq e (ssname s (setq n (1- n))))
		(setq l (cons e l))
	  )  
	)
	(defun _mBlock(s p)			
	(entmake
	(list '(0 . "INSERT")
		(cons 2 
				(cond ((entmake (list '(0 . "BLOCK")
					(cons 2 "*anon")
					(cons 70  1)
					(cons 10 p)
					)
				)
				(mapcar '(lambda(i)
					(entmake (vl-remove-if '(lambda(x)(= (car x) 5)) (entget i)))
					(entdel i))
					(_ss->l s)
				)
				 (entmake '((0 . "ENDBLK")))			
				))
		)
	(cons 10 p)
	))
	(entmake (list (cons 0   "SEQEND")))
	)
	;Main 
	(while (setq s (ssget '((0 . "TEXT,LINE"))))
			(_mBlock s '(0 0))
	)
)

 

Cảm ơn bạn Ketxu đã giúp đỡ.

 

Ý tôi là sau mỗi lần chọn vùng cần tạo khối thì các đối tượng có trong 1 THỬA (mỗi Polyline khép kín) tạo thành 1 KHỐI và tọa độ các đối tượng đó không thay đổi (Trong Lisp của bạn, nếu 1 LẦN chọn gồm N thửa sẽ tạo thành 1 KHỐI, tôi muốn 1 LẦN chọn gồm N thửa thì tạo thành N KHỐ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
ketxu    2.653

Đã hiểu yêu cầu của bạn. Do lần đầu dốt quá mình chưa hiểu ra.

Kết luận : bài toán yêu cầu khác hẳn cái lisp kia ^^ Và bài toán này đã có bàn luận, k ngắn, mình đã từng làm nhưng k hoàn hảo, mình k giúp bạn được rồ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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×