amir0914 发表于 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
 
有人能给我一个解决方案吗?

PeterPan9720 发表于 2022-7-6 21:45:46

 
你好,阿米尔,
首先,我想您必须找到选择的对象坐标,例如:
最佳解可以放在三个不同的数组中,并按单个数组排序,然后可以根据排序后的坐标在图形中移动对象。
 
现在你有了由低到高的Y坐标。

amir0914 发表于 2022-7-6 21:49:04

嗨,彼得,
非常感谢您的回复,太好了,但是变量MyY(A)从1开始,这意味着MyY(0)在数组中不存在,LBound(MyY)是0,那么为什么您在这部分代码中使用MyY(0):(因为iFirstRow是零)
 
 

For i = iFirstRow To iLastRow - 1
            For j = i + 1 To iLastRow
                If MyY(i) > MyY(j) Then
                  varTemp = MyX(j)
                  MyY(j) = MyY(i)
                  MyY(i) = varTemp
                End If
            Next j
      Next i

PeterPan9720 发表于 2022-7-6 21:53:22

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

amir0914 发表于 2022-7-6 21:58:24

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

PeterPan9720 发表于 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或其他文本阅读器。
 
典型代码可能是:
3之后,你可以在任何地方使用。
作为替代方案,可以直接与excel交换数据,但更为复杂。
我希望这对你有更多帮助
再见

PeterPan9720 发表于 2022-7-6 22:08:38

你好,阿米尔,
这里是您的代码选择、重新排序和移动图形上的文本,以及在文本文件上写入
请注意:
先前选择的相同文本将添加到新订单的相同位置,同时,如果不需要,将移动所选对象,并使用以下代码“播放”
参见随附文件
再见

PeterPan9720 发表于 2022-7-6 22:12:05

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

PeterPan9720 发表于 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图形中选择相同的文本。
 
再见

amir0914 发表于 2022-7-6 22:17:40

嗨,彼得,
Wov,太棒了,我在vba中做了这些,我还扩展了一些代码,我添加了一些代码,例如文本颜色、文本样式,以及通过“从用户获取点”和“按文件导出记事本”对话框添加的文本。
我已经使用excel vba很多年了,这真的很令人兴奋,因为我第一次可以使用excel vba在autocad中插入文本,使用您提供的代码:
 
7
页: [1] 2
查看完整版本: 对文本排序