帮你写了一个:
考虑到一般是剪去直线的两端,所以能连续执行剪断,不过不能撤消。如果要能够撤消,去掉goto retry和RETYT,不过那样就不能连续剪断了。
'gzy@mjtd.com
'12.25
Dim selobj As AcadObject
Dim lineobj As AcadLine
Dim ppt As Variant
Dim mp1(0 To 2) As Double
Dim mp2(0 To 2) As Double
Sub mainmenu()
Dim newmenu As AcadPopupMenu
Dim newmenugroup As AcadMenuGroup
Dim newmenuitemname As AcadPopupMenuItem
Set newmenugroup = ThisDrawing.Application.MenuGroups.Item(0)
Set newmenu = newmenugroup.Menus.Add("剪切")
Set newmenuitemname = newmenu.AddMenuItem(newmenu.Count + 0, "剪切", "-vbarun jq ")
Set newmenuitemname = newmenu.AddMenuItem(newmenu.Count + 2, "退出", "-vbarun u2 ")
newmenu.InsertInMenuBar (ThisDrawing.Application.MenuBar.Count + 1)
End Sub
Sub u2()
ThisDrawing.SendCommand "filedia 0 "
ThisDrawing.SendCommand "menu " + Chr(13)
ThisDrawing.SendCommand "filedia 1 "
End Sub
Sub jq()
RETRY:
On Error Resume Next
Do While code = 0
ThisDrawing.Utility.GetEntity selobj, ppt, "请选择目标直线"
If Err <> 0 Then
Err.Clear
ThisDrawing.Utility.Prompt " 没有选定对象,退出"
Exit Sub
End If
If Err.Number = 0 Then
If (selobj.EntityName = "AcDbLine") Then
Set lineobj = selobj
mp1(0) = lineobj.StartPoint(0)
mp1(1) = lineobj.StartPoint(1)
mp2(0) = lineobj.EndPoint(0)
mp2(1) = lineobj.EndPoint(1)
End If
If (ppt(0) - mp1(0)) ^ 2 + (ppt(1) - mp1(1)) ^ 2 < (mp2(0) - ppt(0)) ^ 2 + (mp2(1) - ppt(1)) ^ 2 Then
lineobj.StartPoint = ppt
Else
lineobj.EndPoint = ppt
End If
Exit Do
End If
Loop
GoTo RETRY
End Sub