iCAx开思网

标题: 如果知道一个面角点的X,Y,Z坐标, 那么怎样自动才能选择这个角点? [打印本页]

作者: slayerran    时间: 2008-7-10 21:45
标题: 如果知道一个面角点的X,Y,Z坐标, 那么怎样自动才能选择这个角点?
如果知道一个面角点的X,Y,Z坐标, 那么怎样自动才能选择这个角点?
Solidworks有没有类似的命令?

[ 本帖最后由 slayerran 于 2008-7-10 21:46 编辑 ]
作者: zhanghaitao    时间: 2008-7-10 22:15
自动的不会
作者: Francis    时间: 2008-7-10 22:27
是否指二次开发内的指令?
作者: neuw    时间: 2008-7-11 11:04
是不是需要做一个基准点啊,通过坐标来做出来。
作者: slayerran    时间: 2008-7-13 08:15
感谢大家回复。

并不是创造一个点,而是这个点是一个已经存在的点,我想选取它………………
作者: slayerran    时间: 2008-7-13 08:23
闷大,我指的就是二次开发的

现在编程遇到一点麻烦的事情。主要是一个面和一个实体相交,现在我想选择面边线为相交线的边线(-_-||| 貌似比较拗口………………)。我可以画出一个3D sketch来表示边线,但是这仅仅是一个3Dsketch,我想要选择那条真正的边线………………

10月份答辩,时间有点紧,现在卡在这个地方编不下去了,烦死了………………
作者: slayerran    时间: 2008-7-14 23:52
帖子沉了顶一下
作者: ysun31    时间: 2008-7-15 00:55
在二次开发中选取任何几何要素的最好方法是在生成这个几何体(点、线、面、特征、实体)的时候把它赋予一个变量,以后用的时候,直接调用这个变量。

如果你错过了在它出生的时候记住它,会很麻烦。

二次开发的时候,最好的老师,是二次开发帮助文件,里面有很多例子可以借鉴。
作者: ysun31    时间: 2008-7-15 01:02
“但是这仅仅是一个3Dsketch,我想要选择那条真正的边线”

在帮助里有一个例子,找到这个Sketch后,SW自动给所有的边、点都命了名,可以抓出来的。你好好读读help。还有一个方法,写程序的时候,当你输入点之后,程序自动给出所有的关于此对象的方法。根据这些提示,你进一步去找help。
作者: ysun31    时间: 2008-7-15 01:12
标题: 类似于这种例子,瞎找的
Get Sketch Segment and Curve Data Example (VB)
This example shows how to get data about a sketch segment and curve.



'---------------------------------------------

'

' Preconditions:

'             (1) Model document is open.

'             (2) Sketch segment is selected.

'

' Postconditions: None

'

'---------------------------------------------

Option Explicit

Public Enum swSkSegments_e

    swSketchLINE = 0

    swSketchARC = 1

    swSketchELLIPSE = 2

    swSketchSPLINE = 3

    swSketchTEXT = 4

    swSketchPARABOLA = 5

End Enum

' Define two types

Type DoubleRec

    dValue As Double

End Type

Type Long2Rec

    iLower As Long

    iUpper As Long

End Type

' Extract two integer values from of a single double value

' by assigning a DoubleRec to the double value and

' copying the value to a Long2Rec and

' extracting the integer values

Function ExtractFields _

( _

    ByVal dValue As Double, _

    iLower As Long, _

    iUpper As Long _

)

    Dim dr                      As DoubleRec

    Dim i2r                     As Long2Rec

    ' Set the double value

    dr.dValue = dValue

    ' Copy the values

    LSet i2r = dr

    ' Extract the values

    iLower = i2r.iLower

    iUpper = i2r.iUpper

End Function

Sub ProcessCurve _

( _

    swApp As SldWorks.SldWorks, _

    swModel As SldWorks.ModelDoc2, _

    swCurve As SldWorks.curve _

)

    Dim nStartParam             As Double

    Dim nEndParam               As Double

    Dim bIsClosed               As Boolean

    Dim bIsPeriodic             As Boolean

    Dim vStartEval              As Variant

    Dim vEndEval                As Variant

    Dim nSuccessStart           As Long

    Dim nEndStart               As Long

    Dim nDummy                  As Long

    Dim bRet                    As Boolean

   

    bRet = swCurve.GetEndParams(nStartParam, nEndParam, bIsClosed, bIsPeriodic): Debug.Assert bRet

    vStartEval = swCurve.Evaluate(nStartParam)

    vEndEval = swCurve.Evaluate(nEndParam)

   

    ExtractFields vStartEval(6), nSuccessStart, nDummy

    ExtractFields vEndEval(6), nEndStart, nDummy

   

    Debug.Print "    IsClosed       = " & bIsClosed

    Debug.Print "    IsPeriodic     = " & bIsPeriodic

    Debug.Print "    IsTrimmed      = " & swCurve.IsTrimmedCurve

    Debug.Print "    Start"

    Debug.Print "      Point        = (" & vStartEval(0) * 1000# & ", " & vStartEval(1) * 1000# & ", " & vStartEval(2) * 1000# & ") mm"

    Debug.Print "      Tangent      = (" & vStartEval(3) & ", " & vStartEval(4) & ", " & vStartEval(5) & ")"

    Debug.Print "      Success      = " & nSuccessStart

    Debug.Print "    Finish"

    Debug.Print "      Point        = (" & vEndEval(0) * 1000# & ", " & vEndEval(1) * 1000# & ", " & vEndEval(2) * 1000# & ") mm"

    Debug.Print "      Tangent      = (" & vEndEval(3) & ", " & vEndEval(4) & ", " & vEndEval(5) & ")"

    Debug.Print "      Success      = " & nEndStart

End Sub

Sub main()

    Dim sSkSegmentsName(5)      As String

    Dim swApp                   As SldWorks.SldWorks

    Dim swModel                 As SldWorks.ModelDoc2

    Dim swSelMgr                As SldWorks.SelectionMgr

    Dim swSkSeg                 As SldWorks.SketchSegment

    Dim swCurve                 As SldWorks.curve

    Dim swSkFeat                As SldWorks.feature

    Dim swSketch                As SldWorks.sketch

    Dim vID                     As Variant

    Dim bRet                    As Boolean

   

    sSkSegmentsName(swSketchLINE) = "swSketchLINE"

    sSkSegmentsName(swSketchARC) = "swSketchARC"

    sSkSegmentsName(swSketchELLIPSE) = "swSketchELLIPSE"

    sSkSegmentsName(swSketchSPLINE) = "swSketchSPLINE"

    sSkSegmentsName(swSketchTEXT) = "swSketchTEXT"

    sSkSegmentsName(swSketchPARABOLA) = "swSketchPARABOLA"

   

    Set swApp = Application.SldWorks

    Set swModel = swApp.ActiveDoc

    Set swSelMgr = swModel.SelectionManager

    Set swSkSeg = swSelMgr.GetSelectedObject5(1)

    Set swCurve = swSkSeg.GetCurve

    Set swSkFeat = swSkSeg.GetSketch

    Set swSketch = swSkFeat.GetSpecificFeature

   

    vID = swSkSeg.GetId

   

    Debug.Print "Feature = " & swSkFeat.Name & " [" & swSketch.Is3D & "]"

    Debug.Print "  Sketch segment data"

    Debug.Print "    ID = [" & vID(0) & "," & vID(1) & "]"

    Debug.Print "      Type                 = " & sSkSegmentsName(swSkSeg.GetType)

    Debug.Print "      ConstGeom            = " & swSkSeg.ConstructionGeometry

   

    Debug.Print "  Curve data"

    ProcessCurve swApp, swModel, swCurve

End Sub

'---------------------------------------------
作者: 淫 P    时间: 2008-7-15 01:20
比较浅白的方法:
Part.Extension.SelectByID2 "", "VERTEX", 『 X 』,『 Y 』, 『 Z 』, False, 0, Nothing, 0

如果有重复的角点而且都要寻找出来,或,近似值搜寻角点,
就需要使用到“遍历方式”,那就麻烦很多了。
作者: slayerran    时间: 2008-7-15 13:30
谢谢楼上诸位的耐心解答,小弟实在受益匪浅




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3