[求助]关于批量打印图框排序问题
本帖最后由 作者 于 2008-4-18 21:24:40 编辑 <br /><br /> <p>想做个能根据图框然后可以自动排序从上到下从左到右或从下到上从右到左进行批量打印的程序,下面是写到了读完各图框打印区坐标(LBpt(i)-RTpt(i))后如何进行二维排序的问题,不知各位高手门有没有什么好的方法对LBpt()根据X、Y值进行从左到右或从下到上从右到左进行排序的好方法呢?</p><p>Private Type pt<br/> X As Double<br/> Y As Double<br/>End Type</p><p>Private Type pt<br/> X As Double<br/> Y As Double<br/>End Type</p><p>Dim LBpt(),RTpt() As pt<br/>Dim LBpttmp,RTpttmp As Variant<br/>Dim Sset As AcadSelectionSet<br/>Dim FilterType(5) As Integer<br/>Dim FilterData(5) As Variant<br/>Dim AcadEntity As AcadEntity<br/>Dim num As Integer</p><p>FilterType(0) = -4<br/>FilterData(0) = "<or"<br/>FilterType(1) = 0<br/>FilterData(1) = "Insert"<br/>FilterType(2) = 0<br/>FilterData(2) = "LWPOLYLINE"<br/>FilterType(3) = 0<br/>FilterData(3) = "POLYLINE"<br/>FilterType(4) = -4<br/>FilterData(4) = "or>"<br/>FilterType(5) = 8<br/>FilterData(5) = "图框"</p><p>Set Sset = ThisDrawing.SelectionSets.Add("sse1")<br/> <br/>ThisDrawing.Utility.Prompt (vbCrLf & "请选择要打印的图框(要求图框为块或者多段线):")<br/> <br/>Sset.SelectOnScreen FilterType, FilterData</p><p>For Each AcadEntity In Sset<br/> AcadEntity.GetBoundingBox LBpttmp, RTpttmp<br/> Num = Num + 1<br/> ReDim Preserve MinPoints(1 To Num)<br/> ReDim Preserve MaxPoints(1 To Num)<br/> LBpt(Num).X = LBpttmp(0)<br/> LBpt(Num).Y = LBpttmp(1)<br/> RTpt(Num).X = RTpttmp(0)<br/> RTpt(Num).Y = RTpttmp(1) <br/>Next</p> 这个还要什么好不好的方法的吗?自己编一段代码就能排出来吧? <p>二楼的高手,就是因为不懂编这个排序的程度所以才说的啊,会编的话就不会在这里求助了啊</p> <p>考虑到坐标的误差,排序上还是要仔细想的。</p><p>但是多想就出来了,不过是x,y坐标的数字排序而已。</p> <p>最简单的冒泡法啊,分别对XY坐标排序就好了,比如先行后列的话,把每个图框的中点 没有脱离前后半个图框的作为一行处理就可以了。楼主的这个程序我都写好了,但是有一个问题无法解决,就是图幅问题——单位有两台打印机,要打A3的图纸的时候,他经常给用A4打印出来,用acaddoc.ActiveLayout.CanonicalMediaName ="A3"解决不了,好像是AutoCAD的bug,怎么设置都没有用,时而按A3打,时而按A4打,郁闷死了,怎么都找不到问题的症结所在!也希望高手指点一二。</p> 打印的这个问题,一般还是看图幅的,图幅如果超界的话,他肯定要按比他大的图幅来打
页:
[1]