วันศุกร์ที่ 19 มีนาคม พ.ศ. 2553

AutoCAD Tips : Visual LISP Tips หาผลรวมระยะเชิงเส้นจากเส้นบอกระยะและข้อความ



ในงานเขียนแบบบางครั้งเราต้องการหาผลรวมของระยะที่กำหนดไว้ในแบบ ซึ่งอาจถูกเขียนไว้ด้วยรูปวาดแบบ Dimension, Text หรือ Multiline Text

ในหัวข้อนี้เสนอคำสั่ง Sum ที่ใช้หาผลรวมของค่าในรูปวาดเหล่านี้ มีโค้ดดังนี้

;;; Sum Length from Text, Mtext and Dimension.
;;; Developed by S.Chatchawal.
(vl-load-com)
(defun c:sum (/ s j obj result *error*)
(defun *error* (msg)
(if (not (member msg (list "Function cancelled")))
(princ (strcat "\nSUM Error: " msg))
)
(princ)
)
(if (setq s (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION"))))
(progn
(setq result 0.0
j -1
)
(repeat (sslength s)
(setq obj (vlax-ename->vla-object (ssname s (setq j (1+ j)))))
(cond
((member (vla-get-ObjectName obj)
(list "AcDbText" "AcDbMText")
)
(setq result (+ result (atof (vla-get-TextString obj))))
)
(T
(setq result (+ result
(vla-get-Measurement obj)
)
)
)
)
)
(princ " Sum of Length: ")
(princ result)
)
(princ "\nNo object found!!!")
)
(princ)
)

วันจันทร์ที่ 8 มีนาคม พ.ศ. 2553

Hardware tips: อากาศหน้าร้อน มาจัดสายในเครื่องกัน



อุปกรณ์ภายในเคส (Case) ส่วนที่เป็น CPU, RAM, Harddisk และ VGA card ล้วนแต่เป็นอุปกรณ์ให้ความร้อนออกมาจากการทำงานทั้งสิ้น

วิธีลดอุณหภูมิภายในเคสที่ใช้กันตามปกติก็คือ อาศัยการระบายอากาศออกด้วยพัดลม ซึ่งโดยทั่วไป เราจะจัดทิศทางลมเข้าจากทางด้านหน้า และในบางเคสที่ติดตั้งให้เป่าขึ้นจากทางพื้นได้

ส่วนทิศทางลมออกจะเอาไว้ที่ด้านหลังและด้านบน

การจัดทิศทางเช่นนี้ มีผลทำให้ลมไหลไปในทิศทางเดียวกัน ช่วยให้อัตราไหล (Flow) ของอากาศเป็นไปได้อย่างดี หากจัดทิศทางที่สลับไปมา ก็จะมีโอกาสที่แรงดันอากาศหักล้างกันเอง ทำให้อัตราไหลของลมลดต่ำลง

อีกปัจจัยก็คือ ที่ตำแหน่งลมเข้า ให้หมั่นตรวจดูฝุ่นที่สะสมที่บนแผ่นกรอง หากมีมากไป ก็มีโอกาสลดปริมาณอากาศใหม่ ที่เย็นกว่าภายใน ไม่ให้ไหลเข้ามากพอ มีผลทำให้ภายในเคสอับ สะสมอุณหภูมิสูงขึ้นกว่าปกติ จึงควรตรวจดูและถอดออกทำความสะอาดบ้าง

นอกจากนี้ตำแหน่งวางเคส เมื่อวางแบบหลังเคสติดกำแพง ก็ไม่ควรชิดผนังมากไป เพราะจะทำให้ลมเป่าออกปะทะกับผนัง เป่าออกไม่ได้เต็มที่ เช่นเดียวกันสำหรับทางด้านลมเข้า ก็ไม่ควรมีอะไรมากีดขวางไว้เช่นกัน

นอกจากนี้การเลือกใช้เคสที่ขนาดค่อนข้างใหญ่ ที่ในปัจจุบันมักออกแบบให้สามารถเก็บสายไว้ที่ด้านข้าง ส่วนที่อยู่ด้านหลังของแผงจับยึดเมนบอร์ด ก็มีส่วนช่วยให้ไม่มีสายมาขวางทางลม ช่วยให้อากาศไหลผ่านได้เป็นอย่างดีอีกด้วย

ในรูปนี้ ที่ถูกควรจะกลับทิศทางพัดลมของ Power supply unit ให้ลงด้านล่าง เพื่อให้อากาศใหม่จากภายนอกไหลผ่าน Power supply unit ได้โดยตรง ไม่ต้องใช้ลมร้อนในเครื่องนี้วนเข้าไปอีก แต่เนื่องจากสายจ่าย 24 pin มีขนาดสั้นเกินไป เลยแก้ปัญหาโดยกลับด้าน ให้สายนี้อยู่ชิดด้านในมากขึ้น

วันอาทิตย์ที่ 7 มีนาคม พ.ศ. 2553

Windows General Information: เว็บไซต์ Nvidia เตือนอย่าเพิ่งลงไดรเวอร์ 196.75

ลิงก์จากเว็บ Nvidia

http://www.nvidia.com/Download/index5.aspx?lang=en-us

196.75 Alert!
We are aware that some customers have reported fan speed issues with the latest 196.75 WHQL drivers on NVIDIA.com. Until we can verify and root cause this issue, we recommend that customers do not download this driver. Instead, please stay with, or return to 196.21 WHQL drivers. Release 196.75 drivers have been temporarily removed from our website and we also are asking our partners and others to remove temporarily this 196.75 WHQL driver as well.

เนื้อความหมายถึง
ให้ชะลออย่าเพิ่งอัปเดตไดรเวอร์ไปที่ 196.75 เพราะมีรายงานจากผู้ใช้ส่วนหนึ่งว่ามีปัญหากับความเร็วพัดลม ดังนั้นให้ใช้ 196.21 ก่อน

สำหรับท่านที่ลงไปแล้ว สามารถย้อนกลับ (rollback) ไปได้ ดูวิธีจากลิงก์นี้
Driver roll back help
http://www.nvidia.com/object/driver_rollback.html

วันจันทร์ที่ 1 มีนาคม พ.ศ. 2553

AutoCAD Tips: Visual LISP ตอน จัดแนวข้อความให้เสมอกัน - Alignment Text

บางครั้งในงานเขียนแบบ เมื่อเราเขียนข้อความเพิ่มเข้าไป ซึ่งอาจมาจาก Text หรือ Mtext เพื่อให้รายละเอียด หลังจากเพิ่มไปจำนวนหนึ่ง เมื่อซูมภาพเต็มพื้นที่จัดพิมพ์ ก็อาจพบปัญหาที่แนวข้อความไม่ได้ตรงกัน ดูแล้วไม่เป็นระเบียบ

หัวข้อนี้มาดูกันถึงรูทีน LISP ที่ใช้จัดแนวให้เสมอกัน

TLL - จัดชิดซ้าย
TRR - จัดชิดขวา
THM - จัดเสมอกันได้กึ่งกลางแนวนอน (เสมอกันที่เส้นแนวตั้งหนึ่งๆ)
TLH - จัดชิดแนวนอน

ตัวอย่างพรอมต์ของคำสั่ง TLL

Command: trr
Select Reference text: คลิกเลือกข้อความ (TEXT/MTEXT) ที่จะใช้เป็นแนวอ้างอิง
Select objects: เลือกข้อความ TEXT/MTEXT ที่จะจัดแนว
Select objects: เลือกจนครบ กด Enter

ตอนเลือกสามารถใช้กรอบ Window หรือ Crossing เลือกครอบหรือตัดผ่านวัตถุอื่นก็ได้ คำสั่งนี้จะกรองเอาเฉพาะรูปวาดแบบ TEXT/MTEXT ให้เอง

ผลก่อนใช้ TLL


ผลหลังใช้ TLL



โค้ดมีดังนี้

;;; Align group of texts or mtexts.
;;; TLL, TRR, TVM and THH (Left, Right, Middle-Vertical and Horizontal).
;;; Developed by S.Chatchawal, schatchawal@gmail.com
(vl-load-com)
;;; Left Align
(defun c:TLL (/ stop eRef oRef s LLref URref
j obj LL UR newpt oldpt *acaddoc*
*error*
)
(defun *error* (msg)
(if (not (member msg (list "Function cancelled")))
(princ (strcat "Text Align Error: " msg))
)
(vla-endundomark *acaddoc*)
(princ)
)
(setq *acaddoc*
(vla-get-activedocument
(vlax-get-acad-object)
)
)
(vla-startundomark *acaddoc*)
(while (not stop)
(setq eRef (entsel "\nSelect Reference text: ")
oRef (vlax-ename->vla-object (car eRef))
)
(if (member (vlax-get oRef 'ObjectName)
(list "AcDbText" "AcDbMtext")
)
(progn
(setq stop T)
(vla-highlight oRef :vlax-true)
)
(princ "\nNot Text object, TRY AGAIN!!!")
)
)
(if (setq s (ssget (list (cons 0 "TEXT,MTEXT"))))
(progn
(vlax-invoke-method oRef 'getboundingbox 'minpt 'maxpt)
(setq LLref (vlax-safearray->list minpt)
URref (vlax-safearray->list maxpt)
j -1
)
(repeat (sslength s)
(setq obj (vlax-ename->vla-object (ssname s (setq j (1+ j)))))
(vlax-invoke-method obj 'getboundingbox 'minpt 'maxpt)
(setq LL (vlax-safearray->list minpt)
UR (vlax-safearray->list maxpt)
)
(setq newpt (cons (car LLref) (cdr LL))
oldpt LL
)
(vla-move obj (vlax-3d-point oldpt) (vlax-3d-point newpt))
)
(vla-highlight oRef :vlax-false)
)
(princ "\nNo TEXT found!!!")
)
(vla-endundomark *acaddoc*)
(princ)
)
;;; Right Align
(defun c:TRR (/ stop eRef oRef s LLref URref
j obj LL UR newpt oldpt *acaddoc*
*error*
)
(defun *error* (msg)
(if (not (member msg (list "Function cancelled")))
(princ (strcat "Text Align Error: " msg))
)
(vla-endundomark *acaddoc*)
(princ)
)
(setq *acaddoc*
(vla-get-activedocument
(vlax-get-acad-object)
)
)
(vla-startundomark *acaddoc*)
(while (not stop)
(setq eRef (entsel "\nSelect Reference text: ")
oRef (vlax-ename->vla-object (car eRef))
)
(if (member (vlax-get oRef 'ObjectName)
(list "AcDbText" "AcDbMtext")
)
(progn
(setq stop T)
(vla-highlight oRef :vlax-true)
)
(princ "\nNot Text object, TRY AGAIN!!!")
)
)
(if (setq s (ssget (list (cons 0 "TEXT,MTEXT"))))
(progn
(vlax-invoke-method oRef 'getboundingbox 'minpt 'maxpt)
(setq LLref (vlax-safearray->list minpt)
URref (vlax-safearray->list maxpt)
j -1
)
(repeat (sslength s)
(setq obj (vlax-ename->vla-object (ssname s (setq j (1+ j)))))
(vlax-invoke-method obj 'getboundingbox 'minpt 'maxpt)
(setq LL (vlax-safearray->list minpt)
UR (vlax-safearray->list maxpt)
)
(setq newpt (cons (car URref) (cdr UR))
oldpt UR
)
(vla-move obj (vlax-3d-point oldpt) (vlax-3d-point newpt))
)
(vla-highlight oRef :vlax-false)
)
(princ "\nNo TEXT found!!!")
)
(vla-endundomark *acaddoc*)
(princ)
)
;;; Horizontal-Middle Align
(defun c:THM (/ stop eRef oRef s LLref URref
j obj LL UR newpt oldpt *acaddoc*
*error*
)
(defun *error* (msg)
(if (not (member msg (list "Function cancelled")))
(princ (strcat "Text Align Error: " msg))
)
(vla-endundomark *acaddoc*)
(princ)
)
(setq *acaddoc*
(vla-get-activedocument
(vlax-get-acad-object)
)
)
(vla-startundomark *acaddoc*)
(while (not stop)
(setq eRef (entsel "\nSelect Reference text: ")
oRef (vlax-ename->vla-object (car eRef))
)
(if (member (vlax-get oRef 'ObjectName)
(list "AcDbText" "AcDbMtext")
)
(progn
(setq stop T)
(vla-highlight oRef :vlax-true)
)
(princ "\nNot Text object, TRY AGAIN!!!")
)
)
(if (setq s (ssget (list (cons 0 "TEXT,MTEXT"))))
(progn
(vlax-invoke-method oRef 'getboundingbox 'minpt 'maxpt)
(setq LLref (vlax-safearray->list minpt)
URref (vlax-safearray->list maxpt)
MMref (mapcar '(lambda (x y) (/ (+ x y) 2.0)) LLref URref)
j -1
)
(repeat (sslength s)
(setq obj (vlax-ename->vla-object (ssname s (setq j (1+ j)))))
(vlax-invoke-method obj 'getboundingbox 'minpt 'maxpt)
(setq LL (vlax-safearray->list minpt)
UR (vlax-safearray->list maxpt)
MM (mapcar '(lambda (x y) (/ (+ x y) 2.0)) LL UR)
)
(setq newpt (cons (car MMref) (cdr MM))
oldpt MM
)
(vla-move obj (vlax-3d-point oldpt) (vlax-3d-point newpt))
)
(vla-highlight oRef :vlax-false)
)
(princ "\nNo TEXT found!!!")
)
(vla-endundomark *acaddoc*)
(princ)
)
;;; Lower corner - Horizontal Align
(defun c:TLH (/ stop eRef oRef s LLref URref
j obj LL UR newpt oldpt *acaddoc*
*error*
)
(defun *error* (msg)
(if (not (member msg (list "Function cancelled")))
(princ (strcat "Text Align Error: " msg))
)
(vla-endundomark *acaddoc*)
(princ)
)
(setq *acaddoc*
(vla-get-activedocument
(vlax-get-acad-object)
)
)
(vla-startundomark *acaddoc*)
(while (not stop)
(setq eRef (entsel "\nSelect Reference text: ")
oRef (vlax-ename->vla-object (car eRef))
)
(if (member (vlax-get oRef 'ObjectName)
(list "AcDbText" "AcDbMtext")
)
(progn
(setq stop T)
(vla-highlight oRef :vlax-true)
)
(princ "\nNot Text object, TRY AGAIN!!!")
)
)
(if (setq s (ssget (list (cons 0 "TEXT,MTEXT"))))
(progn
(vlax-invoke-method oRef 'getboundingbox 'minpt 'maxpt)
(setq LLref (vlax-safearray->list minpt)
URref (vlax-safearray->list maxpt)
j -1
)
(repeat (sslength s)
(setq obj (vlax-ename->vla-object (ssname s (setq j (1+ j)))))
(vlax-invoke-method obj 'getboundingbox 'minpt 'maxpt)
(setq LL (vlax-safearray->list minpt)
UR (vlax-safearray->list maxpt)
)
(setq newpt (cons (car LL) (cdr LLref))
oldpt LL
)
(vla-move obj (vlax-3d-point oldpt) (vlax-3d-point newpt))
)
(vla-highlight oRef :vlax-false)
)
(princ "\nNo TEXT found!!!")
)
(vla-endundomark *acaddoc*)
(princ)
)