请教大神们一个尺寸标注数字问题!
如下图标注,我想把得到的数字是1位是在前面加0,是二位以上时把前面0去掉.比如标注是7时,显示为07
标注是8时,显示为08
标注是10时,显示为10
标注是11时,显示为11
加前缀位数可以,是二位数前面还是有零.
难道你有看到过这种标注? 特殊要求,需要写代码做反应器 kozmosovia 发表于 2024-10-18 08:42
特殊要求,需要写代码做反应器
没有写过这样的代码,可以给点提示或参考吗?复杂不? 本帖最后由 你有种再说一遍 于 2024-10-18 19:25 编辑
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
// 继承加载自动执行接口
public class MyExtensionApplication : IExtensionApplication {
// 在扩展应用程序初始化时调用
public void Initialize() {
// 获取当前活动的文档的数据库
Database db = Application.DocumentManager.MdiActiveDocument.Database;
// 为数据库添加一个事件处理器,用于监听对象修改事件
db.ObjectModified += OnObjectModified;
}
// 在扩展应用程序终止时调用
public void Terminate() {
// 获取当前活动的文档的数据库
Database db = Application.DocumentManager.MdiActiveDocument.Database;
// 从数据库移除之前添加的对象修改事件处理器
db.ObjectModified -= OnObjectModified;
}
// 数据库对象修改事件的处理方法
private void OnObjectModified(object sender, ObjectEventArgs e) {
// 获取触发事件的数据库对象所在的数据库
var db = e.DBObject.Database;
// 开启一个事务,用于修改数据库中的对象
using (Transaction tr = db.TransactionManager.StartTransaction()) {
// 尝试获取触发事件的对象,这里假设它是一个RotatedDimension类型的对象
var ent = tr.GetObjectId(e.DBObject.ObjectId, OpenMode.ForWrite) as RotatedDimension;
if (ent == null) return;
// 获取标注的两个端点
Point3d pt1 = ent.XLine1Point;
Point3d pt2 = ent.XLine2Point;
// 两个端点的距离,尖括号是测量值的占位符
double dist = pt1.GetDistanceTo(pt2);
if (dist < 10) {
ent.Content = "0<>";
}
// 提交事务,使修改生效
tr.Commit();
}//tr
}//func
}//class
你有种再说一遍 发表于 2024-10-18 18:02
通过加入图元事件,
判断dim.数值.ToString()长度,
中间来一句看不懂噢.可以来个完整的吗?谢谢!请教了!最好带一个傻瓜试的说明:lol 本来想看看自定义尺寸样式的,结果翻了一圈没看到这个能达到这个设置。 如果先标注再作修改很容易实现,可以判断标注值大小,小10,则修改为0<>,大于10,不修改
如果想标注时就能自动判断,可能需要用到反应器。 ljpnb 发表于 2024-10-18 20:47
如果先标注再作修改很容易实现,可以判断标注值大小,小10,则修改为0,大于10,不修改
如果想标注时就能自 ...
在标注上显示,用LISP获取就简单了.要在标注上适时更新.
简单的解决方案是写几行代码,需要时手动执行,更新一下尺寸标注添加0或者将原来加了0后来又加长不需要0的去掉0.
页:
[1]