Тема: Засечки

Скажите пожайлуста как на линии сделать засечки???
Это линия:
With ThisDrawing.Utility
                D = .GetPoint(InsertPnt, vbCrLf & "УКАЖИТЕ ПОЖАЙЛУСТА НА КРАЙ ЗДАНИЯ ИЛИ СООРУЖЕНИЯ С ОДНОФАЗНЫМ ВВОДОМ:")
                Set lineObj = ThisDrawing.ModelSpace.AddLine(InsertPnt, D)
            End With
На ней надо сделать засечки (короткие линии под небольшим углом).
InsertPnt - точка вставки блока

Re: Засечки

Если расчленить размерный блок, то вы увидите в его составе блок TIC1, который и есть эта самая засечка. Ну а вставить его в нужное место для вас не представит труда.

Re: Засечки

dim pnt (0 to 2) as double
Dim insertedBlock As AcadBlockReference
pnt (0)=(InsertPnt(0)+ D(0))/2'середина отрезка
pnt (1)=(InsertPnt(1)+ D(1))/2
pnt (2)=0#
Set insertedBlock = ThisDrawing.ModelSpace.InsertBlock(Pnt, "_Oblique", 0#, 0#, 0#, 0#)

По идее, в центре линии должен вставиться блок-засечка _Oblique (если он есть в базе чертежа). Или можно предварительно создать свой блок. Конечно, надо еще учесть масштаб и вычислить угол поворота линии (имея 2 точки, можно разобраться - через синусы-косинусы)

Re: Засечки

> Дарья
По-быстрому, проверить некогда
Добавь свой слой и цвет для линий

Option Explicit
Const PI = 3.14159265358979
Const slop As Double = 79# ' угол между засечкой и основной линией
Const leng As Double = 1.12 ' половина длины засечки
Const gap As Double = 0.7 ' расстояние между засечками
Sub Zaseki()
Dim sys, D, InsertPnt
Dim p0, p1, p2
Dim lineObj As AcadLine
Dim ang As Double, ang1 As Double, ang2 As Double
Dim num As Integer, cnt As Integer
With ThisDrawing
.StartUndoMark
sys = .GetVariable("OSMODE")
.SetVariable "OSMODE", 64
InsertPnt = .Utility.GetPoint(, vbCrLf & "УКАЖИТЕ ПОЖАЛУЙСТА ТОЧКУ ВСТАВКИ БЛОКА:")
.SetVariable "OSMODE", 512
D = .Utility.GetPoint(InsertPnt, vbCrLf & "УКАЖИТЕ ПОЖАЛУЙСТА НА КРАЙ ЗДАНИЯ ИЛИ СООРУЖЕНИЯ С ОДНОФАЗНЫМ ВВОДОМ:")
Set lineObj = .ModelSpace.AddLine(InsertPnt, D)
ang = .Utility.AngleFromXAxis(D, InsertPnt)
ang1 = ang + .Utility.AngleToReal(slop, acDegrees)
ang2 = ang1 + PI
p0 = .Utility.PolarPoint(D, ang, gap * 2) '<--gap * 2 - расстояние от конца линии до середины первой засечки
p1 = .Utility.PolarPoint(p0, ang1, leng)
p2 = .Utility.PolarPoint(p0, ang2, leng)
Set lineObj = .ModelSpace.AddLine(p1, p2)
num = CInt(InputBox(vbCrLf & "УКАЖИТЕ ПОЖАЛУЙСТА КОЛИЧЕСТВО ЗАСЕЧЕК", "Ввод параметров", "2"))
If num = 0 Or num < 0 Then
MsgBox "ВВОД НУЛЯ И ОТРИЦАТЕЛЬНЫХ НЕ ДОПУСКАЕТСЯ.", , "АШИПКА"
Exit Sub
End If
While cnt < num - 1
p0 = .Utility.PolarPoint(p0, ang, gap)
p1 = .Utility.PolarPoint(p0, ang1, leng)
p2 = .Utility.PolarPoint(p0, ang2, leng)
Set lineObj = .ModelSpace.AddLine(p1, p2)
cnt = cnt + 1
Wend
.SetVariable "OSMODE", sys
.EndUndoMark
End With
End Sub

~'J'~