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

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

LISP. Программа сопряжения отдельных сегментов полилиний или отрезков без объединения

Ответ
Поиск в этой теме
Непрочитано 09.02.2010, 13:37 #1
LISP. Программа сопряжения отдельных сегментов полилиний или отрезков без объединения
Profan
 
Москва
Регистрация: 25.12.2005
Сообщений: 13,627

Код:
[Выделить все]
 
;********** EXTFILLET.LSP *****************************************
; Программа сопряжения отдельных сегментов полилиний или отрезков
; с последующим преобразованием в отдельные сегменты полилиний.
; Автор Громов Владимир aka Profan 2010 г.
; Макрос для загрузки:
; ^C^C(if (not C:EXTFILLET (load "extfillet")) EXTFILLET
;
(defun C:EXTFILLET ( / echo rd ent1 ent2 )
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(if (null rds) (setq rds "0"))
(princ (strcat "\n Радиус сопряжения <" rds ">: "))
(setq rd (getint))
(if (= rd nil) (setq rd (atoi rds)) (setq rds (itoa rd)))
(vl-cmdf "_FILLET" "_r" rd)
(setq ent1 (car (entsel "\n Укажите 1 объект: ")))
(setq ent2 (car (entsel "\n Укажите 2 объект: ")))
(if  (and ent1 (= (cdr (assoc 0 (entget ent1))) "LWPOLYLINE"))
     (progn 
     (vl-cmdf "_explode" ent1)
     (setq ent1 (entlast))
     ) ; progn
) ; if
(if  (and ent2 (= (cdr (assoc 0 (entget ent2))) "LWPOLYLINE"))
     (progn 
     (vl-cmdf "_explode" ent2)
     (setq ent2 (entlast))
     ) ; progn
) ; if
(if (and ent1 ent2)
    (progn
    (vl-cmdf "_fillet" ent1 ent2)
    (cond
    ((= (getvar "PEDITACCEPT") 0)    (vl-cmdf "_pedit" "_M" "_L" ent1 ent2 "" "_Y" "_W" (getvar "PLINEWID") ""))
    ((= (getvar "PEDITACCEPT") 1)    (vl-cmdf "_pedit" "_M" "_L" ent1 ent2 "" "_W" (getvar "PLINEWID")  ""))
    ) ; cond
    ) ; progn
   (princ "\n Объекты не выбраны.")
) ; if
(setvar "CMDECHO" echo)
(princ)
)
(princ "\n Ввести в командной строке EXTFILLET")
Интересно, можно ли подавить сообщение, которое появляется при расчленении полилинии:
Цитата:
При расчленении этой полилинии потеряны сведения о ширине.
Их можно восстановить командой ОТМЕНИТЬ.
Просмотров: 12215
 
Непрочитано 09.02.2010, 13:44
#2
Кулик Алексей aka kpblc
Moderator

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


cmdecho, nomutt, menuecho...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.02.2010, 13:59
#3
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Не, не подавляется этот запрос.
Profan вне форума  
 
Непрочитано 09.02.2010, 14:10
#4
Дима_

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


1.
Цитата:
Сообщение от Profan Посмотреть сообщение
Интересно, можно ли подавить сообщение, которое появляется при расчленении полилинии:
Код:
[Выделить все]
(vla-explode (vlax-ename->vla-object ent1))
Честно говоря не очень всматривался - но если нужен список объектов после "расчлененки" то:
Код:
[Выделить все]
(mapcar 'vlax-vla-object->ename(vlax-safearray->list 
(vlax-variant-value (vla-explode (vlax-ename->vla-object ent1)))))
вернет его.
2. Не хватает (vl-load-com).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 09.02.2010, 14:26
#5
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Дима_, спасибо.
Получилось так:
Код:
[Выделить все]
 
;********** EXTFILLET.LSP *****************************************
; Программа сопряжения отдельных сегментов полилиний или отрезков
; с последующим преобразованием в отдельные сегменты полилиний.
; Автор Громов Владимир aka Profan 2010 г.
; Макрос для загрузки:
; ^C^C(if (not C:EXTFILLET (load "extfillet")) EXTFILLET
;
(defun C:EXTFILLET ( / echo rd ent1 ent2 )
(vl-load-com)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(if (null rds) (setq rds "0"))
(princ (strcat "\n Радиус сопряжения <" rds ">: "))
(setq rd (getint))
(if (= rd nil) (setq rd (atoi rds)) (setq rds (itoa rd)))
(vl-cmdf "_FILLET" "_r" rd)
(setq ent1 (car (entsel "\n Укажите 1 объект: ")))
(setq ent2 (car (entsel "\n Укажите 2 объект: ")))
(if  (and ent1 (= (cdr (assoc 0 (entget ent1))) "LWPOLYLINE"))
     (progn 
;    (vl-cmdf "_explode" ent1)
     (vla-explode (vlax-ename->vla-object ent1))
     (setq ent1 (entlast))
     ) ; progn
) ; if
(if  (and ent2 (= (cdr (assoc 0 (entget ent2))) "LWPOLYLINE"))
     (progn 
;    (vl-cmdf "_explode" ent2)
     (vla-explode (vlax-ename->vla-object ent2))
     (setq ent2 (entlast))
     ) ; progn
) ; if
(if (and ent1 ent2)
    (progn
    (vl-cmdf "_fillet" ent1 ent2)
    (cond
    ((= (getvar "PEDITACCEPT") 0)    (vl-cmdf "_pedit" "_M" "_L" ent1 ent2 "" "_Y" "_W" (getvar "PLINEWID") ""))
    ((= (getvar "PEDITACCEPT") 1)    (vl-cmdf "_pedit" "_M" "_L" ent1 ent2 "" "_W" (getvar "PLINEWID")  ""))
    ) ; cond
    ) ; progn
   (princ "\n Объекты не выбраны.")
) ; if
(setvar "CMDECHO" echo)
(princ)
)
(princ "\n Ввести в командной строке EXTFILLET")
Profan вне форума  
 
Непрочитано 10.02.2010, 04:21
#6
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Замечания (я не помню, какой вариант тестировал, а сейчас пишу в отсутствие автокада, так что воможна накладка)

1. Можно-ли сделать Multiple? Чтобы команда объединяла пары отрезков или полилиний пока не будет нажата ПК?
2. Если сопрягаемые объекты есть отрезки, то программа превращает их в полилинии и дает им ширину в соответствии с текущим Plinewid. Если сопрягаются полилинии, то они также преобретают новую ширину. Надо чтобы все оставалось как было до применения команды.
3. Можно-ли сделать так, чтобы команда Undo отменяла соединение последней пары, след Undo предпоследней и так далее? Ну или хотя-бы все до начала применения команды.

Последний раз редактировалось Vova, 10.02.2010 в 04:26.
Vova вне форума  
 
Автор темы   Непрочитано 10.02.2010, 11:44
#7
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Очередной вариант:
Код:
[Выделить все]
 
;********** EXTFILLET.LSP *****************************************
; Программа сопряжения отдельных сегментов полилиний или отрезков
; с последующим преобразованием в отдельные сегменты полилиний.
; Если сопрягаются отрезки, то ширина результирующих полилиний равна нулю.
; Если один из сопрягаемых объектов - полилиния, то результирующие полилинии
; приобретают ширину исходной полилинии.
; Автор Громов Владимир aka Profan 2010 г.
; Макрос для загрузки:
; ^C^C(if (not C:EXTFILLET (load "extfillet")) EXTFILLET
;
(defun C:EXTFILLET ( / echo flag rd ent1 ent2 widp)
(vl-load-com)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq flag T)
(while flag
     (if (null rds) (setq rds "0"))
     (princ (strcat "\n Радиус сопряжения <" rds "> : "))
     (setq rd (getreal))
     (if (= rd nil) (setq rd (atof rds)) (setq rds (rtos rd)))
     (vl-cmdf "_FILLET" "_r" rd)
     (setq ent1 (car (entsel "\n Укажите 1 объект (Enter-Отказ): ")))
     (if (= ent1 nil) (setq flag nil))
     (if ent1
          (progn
          (setq ent2 (car (entsel "\n Укажите 2 объект: ")))
          (vl-cmdf "_UNDO" "_BE")
          (if  (and ent1 ent2 (= (cdr (assoc 0 (entget ent1))) "LWPOLYLINE"))
               (progn
               (setq widp  (cdr (assoc 43 (entget ent1))))
               (vl-cmdf "_explode" ent1)
               ;(vla-explode (vlax-ename->vla-object ent1)))
               (setq ent1 (entlast))
               ) ; progn
          ) ; if
          (if  (and ent2 (= (cdr (assoc 0 (entget ent2))) "LWPOLYLINE"))
               (progn
               (setq widp  (cdr (assoc 43 (entget ent2))))
               (vl-cmdf "_explode" ent2)
               ;(vla-explode (vlax-ename->vla-object ent2)))
               (setq ent2 (entlast))
               ) ; progn
          ) ; if
          (if (and ent1 ent2)
              (progn
              (if (= widp nil) (setq widp 0))
              (vl-cmdf "_fillet" ent1 ent2)
              (cond
              ((= (getvar "PEDITACCEPT") 0)    (vl-cmdf "_pedit" "_M" "_L" ent1 ent2 "" "_Y" "_W" widp ""))
              ((= (getvar "PEDITACCEPT") 1)    (vl-cmdf "_pedit" "_M" "_L" ent1 ent2 "" "_W" widp  ""))
              ) ; cond
             (vl-cmdf "_UNDO" "_E")
             ) ; progn
            (princ "\n Объекты не выбраны.")
     ) ; if
     )) ; progn if
) ;  while
(setvar "CMDECHO" echo)
(princ)
)
(princ "\n Ввести в командной строке EXTFILLET")
Недостаточно еще у меня опыта работы с VLA-объектами. Если задействовать в коде строку:
Код:
[Выделить все]
 
(vla-explode (vlax-ename->vla-object ent1))
то при попытке повторного сопряжения уже сопряженных элементов происходит наложение объектов друг на друга.
Profan вне форума  
 
Непрочитано 10.02.2010, 12:27
#8
Дима_

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


Я бы может подсказал - но убейте не пойму что должна делать программа?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 10.02.2010, 12:31
#9
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Ладно, не забивай голову.
Profan вне форума  
 
Непрочитано 10.02.2010, 16:29
#10
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Дима, программу заказал я, поэтому поясню. Мне надо чтобы полилинии филетились/чамферились без обьединения в единую полилинию. (стандартные команды их объединяют). До автокада 2010 я пользовался старой экспрессовской командой Exfillet. Здесь она перестала работать. Profan делает ей альтернативу. Начальная тема по этому вопросу ЗДЕСЬ стр 2,3

Последний вариант уже ближе к тому, что хотелось-бы.
1. Можно-ли "хайдлайтать" помечаемые объекты?-делать их пунктирными?
2. Сейчас объекты соединяются попарно, но через запрос о радиусе. Можно-ли задать радиус единожды, в начале, а потом непрерывно щелкать по каждому из пары, как это сделано в штатной команде при опции М?
3. Undo также сейчас реагирует на промежуточный шаг, то есть отменяет пару через раз, а лучше-бы на каждый раз.
4. Можно-ли соединяемые отрезки не превращать в полилинию?

Последний раз редактировалось Vova, 10.02.2010 в 23:32.
Vova вне форума  
 
Автор темы   Непрочитано 12.02.2010, 09:20
#11
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Очередной вариант на русском языке. Vova, в соответствующей теме я выложил код на английском языке.
Код:
[Выделить все]
 
;********** EXTFILLET.LSP *****************************************
; Программа сопряжения отдельных сегментов полилиний или отрезков
; с последующим преобразованием в отдельные сегменты полилиний.
; Если сопрягаются отрезки, то ширина результирующих полилиний равна нулю.
; Если один из сопрягаемых объектов - полилиния, то результирующие полилинии
; приобретают ширину исходной полилинии, указанной второй.
; Автор Громов Владимир aka Profan 2010 г.
;
; Макрос для загрузки:
; ^C^C(if (not C:EXTFILLET (load "extfillet")) EXTFILLET
;
(defun C:EXTFILLET ( / echo flag rd ent1 ent2 widp)
(vl-load-com)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq flag T)
(while flag
(if (not ido) (setq ido "plin"))
(if (= ido "lin") (princ " ОТРЕЗКИ. ")) (if (= ido "plin") (princ "ПОЛИЛИНИИ. "))
(princ (strcat "Текущий радиус сопряжения = " (rtos (getvar "FILLETRAD"))))
(initget "Радиус Отрезки полиЛинии")
(setq ent1  (entsel "\n Укажите 1 объект [Радиус/Отрезки/полиЛинии] (Enter-Отказ): "))
     (if (= ent1 "Радиус")
         (progn
         (if (null rds) (setq rds "0"))
         (princ (strcat "\n Радиус сопряжения <" rds "> : "))
         (setq rd (getreal))
         (if (= rd nil) (setq rd (atof rds)) (setq rds (rtos rd)))
         (vl-cmdf "_FILLET" "_r" rd)
         ) ; progn
         (progn
         (if (= ent1 nil) (setq flag nil))
         (cond
         ((= ent1 "Отрезки") (setq ido "lin"))
         ((= ent1 "полиЛинии") (setq ido "plin"))
         )
         (if (= (type ent1) 'LIST)
             (progn
             (setq ent1 (car ent1))
             (redraw ent1 3)
             (setq ent2 (car (entsel "\n Укажите 2 объект: ")))
             (princ "\n")
             (if(eq ent1 ent2) 
                (progn
                (redraw ent1 4) (princ "\nОШИБКА! Указан дважды один и тот же объект! ")
         ) ; progn
         (progn
                (vl-cmdf "_UNDO" "_BE")
                (if (and ent1 ent2 (= (cdr (assoc 0 (entget ent1))) "LWPOLYLINE"))
                    (progn
                    (setq widp  (cdr (assoc 43 (entget ent1))))
                    (vla-explode (vlax-ename->vla-object ent1))
                    (vl-cmdf "_erase" ent1 "")  
                    (setq ent1 (entlast))                                                              
                    ) ; progn
                ) ; if
                (if (and ent2 (= (cdr (assoc 0 (entget ent2))) "LWPOLYLINE"))
                    (progn
                    (setq widp  (cdr (assoc 43 (entget ent2))))
                    (vla-explode (vlax-ename->vla-object ent2))
                    (vl-cmdf "_erase" ent2 "")
                    (setq ent2 (entlast))
                    ) ; progn
                ) ; if
                (if (and ent1 ent2)
                    (progn
                    (if (= widp nil) (setq widp 0))
                    (if (or (= ido "lin") (= ido "plin")) (vl-cmdf "_fillet" ent1 ent2))
                    (redraw ent1 4)
                    (if (= ido "plin")
                        (progn
                        (cond
                        ((= (getvar "PEDITACCEPT") 0) (vl-cmdf "_pedit" "_M" "_L" ent1 ent2 "" "_Y" "_W" widp ""))
                        ((= (getvar "PEDITACCEPT") 1) (vl-cmdf "_pedit" "_M" "_L" ent1 ent2 "" "_W" widp  ""))
                        ) ; cond
                    )) ; progn if
                    (vl-cmdf "_UNDO" "_E")
                    ) ; progn
                    (progn
                    (redraw ent1 4)
                    (princ "\n Объекты не выбраны.")
                    ) ; progn
                ) ; if
             )) ; progn if
         )) ; progn if
     )) ; progn if
) ;  while
(setvar "CMDECHO" echo)
(princ)
)
(princ "\n Ввести в командной строке EXTFILLET")

Последний раз редактировалось Profan, 18.02.2010 в 14:26.
Profan вне форума  
 
Непрочитано 13.02.2010, 06:18
#12
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Замечания:
1. Зачем отрезки превращаются в полилинии? Я который раз прошу не превращать. Возможно, это сделано специально по чьему-то заказу, но какая в этом сермяжная правда? Ведь на линиях не написано, что они-полилиния и визуально не отличаются от отрезков. Если применить к ним обычный филет/чамфер то они объединятся, против чего и заказана программа, то есть за что боролись (не объединять) на то и напоролись. Или невозможно не объединять?
2. Наблюдается странное поведение Draworder. На моих схемах много блоков с wipeout, нанизанных на линии и скрывающих собой часть линии. Если эта линия есть отрезок, то после офилечивания с другой блок остается сверху. Если-же это полилиния, то она выпрыгивает наверх блока. Можно-ли сделать так, чтобы порядок сохранялся, как в обычном fillet?
В остальном программа делается все лучше и лучше.

И еще. Когда-то горячо спорили, чем лучше рисовать, отрезками или полилиниями. Для любителей полилиний, а их много, и была придумана программа , рисующая раздельные полилинии, автор которой Владимир Громов. Но сказав "A" надо сказать и "B", то есть сделать Chamfer и Fillet, не объединяющие полилинии в непрерывную. Это и делает сейчас Profan, но почему-то никто больше не подключается к тестированию.
Vova вне форума  
 
Автор темы   Непрочитано 13.02.2010, 08:53
#13
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Vova, ты, наверное, какую-то другую программу испытывал, потому что в моей программе сегменты полилиний НЕ ОБЪЕДИНЯЮТСЯ в общую полилинию. Сейчас у меня предусмотрен выбор - что нужно заиметь после сопряжения - отрезки в любом случае или полилинии в любом случае? В любом - потому что вдруг окажется, что при сопряжении один объект - отрезок, а другой - полилиния. Мне показалось, что в этом плане моя программа более развита, чем EXFILLET из старых Express Tools (если отбросить несущественную в данном случае возможность сопрягать в той программе и другие объекты, помимо отрезков и полилиний). Но именно оттуда я взял этот способ - для того, чтобы дуговой элемент сопряжения в отдельных ПОЛИЛИНИЯХ не объединял объекты в общую полилинию, исходные объекты преобразуются в отрезки простым расчленением (explode). Но после сопряжения-то надо же все опять превратить в полилинии, включая и дуговой сегмент. В таком случае моя программа как раз и является логическим продолжением программы, которая строит последовательность независимых сегментов полилиний. С другой стороны, если сейчас ты все чертишь отрезками, то программа из этой темы тебе на фиг не нужна, используй стандартные команды AutoCAD.
Вообще-то, я думал добавить сюда еще и опцию объединения отдельных отрезков после сопряжения и преобразования в общую полилинию. Мало ли, у кого-то когда-то некие линии связи были начерчены отрезками, но потом он решил перейти на отрисовку полилиниями.
Возвращаюсь к началу. Уточни, пожалуйста, почему ты пишешь о том, что за что боролись, на то и напоролись? У тебя действительно конечные сопряженные полилинии объединяются в одну общую? Не верится мне в это, я проверял программу в разных версиях AutoCAD, включая 2010.
Еще один момент. Сомневаясь в том, может ли твой AutoCAD выводить на экран запросы на русском языке, я попытался перевести эти запросы на английский язык и выложил этот вариант здесь:
http://forum.dwg.ru/showthread.php?t=47047&page=2
Отмечу дополнительно - именно из-за неопределенности типа исходных объектов (отрезок или полилиния) и возможного их хаотичного чередования я и предусмотрел две опции - получить окончательный результат в виде полилиний (по умолчанию) или в виде отрезков и дуг.
Почему никто больше не подключается? Да потому, наверное, что это частная проблема, такие электротехнические схемы только ты чертишь, я же ввязался в эту проблему потому, что эта программа в какой-то мере дополняет пакет других моих программ для слаботочных систем.
Напоследок отмечу еще, что моя программа несовершенна, ее можно раскритиковать по разным критериям, однако, она вполне работоспособна. Если бы это все происходило лет 15 назад, когда программирование на AutoLisp мне снилось даже по ночам, - вот тогда я мог бы добиваться такой законченности и универсальности, как VVA с его PLTOOLS.

Последний раз редактировалось Profan, 13.02.2010 в 09:37.
Profan вне форума  
 
Непрочитано 13.02.2010, 17:17
#14
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от Profan Посмотреть сообщение
Vova, ты, наверное, какую-то другую программу испытывал, потому что в моей программе сегменты полилиний НЕ ОБЪЕДИНЯЮТСЯ в общую полилинию.
Но я написал
Цитата:
Сообщение от Vova Посмотреть сообщение
Ведь на линиях не написано, что они-полилиния и визуально не отличаются от отрезков. Если применить к ним обычный филет/чамфер то они объединятся,
То есть, видя на чертеже тонкую линию, я, думая что это отрезок, механически лезу к ближайшей кнопке, а она оказывается обычным филетом. Или просто набираю на клаве букву F. А оказывается, нужно в голове держать что работать с чертежом можно только командой Extfillet.

Цитата:
Сообщение от Profan Посмотреть сообщение
Сейчас у меня предусмотрен выбор - что нужно заиметь после сопряжения - отрезки в любом случае или полилинии в любом случае?
Имеются в виду опции Radius/Line/Polilyne? Из них работает только Polyline, и то по умолчанию. Если выбрать Line, то сразу выделяется последний нарисованный отрезок. А если я его нарисовал вчера, а сегодня открыл файл и его не вижу на экране? Программа просит указать второй отрезок. Приходится сбрасывать команду и начинать сначала. Программа кстати, не снимает выделения по Esc, а только по Regen, то есть, если раздумал филетить, надо регенерировать. Но и посли опции Line в результате получаем полилинии
Проблема с Draworder остается
Vova вне форума  
 
Автор темы   Непрочитано 13.02.2010, 18:14
#15
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Цитата:
Имеются в виду опции Radius/Line/Polilyne? Из них работает только Polyline, и то по умолчанию. Если выбрать Line, то сразу выделяется последний нарисованный отрезок. А если я его нарисовал вчера, а сегодня открыл файл и его не вижу на экране? Программа просит указать второй отрезок. Приходится сбрасывать команду и начинать сначала. Программа кстати, не снимает выделения по Esc, а только по Regen, то есть, если раздумал филетить, надо регенерировать. Но и посли опции Line в результате получаем полилинии
А вот это уже серьезно. Если посмотреть русский код программы, то можно заметить, что в запросе в командной строке (и, соответственно, появляется в контекстном меню) написано полиЛиния. Дело в том, что при написании Полилиния контекстное меню не срабатывает корректно, все линии остаются отрезками. Точно так же не срабатывает и при написании Плиния. Не знаю, почему так происходит, но происходит во всех версиях AutoCAD'а. Поэтому и пришлось написать полиЛиния. Возможно, в английской версии происходит нечто подобное с Line. Я, конечно, не проверял работу программы в английском AutoCAD'е, не было его под рукой. Придется установить английскую версию и проверить работу программы. Но нужно время.
А про DRAWORDER мне нечего сказать, не знаю, что там у тебя происходит.

Последний раз редактировалось Profan, 18.02.2010 в 14:28.
Profan вне форума  
 
Непрочитано 29.03.2010, 12:19
#16
roman56

инженер строитель
 
Регистрация: 01.03.2007
ISRAEL
Сообщений: 39


Profan
Спасибо за вашу работу и затраченное время.
Филет все подряд и не требует дополнительных действий по подготовке к fillet, что порой раздражает.
Заметил один недостаток в работе с вашим лиспом:
при выборе элемента с короткой стороны, он его филет всегда только с длиной.
Желательно исправить этот недочет
Прилагаю маленький файл, в котором я попытался объяснить мою проблему

Заранее благодарен
Вложения
Тип файла: dwg
DWG 2000
Drawing1.dwg (33.1 Кб, 2038 просмотров)
roman56 вне форума  
 
Автор темы   Непрочитано 29.03.2010, 12:30
#17
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Программа не предназначена для сопряжения произвольных пересекающихся объектов.
Profan вне форума  
 
Непрочитано 29.03.2010, 15:38
#18
VVA

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


roman56, Попробуй EXFILLET из ранних Express Tools
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 30.03.2010, 09:46
#19
roman56

инженер строитель
 
Регистрация: 01.03.2007
ISRAEL
Сообщений: 39


VVA
Володя, спасибо, что ответили.
К сожелению, я уже тестировал этот лисп (даже исправленный Вами) - не хочет филить все: спотыкается. Приходится делать Explode и после этого филить.
Согласитесь, это не совсем удобно.
По этой причине (и не только), я стараюсь работать только с Line. Но приходиться работать и с другими чертежами - от других фирм и ленивых архитекторов.
В них такой балаган, что тратишь уйму времени, чтобы привести его к своему стандарту (как я его понимаю).
Эта проблема тянется еще с 12 акада. Я пытался ее решить сам и как-то улучшил положение, но не до конца.
Потом появился Exfillet- но, опять остались проблемы.
Меня очень заинтересовал лисп от Profan
В нем есть положительные качества:
1. Филит все подряд
2. Не соединяет элементы после филита
3. Оставляет все на своих слоях
Но есть и отрицательные качества:
1. Не филит в заданную сторону
2. Переводит элементы в полилинию
Я думаю, не только у меня возникают такие проблемы.
И (зная Ваши возможности) я обращаюсь к Вам, Володя, помогите "прогрессивному человечеству" справиться с этой задачей.
Напишите пожалуйста лисп, который поможет нам нисмотря не на какие версии акад
С уважением roman
P.S.
Да простят меня священные модераторы, хочу задать Вам еще один вопрос, на который не нашел ответа на форуме. Существует ли что-то, что увеличело бы количество откатов при Zoom Previous ?
roman56 вне форума  
 
Автор темы   Непрочитано 30.03.2010, 09:52
#20
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


roman56, моя программа является логическим продолжением программ, описанных здесь:
http://forum.dwg.ru/showthread.php?t=30439
Это программы для отрисовки разных сетей и схем. У тебя другие задачи, соответственно, и подход к программе должен быть другой. В этой теме не надо выставлять нехарактерные требования к моей программе.
Profan вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > LISP. Программа сопряжения отдельных сегментов полилиний или отрезков без объединения

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Google SketсhUp в помощь архитекторам. Как и где приобрести программу? Igla Прочее. Программное обеспечение 14 03.07.2009 17:02
ответственность за проектную документацию zaza-noza Организация проектирования и оформление документации 3 07.03.2008 09:54
Фундамент с динамическими нагрузками в Scad Tlelaxu SCAD 9 31.08.2007 10:44