Đến nội dung


Hình ảnh

Sửa Lisp Đã Có


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

#1 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 05 April 2016 - 03:50 PM

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.c...e_tao_block.rar


  • -1

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 06 April 2016 - 08:44 AM

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


  • 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


#3 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 06 April 2016 - 09:02 AM

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.


  • -1

#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 06 April 2016 - 10:34 AM

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

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


#5 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 06 April 2016 - 10:43 AM

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


  • 0

#6 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 06 April 2016 - 01:16 PM

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

  • 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


#7 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 06 April 2016 - 02:10 PM

 

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


  • 0

#8 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 06 April 2016 - 02:53 PM

Đã 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 :)


  • 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


#9 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 06 April 2016 - 03:19 PM

P/s : khóa bài vì trùng nội dung !


  • 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