Sundar 发表于 2022-7-6 22:22:13

内部多边形自动编号

大家好,
我的任务是从左到右为另一个多边形内的多边形编号。一个大多边形中可能有任意数量的多边形行。需要从左上角到右下一行再进一步编号。有在VBA中完成此任务的代码吗?等待您宝贵的回复。
 
P、 S附加JPEG以进一步说明。。。

fixo 发表于 2022-7-6 22:45:58

给你,稍微测试一下,换上你的西装,
我帮不了你了
选项显式“~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1)作为变量Dim dxfcode的整数Dim dataValue(0到1),dxfdata Dim selps As Variant On Error GoTo Err\u Control gpCode(0)=0:数据值(0)=“LWPOLYLINE”gpCode(1)=70:数据值(1)=1 dxfcode=gpCode:dxfdata=dataValue setName=“$PolygonSelect$”与此绘图集setColl=。如果setObj,则setColl中每个setObj的选择集。名称=设置名称。选择集。项(集合名)。如果下一个setObj=,则删除End的Exit。选择集。Add(setName)End With Dim lp As Variant“使用提示lp=ThisDrawing返回点”。公用事业GetPoint(,“输入左下角点:”)Dim up As Variant“Dim basePnt(0到2)As Double”basePnt(0)=2#:basePnt(1)=2#:basePnt(2)=0#'提示用户拾取第二个点并返回点up=ThisDrawing。公用事业GetCorner(lp,“输入其他角点:”)Dim ptArr(0到11)作为双ptArr(0)=lp(0):ptArr(1)=lp(1):ptArr(2)=0 ptArr(3)=向上(0):ptArr(4)=lp(1):ptArr(5)=0 ptArr(6)=向上(0):ptArr(7)=向上(1):ptArr(=0 ptArr(9)=lp(0):ptArr(10)=向上(1):ptArr(11)=0 selMod=acSelectionSetCrossingPolygon setObj。选择ByPolygon selMod、ptArr、dxfcode、dxfdata setObj。突出显示True MsgBox“Selected:&CStr(setObj.Count)&“blockds”&vbCr&“Do your rest work here”Dim pt1(0到2)作为双Dim pt2(0到2)作为双Dim acumcoll作为新集合Dim num作为整数num=1,用于setObj Set oPline=oEnt pt1(0)=oPline中的每个oEnt。坐标(0)(0):pt1(1)=oPline。坐标(0)(1):pt1(2)=0 pt2(0)=oPline。坐标(2)(0):pt2(1)=oPline。坐标(2)(1):pt2(2)=0 Dim tp(2)作为双tp(0)=(pt1(0)+pt2(0))/2:tp(1)=(pt1(1)+pt2(1))/2:tp(2)=0 accumColl。添加(tp)num=num+1下一个'--------------------------------------------------''Dim m As Long,k As Long,n As Long m=accumColl。Count-1 k=2 ReDim sortedArray(m,k)n=0 Dim item For Each item In accumColl sortedArray(n,0)=item(0)sortedArray(n,1)=item(1)sortedArray(n,2)=item(2)n=n+1 Next“”----------------------------------------------------“”注意:将fuzz变量(15.0)放入套装,将最小多边形SortDarray=SortPointsLikeTable(SortDarray,10#)高度的一半表示为“----------------------------------------------------------------对于n=lBond(SortDarray,1)到uBond(SortDarray,1)暗淡文本pt(2),表示为DoubletextPt(0)=SortDarray(n,0):textPt(1)=SortDarray(n,1):textPt 2)=SortDarray(n,2)设置为文本=此图纸。模型空间。AddText(CStr(n+1),textPt,15#)oText。对齐=acAlignmentMiddleCenteroText。TextAlignmentPoint=textPtoText。插入点=oText。TextAlignmentPointNext Err\u控件:If Err。数字0,然后MsgBox Err。如果((sourceArr(j-1,0)-sourceArr(j,0)>fuzz)或_((sourceArr(j-1,0)>fuzz),则为i=UBound(sourceArr)到LBound(sourceArr)的步骤-1,对于j=LBound(sourceArr)+1到i,如果((sourceArr(j-1,0)-sourceArr(j,0)>fuzz)或_((sourceArr(j-1,0)-sourceArr(j,0)

Sundar 发表于 2022-7-6 22:47:59

感谢fixo提供的代码。。它工作得很好。。但问题是“Selectionsetcrossingpolygon”按绘制顺序选择内部对象。但我需要按从左上到右的顺序对对象进行编号,而不考虑绘制对象的顺序。。

fixo 发表于 2022-7-6 23:07:32

再次尝试上面编辑的代码

Sundar 发表于 2022-7-6 23:19:32

谢谢fixo。。我尝试了编辑后的代码,我想了解“SortPointsLikeTable”函数中“fuzz”变量的重要性。。根据代码“注意:把fuzz变量(15.0)放到你的衣服上,比如说最小多边形高度的一半”,最小多边形是什么意思??我必须计算里面所有多边形的高度吗??
 
它实际上是对不需要的外部多边形进行编号。。我可以相应地管理和编辑代码。对我来说唯一困难的是多边形的顺序编号。希望你能帮我更多。。。提前感谢

fixo 发表于 2022-7-6 23:31:38

我没有时间进一步帮你回答这个简单的问题,
尽管你可能想通过选取2个点来获得最短的高度
在屏幕上,然后将该值传递给程序,而不传递其他值
页: [1]
查看完整版本: 内部多边形自动编号