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

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

Как програмно вырезать часть линии в указанной точке

Ответ
Поиск в этой теме
Непрочитано 28.10.2011, 15:31 #1
Как програмно вырезать часть линии в указанной точке
bambrenus
 
Конструктор самоучка
 
Регистрация: 16.10.2007
Сообщений: 29

Доброго времени суток.

Необходимо разделить линию или дугу в указанной точке на 2 части с зазором в 1 мм. В Автокаде это можно выполнить с пощью операции TRIM, а как это выглядит програмно?
Просмотров: 3634
 
Непрочитано 28.10.2011, 15:38
#2
Кулик Алексей aka kpblc
Moderator

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


На каком языке программируешь? Приложение загружается внутрь AutoCAD или работает снаружи, используя AutoCAD как СОМ-сервер?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.10.2011, 15:43
#3
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Програмно можно по всякому (можно и ту же команду вызвать) - а в общем вычислешь "координаты разрыва", затем одну линию (дугу) укорачиваешь, вторую подрисовываешь.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 28.10.2011, 15:50
#4
bambrenus

Конструктор самоучка
 
Регистрация: 16.10.2007
Сообщений: 29


Пробую программировать на Lisp
bambrenus вне форума  
 
Непрочитано 28.10.2011, 16:14
#5
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Если делать "по хорошему" - тебе понадобятся функции subst, entmod, entmake + небольшие знания в геометрии (векторах - если подразумеваются "трехмерные" линии или дуги) - не будет получатся - выкладывай что есть - подскажем.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 28.10.2011, 16:39
#6
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от bambrenus Посмотреть сообщение
Необходимо разделить линию или дугу в указанной точке на 2 части с зазором в 1 мм. В Автокаде это можно выполнить с пощью операции TRIM
не трим, а брейк
самый простой, кажется, вариант:
Код:
[Выделить все]
 (defun c:br ( / en os pt offset dist p1 p2)
(setq en (vlax-ename->vla-object (car (entsel "\nУкажите разрываемый объект: "))))
(setq pt (getpoint "\nУкажите точку разрыва: "))
(setq os (getvar 'osmode))
(setq offset 1.0)
(setq dist (vlax-curve-getDistAtPoint en pt))
(setq p1 (vlax-curve-getPointAtDist en (+ dist offset)))
(setq p2 (vlax-curve-getPointAtDist en (- dist offset)))
(setvar 'osmode 0)
(command "_break" (vlax-vla-object->ename en) "_f" p1 p2)
(setvar 'osmode os)
)
gomer вне форума  
 
Непрочитано 29.10.2011, 00:11
#7
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


To Gomer vlax-curve... с e'name не хуже чем с vla работает - зря туда сюда гоняешь.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 29.10.2011, 13:23
#8
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
vlax-curve... с e'name не хуже чем с vla работает - зря туда сюда гоняешь.
э... ну тем более... стандартный улучшайзер первого левела... но... ни хрена не работает в акаде а в брикскаде работает
Код:
[Выделить все]
  (defun c:br ( / en os pt offset dist *error*)
  (defun *error* ( msg)
	(if (member (strcase msg T) '("function cancelled" "console break" "quit / exit abort"))
	  (princ "\nВыход по требованию")
	  (princ (strcat "\nОшибка: " (itoa (getvar 'errno))))
	)
	(if os (setvar 'osmode  os))
	(if cm (setvar 'cmdecho cm))
	(princ)
  )
  (if (and (setq en (car (entsel "\nУкажите разрываемый объект: ")))
		   (setq pt (getpoint "\nУкажите точку разрыва: "))
	)
	(progn
	  (setq
		offset 1.0
		os (getvar 'osmode)
		cm (getvar 'cmdecho)
		dist (vlax-curve-getDistAtPoint en pt)
	  )
	  (setvar 'osmode  0)
	  (setvar 'cmdecho 0)
	  (command
		"_.break"
		en
		"_f"
		(vlax-curve-getPointAtDist en (+ dist offset))
		(vlax-curve-getPointAtDist en (- dist offset))
	  )
	  (setvar 'osmode  os)
	  (setvar 'cmdecho cm)
	)
  )
  (princ)
)
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как програмно вырезать часть линии в указанной точке



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вырезать часть генплана? zesli AutoCAD 8 17.03.2011 13:09
как убрать часть линии автокад 2000? На100ящая AutoCAD 3 10.05.2008 23:14
Как сгладить 2 линии. Или как сгладить только часть линии. Димас AutoCAD 3 14.03.2006 08:28
Как сделать часть линии пунктиром Димас AutoCAD 16 03.02.2006 09:31
Загрузка типа линии из макроса Кулик Алексей aka kpblc Программирование 4 24.01.2005 14:57