Python AutoCAD 注释
目 录
- Blog Links
- 一、前言
- 二、单行文本
- 2.1. 创建新文本
- 2.2. 对齐方式
- 2.3. 文本缩放
- 三、多行文本
- 四、文本样式
- 4.1. 创建文字样式
- 4.2. 将特定文字样式设为当前
- 4.3. 设置字体
- 4.3.1. 为当前文本样式设置字体
- 4.3.2. 为特定文本样式设置字体
- 4.4. 设置字体倾斜角度
- 五、尺寸标注
- 5.1. 线性及旋转线性标注
- 5.2. 对齐标注
- 5.3. 角度标注
- 5.4. 弧长标注
- 5.5. 直径及半径标注
- 六、标注样式
- 6.1. 创建新标注样式
- 6.2. 将特定标注样式设为当前
- 6.3. 设置尺寸线及尺寸界限
- 6.3.1. 超出标记
- 6.3.2. 基线间距
- 6.3.3. 超出尺寸线
- 6.3.4. 起点偏移量
- 6.4. 设置箭头
- 6.4.1. 设定尺寸线箭头类型
- 6.4.2. 设定引线箭头
- 6.4.3. 尺寸线箭头大小
- 6.5. 设置标注文字
- 6.5.1. 标注文字样式
- 6.5.2. 标注文字高度
- 6.5.3. 标注文字位置
- 6.5.4. 标注文字对齐
- 6.5.5. 标注文字替代
- 6.6. 设置主单位
- 6.6.1. 线性标注精度
- 6.6.2. 小数分隔符
- 6.7. 设置永久标注样式
- 七、多重引线
- 7.1. 创建多重引线
- 7.2. 设置箭头大小
- 7.3. 设置基线长度
- 7.4. 设置基线间隙
- 7.5. 指定文字样式
- 7.6. 指定文字内容
- 八、尾声
Blog Links
DalNur | 博客总目录
Python 二次开发 AutoCAD 简介
Python 二次开发 AutoCAD 设置
Python 二次开发 AutoCAD 图层
Python 二次开发 AutoCAD 绘图
Python 二次开发 AutoCAD 修改
Python 二次开发 AutoCAD 块组
Python 二次开发 AutoCAD 注释
Python 二次开发 AutoCAD 文件
Python 二次开发 AutoCAD 选择集
一、前言
标注是向图形中添加测量注释的过程,我们可以为各种对象沿各个方向创建标注。要简化图形组织和标注缩放,建议在图纸空间上创建标注,而不是在模型空间中创建标注。
#!/usr/bin/env python
# -*- coding: utf-8 -*-'''
=============================
Author: DalNur
Email: liyang@alu.hit.edu.cn
=============================
'''from pyautocad import Autocad
from pyautocad import APoint
import mathacad = Autocad(create_if_not_exists = True)
acad.prompt("Hello! AutoCAD from pyautocad.")
print(acad.doc.Name)
二、单行文本
2.1. 创建新文本
textString = "Harb Insti of Tec"
insertPnt = APoint(0, 0)
height = 2.5
textObj = acad.model.AddText(textString, insertPnt, height)# textString:文本内容;height:字高;# 系统默认对齐夹点位于文字基线左侧;# 采用系统默认对齐方式时,insertPnt为对齐夹点的位置坐标;# 当用户自定义对齐方式时,insertPnt以对齐方式中的为准。
2.2. 对齐方式
AlignNum = 7
textObj.Alignment = AlignNum# AlignNum为对齐夹点位置标识号,其取值范围为[0,14];# 0 基线左对齐、1 基线居中对齐、2 基线右对齐;# 7 表示对齐夹点位于 top cennter;
insertPnt = APoint(0, 10)
textObj.TextAlignmentPoint = insertPnt# 设置对齐夹点在图纸空间中的绝对位置,可为任意一已知点;# 若用户自定义对齐方式,则需设置此项。
Item | enum | Item | enum | Item | enum | Item | enum |
---|---|---|---|---|---|---|---|
acAlignmentLeft | 0 | acAlignmentMiddle | 4 | acAlignmentTopRight | 8 | acAlignmentBottomLeft | 12 |
acAlignmentCenter | 1 | acAlignmentFit | 5 | acAlignmentMiddleLeft | 9 | acAlignmentBottomCenter | 13 |
acAlignmentRight | 2 | acAlignmentTopLeft | 6 | acAlignmentMiddleCenter | 10 | acAlignmentBottomRight | 14 |
acAlignmentAligned | 3 | acAlignmentTopCenter | 7 | acAlignmentMiddleRight | 11 |
对齐夹点
2.3. 文本缩放
BasePoint = insertPnt
ScaleFactor = 5
textObj.ScaleFactor = 5# 水平方向文本缩放,即只缩放字宽(x方向),不缩放字高(y方向);# ScaleFactor为比例系数,非负,>1为放大,<1为缩小。宽度因子
textObj.ScaleEntity(BasePoint, ScaleFactor)# 两个方向同步缩放;# 基点与insertPnt重合,文字放大后对齐夹点位置保持不变。
三、多行文本
四、文本样式
4.1. 创建文字样式
txtStyleObj = acad.ActiveDocument.TextStyles.Add("HIT_TxtStyle")
4.2. 将特定文字样式设为当前
acad.ActiveDocument.ActiveTextStyle = acad.ActiveDocument.TextStyles.Item("Standard")
4.3. 设置字体
4.3.1. 为当前文本样式设置字体
acad.ActiveDocument.ActiveTextStyle.SetFont("楷体", False, False, 1, 0 or 0)# acad.ActiveDocument.ActiveTextStyle.SetFont(Typeface, Bold, Italic, charSet, PitchandFamily)# Typeface 字体名称;# Bold 加粗,布尔值,False为不加粗字体;# Italic 倾斜,布尔值,False为倾斜字体;# CharSet 字体字符集,1为默认字符集;# PitchAndFamily 字节及笔画形式。
4.3.2. 为特定文本样式设置字体
acad.ActiveDocument.TextStyles.Item("HIT_TxtStyle").SetFont("宋体", False, False, 1, 0 or 0)
4.4. 设置字体倾斜角度
txtStyleObj.ObliqueAngle = math.radians(30)# 倾斜角度变化范围为[-85,85],取正值时右偏。
五、尺寸标注
5.1. 线性及旋转线性标注
import math
XLine1Point = APoint(5, 25)
XLine2Point = APoint(25, 35)
DimLineLocation = APoint(10, 20)
RotationAngle = math.radians(0)
dimRotObj = acad.model.AddDimRotated(XLine1Point, XLine2Point, DimLineLocation, RotationAngle)# XLine1Point 第一尺寸界线的起点;# XLine2Point 第二尺寸界线的起点;# DimLineLocation 尺寸线定位点,尺寸线或其延长线过该点;# RotationAngle 尺寸线与水平方向的夹角,去弧度制;# RotationAngle=0 水平标注,RotationAngle=90 竖直标注。
5.2. 对齐标注
ExtLine1Point = APoint(5, 25)
ExtLine2Point = APoint(25, 35)
TextPosition = APoint(-5, 25)
dimAliObj = acad.model.AddDimAligned(ExtLine1Point, ExtLine2Point, TextPosition)# ExtLine1Point 第一尺寸界线的起点;# ExtLine2Point 第二尺寸界线的起点;# TextPosition 尺寸线定位点,尺寸线或其延长线过该点。# dimObj.Update
5.3. 角度标注
AngleVertex = APoint(0, 0)
FirstEndPoint = APoint(6, 8)
SecondEndPoint = APoint(6, -8)
TextPoint = APoint(10, 10)
dimAngObj = acad.model.AddDimAngular(AngleVertex, FirstEndPoint, SecondEndPoint, TextPoint)# AngleVertex 角度顶点;# FirstEndPoint 第一尺寸界线端点;# SecondEndPoint 第二尺寸界线端点;# TextPoint 尺寸圆弧线定位点,即尺寸圆弧线过该点。
5.4. 弧长标注
ArcCenter = APoint(0, 0)
FirstEndPoint = APoint(6, 8)
SecondEndPoint = APoint(6, -8)
ArcPoint = APoint(20, 0)
dimArcObj = acad.model.AddDimArc(ArcCenter, FirstEndPoint, SecondEndPoint, ArcPoint)# ArcCenter 圆弧中心;# FirstEndPoint 第一尺寸界线端点;# SecondEndPoint 第二尺寸界线端点;# ArcPoint 尺寸圆弧线定位点,即尺寸圆弧线过该点。
5.5. 直径及半径标注
ChordPoint = APoint(0, 10)
FarChordPoint = APoint(0, -10)
LeaderLength = 40
dimDiaObj = acad.model.AddDimDiametric(ChordPoint, FarChordPoint, LeaderLength)# ChordPoint 圆任意一直径的端点;# FarChordPoint 直径的另一端点;# LeaderLength 引线长度,为点ChordPoint到标准文字定位夹点的距离;# 标注类型可在相应的系统变量如DIMUPT等中更改。
Center = APoint(0, 0)
ChordPoint = APoint(10, 0)
LeaderLength = 10
dimRadObj = acad.model.AddDimRadial(Center, ChordPoint, LeaderLength)# Center 被标注圆或圆弧的圆心
六、标注样式
标注类术语
6.1. 创建新标注样式
DimStyleObj = acad.ActiveDocument.DimStyles.Add("HIT_DimStyle")
print(dimAliObj.StyleName) # 打印标注对象的标准样式名称# 系统自带标注样式 ISO-25
6.2. 将特定标注样式设为当前
acad.ActiveDocument.ActiveDimStyle = acad.ActiveDocument.DimStyles.Item("HIT_DimStyle")
6.3. 设置尺寸线及尺寸界限
说明: 以下即 (3) ~ (6) 的设置将生效为<样式替代>,程序自动画图时<样式替代>不起作用,新添加的标注仍采用系统默认。手动画图时<样式替代>起作用,新添加的标注<样式替代>。
设置永久标注样式见 (7),后续添加详细代码。
标注样式替代是对当前标注样式中的指定设置所做的更改,它与在不更改当前标注样式的情况下更改尺寸标注系统变量等效。使用标注样式替代,无需更改当前标注样式便可临时更改标注系统变量。
6.3.1. 超出标记
acad.ActiveDocument.SetVariable("DIMDLE", 0)# 当箭头使用倾斜、建筑标记、积分和无标记时尺寸线超过尺寸界线的距离。
6.3.2. 基线间距
acad.ActiveDocument.SetVariable("DIMDLI", 3.75)# 设定尺寸线之间的距离;# 如有必要,每条尺寸线都将按此值偏离其前一尺寸线,以避免覆盖它。
6.3.3. 超出尺寸线
acad.ActiveDocument.SetVariable("DIMEXE", 1.25) # 指定尺寸界线超出尺寸线的距离。
6.3.4. 起点偏移量
acad.ActiveDocument.SetVariable("DIMEXO", 0.625) # 设定自图形中定义标注的点到尺寸界线的偏移距离。
6.4. 设置箭头
6.4.1. 设定尺寸线箭头类型
acad.ActiveDocument.SetVariable("DIMBLK", "_ARCHTICK") # "_ARCHTICK"表示建筑标记
6.4.2. 设定引线箭头
acad.ActiveDocument.SetVariable("DIMLDRBLK", "") # ""表示实心闭合
6.4.3. 尺寸线箭头大小
acad.ActiveDocument.SetVariable("DIMASZ", 2.5)
6.5. 设置标注文字
6.5.1. 标注文字样式
acad.ActiveDocument.SetVariable("DIMTXSTY", "HIT_TxtStyle")
6.5.2. 标注文字高度
acad.ActiveDocument.SetVariable("DIMTXT", 2.5)# 设定当前标注文字样式的高度;# 如果在此选项卡上指定的字样式具有固定的文字高度,则该高度将替代在此处设置的文字高度;# 如果要在此处设置标注文字的高度,请确保将文字样式的高度设置为 0。
6.5.3. 标注文字位置
acad.ActiveDocument.SetVariable("DIMTAD", 1)# 控制标注文字相对尺寸线的垂直位置;# 0 表示标注文字在尺寸界线之间居中放置;# 1 表示将标注文字放置在尺寸线上方,从尺寸线到文字最低基线的距离为当前 DIMGAP 的值。
acad.ActiveDocument.SetVariable("DIMJUST", 0)# 水平控制标注文字在尺寸线上相对于尺寸界线的水平位置;# 0 表示将文字置于尺寸线之上,并在尺寸界线之间置中对正。
acad.ActiveDocument.SetVariable("DIMGAP", 0.625)# 设定文字相对尺寸线的位置。
6.5.4. 标注文字对齐
acad.ActiveDocument.SetVariable("DIMTIH", 0)# 控制所有标注类型(坐标标注除外)的标注文字在尺寸界线内的位置;# 0 表示将文字与尺寸线对齐;# 1 表示水平绘制文字。
acad.ActiveDocument.SetVariable("DIMTOH", 0)# 控制标注文字在尺寸界线外的位置。
6.5.5. 标注文字替代
修改实际尺寸数值为用户自定义数值。例如:标注的实际长度为20,用户自定义的数值为171,具体代码如下:
XLine1Point = APoint(5, 25)
XLine2Point = APoint(25, 35)
DimLineLocation = APoint(10, 20)
RotationAngle = math.radians(0)
dimRotObj = acad.model.AddDimRotated(XLine1Point, XLine2Point, DimLineLocation, RotationAngle)dimRotObj.TextOverride = 171 # 指定文字替代为171,即171替代20。dimRotObj.TextOverride = "" # 恢复标注为实际尺寸数值20dimRotObj.TextOverride = "<> mm" # 恢复标注为实际尺寸数值并加个单位dimRotObj.Update()
6.6. 设置主单位
6.6.1. 线性标注精度
acad.ActiveDocument.SetVariable("DIMDEC", 2) # 设定标注文字中的小数位数;2 表示显示小数点后三位;
6.6.2. 小数分隔符
acad.ActiveDocument.SetVariable("DIMDSEP", ".") # "."表示小数分隔符,也可设置为","。
acad.ActiveDocument.SetVariable("DIMADEC", -1) # 设置角度标注精度与线性标注精度相同
6.7. 设置永久标注样式
## (7)、设置永久标注样式### ①、添加三个标注样式
dimstyleobj_1 = DimStyleObj = acad.ActiveDocument.DimStyles.Add("newStyle1")
dimstyleobj_2 = DimStyleObj = acad.ActiveDocument.DimStyles.Add("newStyle2")
dimstyleobj_3 = DimStyleObj = acad.ActiveDocument.DimStyles.Add("newStyle3")### ②、为三个标注样式分别设置具体样式
dimstyleobj_1.CopyFrom(acad.ActiveDocument.ModelSpace(0))# (方法一)# 与图形空间中已存在的标注图元样式一致;# 0为模型空间中的第一个图元,此为示例;# 具体操作时0应替换为已知标注图元在图纸空间中的索引号。dimstyleobj_2.CopyFrom(acad.ActiveDocument.DimStyles.Item("newStyle1"))# (方法二)# 与标注样式newStyle1一致acad.ActiveDocument.SetVariable("DIMCLRD", 3) # 设置尺寸线的颜色为绿色
acad.ActiveDocument.SetVariable("DIMBLK", "_ARCHTICK") # "_ARCHTICK"表示建筑标记
acad.ActiveDocument.SetVariable("DIMASZ", 2) # 尺寸线箭头大小
dimstyleobj_3.CopyFrom(acad.ActiveDocument)# (方法三)# 与当前文件的设置保持一致acad.ActiveDocument.ActiveDimStyle = acad.ActiveDocument.DimStyles.Item("newStyle3")# 以下画出的标注即采用标注样式newStyle3
ExtLine1Point = APoint(5, 25)
ExtLine2Point = APoint(25, 35)
TextPosition = APoint(-5, 25)
dimAliObj = acad.model.AddDimAligned(ExtLine1Point, ExtLine2Point, TextPosition)
print(dimAliObj.styleName)# 设置永久标注样式的思路:
# 若采用方法一,则需要提前绘制好相应的标注图元,
# 如:尺寸线、尺寸界线、箭头尺寸等,以方便引用,而后删除。
# 若采用方法三,则需要利用SetVariable方法设置好相应的系统变量,而后引用。
# 方法二为直接复制已有标注样式。# 方法四(采用command方式)
# DimStyle1 = acad.ActiveDocument.DimStyles.Add("DimStyle1") # 创建标注式样
# acad.ActiveDocument.ActiveDimStyle = DimStyle1
# acad.ActiveDocument.SetVariable("DIMCLRD", 1)
# acad.ActiveDocument.SetVariable("DIMCLRE", 1)
# acad.ActiveDocument.SetVariable("DIMEXE", 3)
# acad.ActiveDocument.SetVariable("DIMEXO", 1.75)
# acad.ActiveDocument.SetVariable("DIMFXLON", 1)
# acad.ActiveDocument.SetVariable("DIMFXL", 3)
# acad.ActiveDocument.SetVariable("DIMBLK", "_OBLIQUE")
# acad.ActiveDocument.SetVariable("DIMBLK1", "_OBLIQUE")
# acad.ActiveDocument.SetVariable("DIMBLK2", "_OBLIQUE")
# acad.ActiveDocument.SetVariable("DIMLDRBLK", "_OBLIQUE")
# acad.ActiveDocument.SetVariable("DIMASZ", 5)
# acad.ActiveDocument.SetVariable("DIMCEN", 3)
# acad.ActiveDocument.SetVariable("DIMARCSYM", 1)
# acad.ActiveDocument.SetVariable("DIMCLRT", 1)
# acad.ActiveDocument.SetVariable("DIMTXT", 4)
# acad.ActiveDocument.SetVariable("DIMTAD", 1)
# acad.ActiveDocument.SetVariable("DIMTOH", 0)
# acad.ActiveDocument.SetVariable("DIMTMOVE", 2)
# acad.ActiveDocument.SetVariable("DIMDEC", 1)
# print(chr(13))
# acad.ActiveDocument.SendCommand("-dimstyle" + chr(13) + "S" + chr(13) + "DimStyle1" + chr(13) + "Y" + chr(13))
# print("-dimstyle" + chr(13) + "S" + chr(13) + "DimStyle1" + chr(13) + "Y" + chr(13))## 其他# dimAliObj.StyleName = "ISO-25"
# dimAliObj.Update()
七、多重引线
7.1. 创建多重引线
ArrowPnt = APoint(0, 0)
BaselinePnt = APoint(10, 10)
PntsArray = np.array([ArrowPnt, BaselinePnt])
PntsArray = PntsArray.reshape(1, PntsArray.shape[0] * PntsArray.shape[1])[0]
MLeaderObj = acad.model.AddMLeader(PntsArray, 0)# ArrowPnt 箭头位置;# BaselinePnt 基线位置 ;# 1 表示多重引线的索引号,为正整数。
7.2. 设置箭头大小
MLeaderObj.ArrowheadSize = 2 # 指箭头高度;此项将覆盖系统变量DIMASZ的值。
7.3. 设置基线长度
MLeaderObj.DoglegLength = 8
7.4. 设置基线间隙
MLeaderObj.LandingGap = 3 # 基线端点到文字起点的距离
7.5. 指定文字样式
MLeaderObj.TextStyleName = "HIT_TxtStyle"
7.6. 指定文字内容
MLeaderObj.TextString = "HIT"
八、尾声
以上,便是一些关于 AutoCAD 注释 的基本代码,因篇幅有限,某些非关键功能未做详细介绍,如有疑问,欢迎邮件来询。
本文部分功能的实现离不开广大博友的大力帮助,有些功能看似简单,但第一次实现出来却是相当不容易的。
鉴于,相关示例代码相对较少,特写本文,一方面是为自己的阶段性学习做一个总结,另一方面更是为有需要的人提供多一点参考。
如果您已实现一些本文未提及的功能,还请在评论区呈现,以便为后续学习者提供更多的帮助。
胸藏文墨怀若谷,腹有诗书气自华,希望各位都能在知识的pāo子里快乐徜徉。
因个人水平有限,文中难免有所疏漏,还请各位大神不吝批评指正。
最后,祝各位攻城狮们,珍爱生命,保护发际线!
本文最早发表于 2018-12-13 18:20:21,作为博客 Python 二次开发 AutoCAD 简介 的一部分。
为了清晰直观,于 2019-07-26 16:21:52 单独创建本文。
本文部分内容,源于网络!
欢迎大家点赞、评论及转载,转载请注明出处!
为我打call,不如为我打款!
打赏可备注邮箱,本人将赠送本系列博客的全部 Python 源代码。
Python AutoCAD 注释相关推荐
- Python AutoCAD 块组
目 录 Blog Links 一.连接及库导入 二.块 2.1. 创建新块 2.2. 添加图元到块 2.3. 插入块 2.3.1. 从当前文件中插入块 2.3.2. 外部文件作为块插入 2.4. 添加 ...
- Python AutoCAD 设置
目 录 Blog Links 一.前言 二.颜色设置 2.1 设置模型空间背景色 2.1 设置十字光标颜色 三.显示设置 3.1 显示线宽 3.2 显示自动捕捉靶框 3.3 显示自动捕捉标记 3.4 ...
- Python之print语句Python的注释
话不多说直接切入正题 print语句可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print 'hello, world' 注意: 1. ...
- Python 中文注释报错解决方法
Python 中文注释报错解决方法 参考文章: (1)Python 中文注释报错解决方法 (2)https://www.cnblogs.com/cjiong/p/5881983.html 备忘一下.
- Python的注释及乱码 || 变量及类型
Python的注释及乱码 1.单行注释:以#开头,#右边的所有东西当做说明,而不是真正要执行的程序,起辅助说明作用 2.多行注释:'''多行注释'''可以写多行的功能说明 3.Python乱码问题 由 ...
- Python探索记(01)——HelloWorld及Python的注释
# @Time : 2017/7/2 11:16 # @Author : 原创作者:谷哥的小弟 # @Site : 博客地址:http://blog.csdn.net/lfdfhl # @DESC : ...
- python函数注释,参数后面加冒号:,函数后面的箭头→是什么?
python的函数注释: def f(text:str,max_len:'int>0'=80) ->str:"""这个是函数的帮助说明文档,help时会显示& ...
- python变量标识符_简谈-Python的注释、变量类型、标识符及关键字
在Python程序中,要想支持中文输出,则要在代码前面添加 标识符:开发人员在程序中自定义的一些符号和名称 标示符是自己定义的,如变量名 .函数名等 标识符的规则: 标示符由字目.下划线和数字组成,且 ...
- Python代码注释 - Python零基础入门教程
目录 一.什么是代码注释 二.为什么写代码要注释 三.代码注释的方式 1.单行注释,使用英文符号 # 2.多行注释 方法一:英文状态下使用单引号 """ 方法二:英文状态 ...
最新文章
- MySQL数据库提升篇-----触发器
- Java8学习之旅2---基于Lambda的JDBC编程
- 【Verilog HDL 训练】第 14 天(glitch-free的两个时钟切换电路)
- JavaScript Date 对象
- 【转】Socket状态变迁图
- 解剖 Nginx ·自动脚本篇(1)解析配置选项脚本 auto/options
- 科大讯飞ai研究院_科大讯飞1024开发者大会:让AI赋能行业数字化升级
- php jpg转换为pdf文件,php使用ImageMagick将PDF文件转换为JPG文件的方法_PHP
- jzoj4015-数列【循环节,数论】
- 苹果忘记开机密码_苹果电脑忘记开机密码快速恢复的方法!
- 今天的绿得像碧玉的 飞鸽
- 解决gensim报错AttributeError: type object ‘Word2Vec‘ has no attribute ‘load_word2vec_format‘
- 盘点 12 款让开发效率“飞起”的 VS Code 插件
- 跟ArthurXF学从雅虎抓取股票数据的方法
- BP神经网络:feedforwardnet版回归预测
- mysql 数据库隔离级别_彻底搞懂mysql数据库四种隔离级别,实验实战
- [洛谷P1501][国家集训队]Tree II(LCT)
- cakephp helper ajax,在JS Helper CakePHP中手动触发事件
- linux开发arm音量加减代码,arm-linux学习:最简驱动模块(示例代码)
- GBK字库集测试求助
热门文章
- 15、Access数据库偏移注入
- 网易云音乐实时计算平台设计及实践
- oracle怎么退出,[转载]Oracle 11g SQL*Plus的几种启动、退出方法
- Typora页内跳转 ,亲测有效
- 博客中可用的Emoji表情符号集,拿走不谢❤️❣️
- win10、win11高级共享设置修改后无法保存怎么办,无法发现网络设备、无法发现共享设备怎么办?win10、win11发现网络共享设备的方法
- 使用完整拼音查找汉字(完整拼音,不是网上散布的首字符拼音那种方法)
- png转pdf, pdf转png
- 前端页面----昵图网(简单版)
- 【老九学堂】【C语言进阶】递归调用