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

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

Отложить на ломаной кривой (сегменты состоят из отрезков) линию нужной длины.

Ответ
Поиск в этой теме
Непрочитано 22.03.2012, 09:24 #1
Отложить на ломаной кривой (сегменты состоят из отрезков) линию нужной длины.
khanter72rus
 
Регистрация: 08.09.2010
Сообщений: 43

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

Последний раз редактировалось khanter72rus, 22.03.2012 в 10:03. Причина: + к вежливости =)
Просмотров: 3479
 
Непрочитано 22.03.2012, 09:55
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833


Цитата:
Сообщение от khanter72rus Посмотреть сообщение
Хочу
Откладывай, кто мешает-то?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.03.2012, 10:03
#3
khanter72rus


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


Крыс помоги. Я исправился.
khanter72rus вне форума  
 
Непрочитано 22.03.2012, 10:41
#4
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,336


скопировать линию на линию.
разорвать копию линии в нужной точке
применить команду _lengthen _t и задать длину.
Хмурый вне форума  
 
Непрочитано 22.03.2012, 15:45
#5
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Пробуй. С дуговыми сегментами не проверял, но судя по
Цитата:
(сегменты состоят из отрезков)
оно и не нужно
Код:
[Выделить все]
(defun C:TEST ()
    (vl-load-com)

(setq pline (vlax-ename->vla-object (car(entsel))))
(setq par1
       (vlax-curve-getParamAtPoint pline
       (vlax-curve-getClosestPointTo pline (setq pt1(getpoint "\n1-я ТОчка на кривой: ")))
         )
      )
(setq par2
       (vlax-curve-getParamAtPoint pline
       (vlax-curve-getClosestPointTo pline (getpoint pt1 "\n2-я точка на кривой (направление): "))
         )
      )
(setq dist (getdist "\nДлина: "))
(if (> par2 par1)
  (setq par2
  (vlax-curve-getParamAtDist pline
  (+
  (vlax-curve-getDistAtParam pline par1)
  dist
  )
    )
        )
  (setq par2
  (vlax-curve-getParamAtDist pline
  (-
  (vlax-curve-getDistAtParam pline par1)
  dist
  )
    )
        )
  )
;;;  (vla-Highlight
;;;    (CopySegments pline (setq params (list par1 par2)))
;;;    :vlax-true
;;;  )
    (sssetfirst nil
      (ssadd
        (vlax-vla-object->ename
          (CopySegments pline (setq params (list par1 par2)))
          )
        )
      )

  )

(defun CopySegments (pline params / nor space tmp copy)
;; Arguments
;; pline : the source polyline (vla-object)
;; params ; the index list of segment to be copied
;;
;; Return
;; created polylines

  (vl-load-com)
  (or *acdoc*
      (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
  )
  (setq	params (vl-sort params '<)
	nor    (vlax-get pline 'Normal)
	space  (vla-ObjectIDToObject *acdoc* (vla-get-OwnerID pline))
  )
    (setq tmp (list(setq i(car params))))
    (while (< (setq i (fix(1+ i)))(cadr params))
      (setq tmp (cons i tmp))
      )
    (setq tmp (reverse(cons (cadr params) tmp)))
    (setq
      pts
       (vl-remove nil
		  (mapcar
		    (function
		      (lambda (pa / pt)
			(if (setq pt (vlax-curve-getPointAtParam pline pa))
			  ((lambda (p)
			     (list (car p) (cadr p))
			   )
			    (trans pt 0 nor)
			  )
			)
		      )
		    )
		    tmp
		  )
       )
    )
    (setq copy
	   (vlax-invoke
	     space
	     'addLightWeightPolyline
	     (apply 'append pts)
	   )
    )
  (foreach p tmp
      (vla-setBulge
	copy
	(vl-position p tmp)
	(vla-getBulge pline p)
      )
      (vla-getWidth pline p 'swid 'ewid)
      (vla-setWidth copy (vl-position p tmp) swid ewid)
    )
  
    (foreach prop '(Elevation	    Layer	    Linetype
		    LinetypeGeneration		    LinetypeScale
		    Lineweight	    Normal	    Thickness
		    TrueColor
		   )
      (if (vlax-property-available-p pline prop)
	(vlax-put copy prop (vlax-get pline prop))
      )
    )
    copy
)
Без всяких проверок (габариты полилинии, блокировка слоев и т.п.)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 23.03.2012 в 10:25. Причина: Теперь по русски
VVA вне форума  
 
Автор темы   Непрочитано 23.03.2012, 07:33
#6
khanter72rus


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


(setq pt1(getpoint "\n1-ÿ Òî÷êà íà ïîëèëèíèè: "))) Я не понимаю чего ему нужно =) Набираю _TEST просит выделить объект, а потом вот это.
khanter72rus вне форума  
 
Непрочитано 23.03.2012, 10:32
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


khanter72rus, Обновил #5
Заодно нашел у себя еще пару ссылок
http://forum.dwg.ru/showthread.php?p=281928#post281928
http://forum.dwg.ru/showthread.php?p=817520#post817520
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Отложить на ломаной кривой (сегменты состоят из отрезков) линию нужной длины.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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