CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ActiveX 开发指南

相关分类

SetWidth Method (ActiveX)

2023-1-4 01:00| 发布者: admin| 查看: 443| 评论: 0|来自: AutoCAD

摘要: 设置给定线段索引的折线的开始宽度和结束宽度。

设置给定线段索引的折线的开始宽度和结束宽度。

支持的平台:仅窗口

签名

工 务 局:

object.SetWidth SegmentIndex, StartWidth, EndWidth
对象

类型:长线折线

此方法适用的对象。

细分索引

访问:仅输入

类型:

指定要设置其宽度的段的索引。第一段是索引 0。

起始宽度

访问:仅输入

类型:

指定段的起始宽度。

端宽

访问:仅输入

类型:

指定段的结束宽度。

返回值(RetVal)

无返回值。

言论

线段索引是折线特定线段的索引。例如,具有三个线段的折线具有线段索引 0、1 和 2。

折线:如果折线属性是 ISOR,则此方法将失败。TypeacCubicSplinePolyacQuadSplinePoly

例子

工 务 局:

Sub Example_SetWidth()
    ' The following code prompts you to select a lightweight
    ' polyline, and then prompts you for the width to set each 
    ' segment of the polyline. 
    ' Pressing ENTER without specifying a width is equivalent to
    ' entering 0.

    AppActivate ThisDrawing.Application.Caption

    Dim returnObj As AcadObject
    Dim basePnt As Variant
    Dim retCoord As Variant
    Dim StartWidth As Double
    Dim EndWidth As Double
    Dim i, j As Long
    Dim nbr_of_segments As Long
    Dim nbr_of_vertices As Long
    Dim segment As Long
    Dim promptStart As String
    Dim promptEnd As String
              
    On Error Resume Next
   
    ThisDrawing.Utility.GetEntity returnObj, basePnt, "Select a polyline"
       
    ' Make sure the user selected a polyline.
    If Err <> 0 Then
        If returnObj.EntityName <> "AcDbPolyline" Then
            MsgBox "You did not select a polyline"
        End If
        Exit Sub
    End If
    
    ' Obtain the coordinates of each vertex of the selected polyline.
    ' The coordinates are returned in an array of points.
    retCoord = returnObj.Coordinates
    
    segment = 0
    i = LBound(retCoord)                 ' Start index of coordinates array
    j = UBound(retCoord)                 ' End index of coordinates array
    nbr_of_vertices = ((j - i) \ 2) + 1  ' Number of vertices in the polyline
    
    ' Determine the number of segments in the polyline.
    ' A closed polyline has as many segments as it has vertices.
    ' An open polyline has one fewer segment than it has vertices.
    ' Check the Closed property to determine if the polyline is closed.
    
    If returnObj.Closed Then
        nbr_of_segments = nbr_of_vertices
    Else
        nbr_of_segments = nbr_of_vertices - 1
    End If
    
    ' Have user set the width for each segment of the polygon
    Do While nbr_of_segments > 0
          
        ' Get width values from the user
        promptStart = vbCrLf & "Specify the width at the beginning of the segment at " & retCoord(i) & "," & retCoord(i + 1) & " ==> "
        promptEnd = vbCrLf & "Now specify the width at the end of that segment ==> "
       
        StartWidth = ThisDrawing.Utility.GetReal(promptStart)
        EndWidth = ThisDrawing.Utility.GetReal(promptEnd)

        ' Set the width of the current segment
        returnObj.SetWidth segment, StartWidth, EndWidth
     
        ' Prepare to obtain width of next segment, if any
        i = i + 2
        segment = segment + 1
        nbr_of_segments = nbr_of_segments - 1
    Loop
      
    MsgBox "Segment widths have been set", , "SetWidth Example"

End Sub

Visual LISP:

(vl-load-com)
(defun c:Example_SetWidth()
    ;; The following code prompts you to select a lightweight
    ;; polyline, then displays the width of each segment of the
    ;; selected polyline. 
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))
   
    (vla-GetEntity (vla-get-Utility doc) 'returnObj 'basePnt "Select a polyline: ")
       
    ;; Make sure the user selected a polyline.
    (if (/= returnObj nil)
        (progn
            (if (= (vla-get-ObjectName returnObj) "AcDbPolyline")
	               (progn
		                  ;; Obtain the coordinates of each vertex of the selected polyline.
		                  ;; The coordinates are returned in an array of points.
		                  (setq retCoord (vlax-variant-value (vla-get-Coordinates returnObj)))
		    
		                  (setq segment 0
		                        i (vlax-safearray-get-l-bound retCoord 1)                 ;; Start index of coordinates array
		                        j (vlax-safearray-get-u-bound retCoord 1)                 ;; End index of coordinates array
		                        nbr_of_vertices (+ (/ (- j i) 2) 1))                      ;; Number of vertices in the polyline
		    
		                  ;; Determine the number of segments in the polyline.
		                  ;; A closed polyline has as many segments as it has vertices.
		                  ;; An open polyline has one fewer segment than it has vertices.
		                  ;; Check the Closed property to determine if the polyline is closed.
		                  (if (= (vla-get-Closed returnObj) :vlax-true)
		                      (setq nbr_of_segments nbr_of_vertices)
		                      (setq nbr_of_segments (1- nbr_of_vertices))
		                  )
		    
		                  ;; Get the width of each segment of the polyline
		                  (while (>= nbr_of_segments 0)
		                      ;; Get width values from the user
		                      (setq promptStart (strcat "\nSpecify the width at the beginning of the segment at " (rtos (vlax-safearray-get-element retCoord i) 2) ","
                                                                                                            (rtos (vlax-safearray-get-element retCoord (1+ i)) 2) " ==> "))
		                      (setq promptEnd (strcat "\nNow specify the width at the end of that segment ==> "))

		                      (setq StartWidth (vla-GetReal (vla-get-Utility doc) promptStart))
		                      (setq EndWidth (vla-GetReal (vla-get-Utility doc) promptEnd))

		                      ;; Set the width of the current segment
		                      (vla-SetWidth returnObj segment StartWidth EndWidth)

		                      ;; Prepare to obtain width of next segment, if any
		                      (setq i (+ i 2)
		                            segment (1+ segment)
		                            nbr_of_segments (1- nbr_of_segments))
	              	    )
	              	)
                (alert "Object selected was not a polyline")
            )
       	)
        (alert "No object was selected.")
    )
)

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 14:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部