当前版块:问答社区 > 综合讨论区

【源代码分享】显示CAD选择集夹持点

Public Sub ShowSelectionSetCrips(ByVal AcadApp As AcadApplication, ByRef ss As AcadSelectionSet)
  Dim objEnt As AcadEntity
  EvalLispExpression AcadApp, "(setq ss (ssadd))"
  For Each objEnt In ss
      EvalLispExpression AcadApp, "(ssadd " & _
                                "(handent " & Chr(34) & _
                                objEnt.Handle & Chr(34) & ")" & _
                                "ss" & _
                                ")"
  Next
  EvalLispExpression AcadApp, "(sssetfirst nil ss)"
  EvalLispExpression AcadApp, "(setq ss nil)"
End Sub
 
Public Function EvalLispExpression(ByVal AcadApp As AcadApplication, lispStatement As String)
  Dim VL As Object, VLF As Object
  Dim sym As Object, ret As Object, retVal
  Select Case Val(Left(AcadApp.Application.Version, 2))
    Case Is = 15
         Set VL = AcadApp.Application.GetInterfaceObject("VL.Application.1")
    Case Is >= 16
         Set VL = AcadApp.Application.GetInterfaceObject("VL.Application.16")
  End Select
  Set VLF = VL.ActiveDocument.Functions
  Set sym = VLF.Item("read").funcall(lispStatement)
  On Error Resume Next
  retVal = VLF.Item("eval").funcall(sym)
  If Err Then
     EvalLispExpression = ""
  Else
     EvalLispExpression = retVal
  End If
  On Error GoTo 0
End Function
 
Public Sub TestC(ByVal AcadApp As AcadApplication)
  Dim sSet As AcadSelectionSet
  For Each sSet In AcadApp.Application.ActiveDocument.SelectionSets
      If sSet.Name = "TESTC" Then sSet.Delete: Exit For
  Next
  Set sSet = AcadApp.Application.ActiveDocument.SelectionSets.Add("TESTC")
  sSet.Select acSelectionSetAll
  ShowSelectionSetCrips AcadApp, sSet
  sSet.Delete
End Sub


(defun c:TestC( / rndobj)
  (vl-load-com)
  (setq rndobj (vlax-get-or-create-object "TestX.TestB"))
  (vlax-invoke-method rndobj "TestC" (vlax-get-acad-object))
  (vlax-release-object rndobj)
  (princ)
)


regsvr32 /s TestX.dll 

全部评论

等级:LV30
积分:49979
奔跑蜗牛 2019-12-12 09:09
学习了
回复 0
1
提交
悬赏回复规则
1、悬赏期为24小时,从发布时间起算;
2、悬赏期内提问者如设置评论为“精选评论”,视为悬赏结束,该精选评论人将获得本题全部悬赏积分;
3、悬赏期内如提问者未设置“精选评论”,则前5位评论者平分悬赏积分(如仅有一位评论,该评论者获得50%悬赏积分);
4、悬赏积分会自动发放到生态圈账户中,请留意站内信通知。
知道了

距离打开宝箱还剩7

是否花费200积分补签?
确认
取消