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

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

Вертикальная выноска линейного размера

Ответ
Поиск в этой теме
Непрочитано 13.12.2007, 06:23
Вертикальная выноска линейного размера
Vova
 
Engineer
 
New-York
Регистрация: 05.09.2003
Сообщений: 10,288

Может, пригодится не только мне. На левой картинке размеры вынесены на лидере (меню правой кнопки 2006). Они всегда получаются косыми. На правой картинке косина сведена почти к нулю, но точного перпендикуляра не достичь, потому что выноска на переломе не имеет грипсы.
Можно-ли программно сделать из косой выноски строго перпендикулярную? Хотя-бы клика за 2-3. Файл также здесь

Миниатюры
Нажмите на изображение для увеличения
Название: DIM-PERPENDICULAR.jpg
Просмотров: 1361
Размер:	23.1 Кб
ID:	1480  

Вложения
Тип файла: dwg
DWG 2004
DIM-PERPENDICULAR.dwg (81.7 Кб, 5267 просмотров)

Просмотров: 29800
 
Непрочитано 10.01.2008, 17:21
#41
VVA

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


>Павлов Андрей
По поводу выравнивания в одну цепочку в первом приближении
Код:
[Выделить все]
;;Выравнивание размеров в одну цепочку  
  (defun C:DIMALIGN ( / ss i pt1 pt2 lst e1 ed mpt ang90)
  (vl-load-com)
  (if
  (and
  (setq pt1 (getpoint "\nЛиния выравнивания. Первая точка : " ))
  (setq pt2 (getpoint pt1 "\nЛиния выравнивания. Вторая точка : " ))
  (setq pt1 (trans pt1 1 0))
  (setq pt2 (trans pt2 1 0))
  (setq ang90 (+ (angle pt1 pt2)(* 0.5 pi)))
  (setq ss (ssget "_:L" '((0 . "DIMENSION"))))
  )
  (progn
  (setq i '-1)
  (repeat (sslength ss)
    (setq e1  (ssname ss (setq i (1+ i))))
    (if (member '(100 . "AcDbAlignedDimension")(setq ed(entget e1)))
      (progn
        (if (and
              (setq mpt (inters pt1 pt2
                                (cdr(assoc 10 ed))
                                (polar (cdr(assoc 10 ed)) ang90 1e3)
                                nil
                                )
                    )
              (setq ed (subst (cons 10 mpt)(assoc 10 ed) ed))
              )
          (progn
            (entmod ed)
            (entupd e1)
            )
                                
      )
      )
    )
    )
  )
  )
  (setq ss nil)  
  (princ)
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 11.01.2008, 11:22
#42
Павлов Андрей

Инженер-строитель
 
Регистрация: 27.05.2004
Республика Беларусь
Сообщений: 67


VVA .
Спасибо огромное за DIMALIGN !!!!!!!!!
__________________
Andrey
Павлов Андрей вне форума  
 
Непрочитано 11.01.2008, 21:29
#43
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


VVA, а выравнивание с объединением одинаковых размеров в общую выноску, такой лисп можно?
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 12.01.2008, 04:12
#44
Vova

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


По лиспу из поста /24
Любая из предложенный кнопок, а также вызов DLV выдает следущее:
Код:
[Выделить все]
Command: dlv
Correction angle to dimetsion leader (0 or 180) <0> :
TextOverride value <don't change>: 111
To process the dimension [All 0/Odd 1/Even 2] <All>:
New position of dimension line <don't change>:
Select dimention
Select objects: 1 found
Select objects: 1 found, 2 total
Select objects:
no function definition: DIM-LEADER-VERT-ANG-Y-TEXT
Command:
Vova вне форума  
 
Непрочитано 12.01.2008, 09:35
#45
VVA

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


>Vova #44 Исправил. см. пост #24. Странно что только к 44 посту заметили.
> Dextron3 #43 Пока думаю над этим в свободное время.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 12.01.2008, 09:44
#46
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Цитата:
Сообщение от VVA Посмотреть сообщение
>Vova #44 Исправил. см. пост #24. Странно что только к 44 посту заметили.
> Dextron3 #43 Пока думаю над этим в свободное время.
При тестировки лиспа
который разносит по двум уровням чет не чет
нашел баг

Когда уже повернул выноски в лево и право, то при выноске на уровень они поварачиваются все в одну сторону, проделанная работа обнуляется


можно откорректировать чтобы запоминало
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 12.01.2008, 12:11
#47
VVA

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


>dextron3 #46 Исправил. см. пост #24. Поправочный угол 0 к размерной выноске оставляет ее там где и была
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 12.01.2008, 13:11
#48
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Command: (LOAD "C:/Documents and Settings/Aleks/Рабочий стол/defun
dim-leader-vert-ang-Y-text.lsp") CLV

Command:
Command:
Command: DLV

Select objects: 0
Specify opposite corner:

Invalid window specification.

Select objects: Specify opposite corner: 31 found

Select objects:
nil


Или я не допонял как функционирует лисп из #24
кнопками вызывает какоето окно с привязкой к началу координат,

а почему от первого тобой предложенного варианта отказались,
он работает как часы без сбоев
Миниатюры
Нажмите на изображение для увеличения
Название: Захват1.JPG
Просмотров: 177
Размер:	8.6 Кб
ID:	2186  
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 12.01.2008, 15:31
#49
VVA

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


>dextron3 Что-то ты не так скопировал. Запросы лиспа из #24
Цитата:
Команда: dlv
Correction angle to dimetsion leader (0 or 180) <0> :
TextOverride value <don't change>:
To process the dimension [All 0/Odd 1/Even 2] <All>: 1
New position of dimension line <don't change>:
Select dimention
Выберите объекты: Противоположный угол: найдено: 8
Выберите объекты:
Он отличается от предыдущих тем, что все запросы собраны в одну команду, + возможность менять textoverride. Вместо команд DLV0, DLV180 и т.п. делаются кнопки. Об этом достаточно подробно (на мой взгляд) написано в #24 и примечаних в лиспе. От первого варианта не отказались, это он, но вид сверху
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 12.01.2008, 16:46
#50
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Разобрался спасибо!
Буду ждать доп кнопку "объединение одинаковых значений"

__________________
инженер проектировшик с опттом программа авто гад образование высшие

Последний раз редактировалось dextron3, 12.01.2008 в 17:46.
dextron3 вне форума  
 
Автор темы   Непрочитано 12.01.2008, 17:54
#51
Vova

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


Sorry, но так и не смог оттестировать лисп №24 Непонятно, что происходит. То одна выноска не становится в общий ряд, то какая-то оказывается невертикальной. И слишком много слов в ком. строке, не удается работать на автомате. Моя технология простановки размеров в цепочке такая: Делаю цепочку размеров. Причем не всегда только, допустим, слева направо. Не всегда для этого используется Dimcontinue (которая сама по себе делает выноски для некоторых размеров, но наклонные). Иногда сначала ставится какой-то размер в середине будущей цепочки и то-ли слева направо, то-ли наоборот. А второй размер тоже спонтанный. И он не обязательно станет в прямую линию с первым. Наконец, цепочка сформировалась, но не выровнена и текст налезает друг на друга. И вот теперь настает пора упорядочить при помощи лиспа. Я бы хотел иметь такие кнопки:
1. Выровнять размерные линии путем указание эталонного размера или задания точки
2. Вынести вертикальный лидер на заданный уровень только у указанных размеров (а не у четных-нечетных)
3. Развернуть указанные мышкой полочки в противоположном направлении (0 или 180 град неинформативно, ибо зависит от того, в какую сторону строился размер)
4. замена текста указанием мыши (в данном случая было-бы достаточно заменить текст на два пробела, но для универсальности кнопка была-бы полезна и для других случаев)
Возможно, в такой комбинации программа удовлетворила бы и тех, кто задал последующие пожелания
Vova вне форума  
 
Непрочитано 12.01.2008, 21:19
#52
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Vova, #24 все о чем ты написал есть, именно эти команды

1 Лисп для Павлова андрея
2 это DLVy, чет не чет это уже тюнинг, а ты сам выбирай какие вынести на какую дистанцию
3. 0 и 180 это условно в том лиспе щелкнул на одну сторону повернулся в противоположную
4. Не пойму для чего, тебе что по размеру два раза щелкнуть и перебить не быстро, или для каких то других целей
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 12.01.2008, 22:33
#53
Vova

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


Цитата:
Не пойму для чего, тебе что по размеру два раза щелкнуть и перебить не быстро, или для каких то других целей
Два раза щелкнуть и перебить это только если двойной клик в CUI переопределить. А так надо брать команду Ddedit. И при этом выйдет редактор, и только в нем перебивается текст. А зачем это надо? Так ты ведь не ответил на мой вопрос в № 16. И, очевидно, не понял, как это делается. Иначе бы не задал этот вопрос, а также твой номер 43 (в лиспе как раз текст перебивается)
Я думаю, как сделать все более упорядочным и универсальным и для этого программист должен работать в паре с пользователем, а лучше с несколькими, что сейчас и происходит
Vova вне форума  
 
Непрочитано 14.01.2008, 18:36
#54
VVA

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


>Vova 51 Может я не правильно объяснил, но #24 это эти команды, только для них нужно сделать соответвтующие кнопки. Для простоты сделяю еще пару команд через небольшой тайм-аут. Пока вариант DIMALIGN по тз №1 Vova#51.
Код:
[Выделить все]
;;Выравнивание размеров в одну цепочку  путем указания на эталонный или точки
;;http://dwg.ru/f/newreply.php?do=postreply&t=15823
  (defun C:DIMALIGN ( / ss i pt1 pt2 lst e1 ed mpt ang90 pt14)
  (vl-load-com)
   (setq e1 nil mpt 1) 
   (while mpt
     (cond ((= mpt 1)
            (setq e1 (car(entsel "Выберите эталонный размер <указать точку>:")))
            (if e1
              (if (and (=(cdr(assoc 0 (setq ed (entget e1)))) "DIMENSION")
                       (member '(100 . "AcDbAlignedDimension")ed)
                       )
                (progn
                (setq mpt nil)
                (setq pt1 (cdr(assoc 10 ed)))
                )
                (princ "\nНужно выбрать линейный размер")
                )
              (setq mpt 2)
              )
            )
           ((= mpt 2)
            (if(setq pt1 (getpoint "\nУкажите точку выравнивания <выбрать размер>:"))
              (setq pt1 (trans pt1 1 0) mpt nil)
              (setq mpt 1)
              )
            )
           (t nil)
           )
     )
  (if (setq ss (ssget "_:L" '((0 . "DIMENSION"))))
  (progn
  (setq i '-1)
  (repeat (sslength ss)
    (setq e1  (ssname ss (setq i (1+ i))))
    (if (member '(100 . "AcDbAlignedDimension")(setq ed(entget e1)))
      (progn
        (setq pt2 (polar pt1 (+ (setq ang90 (angle (cdr(assoc 10 ed))(cdr(assoc 14 ed))))(* 0.5 pi)) 1e3))
        (if (and
              (setq mpt (inters pt1 pt2
                                (cdr(assoc 10 ed))
                                (polar (cdr(assoc 10 ed)) ang90 1e3)
                                nil
                                )
                    )
              (setq ed (subst (cons 10 mpt)(assoc 10 ed) ed))
              )
          (progn
            (entmod ed)
            (entupd e1)
            )
                                
      )
      )
    )
    )
  )
  )
  (setq ss nil)  
  (princ)
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.01.2008, 19:25 Небольшая редакция
#55
VVA

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


Новая редакция
DLV - полная команда
DLVY - Вынести лидер на заданный уровень у выбранных размеров
DLVROT - Развернуть у выбранных размеров полочки выноски в противоположном направлении
DLVTEXT - Замена TextOverride у выбранных размеров с выноской
DLVTEXT2 - Замена TextOverride у выбранных размеров 2 пробелами с выноской
DTO - Замена TextOverride у выбранных размеров
DTO2 - Замена TextOverride у выбранных размеров 2 пробелами
DLA - Выровнять размерные линии
DUIV - Объединение одинаковых значений выбранных размеров
Вложения
Тип файла: rar dimtools.RAR (4.6 Кб, 198 просмотров)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 18.02.2008 в 15:16. Причина: Dimtools.lsp заменен архивом dimtool.rar
VVA вне форума  
 
Непрочитано 15.01.2008, 21:40
#56
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Vova, дай скриншотами как было и как должно быть я не могу понять что именно тебе нужно...
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 20.01.2008, 18:43
#57
Vova

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


Наконец добрался до опробования последней версии. Первое впечатление очень положительное. Несущественное замечание по поводу названий команд. Все они начинаются с букв DLV, что означает Dimension Leader Vertical, а команда, выравнивающая размерные линии наз. Dimalign. Хотя по смыслу так и есть. А если эту функцию записать как DLA (Dimension Line Align)?
К сожалению, немного народа участвует в обсуждении данной проги, как будто это мало кому надо. На самом деле это очень полезная примочка, которая обълегчает жизнь при простановке цепочки размеров, если расстояния между выносными линиями не позволяет разместить размерный текст внутри. Заодно выравнивает размеры в одну точную линию, заодно перебивает размерный текст, если это необходимо. (удобнее, чем команда Ddedit) . Уточняю также, что к типу размера типа Leader эта прога отношения не имеет. Только к линейному размеру, размерный текст которого выносится на лидере, причем строго вертикально по отношению к размерной линии.
Личная просьба к VVA: сбрось мне на мыло эту прогу, а то приаттаченная к сообщению она выдает на моем компе крякозябры вместо руссого. (если я копирую полностью написанную программу, например, с номера 54, то там русский нормальный)
Еще раз спасибо

Последний раз редактировалось Vova, 20.01.2008 в 18:49.
Vova вне форума  
 
Непрочитано 18.02.2008, 15:22
#58
VVA

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


Цитата:
Сообщение от dextron3 Посмотреть сообщение
Буду ждать доп кнопку "объединение одинаковых значений"
Обновил команды в #55
Добавил 3 команды
DTO (DTO2) - замена TextOverride у выбранных размеров. В отличие от DLVTEXT не тянет выносу
DUIV - объединение одинаковых значений размеров. Значения размров беруться из MTEXT размера. Поэтому команде без разницы, вычисленный размер или переписанный. Сравниваются MTEXT'ы размеров (т.е. то, что видим). Объединяюся идущие подряд (без перебивок другими значениями размеров). Значения одинаковых размеров заменяются пробелом, кроме последнего.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.02.2008, 18:36
#59
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


VVA, что то команда DUIV,
ведет себя не так как хотелось бы,
см. скриншот
Миниатюры
Нажмите на изображение для увеличения
Название: Snap1.jpg
Просмотров: 171
Размер:	21.1 Кб
ID:	3490  
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 18.02.2008, 18:43
#60
VVA

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


А ты сначала DLVY выровняй размер, а потом попробуй DUIV
*** Добавлено
Вообще здесь ситуация неоднонозначная. DUIV из #55 просто заносит в TextOverride пробел. Поведение размера зависит от его настроек. Скажем, если размер умещается между выносными, по размерный лидер пропадает.
Возможен второй вариант, всегда насильственно задавать лирер. Команда DUIV1. Для ее работы требуются ф-ции споста #55
Код:
[Выделить все]
(defun C:DUIV1 ( / *error ss i e1 lst mpt Isrus)
 (defun *error* (msg)(princ msg)
 (vla-endundomark(vla-get-activedocument (vlax-get-acad-object)))) ;_ end of defun
  (vl-load-com)
  (vla-startundomark(vla-get-activedocument (vlax-get-acad-object)))
  (if (setq Isrus (= (getvar "DWGCODEPAGE") "ANSI_1251"))
    (princ "\nВыберите размеры для объединения одинаковых значений")
    (princ "\nSelect dimention to unite identical values")
  ) ;_ end of if
  (setq ss (ssget "_:L" '((0 . "*DIMENSION"))))
  (setq i '-1 lst nil mpt nil)
  (repeat (sslength ss)
    (setq e1 (ssname ss (setq i (1+ i))))
    (if (member '(100 . "AcDbAlignedDimension") (entget e1))
      (setq lst (cons e1 lst))
    ) ;_ end of if
  ) ;_ end of repeat
  (setq ss nil)
  (foreach x lst
     (setq mpt (cons (cdr (assoc 13 (entget x))) mpt))
   ) ;_ end of foreach
      (setq mpt (apply 'mapcar (cons 'list mpt)))
      (setq mpt (mapcar '(lambda (x) (apply 'min x)) mpt))
      (setq
        lst (vl-sort lst
                     '(lambda (x y)
                        (< (distance mpt (cdr (assoc 13 (entget x))))
                           (distance mpt (cdr (assoc 13 (entget y))))
                        ) ;_ end of <
                      ) ;_ end of lambdazz
            ) ;_ end of vl-sort
      ) ;_ end of setq
  
 (setq mpt (mapcar 'dim-get-text-string lst))
 (setq e1 (car mpt) ss nil) 
 (foreach item mpt
   (if (= e1 item)
     (setq ss (cons " " ss))
     (setq ss (cons e1 (cdr ss)) e1 item ss (cons " " ss))
     )
   )
  (setq ss (cons e1 (cdr ss)))
  ;(setq ss (reverse ss))
  (mapcar '(lambda ( edim txt)
;;;             (if (= txt " ")
;;;               (vla-put-textoverride (vlax-ename->vla-object edim) txt)
;;;               )
      (if (= txt " ")
      (dim-leader-vert-ang-Y-text edim 0 nil txt)
      (dim-leader-vert-ang-Y-text edim 0 nil nil)  
        )
             )
          lst
          (reverse ss)
          )
  (vla-endundomark(vla-get-activedocument (vlax-get-acad-object)))
  (princ)
)
Но тогда уже "залидерит" все, что попало
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 18.02.2008 в 18:56.
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вертикальная выноска линейного размера

Размещение рекламы