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

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

Рисование трех полилиний одновременно.

Ответ
Поиск в этой теме
Непрочитано 29.10.2012, 17:40 #1
Рисование трех полилиний одновременно.
shartal
 
Регистрация: 12.08.2009
Сообщений: 464

Для рисования гидроизоляции ( с радиусными сегментами) не придумал способа лучше чем рисовать три полилинии. Средней задать тип линий dashed и глобальную ширину. Возможно ли это запихнуть в лисп ?. На форуме нашел одновременное рисование нескольких полилиний, но там нет возможности задать радиус, ширину и разный тип. Рисунок приблизительный.

Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 91
Размер:	12.2 Кб
ID:	89412  

Просмотров: 3203
 
Непрочитано 29.10.2012, 18:16
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от shartal Посмотреть сообщение
Возможно ли это запихнуть в лисп ?
возможно.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 29.10.2012, 18:38
#3
VVA

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


Возможно 2

__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 29.10.2012, 19:46
1 | #4
Profan


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


Возможно 3.
Центральная полилиния должна быть уже начерчена.
Код:
[Выделить все]
(defun C:OFF2 (/ d obj pt ent adoc *error* pt1 ang OSM undo lays)
  (defun *error* (msg)(vla-EndUndoMark adoc)(setvar "OSMODE" OSM))
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
   lays (vla-get-layers adoc))
  (vla-StartUndoMark adoc)
  (if (null *OFF2*)(setq *OFF2* (abs (getvar "OFFSETDIST"))))
  (if (zerop *OFF2*)(setq *OFF2* 1))
  (setq OSM (getvar "OSMODE"))
  (setq d (getvar "UNDOCTL"))
  (cond
    ((= d 0) (vl-cmdf "_.UNDO" "_All"))
    ((= d 3) (vl-cmdf "_.UNDO" "_Control" "_All"))
    (t nil)) ;_ end of cond
  (princ "\n Величина смещения <")(princ *OFF2*)(princ ">: ")
  (initget 6)(if (null (setq d (getdist))) (setq d *OFF2*))
  (setq   *OFF2* d undo 0)
  (initget "Undo Отмени Г J _Undo Undo Undo Undo")
  (while (setq obj (entsel (strcat "\n Выберите объект "
               (if (not (zerop undo))
                 "[Отмени]"
                 ""
               )
               " <выход>: "
            )
         )
    )
    (cond ((= obj "Undo")
      (if (not (zerop undo))
        (progn (vl-cmdf "_UNDO" "_B")(setq undo (1- undo)))
        (alert "Нечего больше отменять"))
     )
     (t
      (setq pt  (trans (cadr obj) 1 0)
       ent (vlax-ename->vla-object (car obj)))
      (cond ((= (vla-get-lock (vla-item lays (vla-get-layer ent))) :vlax-true)
        (alert "На блокированном слое!"))
       ((wcmatch (strcase (cdr(assoc 0 (entget(car obj))))) "*POLYLINE,LINE,SPLINE,ARC,CIRCLE,ELLIPSE")
           (setq pt  (vlax-curve-getclosestpointto ent pt)
       pt1 (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent pt))
       pt1 (mapcar '+ pt pt1)
       ang (+ (angle pt pt1) (* 0.5 PI))
       pt1 (trans (polar pt (+ ang pi) 5) 0 1)
       pt  (trans (polar pt ang 5) 0 1))
      (setvar "OSMODE" 0)(vl-cmdf "_UNDO" "_M")(setq undo (1+ undo))
      (command "_.offset" d obj pt obj pt1 "")

(if (= (tblsearch "ltype" "DASHED") nil)
    (command "_-LINETYPE" "_L" "DASHED" "acadiso.lin" "")
)
(vl-cmdf "_CHANGE" obj "" "_P" "_LT" "DASHED" "")
(vl-cmdf "_PEDIT" obj "_W" (* d 2) "")

      (setvar "OSMODE" OSM)
        )
       (t (alert "Не удается создать объект, подобный данному"))
       )
     )
    )
    (initget "Undo Отмени Г J _Undo Undo Undo Undo")
  )
(vla-EndUndoMark adoc)
  (princ)
)
(princ "\nНаберите в командной строке OFF2")
Код взят отсюда (спасибо VVA):
http://www.caduser.ru/forum/index.ph...1391&PAGEN_1=2
Примечание:
В русской версии в файле acadiso.lin (acad.lin) тип линии DASHED называется Штриховая. Я обычно для совместимости в локализованную версию копирую эти файлы из английской версии.

Последний раз редактировалось Profan, 29.10.2012 в 19:57.
Profan вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Рисование трех полилиний одновременно.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение частично "наложенных" полилиний в одну wluk1958 Программирование 3 07.02.2012 00:55
автомитизация: изменение свойств слоев, подсчет длины полилиний. как? kerya_z Программирование 4 29.10.2011 23:10
Развертка на плоскость полилиний shumaka AutoCAD 11 12.12.2010 12:23
LISP. Программа сопряжения отдельных сегментов полилиний или отрезков без объединения Profan Готовые программы 20 30.03.2010 18:23