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

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

Отрисовка дуги на пересечении линий.

Ответ
Поиск в этой теме
Непрочитано 06.05.2016, 21:33 #1
Отрисовка дуги на пересечении линий.
AlexZh
 
Регистрация: 23.09.2015
Сообщений: 146

Здравствуйте!

Нашел на форуме данную программу. Немного подлатал. Скажите, как сделать отлов ошибок. Без него тяжко. И как можно улучшить программу?

Код:
[Выделить все]
 (defun c:peres
       (/ o a ap xy1 xy2 l l4 crug crug2 edge2 line1 line2 line6 layer0)
  (vl-load-com)
  (load "_dwgru-conv-ent-to-vla")
  (setq oldsnap (getvar "osmode"))
  (setq oldlayer (getvar "clayer"))
  (setq oldcolor (getvar "cecolor"))
  (setq oldecho (getvar "cmdecho"))
  (setq oldecho (getvar "cmdecho"))
  (setq oldaperture (getvar "aperture"))
  (setq oldedgemode (getvar "edgemode"))
  (setvar "cmdecho" 0)
  (setq mashtabx (getvar "CANNOSCALEVALUE"))
  (while (null l)
    (if	(null vopros)
      (setq vopros "Yes")
    ) ;_ конец if
    (initget "O")
    (princ (strcat "\n СКОБКИ: " vopros))
    (setq l
	   (nentsel
	     "\n Выберите разрываемую линию вблизи точки пересечения [Option]: "
			      ;Выбор линии
	   ) ;_ конец nentsel
    ) ;_ конец setq
    (if	(eq l "O")
      (progn (initget 1 "Yes No")
	     (setq vopros (getkword "\n Рисовать скобку [Yes/No]: ")
		   l	  nil
	     ) ;_ конец setq
      ) ;_ конец progn
    ) ;_ конец if
  ) ;_ конец while
  (setq xy1 (car (cdr l)))
  (setvar "aperture" 50)
  (setvar "osmode" 2080)
  (setq a (/ 0.5 mashtabx))
  (setvar "clayer" (vla-get-layer (_dwgru-conv-ent-to-vla (car l))))
  (setvar "cecolor"
	  (itoa (vla-get-color (_dwgru-conv-ent-to-vla (car l))))
  ) ;_ конец setvar
  (command "_circle" xy1 a)
  (setq xy1 (getvar "lastpoint"))
  (setq l4 (list (car l) xy1))
  (setq line1 (ssget "_l"))
  (command "_trim" line1 "" l4 "")
  (setq crug (ssget "_p"))
  (setq line2 (ssget "_l"))
  (setvar "EDGEMODE" 1)
  (setq	xy2 (list (- (car xy1) (* mashtabx 0.1))
		  (- (car (cdr xy1)) a)
		  (cadr (cdr xy1))
	    ) ;_ конец list
  ) ;_ конец setq
  (setq crug3 (list (cadr (car (ssnamex crug))) xy2))
  (setq line6 (cdr (cadr (entget (cadr (car (ssnamex line2)))))))
  (if (eq vopros "No")
    (command "_erase" crug "")
    (command "_trim" line2 "" crug3 "")
  ) ;_ конец if
  (if (or (eq "LINE" line6) (eq "LWPOLYLINE" line6))
    (princ)
    (progn
      (princ
	"\n ОШИБКА: Выбранный объект не является линией, либо не найдена точка пересечения!"
      ) ;_ конец princ
      (command "_undo" 3)
    ) ;_ конец progn
  ) ;_ конец if
  (setvar "osmode" oldsnap)
  (setvar "cecolor" oldcolor)
  (setvar "cmdecho" oldecho)
  (setvar "osmode" oldsnap)
  (setvar "aperture" oldaperture)
  (setvar "edgemode" oldedgemode)
  (princ)
)
Просмотров: 4542
 
Непрочитано 06.05.2016, 22:37
#2
Кулик Алексей aka kpblc
Moderator

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


http://autolisp.ru/2009/09/13/error-catch/ ?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.05.2016, 09:39
#3
VVA

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


похожая тема Как при пересечении двух линий сделать установку нужного блока в месте пересечения
В частности
Цитата:
Сообщение от 128500 Посмотреть сообщение
Наложение без пересечения:
1. На чертеже уже имеется полилиния А
2. При чертеже новой полилинии Б, которая пересекается с полилинией А в месте их пересечения вставляется полукруг определенного радиуса, линия Б обрезается по полукругу и данный полукруг добавляется к полилинии Б для обеспечения непрерывности полилинии Б и сохранения данных о ее длине.
еще подобные темы
Automatic drawing circle at intersection of two lines in AutoCAD



Automatic drawing arc with trimed line at intersection of two lines
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 07.05.2016 в 09:48.
VVA вне форума  
 
Непрочитано 07.12.2022, 15:03
#4
koui


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


есть финальная версия этого лиспа?
koui вне форума  
 
Непрочитано 12.12.2022, 17:03
#5
koui


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


Мне вот даже принципиально интересно стало: неужели никто не смог это реализовать? точнее, конечно же смог, в том же самом РубежКаде данная функция имеется.
тем не менее, если имеется множество пересечений, при этом линия должна огибать не все линии, а только нужные (выбранные) - быстрого решения нет.
1. лисп в данной теме не работает.
2. http://forum.dwg.ru/showthread.php?t=89412 - эта функция для рисования линии. не работает с уже нарисованными линиями и пересекает всё подрят.
3. http://www.cadtutor.net/forum/showth...nes-in-AutoCAD - выдает ошибку.
4. http://forums.augi.com/showthread.ph...n-of-two-lines - делает разрыв с дугой в конкретном месте. я не говорю о массовости, даже ранее введенный радиус не запоминает.
koui вне форума  
 
Непрочитано 12.12.2022, 17:45
#6
koMon


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


о, и мне интересно стало)
__________________
K Lisp
koMon вне форума  
 
Непрочитано 12.12.2022, 17:45
#7
Кулик Алексей aka kpblc
Moderator

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


Offtop: Я тебе на ура нарисую вариант: делаешь дугу с wipeout'ом под ней, загоняешь в блок и вставляешь куды хотишь. Но че-т я практически уверен, что этого по результату окажется мало - надо еще будет и автоперенос делать, и автовставку, и автоудаление, и автовыдачу денежных средств... Переходи на профильное ПО, это будет проще, быстрее и дешевле.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.12.2022, 17:49
#8
koMon


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


Offtop: это как-то по-ламерски(
__________________
K Lisp
koMon вне форума  
 
Непрочитано 13.12.2022, 02:00
#9
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,000


В ГОСТ 2.751-73 "ЕСКД. Обозначения условные графические в схемах. Электрические связи, провода, кабели и шины" - примечание: Если необходимо показать взаимное расположение графически пересекающихся проводов (кабелей, шин), то провод - расположенный сверху, в месте пересечения условно обозначают в виде полуокружности.

Вышедший взамен ему ГОСТ 2.721-74 вообще "потерял" это примечание)
Сергей812 вне форума  
 
Непрочитано 13.12.2022, 22:49
#10
koui


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


Сергей812, уж не хотите ли вы сказать, что эти полукруги ставить не обязательно? это, кстати, будет решением вопроса.
koui вне форума  
 
Непрочитано 13.12.2022, 23:40
#11
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,000


Цитата:
Сообщение от koui Посмотреть сообщение
уж не хотите ли вы сказать, что эти полукруги ставить не обязательно?
а зачем? Когда чертили от руки - то там, действительно, точку символа соединения цепей можно было не разглядеть. Сейчас эта полуокружность - избыточная информация на схеме, имхо.
Сергей812 вне форума  
 
Непрочитано 14.12.2022, 05:49
#12
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 451


Цитата:
Сообщение от koui Посмотреть сообщение
Сергей812, уж не хотите ли вы сказать, что эти полукруги ставить не обязательно? это, кстати, будет решением вопроса.
По ГОСТ - не обязательно.

Но обязательность их наличия может регламентироваться "местным" СТО.

Дело в том, что "точка", обозначающая наличие соединения проводников,
будучи распечатана не слишком "жирной", может со временем стать
малозаметной или вообще стереться с бумаги в цехе изготовления изделия.

И при смене персонала (например, паяющего жгуты по чертежу) это
может вылезти наружу в самом неожиданном месте.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 14.12.2022, 14:35
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,000


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Дело в том, что "точка", обозначающая наличие соединения проводников,
будучи распечатана не слишком "жирной", может со временем стать
малозаметной или вообще стереться с бумаги в цехе изготовления изделия.

И при смене персонала (например, паяющего жгуты по чертежу) это
может вылезти наружу в самом неожиданном месте.
Ну если потеряют точку диаметром 1-2 мм на схеме - пора делать новую рабочую копию с оригинала) И наконец-то вкрутить лампочку на рабочем месте)
Сергей812 вне форума  
 
Непрочитано 14.12.2022, 15:50
#14
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,989


https://forums.autodesk.com/t5/autoc...t/td-p/4326285

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить тип линии Tolyanovich AutoCAD 48 20.11.2014 09:24
Как при пересечении двух линий сделать установку нужного блока в месте пересечения 128500 Программирование 34 07.10.2014 11:06
Отрисовка косых линий в Автокад Olexan AutoCAD 1 22.11.2012 09:09
как создать точки на пересечении всех линий чертежа? 77chester77 Программирование 4 27.10.2012 22:54
Отрисовка типов линий noiseless AutoCAD 3 30.04.2009 06:33