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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Доработать код

Доработать код

Закрытая тема
Поиск в этой теме
Непрочитано 16.06.2009, 10:23 #1
Доработать код
vovkam
 
Регистрация: 11.06.2009
Сообщений: 29

Вопрос в следующем.
Нужно дугу заменить отрезками или полилинией. Как это лучше сделать?

Последний раз редактировалось vovkam, 17.06.2009 в 18:27.
Просмотров: 2787
 
Непрочитано 16.06.2009, 10:32
#2
Солидворкер
Moderator

Конструктор (машиностроение)
 
Регистрация: 23.10.2006
Россия
Сообщений: 23,268
<phrase 1=


На переименование темы 24 часа, название должно отражать суть вопроса!
полИлинии, кстати
Солидворкер вне форума  
 
Непрочитано 16.06.2009, 10:32
#3
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,923
<phrase 1=


поюзать поиск по форуму
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 16.06.2009, 11:19
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


vovkam, Рядом есть тема. Одна из команд
ConvTo2d -Преобразование линейных объектов в 2D полилинии
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.06.2009, 13:56
#5
Дима_

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


Ну как-то так:
Код:
[Выделить все]
(vl-load-com)
(defun cod (cd obj) ; возращает код cd примитива obj.
(if (and obj (= (type obj) 'ename))
(cdr (assoc cd (entget obj)))
));end of cod
(defun pln (lst c); создает полилинию по списку вершин lst, c - nil/T - разомкн/замкнт или '(с слой цвет).
(entmakex (append
(list (cons 0 "LWPOLYLINE")(cons 100 "AcDbEntity")(cons 100 "AcDbPolyline") (cons 90 (length lst)))
(if (= (type c) 'list)
(vl-remove nil (list
(if (car c) (cons 70 1) (cons 70 0))
(if (cadr c) (cons 8 (cadr c)))
(if (caddr c) (cons 62 (caddr c)))
));end of list & vl-remove
(list (if c (cons 70 1) (cons 70 0)))
);end of if
(mapcar '(lambda (x) (cons 10 x)) lst)
));end of apend & entmakex
);end of pln
(defun arctopl (obj count / a1 step lst); obj - дуга, count - количество сегментов полилинии.
(if (and (= (cod 0 obj) "ARC") (> count 0) (= (type count) 'int))
(progn
(setq
step (/ (- (if (> (cod 50 obj) (cod 51 obj)) (+ (cod 51 obj) (* 2 pi)) (cod 51 obj)) (cod 50 obj)) count)
a1 (cod 50 obj)
);end of setq
(repeat (1+ count)
(setq lst (append lst (list (polar (cod 10 obj) a1 (cod 40 obj)))) a1 (+ a1 step))
);end of repeat
(pln lst nil)
));end of progn & if 
);end of arctopl
Пример запуска:
Код:
[Выделить все]
(arctopl (entlast) 10)
- создаст полилинию по последнему объекту (если это дуга) из 10 сегментов, если-же нужно чтоб сегменты были заданной длинны (точнее максимально близко к этому значению), то как вариант:
Код:
[Выделить все]
(arctopl  (entlast) (fix (/ (vla-get-arclength (vlax-ename->vla-object 
(entlast))) 10)))
сегмент около 10 мм.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 17.06.2009, 17:21
#6
vovkam


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


Есть код. Не могу его доработать.
Нужно дозамкнуть полилинию. 8/
Код:
[Выделить все]
;  - имя файла - (load "C:\\DataBase\\AutoCad\\ЧертежиРазвертокLSP\\Интерполяция_LSP\\P230031.lsp")

; построение развертки конуса:

(command "_rectang" "0,0" "7746,1203" " ")
(setq name0 (entlast))
(command "_point" "_none" "15,101")					
(command "_arc" "_none" "15,101" "_none" "_C" "3873,81398" "_none" "_L" "7716")
(command "_divide" (entlast) 38)
(command "_point" "_none" "7731,101")
(setq le1 (entget (setq name1 (entnext))))
(setq name2 name1)
(while (/= (cdr (assoc 0 le1)) "POINT")
  (setq name1 name2)
  (setq le1 (entget (setq name2 (entnext name1))))
)   ; конец while

(command "_pline" (cdr (assoc 10 le1)))     ;первая точка

(setq i 1)

(setq name1 name2)
(setq le2 (entget (setq name2 (entnext name1))))
(entdel name1)

(while (< i 39)
  (if (= (cdr (assoc 0 le2)) "POINT")
    (progn
      (command (cdr (assoc 10 le2)))
      (entdel name1)
      (setq i (1+ i))
    )   ; конец progn
  ) ; конец if
  (setq name1 name2)
  (setq le2 (entget (setq name2 (entnext name1))))
)   ; конец while

(setq le1 (entget name1))
(entdel name1)
(command)
(command)

(command "_point" "_none" "67,1193")
(command "_arc" "_none" "67,1193" "_none" "_C" "3873,81398" "_none" "_L" "7612")
(command "_divide" (entlast) 38)
(command "_point" "_none" "7627,1193")
(setq le1 (entget (setq name1 (entlast))))
(setq le1 (entget (setq name1 (entnext))))
(setq name2 name1)
(while (/= (cdr (assoc 0 le1)) "POINT")
  (setq le1 (entget (setq name1 name2)))
  (setq le1 (entget (setq name2 (entnext name1))))
)   ; конец while

(command "_pline" (cdr (assoc 10 le1)))     ;первая точка
(setq name1 name2)
(setq le1 (entget name1))
(entdel name1)

(setq i 1)

(setq le2 (entget (setq name2 (entnext name1))))
(while (< i 39)
  (if (= (cdr (assoc 0 le2)) "POINT")
    (progn
      (command (cdr (assoc 10 le2)))
      (entdel name1)
      (setq i (1+ i))
    )   ; конец progn
  ) ; конец if
  (setq name1 name2)
  (setq le2 (entget (setq name2 (entnext name1))))
)   ; конец while

(setq le1 (entget name1))
(entdel name1)
(command)
(command)

(command "_line" "_none" "15,101" "_none" "67,1193" "")

(command "_line" "_none" "7731,101" "_none" "7679,1193" "")

(entlast)
(setq name1 (entnext name0))
(cdr (assoc 0 (setq le1 (entget name1))))
(setq name2 (entnext name1))
(cdr (assoc 0 (setq le2 (entget name2))))
(setq name3 (entnext name2))
(cdr (assoc 0 (setq le3 (entget name3))))
(setq name4 (entnext name3))
(cdr (assoc 0 (setq le4 (entget name4))))
(command "_pedit" name1 "_J" name2 name3 name4 "" "")

(command "_zoom" "_all")

(command "_text" "_S" "" "3123,501.5" "200" "" "P230031" "" "")	

(command "_save" "C:\\DataBase\\AutoCad\\ЧертежиРазвертокLSP\\Интерполяция_DWG\\P230031.dwg")	
(command "_Y" "")

Последний раз редактировалось vovkam, 17.06.2009 в 18:25.
vovkam вне форума  
 
Непрочитано 17.06.2009, 21:43
#7
Кулик Алексей aka kpblc
Moderator

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


Формально название было изменено. По сути - ничего не изменилось. Тема закрыта принудительно. С новыми предложениями - в личку модераторам или "жаловаться" на собственное первое сообщение.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Доработать код

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбивка на захватки в ППР на устройство инженерных коммуникаций. Silent77 Технология и организация строительства 1 01.07.2009 09:33
Разбивка криволнейной линии на равные участки Святослав_ Вертикальные решения на базе AutoCAD 4 12.01.2009 08:02
Разбивка на логические диски proekt_mep Разное 38 01.06.2008 21:02
Разбивка монолитного перекрытия на захватки. nookie Железобетонные конструкции 9 05.03.2008 14:06
Разбивка на грузовые площади MegaPascal Прочее. Архитектура и строительство 25 05.04.2007 14:17