Откладывание полилинии фиксированной длины
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Откладывание полилинии фиксированной длины

Откладывание полилинии фиксированной длины

Ответ
Поиск в этой теме
Непрочитано 13.12.2022, 16:20 #1
Откладывание полилинии фиксированной длины
Shagezood
 
Проектирование электросетей
 
Регистрация: 13.12.2022
Сообщений: 5

При построении линии заданного уклона (геодезия) было бы очень удобно прописать фиксированную длину каждого элемента полилинии и просто откладывать её мышкой, но никак не могу придумать как это сделать, помогите пожалуйста

Миниатюры
Нажмите на изображение для увеличения
Название: Линия уклона.jpg
Просмотров: 84
Размер:	113.9 Кб
ID:	251980  

Просмотров: 1635
 
Непрочитано 13.12.2022, 17:13
#2
belankostya


 
Регистрация: 10.08.2022
Сообщений: 3


Самое простое решение - написать макрос/сценарий.
Более сложное - програмулька на LISP.
К сожалению мне не совсем понятна механика Вашей задачи - поэтому более детально не могу подсказать.
belankostya вне форума  
 
Автор темы   Непрочитано 13.12.2022, 17:49
#3
Shagezood

Проектирование электросетей
 
Регистрация: 13.12.2022
Сообщений: 5


В идеале просто кликать мышкой и что бы полилиния откладывалась в направлениях, где был сделан клик
Shagezood вне форума  
 
Непрочитано 13.12.2022, 17:52
#4
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 759


http://www.lee-mac.com/totallengthpline.html
Может это подойдет?
AMDen вне форума  
 
Автор темы   Непрочитано 14.12.2022, 09:29
#5
Shagezood

Проектирование электросетей
 
Регистрация: 13.12.2022
Сообщений: 5


Попробую, спасибо
Shagezood вне форума  
 
Непрочитано 14.12.2022, 10:15
#6
Dinoxromniy


 
Регистрация: 14.09.2020
Санкт-Петербург
Сообщений: 395


Цитата:
Сообщение от Shagezood Посмотреть сообщение
При построении линии заданного уклона (геодезия)
Если она у вас плоская, можно воспользоваться кодом наподобие кода ниже - выделяете мышкой существующую полилинию, указываете мышкой текущую точку и длину текущего сегмента, затем вводите желаемую длину. Выход из цикла - просто по эскейп. В принципе можно выводить еще номер текущего сегмента, или там вообще эти длины записать в таблицу в акаде, и также выделять ее мышкой после полилинии например.
Задачу сформулируйте более полно, не очень понятно, что у вас на выходе должно быть. Почему бы и не выложить пример результат в акаде?
Код:
[Выделить все]
Sub pline_append()

    Dim plineObj As AcadPolyline, i As Integer, mySset As AcadSelectionSet
    Dim FilterType(0) As Integer
    Dim FilterData(0) As Variant
    
    For i = ThisDrawing.SelectionSets.Count - 1 To 0 Step -1
        If ThisDrawing.SelectionSets.Item(i).Name = "q1" Then ThisDrawing.SelectionSets.Item(i).Delete
    Next i

    ThisDrawing.SelectionSets.Add ("q1")
    Set mySset = ThisDrawing.SelectionSets.Item("q1")
    FilterType(0) = 0
    FilterData(0) = "POLYLINE"
    mySset.SelectOnScreen FilterType, FilterData
        
          
    Set plineObj = mySset.Item(0)
      
    Dim newVertex(0 To 2) As Double, vrtPnt As Variant, k As Double, so As Double, s As Double
    Dim retCoord As Variant
    On Error GoTo m
    While True
            vrtPnt = ThisDrawing.Utility.GetPoint(, "введите точку")
            s0 = ThisDrawing.Utility.GetReal("Введите длину" & vbCrLf)
            retCoord = plineObj.Coordinates
            k = ((vrtPnt(0) - retCoord(UBound(retCoord) - 2)) ^ 2 + (vrtPnt(1) - retCoord(UBound(retCoord) - 1)) ^ 2) ^ 0.5 / s0
            vrtPnt(0) = retCoord(UBound(retCoord) - 2) + (vrtPnt(0) - retCoord(UBound(retCoord) - 2)) / k
            vrtPnt(1) = retCoord(UBound(retCoord) - 1) + (vrtPnt(1) - retCoord(UBound(retCoord) - 1)) / k
            plineObj.AppendVertex vrtPnt
    Wend
m:
Set plineObj = Nothing
End Sub
Dinoxromniy вне форума  
 
Непрочитано 14.12.2022, 10:52
#7
Дмитррр

НЛО
 
Регистрация: 09.07.2007
Тутошние мы.
Сообщений: 6,399


Цитата:
Сообщение от Shagezood Посмотреть сообщение
В идеале просто кликать мышкой и что бы полилиния откладывалась в направлениях, где был сделан клик
Можно же просто навестись мышкой на нужную точку, вбить с клавиатуры длину и нажать энтер. Получится нужный эффект, если я верно понял желаемое.
Нужны ли тут какие-то дополнительные макросы и прочие?
Дмитррр вне форума  
 
Непрочитано 14.12.2022, 10:59
#8
Dinoxromniy


 
Регистрация: 14.09.2020
Санкт-Петербург
Сообщений: 395


Цитата:
Сообщение от Дмитррр Посмотреть сообщение
Нужны ли тут какие-то дополнительные макросы и прочие?
Ну если речь о 6 точках - наверное не сильно, а если о 60 - быстрее код написать, чтобы он сам считал, какой участок сейчас вводим и какая длина этому участку соответствует.
Dinoxromniy вне форума  
 
Непрочитано 14.12.2022, 11:05
#9
Дмитррр

НЛО
 
Регистрация: 09.07.2007
Тутошние мы.
Сообщений: 6,399


И 60 проще вручную. Вот если 1000, то другое дело. Или 100 еженедельно.
Думаю, тут самый сложный вопрос с редактированием. Много манипуляций понадобится, чтобы изменить этот зигзаг, сохранив при этом расстояние между поворотами. Но автор, вроде, про редактирование не писал.
Дмитррр вне форума  
 
Непрочитано 14.12.2022, 11:15
#10
Dinoxromniy


 
Регистрация: 14.09.2020
Санкт-Петербург
Сообщений: 395


Цитата:
Сообщение от Дмитррр Посмотреть сообщение
И 60 проще вручную.
Тогда не нужен.
Dinoxromniy вне форума  
 
Непрочитано 14.12.2022, 11:17
#11
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


по-простому

Код:
[Выделить все]
 ;********************************************************************************************************************************************************

(defun c:fixed_segment_length_pline ( / pline_object)

	;*****************************************************************************************************************************************************

	(defun make_pline (vertices_list pline_object / pline_vertices_array)
    	(vlax-safearray-fill (setq pline_vertices_array (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length vertices_list)))))
							 vertices_list
		)
		(if (null pline_object)
				(setq pline_object (vla-addlightweightpolyline (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) pline_vertices_array))
				(vla-put-coordinates pline_object pline_vertices_array)
		)
		pline_object
	)

	;*****************************************************************************************************************************************************

	(defun crd (in_list)
		(reverse (cdr (reverse in_list)))
	)

	;*****************************************************************************************************************************************************

	(setq fixed_length (getreal "\nДлина линейного сегмента: "))
	(setq start_point (getpoint "\nНачало полилинии: "))
	(while t
		(setq next_point (getpoint start_point "\nСледующая вершина: "))
		(setq next_point (polar start_point (angle start_point next_point) fixed_length))
		(if (null pline_object)
			(setq vertices_list (append (crd start_point) (crd next_point)))
			(setq vertices_list (append (vlax-get pline_object 'coordinates) (crd next_point)))
		)
		(setq pline_object (make_pline vertices_list pline_object))
		(setq start_point next_point)
	)
)

;********************************************************************************************************************************************************
__________________
K Lisp

Последний раз редактировалось koMon, 14.12.2022 в 14:09.
koMon вне форума  
 
Непрочитано 17.12.2022, 21:32
#12
Игорь Богаченко

геодезист, генпланист
 
Регистрация: 26.09.2006
Калуш, Украина
Сообщений: 33
<phrase 1= Отправить сообщение для Игорь Богаченко с помощью Skype™


Цитата:
Сообщение от Shagezood Посмотреть сообщение
При построении линии заданного уклона (геодезия) было бы очень удобно прописать фиксированную длину каждого элемента полилинии и просто откладывать её мышкой, но никак не могу придумать как это сделать, помогите пожалуйста
https://beardyugin.com/ru/free-apps/

Increase Size Decrease Size Нажмите для просмотра
https://www.youtube.com/watch?v=FbRSEHdnlNg&t=4s
Игорь Богаченко вне форума  
 
Непрочитано 18.12.2022, 11:28
#13
Бим

пенсионер
 
Регистрация: 09.04.2018
Украина
Сообщений: 2,309


Цитата:
Сообщение от Shagezood Посмотреть сообщение
просто откладывать её мышкой
Вручную задача решается следующим образом. Из точки на горизонтали чертится окружность, с радиусом в ту фиксированную длину. Центр окружности соединяется с точкой пересечения со следующей горизонталью. Окружность переносится в точку пересечения. И т.д. до окончания склона... Решить это щелкая мышкой? Плюс еще горизонтали встречаются и другие, кроме основных. Может где в специализированных программах по канализации-гидравлике-горным дорогам оно и есть.

Последний раз редактировалось Бим, 18.12.2022 в 13:29.
Бим вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Откладывание полилинии фиксированной длины

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выносная линия фиксированной длины меняет длину при попадании точки привязки размера на блок vlad94 AutoCAD 1 27.04.2020 17:05
Экспорт в Excel длины всех участков полилинии Meddoks Программирование 22 09.09.2013 22:52
Как получить длины отрезков полилинии в текстовом виде Radio538 AutoCAD 13 06.08.2013 16:32
Внесение длины полилинии в атрибут angel-fear Программирование 2 15.07.2013 15:01
Лисп для вычисления длины полилинии со скруглениями CooL LISP 8 21.02.2007 17:14