明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3556|回复: 5

请教:如何在插入点自动打断,并使插入块与所插入直线方向一致

[复制链接]
发表于 2004-9-16 08:01:00 | 显示全部楼层 |阅读模式
我想在直线上插入一个块,要求能自动打断该直线,并调整块的方向,使之与该直线方向一致,不知如何实现(VBA),请高手指点.先谢谢啦!
发表于 2004-9-16 15:27:00 | 显示全部楼层
Sub ttt45() Dim obj As AcadLine, pnt
Dim objTemp As AcadLine
Dim minpnt, maxpnt, cenpnt(2) As Double
Dim objBlock As AcadBlockReference
Dim height As Double
Dim pnts(3)
ThisDrawing.Utility.GetEntity obj, pnt

temp = ThisDrawing.Utility.PolarPoint(pnt, obj.Angle + Atn(1) * 2, 10)
Set objTemp = ThisDrawing.ModelSpace.AddLine(pnt, temp)
pnt = obj.IntersectWith(objTemp, acExtendBoth)
objTemp.Delete

Set objBlock = ThisDrawing.ModelSpace.InsertBlock(pnt, "1", 1, 1, 1, 0)
objBlock.GetBoundingBox minpnt, maxpnt
cenpnt(0) = (minpnt(0) + maxpnt(0)) / 2
cenpnt(1) = (minpnt(1) + maxpnt(1)) / 2
height = maxpnt(1) - minpnt(1)

objBlock.Move cenpnt, pnt
objBlock.Rotate pnt, obj.Angle + Atn(1) * 2

pnts(0) = obj.StartPoint
pnts(1) = ThisDrawing.Utility.PolarPoint(pnt, obj.Angle, -height / 2)
pnts(2) = ThisDrawing.Utility.PolarPoint(pnt, obj.Angle, height / 2)
pnts(3) = obj.EndPoint
obj.Delete
ThisDrawing.ModelSpace.AddLine pnts(0), pnts(1)
ThisDrawing.ModelSpace.AddLine pnts(2), pnts(3) End Sub
 楼主| 发表于 2004-9-17 07:58:00 | 显示全部楼层
成功了!非常感谢!
 楼主| 发表于 2004-10-15 11:45:00 | 显示全部楼层
请问飞狐版主:如果把这里的直线改为多线该怎么实现呢,也就是说,怎么获得多线上某点所在线段(好象ACAD中多线不是由线段构成的)的座标。


先谢谢啦!
发表于 2004-10-15 13:36:00 | 显示全部楼层
判断点在多段线上的最近点,然后再判断最近点在哪个线段里,这要用VLAX才能求得最近点。
发表于 2010-7-24 13:13:00 | 显示全部楼层
学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 22:33 , Processed in 0.190276 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表