offloading 发表于 2009-1-4 10:04:00

[求助]含弧的多义线Polyline

<p>各位朋友:</p><p>vb 可获得Polyline的各点信息,但是这只是点和点,对于含有弧的Polyline如何同时获取其各点之间的半径值、起始角、终止角、圆心坐标呢?</p>

woaishuijia 发表于 2009-1-4 20:12:00

GetBulge方法

offloading 发表于 2009-1-8 10:45:00

本帖最后由 作者 于 2009-1-8 11:04:08 编辑 <br /><br /> <p>兄弟愚钝!</p><p>给个代码试例吧!</p><p>1、我想得到一个含弧的多义线所有点坐标信息</p><p>2、我想根据得到的信息再还原成含弧的多义线</p>

woaishuijia 发表于 2009-1-8 15:49:00

<p>"含弧的多义线"是优化多段线,就是LightweightPolyline对象。它所有顶点必须在同一个平面上,它的顶点坐标是二维的,也就是对象坐标系OCS的X、Y坐标,没有Z坐标(因为所有顶点的Z坐标相同,所以优化多段线有一个标高属性Elevation,也就是所有顶点的Z坐标)。设置或者读取优化多段线的顶点坐标有两个途径,一个是它的Coordinate属性,它需要一个参数,就是顶点的索引号,是从0开始的,比如第1个顶点坐标就是Coordinate(0),这是一个有两个元素的双精度数组,里面装着OCS的X、Y坐标;另一个途径是它的Coordinates属性,是所有顶点在OCS上的X、Y坐标,双精度数组,元素数是顶点数的二倍,里面依次装着第一个顶点的X坐标、第一个顶点的Y坐标、第二个顶点的X坐标、第二个顶点的Y坐标。。。。。。依此类推。和“点”的使用方法一样,对这两个属性赋值时要用双精度数组的变量名;读取属性时要用变体变量,赋值后变量自动成为双精度数组。</p><p>优化多段线的“圆弧段”和圆弧(ARC)对象不同。ARC对象是靠圆心、半径、起始角、终止角来定义的;而优化多段线的“圆弧段”是用该线段的“凸起”来定义的,或者可以说是用该圆弧段两端的坐标和圆心角来决定的。设置圆弧段的“凸起”用LightweightPolyline对象的SetBulge方法,它有两个参数,第一个是顶点索引号,从0开始,第二个是(圆心角的四分之一)的正切值。比如,优化多段线的第一段是圆弧形,圆角180度,那么这两个参数就是:0,1。其中0表示第一个顶点后面,1表示正180度(180度的四分之一是45度,45度的正切函数值是1)。读取这个“凸起”用LightweightPolyline对象的GetBulge方法,它有一个参数,就是顶点索引号,返回值同样是(圆心角的四分之一)的正切值。</p><p>结合使用上面的方法,就可以获得优化多段线的某个“圆弧段”的起、终点坐标和(圆心角的四分之一)的正切值。当然,要想获取“圆弧段”的半径值、起始角、终止角、圆心坐标,还要再做进一步的计算。</p>

offloading 发表于 2009-1-8 17:02:00

<p>万分感谢你的解答!</p><p>思路已基本明白!</p><p>但是,一下吃不消,还需细嚼!</p><p>烦给个例子吧,这样,我即解决眼前的问题,又可事后反推,细研!</p><p>以下是从CAD中LIST提取的一个多义线信息:</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LWPOLYLINE&nbsp; Layer: "0"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Space: Model space<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Handle = 103<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Closed<br/>&nbsp;&nbsp;&nbsp; Constant width&nbsp;&nbsp;&nbsp; 0.0000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; area&nbsp;&nbsp; 7158.2416<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; perimeter&nbsp;&nbsp; 335.4389</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at point&nbsp; X=&nbsp; 95.0000&nbsp; Y=&nbsp; 60.3137&nbsp; Z=&nbsp;&nbsp; 0.0000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bulge&nbsp;&nbsp; -0.3074<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; center&nbsp; X= 100.0000&nbsp; Y= 100.0000&nbsp; Z=&nbsp;&nbsp; 0.0000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; radius&nbsp;&nbsp; 40.0000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start angle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 263<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end angle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 194<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at point&nbsp; X=&nbsp; 61.2702&nbsp; Y=&nbsp; 90.0000&nbsp; Z=&nbsp;&nbsp; 0.0000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at point&nbsp; X=&nbsp; 17.3205&nbsp; Y=&nbsp; 90.0000&nbsp; Z=&nbsp;&nbsp; 0.0000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bulge&nbsp;&nbsp; -0.2679<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; center&nbsp; X=&nbsp;&nbsp; 0.0000&nbsp; Y= 100.0000&nbsp; Z=&nbsp;&nbsp; 0.0000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; radius&nbsp;&nbsp; 20.0000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start angle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 330<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end angle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 270<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at point&nbsp; X=&nbsp;&nbsp; 0.0000&nbsp; Y=&nbsp; 80.0000&nbsp; Z=&nbsp;&nbsp; 0.0000<br/>Press ENTER to continue:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at point&nbsp; X=&nbsp;&nbsp; 0.0000&nbsp; Y=&nbsp;&nbsp; 0.0000&nbsp; Z=&nbsp;&nbsp; 0.0000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at point&nbsp; X=&nbsp; 70.0000&nbsp; Y=&nbsp;&nbsp; 0.0000&nbsp; Z=&nbsp;&nbsp; 0.0000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bulge&nbsp;&nbsp; -0.3660<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; center&nbsp; X= 100.0000&nbsp; Y=&nbsp;&nbsp; 0.0000&nbsp; Z=&nbsp;&nbsp; 0.0000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; radius&nbsp;&nbsp; 30.0000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start angle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 180<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end angle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at point&nbsp; X=&nbsp; 95.0000&nbsp; Y=&nbsp; 29.5804&nbsp; Z=&nbsp;&nbsp; 0.0000</p><p></p>
页: [1]
查看完整版本: [求助]含弧的多义线Polyline