วันเสาร์ที่ 27 กุมภาพันธ์ พ.ศ. 2553

AutoCAD Tips: Visual LISP ใส่ Hatch ในผนัง เพิ่มเติมจากตอนที่แล้ว



จากตอน AutoCAD Tips: Visual LISP ใส่ Hatch ในผนัง
http://chatchawalsupakasem.blogspot.com/2010/02/autocad-tips-visual-lisp-hatch.html

ได้รับอีเมลจากหลายท่าน ถามไถ่ถึงอยากให้

1.ปรับค่ามุมได้
2.ลงเส้นแบบสองแนว (Double) ที่เคยกระทำได้ในคำสั่ง Hatch ปกติ
3.การปรับชื่อเลเยอร์ ที่คำสั่งจะตรวจจับ
เช่น เดิมคำสั่งกรองเอาเฉพาะเส้นบนเลเยอร์ชื่อ A-Wall อยากแก้เป็นเลเยอร์ชื่อ Wall
4.กำหนดชื่อเลเยอร์วาง Hatch ใหม่ได้ เช่น
เดิมคำสั่งนี้ให้วางที่ A-Hatch อยากให้ย้ายไปอยู่ที่ Wall-Pattern

จริงๆ แล้ว คำสั่งเดิม HW นั้น
รองรับสิ่งเหล่านี้ทั้งหมด
โดยแฝงอยู่ในตัวแปร

ดังนั้นการปรับแต่งก็เพียงแต่กำหนดค่าไว้ที่ตัวแปรก่อนเข้าคำสั่งเท่านั้น
เพื่อให้ง่ายขึ้น เรามาดูวิธีสร้างเป็นคำสั่งใหม่ มีดังนี้

1. เปิด Notepad ใน Windows
แล้วคัดลอกโค้ดต่อไปนี้เข้าไปวาง

;; Hatch แบบดับเบิลสองแนว ที่เส้นเอียง 45 องศา
(defun c:h2 ()
(setq #hatchdouble 1); ลงสองแนวใช้ค่า 1 ลงแนวเดียวใช้ค่า 0
(setq #hatchang 45.0); ใส่ค่ามุมหน่วยองศา
(c:hw)
(princ)
)
;; Hatch แบบแนวเดียว ที่เส้นเอียง 45 องศา
(defun c:hh ()
(setq #hatchdouble 0)
(setq #hatchang 45.0)
(c:hw)
(princ)
)
;; Hatch แบบแนวเดียว ที่เส้นทำมุม 90 องศา
(defun c:hp ()
(setq #hatchdouble 0)
(setq #hatchang 90.0)
(c:hw)
(princ)
)
;; Hatch แบบแนวเดียวที่เส้นทำมุม 180 องศา
(defun c:hl ()
(setq #hatchdouble 0)
(setq #hatchang 180.0)
(c:hw)
(princ)
)
;; Hatch แบบแนวเดียวที่เส้นทำมุม 30 องศา
(defun c:h3 ()
(setq #hatchdouble 0)
(setq #hatchang 30.0)
(c:hw)
(princ)
)

2. บันทึกไฟล์ Ctrl+S
3. ใช้คำสั่ง APPLOAD
โหลดไฟล์นี้ และใช้คำสั่งตามชื่อหลัง C:
ที่กำหนดไว้ คือ
h2, hh, hp, hl, h3

*** ส่วนการให้โหลดเมื่อเปิดไฟล์ใหม่ทุกครั้ง
*** ให้เพิ่มไว้ใน Startup Suite ใน Appload

4. ตัวอย่างการตั้งชื่อเลเยอร์ใหม่
ให้เพิ่มบรรทัด (setq #walllayer "Wall")
สำหรับแก้ชื่อเลเยอร์ผนังที่จะให้กรองเลือกไปที่ Wall

;; Hatch แบบดับเบิลสองแนว ที่เส้นเอียง 45 องศา
(defun c:hw2 ()
(setq #walllayer "Wall")
(setq #hatchdouble 1)
(setq #hatchang 45.0)
(c:hw)
(princ)
)

ให้เพิ่มบรรทัด (setq #hatchllayer "Wall-Pattern")
สำหรับแก้ชื่อเลเยอร์ของ Hatch ไปที่ Wall-Pattern

;; Hatch แบบดับเบิลสองแนว ที่เส้นเอียง 45 องศา
(defun c:hw2 ()
(setq #walllayer "Wall")
(setq #hatchllayer "Wall-Pattern")
(setq #hatchdouble 1)
(setq #hatchang 45.0)
(c:hw)
(princ)
)

ช่วงนี้มีอีเมลเข้ามาสอบถามปัญหาเป็นจำนวนมาก
บางท่านก็แจ้งว่าทราบมาจากเว็บต่างๆ
รวมถึงคนไทยทั้งในและนอก
ที่ติดตาม LISP จาก Autodesk | Support

ยินดีครับที่ได้เผยแพร่แนวทางที่ช่วยให้ใช้งาน
AutoCAD ได้อย่างรวดเร็วยิ่งขึ้น

วันพุธที่ 24 กุมภาพันธ์ พ.ศ. 2553

AutoCAD Tips: Visual LISP Tips ตอน Non-uniform X-Y Grid on 2D Plan.

เช้านี้เช็ค email
มีคุณ konothai@yahoo.com สอบถามถึงแนวทางสร้างเส้นกริดบนแปลน
ที่ Non-uniform X-Y หรือระยะห่างไม่ได้สม่ำเสมอ เท่ากันบางช่วง บางช่วงเป็นค่าอื่น
เห็นว่าน่าจะเป็นประโยชน์กับท่านอื่นๆ ที่ทำงานในสายนี้ด้วย
เลยขอนำมาโพสต์ตอบรวมไว้ตรงนี้เลยแล้วกัน

ท่านที่สนใจการพัฒนาสร้างคำสั่งใหม่ด้วย Visual LISP
ติดขัดตรงจุดไหน อีเมลมาคุยกันได้นะครับ



และนำเสนอให้ใช้ค่าป้อนในคำสั่งเป็นนิพจน์ในรูป

A1+ A2*X2 + A3*X3 + ... + Am*Xm
B1+ B2*Y2 + B3*Y3 + ... + Bn*Xn


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



แนวทางใน Visual LISP coding คงต้องจัดการจาก
นิพจน์สตริง A1+ A2*X2 + A3*X3 + ... + Am*Xm
ตรวจดักความผิดพลาดที่จะถูกป้อนเข้ามา
เมื่อถูกต้องแล้ว ก็แยกเป็น List ในรูป

( (A1) (A2 X2) (A3 X3) ... (Am Xm))

และสุดท้ายอาจแตกค่าย่อยเป็น

( x1 x2 x3 .... xm )

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

โค้ดที่ได้ลองเขียนขึ้น เป็นไฟล์ให้ดาวน์โหลดได้ที่
(New Revision: 24-02-2010 16:00PM)
http://www.mediafire.com/file/ekhznziijzz/GRID.VLX

ก่อนใช้งาน ให้โหลดด้วย APPLOAD เหมือนกับ .LSP ทั่วไป

ลำดับการทำงานของคำสั่งนี้

Command: gs
Developed by S.chatchawal.
X expression A1+ A2*X2 + A3*X3 + ...: เช่น 5+12*4.5+6+5
Y expression B1+ B2*Y2 + B3*Y3 + ...: เช่น 4+7+3*4+5+4
Column x size: <0.25> ขนาดเสาแนว X เช่น .3
Column y size: <0.25> ขนาดเสาแนว Y เช่น .4

ผลลัพธ์ที่ได้จะวาดรูปชุดเส้นกริดและใส่เสาที่ขนาดเท่ากันทุกต้น
พร้อมกับแจ้งนิพจน์ที่ใช้วาดอีกครั้ง บน Command: เช่น

X: 5+12*4.5+6+5
Y: 4+7+3*4+5+4

คำสั่งนี้กำหนดเลเยอร์ให้กับเสาและเส้นกริดที่
A-Column และ A-Grid ตามลำดับ

ดูไดอะล็อก Layer Properties

ส่วนการอัปเดตขนาดเสาใหม่ ให้ใช้คำสั่ง CU
ที่มาพร้อมกับคำสั่ง GS ในไฟล์ GRID.VLX

ลำดับการทำงานของคำสั่ง CU เป็นดังนี้

Command: cu
Developed by S.chatchawal.
New Column x size: <0.3> ขนาดเสาใหม่ในแนว x เช่น .6
New Column y size: <0.4> ขนาดเสาใหม่ในแนว y เช่น .4
Select objects: เลือกกลุ่มเสาที่จะเปลี่ยนขนาดใหม่
Select objects: ที่พรอมต์นี้หากเราเลือกครอบ จะกรองเอาเฉพาะ Polyline 4 จุดยอดให้

เมื่อกล่าวถึงในจุดนี้
งานสุดท้ายจะจบลงด้วยการใส่ Grid Iden Bubbles
ที่เป็นวงกลมและหมายเลข หรืออักษรกำกับ
ซึ่งใน PA2010-AEC ที่มีกล่าวถึงในหนังสือ
AutoCAD 2010 เขียนแบบงานวิศวกรรมและสถาปัตย์
ที่ได้จัดทำไปนั้น มีคำสั่ง inctext ที่่ช่วยจัดการเขียน
ชุดตัวเลขหรือชุดตัวอักษรเรียงให้
ซึ่งใช้ได้สะดวกมาก ไม่ต้องใส่ค่าใหม่ทีละค่าเอง
จาก Text หรือ Mtext เองอีก

ดูรูปไดอะล็อก Increment Text


หลังจากคลิก Draw ไดอะล็อกจะปิดลง
เมื่อเลือกในแบบ Each Point
และมีพรอมต์ดังนี้

Command: inctext
Specify point for Text:

ให้เลือกจุดที่จะเขียน ในกรณีนี้คือ Object Snap: Center
ของรูปวงกลมที่แทน Bubble หนึ่งๆ

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

วันจันทร์ที่ 15 กุมภาพันธ์ พ.ศ. 2553

AutoCAD Tips: Visual LISP ใส่ Hatch ในผนัง




บทความนี้น่าจะตรงใจคนที่ทำงานเขียนแบบแปลนอาคาร
ที่มีการใส่ Hatch แบบเส้นเฉียง 45 องศาระหว่างเส้นตรง
ที่เป็นเส้นคู่ที่แทนถึงผนังในแบบแปลน

พรอมต์ของคำสั่งมีดังนี้

Command: HW
Hatch in wall, developed by S.Chatchawal, schatchawal@gmail.com
Select objects: เพื่อความสะดวกให้เลือกแบบ Crossing ลากกรอบจากทางขวาไปซ้าย
หรือจะคลิกเลือกทีละเส้นก็ได้
Select objects: กด Enter

เงื่อนไข
1.เส้นตรงที่แทนผนังต้องอยู่บนเลเยอร์ A-Wall
2.hatch ที่ได้จะถูกวางบนเลเยอร์ A-hatch
3. เส้นภายในห่างจากเส้นผนัง 0.02
4. hatch เส้นห่างกัน 0.03
5. hatch ทำมุม 45 องศา

ข้อสังเกต
1. ตอนลากกรอบแม้ว่าจะใช้ Crossing ตัดผ่าน
ซึ่งให้ผลรวมทุกเส้นที่กรอบเลือกตัดผ่าน
แต่คำสั่งนี้จะกรองเอาเฉพาะรูปวาดบนเลเยอร์ A-Wall เท่านั้น
จึงสะดวกอย่างมาก ไม่ต้องกังวลว่าจะได้รูปอื่นเข้ามา

ปกติแนวเส้นผนังนี้จะมีเส้น Grid รวมอยู่ด้วย ซึ่งจะถูกคำสั่งนี้
กรองออกไปให้เอง

2.ไฟล์ที่ให้โหลดนี้เป็น .VLX ซึ่งคือ .LSP
ที่คอมไพล์แล้ว และมีอายุใช้ได้ถึงสิ้นเดือน กพ 2010
นี้ เพื่อให้ผู้ใช้แจ้งปัญหาใช้งาน และจะส่งฉบับแก้ไขให้ใหม่
แบบไม่หมดอายุ
3. หลังจากโหลดตาม Link ข้างนี้แล้ว
เลือกเอาเฉพาะตัวใดตัวหนึ่ง เพราะเป็นไฟล์เดียวกัน
ให้แตกออก จะได้ไฟล์ Hatchinwall.vlx
4. โหลดใช้งานด้วยคำสั่ง Appload

Link โหลดไฟล์
http://www.tempf.com/getfile.php?id=384237&key=4b78dfaf81b4d

หรือ

http://www.mediafire.com/file/nmfynzkgivh/Hatchinwall.zip

วันศุกร์ที่ 12 กุมภาพันธ์ พ.ศ. 2553

AutoCAD Tips: Visual LISP ตอนหมุนเส้นตามเส้นอ้างอิง

รูทีน LISP ในหัวข้อนี้ ใช้จัดการกับรูปวาดแบบเส้นตรง (Line)
เพื่อให้หมุนมาอยู่ในทิศทางเดียวกับเส้นอ้างอิงที่เลือกไว้ (Reference Line)

ลดขั้นตอนการทำงาน เมื่อเทียบกับวิธีปกติ
ซึ่งต้องเริ่มจากวัดมุมเส้นอ้างอิง และจดค่าเอาไว้

จากนั้นหมุนเส้นปลายทางด้วยคำสั่ง Rotate
กำหนดจุดหมุน และใสค่ามุม

แต่ในรูทีนนี้ เพียงแต่คลิกเลือกเส้นอ้างอิงเอาไว้
แล้วไปคลิกเส้นปลายทาง (Target) ที่จะเปลี่ยนมุมเท่านั้น

มีพรอมต์เป็น

Command: ML
Select a ref Line (near base point): เลือกเส้นอ้างอิง ที่ปลายใกล้จุดอ้างอิงในการวัดค่ามุม
Select Target line (near fixed point):
เลือกเส้นที่หมุนมุมใหม่ เลือกใกล้จุดยึด ไม่ใช่จุดที่ถูกหมุนใหม่
และจะยังคงวนแสดงพรอมต์ Select Target line (near fixed point): นี้
ให้เลือกซ้ำได้จนครบ แล้วกด Enter

ก่อนใช้คำสั่ง ML



หลังใช้คำสั่ง ML



โค้ดมีดังนี้
;;; Match Line Angle
;;; Developed by S.Chatchawal.
(defun c:mL (/ stop e refObj selectedPt
stpt enpt refAng obj d *error*
*acaddoc*
)
(defun *error* (msg)
(if (not (member msg (list "Function cancelled")))
(princ (strcat "mL Error: " msg))
)
(vla-endundomark *acaddoc*)
)
(setq *acaddoc* (vla-get-activedocument (vlax-get-acad-object)))
(vla-startundomark *acaddoc*)
(while (not stop)
(if (setq e (entsel "\nSelect a ref Line (near base point):"))
(progn
(if (= "AcDbLine"
(vlax-get (setq refObj (vlax-ename->vla-object (car e)))
'ObjectName
)
)
(setq stop T)
(princ "\nNot a LINE!!! Try again!!!")
)
)
(princ "\nNo object found!!! Try again!!!")
)
)
(setq selectedPt (trans (osnap (cadr e) "endp") 1 0) ; WCS
stpt (vlax-get refObj 'StartPoint)
enpt (vlax-get refObj 'EndPoint)
)
(if (< (distance stpt selectedPt) (distance enpt selectedPt))
(setq refAng (angle stpt enpt))
(setq refAng (angle enpt stpt))
)
(while (setq e (entsel "\nSelect Target line (near fixed point): "))
(if (= "AcDbLine"
(vlax-get (setq obj (vlax-ename->vla-object (car e)))
'ObjectName
)
)
(progn
(setq selectedPt (trans (osnap (cadr e) "endp") 1 0) ; WCS
stpt (vlax-get Obj 'StartPoint)
enpt (vlax-get Obj 'EndPoint)
d (vlax-get obj 'Length)
)
(if (< (distance stpt selectedPt) (distance enpt selectedPt))
(vlax-put obj 'Endpoint (polar selectedPt refAng d))
;endpoint
(vlax-put obj 'Startpoint (polar selectedPt refAng d))
;startpoint
)
)
(princ "\nNot a LINE!!! Try again!!!")
)
)
(vla-endundomark *acaddoc*)
(princ)
)

ตัวอย่างเพิ่มเติม กรณีใช้กับเส้นแนวตั้ง

ก่อนใช้ ML

หลังใช้ ML

AutoCAD Tips: Visual Lisp ตอน array แบบระยะเพิ่มค่าแบบอนุกรมเลขคณิต

ปกติแล้วคำสั่ง Array จะสร้างภาพซ้ำให้ในแนวแถวและหลัก หรือแนวตาราง
ด้วยระยะห่างที่คงที่ในแนวหนึ่งๆ

ในบทความวันนี้ ลองมาพิจารณากรณีที่ระยะห่างนั้นเป็นอนุกรมเลขคณิต
(Arithmetic Series) ดูบ้าง กล่าวคือ

ระยะห่างระหว่างรูปแรกกับรูปสอง d1 = d
ระยะห่างระหว่างรูป 2 กับรูป 3 d2 = 2d
ระยะห่างระหว่างรูป 3 กับรูป 4 d3 = 3d

ระยะห่างระหว่างรูป j กับรูป j+1 dj = j x d

หรือถ้าวัดเทียบรูปแรกทั้งหมด
ก็จะอยู่ในรูป dj = d + 2d + 3d + ... + (j-1)d



ตัวอย่างโค้ด LISP ที่พัฒนาขึ้นเพื่อจัดการปัญหานี้เป็นดังนี้

;;; Incrementing Array
;;; Developed by S.Chatchawal.
(defun c:ia (/ s tmp i j dx dy dxy oldosmode *error*)
(setq oldosmode (getvar "osmode"))
(defun *error* (msg)
(if (not (member msg (list "Function cancelled")))
(princ (strcat "IA Error: " msg))
)
(command ".undo" "end")
(setvar "osmode" oldosmode)
(setvar "cmdecho" 1)
(princ)
)
(setvar "cmdecho" 0)
(command ".undo" "begin")
(if (not #distx) ; column
(setq #distx 10.0)
)
(if (not #disty) ; row
(setq #disty 10.0)
)
(if (not #ny) ;row
(setq #ny 5)
)
(if (not #nx) ; column
(setq #nx 5)
)
(if (setq s (ssget))
(progn
(princ "\nSpecify row distance: <")
(princ #disty)
(princ "> ")
(initget 2)
(if (setq tmp (getdist)); Nonzero distance
(setq #disty tmp)
)
(princ "\nSpecify column distance: <")
(princ #distx)
(princ "> ")
(initget 2)
(if (setq tmp (getdist)); Nonzero distance
(setq #distx tmp)
)
(princ "\nNo. of rows: <")
(princ #ny)
(princ "> ")
(initget 6)
(if (setq tmp (getint)); Positive and nonzero integer
(setq #ny tmp)
)
(princ "\nNo. of columns: <")
(princ #nx)
(princ "> ")
(initget 6)
(if (setq tmp (getint)); Positive and nonzero integer
(setq #nx tmp)
)
(setvar "osmode" 0)
(setq i -1)
(repeat #ny
(setq i (1+ i)
j -1
dy (* (/ i 2.0) (1+ i) #disty)
)
(repeat #nx
(setq j (1+ j)
dx (* (/ j 2.0) (1+ j) #distx)
dxy (strcat (rtos dx) "," (rtos dy))
)
(command ".copy" s "" dxy "")
)
)
(command ".erase" s "")
(command ".undo" "end")
(setvar "osmode" oldosmode)
(setvar "cmdecho" 1)
)
(princ "\nNo object found!!!")
)
(princ)
)

วันเสาร์ที่ 6 กุมภาพันธ์ พ.ศ. 2553

AutoCAD Tips: Visual LISP Tips คำนวณค่าแปลงหน่วยด้วยนิพจน์ LISP

คำนวณค่าแปลงหน่วยด้วยนิพจน์ LISP

ถามว่า 12 ไมล์เท่ากับกี่กิโลเมตร???
ถามว่า 15 ปอนด์เท่ากับกี่กิโลกรัม???

คำถามเหล่านี้ ถ้าถูกถามในสมัยที่แต่ละท่านยังอยู่ในวัยศึกษา
อย่างมัธยม อย่างตอนเรียนสายวิชาชีพ จนกระทั่งในรั้วมหาวิทยาลัย

ก็คงอมยิ้ม กับคำถามง่ายๆ เหล่านี้
และตอบกลับไปได้อย่างรวดเร็ว

แต่ถ้าก้าวสู่ชีวิตที่ละเลยเรื่องนี้ไปแสนนานจะตอบกลับทันทีได้หรือเปล่า?

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

แต่ถ้าระหว่างนั้น เราอยู่ที่หน้าจอ AutoCAD อยู่แล้ว
ก็เพียงแต่ใช้ฟังก์ชัน CVUNIT ที่มีคนกล่าวถึงน้อยมากๆ ช่วยคำนวณได้เลย

รูปแบบคือ (CVUNIT ค่าตัวเลข "หน่วยเดิม" "หน่วยใหม่")

เช่น
ข้อแรก พิมพ์ (CVUNIT 12 "mile" "kilometer") แล้วกด Enter

Command: (CVUNIT 12 "mile" "kilometer")
19.3121

ข้อสอง พิมพ์ (CVUNIT 15 "pound" "kilogram") แล้วกด Enter

Command: (CVUNIT 15 "pound" "kilogram")
6.80389

แล้วเราจะทราบหน่วยวัดที่มีให้ใช้ว่ามีอะไรบ้างได้อย่างไร
คำตอบคืออยู่ในไฟล์ acad.unt

วิธีที่จะเปิดไฟล์นี้มาอ่านได้อย่างรวดเร็วที่สุดก็คือพิมพ์
(command "notepad" (findfile "acad.unt")) แล้วกด Enter

ซึ่งเป็นดังรายการถัดไปนี้ คัดลอกมาเฉพาะส่วนชื่อหน่วยและคำ Prefix

*meter(s),metre(s),m
*kilogram(s),kg
*second(s),sec
*ampere(s),amp(s)
*kelvin,k
*candela,cd

; Derived SI units
*celsius,centigrade,c
*rankine
*fahrenheit
*gram(s),gm,g
*newton(s),n
*pascal,pa
*joule(s)

; Exponent synonyms
*square,sq
*cubic,cu

; Units of time
*centur(y.ies)
*day(s)
*decade(s)
*fortnight(s)
*hour(s),hr
*milleni(um.a)
*minute(s),min
*sidereal_year(s)
*tropical_year(s)
*week(s),wk
*year(s),yr

; Units of length
*Angstrom(s)
*astronomical_unit(s),au
*bolt(s)
*cable(s) ; U.S. cable length
*caliber
*centimeter(s),centimetre(s),cm(s)
*chain(s) ; Gunther's chain length
*cubit(s)
*decimeter(s),decimetre(s),dm
*dekameter(s),dekametre(s),dam
*fathom(s),fath
*f(oot.eet),ft,'
*furlong(s),fur
*gigameter(s),gigametre(s)
*hand(s)
*hectometer(s),hectometre(s),hm
*inch(es),in(s),"
*kilometer(s),kilometre(s),km
*league_nautical
*league_statute
*light_year(s)
*link(s) ; Gunther's link length
*microinch(es)
*micron(s)
*mil(s)
*mile_nautical,inm ; International Nautical Mile
*mile_statute,mile(s),mi
*millimeter(s),millimetre(s),mm(s)
*millimicron(s),nanometer(s),nanometre(s),nm(s)
*pace(s)
*palm(s)
*parsec(s)
*perch(es)
*pica(s)
*point(s)
*rod(s),pole(s)
*rope(s)
*skein(s)
*span(s)
*survey_f(oot.eet)
*yard(s),yd

; Units of area
*acre(s)
*are(s)
*barn(s)
*centare(s)
*hectare(s)
*rood(s)
*section(s)
*sq(uare)_centimeter(s),sq(uare)_centimetre(s),sq(uare)_cm(s)
*sq(uare)_f(oot.eet),sq(uare)_ft
*sq(uare)_inch(es),sq(uare)_in(s)
*sq(uare)_kilometer(s),sq(uare)_kilometre(s),sq(uare)_km
*sq(uare)_meter(s),sq(uare)_metre(s),sq(uare)_m
*sq(uare)_millimeter(s),sq(uare)_millimetre(s),sq(uare)_mm(s)
*sq(uare)_yard(s),sq(uare)_yd(s)
*township(s)

; Units of volume
*barrel(s),bbl ; International Petroleum barrel
*board_f(oot.eet),fbm
*bushel(s),bu ; U.S. dry bushel
*centiliter(s),cl
*cord(s)
*cc
*cu(bic)_centimeter(s),cu(bic)_centimetre(s),cu(bic)_cm(s)
*cu(bic)_f(oot.eet),cu(bic)_ft
*cu(bic)_inch(es),cu(bic)_in(s)
*cu(bic)_kilometer(s),cu(bic)_kilometre(s),cu(bic)_km
*cu(bic)_meter(s),cu(bic)_metre(s),cu(bic)_m
*cu(bic)_millimeter(s),cu(bic)_millimetre(s),cu(bic)_mm(s)
*cu(bic)_yard(s),cu(bic)_yd(s)
*decistere(s)
*dekaliter(s),dal
*dekastere(s)
*dram(s) ; U.S. fluid dram
*dry_pint(s)
*dry_quart(s)
*firkin(s)
*gallon(s),gal ; U.S. fluid gallon
*gill(s)
*hectoliter(s)
*hogshead(s),hhd
*kilderkin(s)
*kiloliter(s)
*liter(s)
*milliliter(s),ml
*minim(s)
*fluid_ounce(s)
*peck(s)
*pint(s),fluid_pint(s)
*pottle(s)
*puncheon(s)
*quart(s),qt,fluid_quart(s)
*register_ton(s)
*seam(s)
*stere(s)
*tun(s)

; Units of mass
*dalton(s)
*dyne(s)
*grain(s)
*hundredweight(s),cwt
*long_ton(s)
*ounce_weight,ounce(s),oz
*ounce_troy
*pennyweight(s),dwt,pwt
*poundal(s)
*pound(s),lb
*scruple(s)
*slug(s)
*stone
*ton(s)
*tonn(e.es)

; Units of frequency
*hertz,hz

; Electromagnetic units
*coulomb(s)
*farad(s)
*henr(y.ies)
*ohm(s)
*siemens
*tesla(s)
*volt(s),v
*watt(s),w
*weber(s)