Đến nội dung


Hình ảnh
- - - - -

[yêu cầu] Lisp chỉnh sửa độ dày nét hàng loạt


  • Please log in to reply
20 replies to this topic

#1 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 08 April 2013 - 11:16 AM

Do tính chất công việc nên mình thường phải in ở nhiều máy in khác nhau, và mình in với tùy chọn là: chiều dày nét in lấy theo chiều dày nét vẽ (use object linewieght).

Vấn đề mình đang vấp phải là cùng 1 bản vẽ nhưng khi in ở các máy khác nhau thì có độ đậm nhạt khác nhau. Các bác vui lòng viết cho mình 1 lisp để thay đổi độ dày của tất cả các nét trong bản vẽ theo một hệ số nhân (số lấy đến 2 chữ số thập phân) mà ta nhập vào nhé ! Cảm ơn !


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#2 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 08 April 2013 - 02:23 PM

Do tính chất công việc nên mình thường phải in ở nhiều máy in khác nhau, và mình in với tùy chọn là: chiều dày nét in lấy theo chiều dày nét vẽ (use object linewieght).

Vấn đề mình đang vấp phải là cùng 1 bản vẽ nhưng khi in ở các máy khác nhau thì có độ đậm nhạt khác nhau. Các bác vui lòng viết cho mình 1 lisp để thay đổi độ dày của tất cả các nét trong bản vẽ theo một hệ số nhân (số lấy đến 2 chữ số thập phân) mà ta nhập vào nhé ! Cảm ơn !

Hề hề hề,

Sao bạn không dùng lệnh chprop nhỉ??? Tuy nhiên các đối tượng dim, hatch, block... sẽ không thay đổi được thickness đâu bạn ạ.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 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 08 April 2013 - 02:42 PM

Tùy theo cách vẽ của bạn có 2 cách giải quyết.

1.Bạn vẽ linewieght theo từng đối tượng riêng biệt mà không phải bylayer => giải quyết bằng lisp duyệt và đọc linewieght của từng đối tượng xong nhân với hằng số và chỉnh từng đối tượng.

2.Bạn vẽ linewieght theo kiểu bylayer. Lúc này lisp  chỉ cần đọc linewieght của từng layer và chỉnh trong định dạng layer.

 

Do chưa biết bạn vẽ kiểu gì nên chưa viết lisp cụ thể.


  • 1

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


#4 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 08 April 2013 - 03:41 PM

Tùy theo cách vẽ của bạn có 2 cách giải quyết.

1.Bạn vẽ linewieght theo từng đối tượng riêng biệt mà không phải bylayer => giải quyết bằng lisp duyệt và đọc linewieght của từng đối tượng xong nhân với hằng số và chỉnh từng đối tượng.

2.Bạn vẽ linewieght theo kiểu bylayer. Lúc này lisp  chỉ cần đọc linewieght của từng layer và chỉnh trong định dạng layer.

 

Do chưa biết bạn vẽ kiểu gì nên chưa viết lisp cụ thể.

Là cách 2 trong 2 cách mà bác Duy đã nêu trên. Mong đc bác giúp đỡ, thanks!


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#5 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 08 April 2013 - 03:45 PM

Cad mặc định Lineweight chỉ có những giá trị nhất định (24?), do đó không thể tăng/giảm chính xác bằng 1 factor được. Chỉ có thể "gần gần" thôi.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#6 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 08 April 2013 - 04:16 PM

cảm ơn bác Hà, mình cũng biết vậy, song, nói "liều" nhỡ các cao thủ có cách :D

Các bác giúp mình nhé !


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#7 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 08 April 2013 - 06:27 PM

Bác dùng Lisp này xem đã đúng ý chưa nhé.

;========THAY DOI LINEWEIGHT HANG LOAT==========
;============KANGKUNG 08/04/2013================
(defun C:KK()
  (vl-load-com)
  (command "UNDO" "BE")
  (setq factor(getreal "\n Nhap he so: "))
  (vlax-for for-item (vla-get-blocks(vla-get-activedocument(vlax-get-acad-object)))
    (vlax-for item for-item
      (if (or (= (vla-Get-Lineweight item) -1) (= (vla-Get-Lineweight item) -2) (= (vla-Get-Lineweight item) -3))
	(progn
	  (setq lineweight(vla-Get-Lineweight (vlax-ename->vla-object (TBLOBJNAME "LAYER" (vla-get-Layer item)))))
	  (if (and (/= lineweight -1) (/= lineweight -2) (/= lineweight -3))
	    (if (not (minusp (setq lineweight (* lineweight factor))))
		(vla-put-lineweight (vlax-ename->vla-object (TBLOBJNAME "LAYER" (vla-get-Layer item))) (car
			(vl-remove-if-not
			'(lambda (x) (< lineweight x))
			'(0 5 9 13 15 18 20 25 30 35 40 50 53 60  
			70 80 90 100 106 120 140 158 200 211)))
                      ))
	    )
	  )
	(progn
	  (setq lineweight(vla-Get-Lineweight item))
	  (if (not (minusp (setq lineweight (* lineweight factor))))
		(vla-put-lineweight item (car
			(vl-remove-if-not
			'(lambda (x) (< lineweight x))
			'(0 5 9 13 15 18 20 25 30 35 40 50 53 60  
			70 80 90 100 106 120 140 158 200 211)))
                      ))
	  )
	)
      )
    )
  (command "UNDO" "END")
  (alert "Well done!")
  )
(princ "\n         Written By KangKung - 08/04/2013\n")
(princ "\n           Nhap KK de chay chuong trinh\n")

 

 


  • 2

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 08 April 2013 - 11:29 PM

 

(defun C:HA( / hs lay lst lw )
 (vl-load-com)
 (initget 7) (setq hs (getreal "\nHe so nhan: "))
 (vlax-for lay (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq lst '(0 5 9 13 15 18 20 25 30 35 40 50 53 60 70 80 90 100 106 120 140 158 200 211))
  (setq lw (vla-get-lineweight lay))
  (if (<= (setq lw (* hs (if (= lw -3) (getvar "lwdefault") lw))) 211)
   (vla-put-lineweight lay (car (vl-remove-if-not '(lambda(x) (<= lw x)) lst)))))
 (princ))


  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#9 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 09 April 2013 - 07:22 AM

Đúng là mình cũng phán bừa trên lý thuyết  :D tại hồi giờ chưa có đụng đến linewieght trong lisp. 


  • 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


#10 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 09 April 2013 - 04:47 PM

Cảm ơn tất cả các bác ! Một ngày đi hiện trường, giờ quay lại diễn đàn thì nhận đc rất nh sự giúp đỡ, mình rất cảm kích !!!

p/s: tuy chưa chạy thử Lisp nhưng mình tin các bác, mình nghĩ là OK !


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#11 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 April 2013 - 05:14 PM

@op : tks nút các bác nữa bạn. mình ngoại quan mà chưa bỏ phât thanks nào cả :)

@kk : bạn viết ngày một hay nhỉ , đáng nể. chẳng mấy lại có một cây lisp nhiệt tình đây ^^ à, mà mong bạn đặt tên cho lisp để sau này lúc tổng hợp lại mod đỡ vất hơn ^^
  • 2

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


#12 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 993 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 09 April 2013 - 11:12 PM

Các bác ấy toàn lấy tên mềnh. HA và KK. Những cái tên nhiệt tềnh cực luôn.

@Ketxu: Bác KangKung đang rảnh nên nhiệt tềnh lắm. Anh giờ chẳng ngâm nữa rồi.


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#13 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 10 April 2013 - 08:26 AM

Sr vì đã sơ suất !

Thanks Ket đã nhắc nhở!


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#14 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 10 April 2013 - 07:42 PM

@op : tks nút các bác nữa bạn. mình ngoại quan mà chưa bỏ phât thanks nào cả :)

@kk : bạn viết ngày một hay nhỉ , đáng nể. chẳng mấy lại có một cây lisp nhiệt tình đây ^^ à, mà mong bạn đặt tên cho lisp để sau này lúc tổng hợp lại mod đỡ vất hơn ^^

Thanks ketxu. Lần sau sẽ post thêm cả file Lisp để các mod đỡ khó khăn trong việc tổng hợp. (Đã bấm Like rùi nhóe :P )

 

 

Các bác ấy toàn lấy tên mềnh. HA và KK. Những cái tên nhiệt tềnh cực luôn.

@Ketxu: Bác KangKung đang rảnh nên nhiệt tềnh lắm. Anh giờ chẳng ngâm nữa rồi.

Hê hê. Chú thông cảm anh chả nghĩ ra được tên gì khác đành đặt tên mình cho lệnh của Lisp vậy. Với lại thấy tên mình hay quá nên chả nghĩ được tên nào khác hay hơn ấy mà.  :D  :D  :D


  • 1

#15 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 11 April 2013 - 10:01 AM

Mình thấy bạn KangKung viết lisp hình như không bao giờ khai báo biến cục bộ thì phải. Nếu đồng nghiệp của mình mà sử dụng các lisp của bạn thì mình sẽ khuyên họ không nên dùng nữa để tránh những rắc rối có thể gặp phải vì nguyên nhân chủ quan trên.


  • 1

#16 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 11 April 2013 - 12:05 PM

@ThuyLinh: Chính xác là sau khi chạy Lisp thì mình ít khi khử biến vì các lý do sau:

1. Lười copy paste các biến có trong Lisp. Cái này là lý do chính nhé

2. Với những Lisp mình viết thì việc không giải phóng biến cũ cũng không ảnh huởng nhiều đến Cad (thêm vài biến thì có ăn thua gì) và cũng không ảnh hưởng đến việc chạy Lisp khác của mình. Việc đặt tên biến có thể trùng nhau giữa các Lisp nhưng trước khi dùng biến đó thì bao  giờ mình cũng reset nó về nil hoặc giá trị nào đó chứ không dùng giá trị kết thúc của biến đó ở Lisp trước nên không có chuyện bị rắc rối của việc không khử biến. Bạn có thể chỉ ra những rắc rối mà mà mình có thể gặp không?

Tất nhiên nên khử biến sau khi chạy Lisp là tốt nhưng như đã nói ở trên là mình lười copy paste nên cứ để kệ như thế. Còn việc bạn khuyên ai ra sao thì đó là ý kiến của bạn. Mình viết Lisp lên đây để thỏa mãn đam mê thôi chứ có buôn bán gì đâu mà sợ nhiều người hay ít người dùng.

Cuối cùng dù sao cũng cảm ơn bạn đã comment.


  • 0

#17 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 993 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 11 April 2013 - 12:31 PM

Em quá quyền đc like rồi anh KangKung ạ. 

Thỏa niềm đam mê và vừa lòng chủ thớt là được. 

Nhưng........góp ý như vậy cũng đúng anh ạ.  :wub:

Mình chịu khó vậy.


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#18 Chiron

Chiron

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 11 April 2013 - 12:59 PM

..trước khi dùng biến đó thì bao  giờ mình cũng reset nó về nil hoặc giá trị nào đó chứ không dùng giá trị kết thúc của biến đó ở Lisp trước

Cái này KK bảo vệ chính chương trình của mình.

 

Bạn có thể chỉ ra những rắc rối mà mà mình có thể gặp không?

KK có thể không gặp rắc rối nhưng người dùng có thể gặp rắc rối. Rắc rối ở những lisp khác. Trên diễn đàn đã có nhiều câu hỏi liên quan đến vấn đề này vì người sử dụng không biết.


  • 0

#19 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 11 April 2013 - 01:42 PM

KK có thể không gặp rắc rối nhưng người dùng có thể gặp rắc rối. Rắc rối ở những lisp khác. 

Cứ coi đó như là một cái bẫy đối với những Lisp không quản lý tốt đầu vào của biến trước khi sử dụng chúng. Vậy muốn không gặp rắc rối thì các bạn viết Lisp nên có bước reset để đỡ bị sập bẫy. Điều này làm tăng sự hoàn thiện của Lisp do các bạn viết.

Mặt khác cho dù mình có khử biến trong Lisp thì chẳng may trong lúc chạy Lisp phát sinh lỗi mà mình không khử biến trong hàm bắt lỗi thì các biến đó sẽ vẫn còn. Nó cũng giống như chưa khử biến vậy. Vì thế nhất thiết khi viết Lisp các bạn nên reset biến để tránh gặp rắc rối.

Tuy nhiên từ lần sau để tránh việc bị ném đá, mình sẽ cố gắng không lười nữa để copy paste các biến và cho vào ( / ). Việc này cũng bị nhiều người chê rồi nhưng vẫn chưa sửa.  :P  :P  :P


  • 2

#20 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 11 April 2013 - 10:03 PM

@KK: Đây là kiến thức cơ bản nhất trong bất kỳ ngôn ngữ lập trình nào chứ không riêng gì Lisp. Nhận xét trên của mình là để góp ý cho bạn vì mình nhận thấy rằng bạn thiếu kinh nghiệm và kiến thức về vấn đề này. không nhằm mục đích ném đá dìm hang hay chê bai lisp của bạn. đừng vội tự ái nhé.

 

1. Nếu viết bằng Vlide thì không việc gì phải mò mẫm từng biến rồi copy paste như bạn nói cả. sau khi viết xong, bấm 1 nút để kiểm tra (nut gì đó mình quên rồi, minh đang dung máy không có cad) là chương trình liệt kê hết biến đã sử dung trong đoạn code kiểm tra ra.

2. "Vì thế nhất thiết khi viết Lisp các bạn nên reset biến để tránh gặp rắc rối"

Nếu mọi chuyện chỉ đơn giản có thế thì khong ai bày ra yêu cầu khai báo biến cục bộ làm gì cho nhọc cả. Một vài ví dụ để bạn thấy việc khai báo biến cục bộ là cần thiết:

- Mình có 1 hàm con A, hàm này để dùng chung cho rất nhiều lisp. Giờ chạy lisp của bạn, có sử dung 1 biến cũng đặt tên là A không khai báo là biến cục bộ. Trường hợp này bạn định reset thế nào để toàn bộ lisp của mình không báo lỗi sau khi chạy lisp của bạn: A không phải là hàm.

- Mình có 1 lisp nào đó phải sử dung 1 biến toàn cục B để lưu 1 giá trị trong lần sử dung cuối cùng của lisp.  Giá trị này thay đổi theo mỗi lần người dùng nhập (ví dụ B = 1, Nếu B = 0 thì chương trình của mình không chạy được) Giờ chạy lisp của bạn, bạn xét B = 0. vậy làm thế nào bạn trả lại B = 1 cho mình để chương trình của mình không lỗi? và vẫn đảm bảo bằng giá trị cũ?

....

Câu trả lời cho 2 câu hỏi trên là: bạn không có cách nào ngoài việc khai báo biến cục bộ ngay trong lisp của bạn cả. Nếu không, người được bạn viết lisp cho vẫn chạy được lisp của bạn bình thường mà không gặp vấn đề gì, nhưng có thể một vài lisp khác của họ sẽ ko còn sử dung được, hoặc sử dung không chính xác nữa.

 

Nói túm lại là: Bạn cứ viết đi, viết lâu dần rồi mới thấy dở rồi phải tự thay đổi tư duy thôi. trước kia mình cũng vậy


  • 0