Đến nội dung


Hình ảnh
- - - - -

[yêu cầu] lisp tạo tỉ lệ cho viewport bên layout


  • Please log in to reply
9 replies to this topic

#1 proconeng86

proconeng86

    biết lệnh break

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

Đã gửi 08 September 2014 - 11:20 AM

Chào các bạn

Mình có 1 yêu cầu nhỏ về tỉ lệ viewport bên layout, mong các bạn giúp đỡ.

Khi bản vẽ có nhiều viewport, mình toàn phải chọn tỉ lệ cho nó bằng properties, cũng hơi mất thời gian nên muốn nhờ các bạn viết 1 lisp như sau:

  - gõ lệnh lisp

  - chọn các viewport bên layout cần xác định tỉ lệ

  - đưa ra một số tỉ lệ hay dùng: 1/5, 1/10, 1/25, 1/50, 1/100, 1/150, 1/200, 1/250 ngay trên vị trí con chuột để lựa chọn

  - kết thúc lệnh

Cám ơn các bạn nhiều


  • -1

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 September 2014 - 11:28 AM

Quá lười cho 1 thao tác.Dù code dễ nhưng yêu cầu không hợp lý lắm :)


  • 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 proconeng86

proconeng86

    biết lệnh break

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

Đã gửi 09 September 2014 - 02:46 PM

Quá lười cho 1 thao tác.Dù code dễ nhưng yêu cầu không hợp lý lắm :)

 

Tuy ít nhưng có lisp sẽ nhanh hơn và rút ngắn được thời gian làm, mỗi thứ cộng lại sẽ tiết kiệm được nhiều thời gian lắm chứ, sao bạn lại bảo là không hợp lý


  • 0

#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 September 2014 - 04:01 PM

Để mình viết dài hơn 1 tí :
- Nhiều viewport, là bao nhiêu ? Bạn có bao nhiêu VP cần phải đặt trong 1 bản vẽ ? Các viewport này đều mang tỉ lệ khác nhau hay là giống nhau mà phải đặt nhiều lần ?

- Theo yêu cầu của bạn, gõ lệnh, chọn viewport, hiện keyword để bạn chọn :

   + Gõ lệnh có chắc nhanh hơn Ctrl + 1 ?

   + Keyword có chắc lisper ngồi liệt kê cho bạn tất cả các kiểu thường dùng ? Tỉ lệ khác đi thì bạn lại Ctrl 1 hoặc vào code sửa thêm đúng không ?

- Yêu cầu của bạn là Chọn các viewport cần thay đổi tỉ lệ. Sao lại có từ CÁC ? Phải chăng bạn phải đặt nhiều viewport cùng 1 tỉ lệ nhưng lại làm lẻ tẻ từng cái nên lâu ?

- Sau khi đặt tỉ lệ cho viewport, bạn không có ý định khóa nó lại à ? Các việc này đều làm nhẹ nhàng trong bảng thuộc tính, tại sao lại lâ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 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 09 September 2014 - 04:06 PM

- có lẽ bạn chưa quen, hay bạn nêu chưa rõ đúng mục đích bạn cần làm, 1 bản vẽ thì đa số các vp ko cùng tỉ lệ với nhau, mà bạn nêu là chọn nhiều vp 1 lúc rùi gán cùng 1 tỉ lệ, lsp này có thể nhoc chưa viết nổi ^^, nhưng tưởng tượng so sánh với các lệnh có thể dùng trực tiếp trên cad với dùng lsp cao lắm nhanh hơn đc 1-2 s là cùng, nhoc đã thử khi chỉ dùng lệnh cad cho 10 vp có 3s :), tỉ lệ nào không có bạn có thể add thêm xài lâu dài


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#6 proconeng86

proconeng86

    biết lệnh break

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

Đã gửi 09 September 2014 - 09:57 PM

Để mình viết dài hơn 1 tí :
- Nhiều viewport, là bao nhiêu ? Bạn có bao nhiêu VP cần phải đặt trong 1 bản vẽ ? Các viewport này đều mang tỉ lệ khác nhau hay là giống nhau mà phải đặt nhiều lần ?

- Theo yêu cầu của bạn, gõ lệnh, chọn viewport, hiện keyword để bạn chọn :

   + Gõ lệnh có chắc nhanh hơn Ctrl + 1 ?

   + Keyword có chắc lisper ngồi liệt kê cho bạn tất cả các kiểu thường dùng ? Tỉ lệ khác đi thì bạn lại Ctrl 1 hoặc vào code sửa thêm đúng không ?

- Yêu cầu của bạn là Chọn các viewport cần thay đổi tỉ lệ. Sao lại có từ CÁC ? Phải chăng bạn phải đặt nhiều viewport cùng 1 tỉ lệ nhưng lại làm lẻ tẻ từng cái nên lâu ?

- Sau khi đặt tỉ lệ cho viewport, bạn không có ý định khóa nó lại à ? Các việc này đều làm nhẹ nhàng trong bảng thuộc tính, tại sao lại lâu :)

 

Có thể cách làm của mình khác các bạn nên các bạn chưa hiểu, để mình nói rõ hơn.

Giả sử bản vẽ bên layout có 10vp, có 4 loại tỉ lệ: 1/100, 1/50, 1/25, 1/5 chẳng hạn

Theo mình có 2 cách tạo vp: 

 - C1: tạo từng vp cho từng loại, giả sử tạo vp 1/100 (gõ lệnh MV, bật Ctr+1 chọn tỉ lệ), rồi copy ra cho các vp khác cùng tỉ lệ, tạo tương tự các vp khác cho các tỉ lệ khác, cách này thì lisp không nhanh hơn được nhiều lắm

 - C2: tạo 1 vp chứa hết tất cả bản vẽ, dùng lisp chia nhỏ vp có trên diễn đàn để chia ra từng nhiều vp, chọn các vp có cùng tỉ lệ rồi ấn ctr+1 để chọn tỉ lệ. cách này mình nghĩ có lisp sẽ nhanh hơn

   Với lại cách nào thì cách, có lisp liệt kê sẵn các tỉ lệ rồi và cứ thế chọn thôi sẽ nhanh hơn là ấn ctr+1 lên rồi chỉ vào ô tỉ lệ, rồi gõ tỉ lệ vào. mình muốn tối giản thao tác chút thôi mà

   Từ trước đến nay thì mình cũng chỉ có làm các loại tỉ lệ như #1 yêu cầu thôi, ko còn tỉ lệ nào nữa

   Các bạn là chuyên gia về lập trình rồi, mình nghĩ cái này chắc cũng đơn giản với các bạn thôi mà

   Với lại mỗi người có cách làm việc khác nhau, có thể các bạn thấy lisp như vậy đơn giản quá, làm thêm lệnh nhiều là ko đáng có. Đó có lẽ là với các bạn thôi vì các bạn chuyên lập trình sẽ có rất nhiều các phức tạp, chứ mình ko biết j về lập trình nên ko có quá nhiều lệnh, lisp trên mình nghĩ sẽ giảm được thời gian cho mình thôi

   Mong các bạn hiểu và giúp mình. Mình cám ơn


  • 0

#7 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 10 September 2014 - 09:27 AM

Quick code và không bắt lỗi, bạn dùng tạm. Có tỉ lệ nào thì bạn thêm vào mục Scale

Code có sử dụng hàm LM:Listbox của LeeMac cho nhanh

 

(vl-load-com)
(defun c:vps(/ l sc LM:ListBox)	
	;; Private function :
	(defun LM:ListBox ( title data multiple / file tmp dch return ) 
	  (cond
		(
		  (not
			(and (setq file (open (setq tmp (vl-filename-mktemp nil nil ".dcl")) "w"))
			  (write-line
				(strcat "listbox : dialog { label = \"" title
				  "\"; spacer; : list_box { key = \"list\"; multiple_select = "
				  (if multiple "true" "false") "; } spacer; ok_cancel;}"
				)
				file
			  )
			  (not (close file)) (< 0 (setq dch (load_dialog tmp))) (new_dialog "listbox" dch)
			)
		  )
		)
		(
		  t     
		  (start_list "list")
		  (mapcar 'add_list data) (end_list)

		  (setq return (set_tile "list" "0"))
		  (action_tile "list" "(setq return $value)")

		  (setq return
			(if (= 1 (start_dialog))
			  (mapcar '(lambda ( x ) (nth x data)) (read (strcat "(" return ")")))
			)
		  )          
		)
	  )
	  (if (< 0 dch) (unload_dialog dch))
	  (if (setq tmp (findfile tmp)) (vl-file-delete tmp))
	  return
	)
	;Main
	(ssget '((0 . "VIEWPORT")))
	(setq l '("1/2" "1/5" "1/10"))			;Scale them o day
	(setq sc (distof (car (LM:listbox "Select Scale :" l nil))))
	(vlax-for vp	(vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
		(vla-put-DisplayLocked vp 0)
		(vla-put-CustomScale vp sc)
	)
)

  • 1

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


#8 proconeng86

proconeng86

    biết lệnh break

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

Đã gửi 10 September 2014 - 10:34 AM

Quick code và không bắt lỗi, bạn dùng tạm. Có tỉ lệ nào thì bạn thêm vào mục Scale

Code có sử dụng hàm LM:Listbox của LeeMac cho nhanh

 

(vl-load-com)
(defun c:vps(/ l sc LM:ListBox)	
	;; Private function :
	(defun LM:ListBox ( title data multiple / file tmp dch return ) 
	  (cond
		(
		  (not
			(and (setq file (open (setq tmp (vl-filename-mktemp nil nil ".dcl")) "w"))
			  (write-line
				(strcat "listbox : dialog { label = \"" title
				  "\"; spacer; : list_box { key = \"list\"; multiple_select = "
				  (if multiple "true" "false") "; } spacer; ok_cancel;}"
				)
				file
			  )
			  (not (close file)) (< 0 (setq dch (load_dialog tmp))) (new_dialog "listbox" dch)
			)
		  )
		)
		(
		  t     
		  (start_list "list")
		  (mapcar 'add_list data) (end_list)

		  (setq return (set_tile "list" "0"))
		  (action_tile "list" "(setq return $value)")

		  (setq return
			(if (= 1 (start_dialog))
			  (mapcar '(lambda ( x ) (nth x data)) (read (strcat "(" return ")")))
			)
		  )          
		)
	  )
	  (if (< 0 dch) (unload_dialog dch))
	  (if (setq tmp (findfile tmp)) (vl-file-delete tmp))
	  return
	)
	;Main
	(ssget '((0 . "VIEWPORT")))
	(setq l '("1/2" "1/5" "1/10"))			;Scale them o day
	(setq sc (distof (car (LM:listbox "Select Scale :" l nil))))
	(vlax-for vp	(vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
		(vla-put-DisplayLocked vp 0)
		(vla-put-CustomScale vp sc)
	)
)

 

 

Mình dùng thử và thấy lisp này thế là phù hợp với mình rồi

Cám ơn bạn ketxu nhiều nhé :D


  • 0

#9 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 10 September 2014 - 10:49 AM

@@ lsp này mà với a Ket chỉ là quick code thì chắc chục năm nữa nhoc cũng ko theo kịp a ^^


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#10 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 10 September 2014 - 11:11 AM

Nếu nhoc để ý kỹ thì code của mình chỉ có 7 dòng ở phía dưới thôi, còn toàn bộ phần dài dài bên trên là copy paste :)


  • 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