乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 107|回复: 15

[编程交流] 对文本排序

[复制链接]

56

主题

175

帖子

119

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 21:40:34 | 显示全部楼层 |阅读模式
大家好,我最近开始使用vba autocad,在我的第一个程序中,我将创建一个文本选择集,并按y坐标对文本进行排序,但我找不到按y坐标排序的方法:
 
将ss设置为AcadSelectionSet
Dim FilterType(0)为整数
Dim FilterData(0)作为变体
 
设置ss=ThisDrawing。选择集。添加(“MySS”)
 
过滤器类型(0)=0
FilterData(0)=“文本,多行文字”
ss。选择屏幕上的FilterType,FilterData
 
有人能给我一个解决方案吗?
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 21:45:46 | 显示全部楼层
 
你好,阿米尔,
首先,我想您必须找到选择的对象坐标,例如:
最佳解可以放在三个不同的数组中,并按单个数组排序,然后可以根据排序后的坐标在图形中移动对象。
 
现在你有了由低到高的Y坐标。
回复

使用道具 举报

56

主题

175

帖子

119

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 21:49:04 | 显示全部楼层
嗨,彼得,
非常感谢您的回复,太好了,但是变量MyY(A)从1开始,这意味着MyY(0)在数组中不存在,LBound(MyY)是0,那么为什么您在这部分代码中使用MyY(0):(因为iFirstRow是零)
 
 
  1. For i = iFirstRow To iLastRow - 1
  2.             For j = i + 1 To iLastRow
  3.                 If MyY(i) > MyY(j) Then
  4.                     varTemp = MyX(j)
  5.                     MyY(j) = MyY(i)
  6.                     MyY(i) = varTemp
  7.                 End If
  8.             Next j
  9.         Next i
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 21:53:22 | 显示全部楼层
你好
你说得对,这是一个我没有完全检查的快速代码,只是为了给你一种跟随的方式。
尝试使用where needs(作为索引循环)修复从0开始的或更好的,选择集count对象(ss.count)只是为了避免移位。
 
将按照方法在图形中插入文本或重新排序对象位置(请告诉我您需要做什么)
我希望至少上面的代码可以帮助您迈出第一步。
 
再见
 
回复

使用道具 举报

56

主题

175

帖子

119

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 21:58:24 | 显示全部楼层
非常感谢你,你的指导对我很有帮助,下一步我将插入排序后的文本,并将其实体导出到记事本中。我的主要问题是,学习vba autocad的源代码不多,而关于Autolisp有很多函数和论坛可供提问。我买的关于vba的书只有简单的代码,例如如何制作文本或选择集。 
无论如何,我不会停止。再次感谢您的真诚帮助。(我的英语很差,很抱歉我打字出错)
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 22:01:44 | 显示全部楼层
你好,阿米尔,
不管你的英语,关于VBA学习有很多书,也可以在网上找到。
但我建议学习通用VBA(例如excel),然后尝试使用Autocad,因为VBA的主要结构总是一样的。
不同之处在于与Autocad相关的特定功能(对于Autocad,Autocad Mechanical、Autocad Electrical或general use之间也有很多不同)。
 
同样在代码中,对于在图形中添加文本,您可以使用:
此图纸。模型空间。添加文本ss。项目(A)。TextString,MyNewCoords,5
哪里:
此图纸。模型空间是指模型空间图形
SS。项目(XX)。textstring表示所选对象的字符串内容
MyNewCoords表示新坐标,它是由X、Y、Z坐标(长型)组成的数组
5是文字高度。
 
请注意,在将文本添加到模型空间之前,您必须定义默认文本样式,或编写定义默认文本样式属性的代码。
关于导出,我建议使用临时文本文件,然后导入记事本、excel或其他文本阅读器。
 
典型代码可能是:
  1. 3
之后,你可以在任何地方使用。
作为替代方案,可以直接与excel交换数据,但更为复杂。
我希望这对你有更多帮助
再见
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 22:08:38 | 显示全部楼层
你好,阿米尔,
这里是您的代码选择、重新排序和移动图形上的文本,以及在文本文件上写入
请注意:
先前选择的相同文本将添加到新订单的相同位置,同时,如果不需要,将移动所选对象,并使用以下代码“播放”
参见随附文件
再见
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 22:12:05 | 显示全部楼层
很抱歉坚持使用代码,但今天我有时间与visual basic和cad开玩笑。
这里附上了直接在Excel工作簿中导出数据的代码。
您必须在打开Excel程序的情况下启动VBA代码,在任何情况下都会创建一个附加卡特尔。
附图由我用于测试的y轴上对齐的4个文本组成,如果您无法打开,我将使用最旧的Cad版本保存。
如果您需要填写自己的特殊excel表格,可以修复VBA模块,以便将数据写入正确的列和/或行。
 
我想现在你有很多工作要做。。。。 
再见
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 22:13:32 | 显示全部楼层
嗨,阿米尔,我只是想给你一些额外的礼物。。。。对于这里的Xmas,在以前生成的excel文件中编写一个简单的代码,以便缩放选定的坐标对象。
我的意思是:
-在用文本信息生成的excel文件中,还有对象坐标。。。。。如果你有一个大的绘图,那么如何在大的绘图中找到excel选中的文本,可能你有上百个文本。。。如何在图形中快速查找。
-如果打开excel文件,请选择第一个x坐标单元格并运行以下代码:
上述代码将图形置于excel文件中所示坐标的中心(A列到C列,等于X、Y、Z值)。
第一步在EXCEL中以对象形式打开CAD文件,然后输入连字符的注释,如果未打开,则创建一个新的空图形,但这对您的项目没有用处(仅用于提供信息)。
主要的缩放选项是通过ZoomCenter函数实现的,在这里,必须以双精度格式传递坐标,数组大小为0到2(MyCenter(0到2)为双精度),放大率值设置为5,但可以更改(MyMag为双精度)。
 
请注意,我发送给您的所有代码都没有交叉检查,因此如果您从文件中选择不同的单元格,当然例程会出错,或者如果您没有在Autocad图形中选择相同的文本。
 
再见
回复

使用道具 举报

56

主题

175

帖子

119

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 22:17:40 | 显示全部楼层
嗨,彼得,
Wov,太棒了,我在vba中做了这些,我还扩展了一些代码,我添加了一些代码,例如文本颜色、文本样式,以及通过“从用户获取点”和“按文件导出记事本”对话框添加的文本。
我已经使用excel vba很多年了,这真的很令人兴奋,因为我第一次可以使用excel vba在autocad中插入文本,使用您提供的代码:
 
  1. 7
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 14:37 , Processed in 0.437881 second(s), 83 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表