QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
楼主: koutx
收起左侧

[已解决] CAD二次开发对二维图某些数据的统计(请我爱谁家版主再指导)

[复制链接]
 楼主| 发表于 2009-3-15 20:13:43 | 显示全部楼层 来自: 中国北京
折腾了不知多少遍,也按版主推荐的搜了一些参考资料(Autocad_VBA初级教程、AutoCAD_VBA属性)等等就是没找到附录C,可无奈实在太菜,总也不能完全试通版主48楼这段程序。现在是内部点选没问题了,但是在中间筛选统计部分无论如何也想不出办法来。
4 H% x+ }9 r9 WFor Each LP In SS '遍历选择集,检查多段线是否是矩形并统计结果0 t" d( T, U, M: h- O: v+ |
            LP.Highlight (False) '被高亮显示的多段线取消高亮
& m. b8 j& W; Y3 J7 ^            '中间检查、统计部分省略
- W' V, L. Y( v- P" R( [6 F* ~) r             .......................
# E0 S: L4 a  v, Y) i' j. O                         ........................
" C, y6 C  n2 ?! y( j                         ..........................
: G6 S' p/ I, K$ I3 r4 Y5 {1 nNext$ p7 [3 c) q4 b9 z7 b+ M) e- H; A. A4 J
在循环中间,怎么也试不通。用LP.Length可得到周长;用LP.Area可得到面积,可就是得不到长、宽。难道要把原先那判断水平线与垂直线交点的整段代码全搬过来吗?可又觉得光靠生硬的搬过来又不行,因为我把矩形数组那一段搬过来试了多少次都不成呀,把P1,P2,P3,P4那一段也搬过来又不知如何给P赋值。无奈知识太少怎么也解决不了啊,请版主百忙中再予指导。多谢了。因为总想多试几种方法比较比较。2 c7 v: C& b  R

, M- C. E0 z. H5 @- s[ 本帖最后由 koutx 于 2009-3-15 20:15 编辑 ]
发表于 2009-3-15 21:17:24 | 显示全部楼层 来自: 中国
我连书名都告诉你了,为什么不用页面上面的“搜索”,用书名做关键词搜一下有关的帖子呢?$ f" M% g5 g) |) F: o" ]7 L
还是把链接给你吧
; q* g/ L- Y8 z, ~- p% }4 X  b# ]# ahttp://www.3dportal.cn/discuz/viewthread.php?tid=199860&page=1&fromuid=150055#pid9608948 V9 G, q3 E; s

, h% }8 G) z* l* S8 Y5 FLWPOLYLINE(优化多段线)对象有下面两个属性和方法可以用来在本程序中判断是否矩形- D4 f( a. a; K) {8 R2 R' ]! R
一、Coordinates属性。可读写。读取时的语法是! m% p* x' M" J$ B% J5 G1 ]- ]
V=PL.Coordinates
; v& ^  u; Z' h其中,V在使用前应声明为变体型变量(Variant),它返回一个双精度数组,包含优化多段线全部顶点的二维坐标。对于矩形,应该返回一个8元素的双精度数组,元素分别为第1个顶点X坐标、第1个顶点Y坐标、第2个顶点X坐标、第2个顶点Y坐标。。。。。。依此类推。
, M/ f% J5 Q3 O6 p: \5 f: {二、GetBulge方法。只读,语法是
2 R* u6 w0 F8 b" O  g" w  P" a4 eD=PL.GetBulge(Index)
& s* ^4 J- {  g% k" m其中,Index是多段线顶点索引,第1个顶点索引是0,第2个是1。。。。依此类推。D是双精度变量(Double),它返回指定顶点与下一个顶点间的线的凸度,如果是0,则为直线;否则是圆弧,该值是该圆弧的圆周角的四分之一的正切值。假如是个逆时针的半圆弧,圆周角是180度,四分之一就是45度,45度的正切值是1,也就是说,如果返回值是1,就说明这段线是个逆时针半圆弧。! e3 N/ e2 K1 F( p- U; a: I8 t6 D

; c) O& w& M& s" h8 j使用上面两个属性和方法,只要你的平面几何知识不是太差,应该能够在本程序中判断得到的多段线是否是矩形吧?
$ O! H# D. Q  z1 ?# b要注意的是,由于计算机浮点运算精度的原因,即使我们的图画得很准确,计算结果也会与理论结果存在些差异,所以在条件判断时要宽容些,只要在一定的范围内就可以了,就像我在三楼的代码一样,要给出一个精度范围。
7 }4 L3 T/ P# ~9 H
9 R3 \; y# z% Z: v3 b另外给你一个资料。CAD帮助文件中,开发人员帮助的《ActiveX and VBA Reference》对使用VBA的人来说非常重要,但它是英文版的,很多人看着不方便,下面的附件是中文翻译版本。% Z. w  Y4 {5 r5 D8 W! v+ ?. N
, A. L2 e) m4 G& ~
[ 本帖最后由 woaishuijia 于 2009-3-15 21:32 编辑 ]

ActiveX 和 VBA 参考.rar

1.71 MB, 下载次数: 6

 楼主| 发表于 2009-3-17 14:34:55 | 显示全部楼层 来自: 中国北京
谢谢版主提供的资料,问题基本解决了。只是一个一个的点选有点过于麻烦了。
 楼主| 发表于 2009-4-11 12:19:44 | 显示全部楼层 来自: 中国北京
多谢版主详尽的指导和提供的学习资料,受益颇多。+ p4 D, [8 C% L+ k( S" R
这些天总是想在版主49楼的方法中再完善一下,可总不能实现,无奈再次请教:
- W# `, B/ t2 V& c5 t3 t问题见下面程序中括号内的标注:# u0 @$ \) g. Z1 n
------------------------------------------------------------------------------------------------------------------------
% ]6 }1 Q" G: `# D8 j5 QACAD的VBA并没有提供“孤岛检测”的方法,不过可以照下面的调用图形界面的“边界”命令实现它。+ T8 V; m% R: b' H: D5 p% H9 a4 t3 P
Dim I As Integer, SS As AcadSelectionSet, FT(0) As Integer, FD(0) As Variant, P As Variant, LP As AcadLWPolyline- k  s8 W0 x9 Z! i9 ]1 m
    With ThisDrawing- o0 V( j0 C) y' K3 N
        On Error Resume Next
( a$ A5 q: c* m- C% n6 m1 V) p        Set SS = .SelectionSets.Add("SS" )3 t: x7 Y0 x% {" e) L) x: S* f2 z
        FD(0) = "lwpolyline"2 ]7 a: r( c7 a  Z0 ~+ p5 X, T
        Do
7 v; q9 a0 Q' I1 W- H/ x  H            P = .Utility.GetPoint(, vbCrLf & "拾取内部点:")+ x( Q* U) e6 E8 l  X! f
            If Err Then Exit Do
' |8 F! P3 A7 p            .SendCommand "-boundary " & P(0) & "," & P(1) & "  "
+ ?0 W8 Z# K; x; N& w6 n2 W3 s            SS.Select acSelectionSetLast, , , FT, FD
* x, a: t5 k' F# m- t            If SS.Count = I Then4 u' \" b" ]' I" q" Z8 l/ i
                .SendCommand "n "4 H) O7 R& F3 K1 C3 D1 y
                Exit Do) U; M( X3 z! a
            Else$ M& z0 V; y  z) @
                SS.Item(I).Highlight (True) '选择集的最后一个元素即新创建的多段线用高亮显示* s! i$ n( T$ |# y- ^
                  (请问在此处能实现将点击的图形,填充图案或填充底色的语句)
4 I  G! a1 ]1 S/ L7 n; |  n                I = I + 15 x% a0 F, Q, j- n$ e+ N. Z
            End If* |6 q( i& d" _* Y. v
        Loop
) {9 G% \; q2 h! p" I% H; S" G# `) L  k, @6 d& s0 H; `, T
[ 本帖最后由 koutx 于 2009-4-11 14:10 编辑 ]
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表