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

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

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

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

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

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

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

Просмотров: 29726
 
Непрочитано 03.01.2008, 14:03
#21
dextron3

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


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

Сначало думал что двух уровней не хватит, но решаю проблему маштабом размеров

спасибо...
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 05.01.2008, 04:54
#22
Vova

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


VVA, а если-бы еще одну кнопочку добавить, чтобы получалось как в посте 14. То есть при нажатии на размер его размерный текст заменялся бы двумя пробелами (это наиболее частый вариант. Если понадобится больше провелов, можно подправить вручную). Тогда тулбарчик на основе одного лиспа стал бы поистине золотым
Vova вне форума  
 
Непрочитано 05.01.2008, 07:29
#23
dextron3

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


Ты имеешь ввиду чтобы объединяла одинаковые размеры в одну выноску с числом?
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 08.01.2008, 18:20
#24
VVA

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


Еще одна модификация. Все запросы объединил в одну команду.
Принцип - одна команда, много кнопок
Возможные варианты кнопок
DLV0 - ^C^CDLV;0;;0;;
DLV180 - ^C^CDLV;180;<>;0;
DLVY - ^C^CDLV;0;;0;
DLV1 - ^C^CDLV;0;;1;
DLV2 - ^C^CDLV;0;;2
По типу DLVY с установкой TextOverride
DLVYT - ^C^CDLV;180; ;0;;
При запросе значения TextOverride идет запрос строки с пробелами (нужно вводить обязательно Enter). В меню для ввода Enter на этом (и лучше на всех) запросе надо ставить символ "точка с запятой" - ;
Причем при запросе TextOverride если ввести некие символы (например пробелы), то они соответсвенно запишутся в TextOverride размеров, если ввести Enter, то TextOverride размеров будет игнорироваться (что было то и останется), если ввести <>, то размеры будут вычисляться т.е. удаляем TextOverride, даже если оно там было.
При запросе четных/нечетных размеров помимо опций можно пользоваться числами
0 - все
1 - нечетные
2 - четные
Код:
[Выделить все]
;;;Пытается выровнять выноску Размера
;;; dim - ename or vla-object
;;; ang - angle 0 or pi угол в радианах
;;; Y - новое положение размерной линии  или nil  
;;; TextOverride - значение TextOverride или nil - не менять  
(defun dim-leader-vert-ang-Y-text (dim     ang     Y       TextOverride
                                   /       dimobj  blk     lst
                                   pt1     pt2     pt3     ptc
                                   pt_text
                                  )
  (if (= (type dim) 'vla-object)
    (setq dim (vlax-vla-object->ename dim))
  ) ;_ end of if
  (setq dimobj (vlax-ename->vla-object dim))
  (if (and
        (vlax-write-enabled-p dimobj)
        (wcmatch (vla-get-objectname dimobj)
                 "AcDbAlignedDimension,AcDbRotatedDimension"
        ) ;_ end of wcmatch
      ) ;_ end of and
    (progn
      (vla-put-textmovement dimobj acmovetextaddleader)
      (setq blk
             (vla-item (vla-get-blocks
                         (vla-get-activedocument (vlax-get-acad-object))
                       ) ;_ end of vla-get-Blocks
                       (cdr (assoc 2 (entget dim)))
             ) ;_ end of vla-item
      ) ;_ end of setq
      (setq lst nil)
      (vlax-for item blk
        (if (= (vla-get-objectname item) "AcDbBlockReference")
          (setq
            lst (cons
                  (vlax-safearray->list
                    (vlax-variant-value (vla-get-insertionpoint item))
                  ) ;_ end of vlax-safearray->list
                  lst
                ) ;_ end of cons
          ) ;_ end of setq
        ) ;_ end of if
        (if (= (vla-get-objectname item) "AcDbSolid")
          (progn
            (setq
              lst (cons
                    (vlax-safearray->list
                      (vlax-variant-value (vla-get-coordinate item 0))
                    ) ;_ end of vlax-safearray->list
                    lst
                  ) ;_ end of cons
            ) ;_ end of setq
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of vlax-for
      (if (and (car lst)
               (cadr lst)
          ) ;_ end of and
        (progn
          (setq delta (* (vla-get-textgap dimobj)
                         (vla-get-scalefactor dimobj)
                      ) ;_ end of *
          ) ;_ end of setq
          (setq pt1     (car lst)
                pt2     (cadr lst)
                ptc     (polar pt1 (angle pt1 pt2) (* 0.5 (distance pt1 pt2)))
                pt_text (vlax-safearray->list
                            (vlax-variant-value
                              (vla-get-textposition dimobj)
                            ) ;_ end of vlax-variant-value
                          ) ;_ end of vlax-safearray->list
                pt_text (if Y
                          (inters Y (polar Y (angle pt1 pt2) 1e3)
                                  pt_text (polar pt_text (+ (angle pt1 pt2) (* 0.5 pi)) 1e3)
                                  nil)
                         pt_text   
                        ) ;_ end of if
          ) ;_ end of setq
          (setq
            pt3 (inters pt_text
                        (polar pt_text (angle pt1 pt2) 1e3)
                        ptc
                        (polar ptc (+ (angle pt1 pt2) (* 0.5 pi)) 1e3)
                        nil
                ) ;_ end of inters
          ) ;_ end of setq
;;;          (setq pt3 (polar pt3 (+ ang (angle pt2 pt1)) delta))     ;;;Было
          (setq pt3 (polar pt3 (+ ang (angle pt3 pt_text)) delta))    ;;;Новое
          (vla-put-textposition dimobj (vlax-3d-point pt3))
          (if (= (type TextOverride) 'STR)
            (vla-put-textoverride dimobj TextOverride)
          ) ;_ end of if
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun
  
;;;Dimention Leader Vertical
;;;Выравнивание выноски размера
;;;http://dwg.ru/f/showthread.php?t=15823
;;;Вертикальная выноска
;;;Порядок запросов
;;;-  Поправочный угол - 0 или 180 (зерклит выноску)
;;;-  Значение TextOverride - строка TextOverride или
;;;                              Enter - не менять или
;;;                              <> - снять установленный TextOverride
;;; - Обрабатывать размеры - 0 - все
;;;                          1 - нечетные
;;;                          2 - четные
;;; - Новое положение размерной линии - Enter - не менять
;;;Возможные варианты кнопок
;;;DLV0 - ^C^CDLV;0;;0;;
;;;DLV180 -  ^C^CDLV;180;<>;0;
;;;DLVY -  ^C^CDLV;0;;0;
;;;DLV1 - ^C^CDLV;0;;1;
;;;DLV2 - ^C^CDLV;0;;2
;;;DLVYT - ^C^CDLV;180;  ;0;;
;;;  
(defun C:DLV (/ pt ang what Isrus TextOverride ss lst mpt *error*)
  (defun *error* (msg)
    (princ msg)
    (vla-get-activedocument (vlax-get-acad-object))
  ) ;_ end of defun
  (vl-load-com)
  (vla-startundomark
    (vla-get-activedocument (vlax-get-acad-object))
  ) ;_ end of vla-StartUndoMark
  (setq Isrus (= (getvar "DWGCODEPAGE") "ANSI_1251"))
  (if (null (setq ang
                   (getangle
                     (if Isrus
                       "\nПоправочный угол к размерной выноске (0 или 180) <0>: "
                       "\nCorrection angle to dimetsion leader (0 or 180) <0> :"
                     ) ;_ end of if
                   ) ;_ end of getangle
            ) ;_ end of setq
      ) ;_ end of null
    (setq ang 0)
  ) ;_ end of if
  (setq TextOverride
         (getstring t
                    (if Isrus
                      "\nЗначение TextOverride <не менять>: "
                      "\nTextOverride value <don't change>: "
                    ) ;_ end of if
         ) ;_ end of getstring
  ) ;_ end of setq
  (if (= TextOverride "")
    (setq TextOverride nil)
  ) ;_ end of if
  (if Isrus
    (initget
      "Все Нечетный Четный All Odd Even 0 1 2 _0 1 2 0 1 2 0 1 2"
    ) ;_ end of initget
    (initget "All Odd Even 0 1 2 _0 1 2 0 1 2")
  ) ;_ end of if
;;; what - обрабатываемые размеры (process the dimension)
;;;    0 - все                    (all)
;;;    1 - нечетные               (odd)
;;;    2 - четные                 (even)
  (if (null (setq what
                   (getkword
                     (if Isrus
                       "\nОбрабатывать размеры [Все 0/Нечетные 1/Четные 2] <Все>: "
                       "\nTo process the dimension [All 0/Odd 1/Even 2] <All>: "
                     ) ;_ end of if
                   ) ;_ end of getkword
            ) ;_ end of setq
      ) ;_ end of null
    (setq what "0")
  ) ;_ end of if
  (setq pt (getpoint
             (if Isrus
               "\nНовое положение размерной линии <не менять>: "
               "\nNew position of dimension line <don't change>: "
             ) ;_ end of if
           ) ;_ end of getpoint
  ) ;_ end of setq
  (if pt (setq pt (trans pt 1 0)))
  (if Isrus
    (princ "\nВыберите размеры")
    (princ "\nSelect dimention")
  ) ;_ end of if
  (setq ss (ssget "_:L" '((0 . "DIMENSION"))))
  (setq i '-1)
  (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)
  (if (/= what "0")
    (progn
      (setq what (= what "1"))
      (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 lambda
            ) ;_ end of vl-sort
      ) ;_ end of setq
      (setq lst (vl-remove-if '(lambda (x) (setq what (not what))) lst))
    ) ;_ end of progn
  ) ;_ end of if
  (mapcar '(lambda (x)
             (dim-leader-vert-ang-Y-text x ang pt TextOverride)
           ) ;_ end of lambda
          lst
  ) ;_ end of mapcar
  (vla-endundomark
    (vla-get-activedocument (vlax-get-acad-object))
  ) ;_ end of vla-EndUndoMark
  (princ)
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 12.01.2008 в 12:08. Причина: Замечание Vova #44 dextron3 #46
VVA вне форума  
 
Непрочитано 10.01.2008, 12:33
#25
Дмитрий063

рисую...
 
Регистрация: 10.01.2008
Самара
Сообщений: 1,259
<phrase 1=


День добрый.
Очень зорошая идея.
Но вот что-то к посту №7 так и не дошли.... Очень жаль.
Дмитрий063 вне форума  
 
Непрочитано 10.01.2008, 12:40
#26
Дмитрий063

рисую...
 
Регистрация: 10.01.2008
Самара
Сообщений: 1,259
<phrase 1=


и еще вопрос.
как можно (или что надо) поменять в настройках ... или еще где-то что-бы увеличить растояние от основной размерной линии до вспомогательной выносной. В настройках ее нет (либо не нашел).
"вспомогательная выносная линия располагается на расстоянии 4.25хDIM, а хотелось бы 4.5-4.8"
Дмитрий063 вне форума  
 
Непрочитано 10.01.2008, 12:45
#27
Павлов Андрей

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


Здравствуйте !
А есть ли утилитка , которая бы выравнивала многоэтажные размерные линии в одну цепочку ? Может встречал кто-нибудь ?
__________________
Andrey
Павлов Андрей вне форума  
 
Непрочитано 10.01.2008, 12:50
#28
Дмитрий063

рисую...
 
Регистрация: 10.01.2008
Самара
Сообщений: 1,259
<phrase 1=


а как это многоэтажные?
Дмитрий063 вне форума  
 
Непрочитано 10.01.2008, 13:07
#29
VVA

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


>Дмитрий063 #25 Как альтернатива - разносить четные/нечетные размеры либо DLVY. Для автоматического выравнивания не ясен алгоритм работы. Алгоритм, предложенный в #7 - это местная БКК (большая красная кнопка). По поводу #26 я не понял про что речь. Приложи картинку или рисунок с вопросом.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 10.01.2008, 13:35
#30
Дмитрий063

рисую...
 
Регистрация: 10.01.2008
Самара
Сообщений: 1,259
<phrase 1=


вот...
Миниатюры
Нажмите на изображение для увеличения
Название: 123.jpg
Просмотров: 142
Размер:	7.8 Кб
ID:	2121  
Дмитрий063 вне форума  
 
Непрочитано 10.01.2008, 14:34
#31
Павлов Андрей

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


Цитата:
Сообщение от Дмитрий063 Посмотреть сообщение
а как это многоэтажные?
Ну , я имел ввиду если горизонтальные размеры сбились по вертикали (размерные линии и размерный текст не на одном уровне) , и чтобы выровнять их по одной линии .
__________________
Andrey
Павлов Андрей вне форума  
 
Непрочитано 10.01.2008, 15:58
#32
Дмитрий063

рисую...
 
Регистрация: 10.01.2008
Самара
Сообщений: 1,259
<phrase 1=


и вот такая ситуация
Миниатюры
Нажмите на изображение для увеличения
Название: 111.jpg
Просмотров: 137
Размер:	14.3 Кб
ID:	2125  
Дмитрий063 вне форума  
 
Непрочитано 10.01.2008, 16:24
#33
dextron3

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


Гдето видел в данной теме лисп прям здесь или мне показалось,
как автоматически объеденить одинаковые размеры?
см. скриншот:
Миниатюры
Нажмите на изображение для увеличения
Название: Захват1.JPG
Просмотров: 133
Размер:	31.8 Кб
ID:	2126  
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 10.01.2008, 16:26
#34
dextron3

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


А такой бы лисп боролося с рассеяностью архитекторов

см скриншот:
Миниатюры
Нажмите на изображение для увеличения
Название: Захват2.jpg
Просмотров: 143
Размер:	24.7 Кб
ID:	2127  
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 10.01.2008, 16:32
#35
Дмитрий063

рисую...
 
Регистрация: 10.01.2008
Самара
Сообщений: 1,259
<phrase 1=


Но это касается к одинаковым размерам.
а что касается разных....?
Дмитрий063 вне форума  
 
Непрочитано 10.01.2008, 16:37
#36
dextron3

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


Этот лисп мне только снится....

Принцип работы:

1. Находит числа размеров которые или " на лазиют" друг на друга
или находятся на объектах чертежа, и автоматически выносит в пустое пространство.


Алгоритм:

1. Выделите область экрана (выделяется весь объект включая приметивы с размерами)

2. Каждый размер детектируется т.е. проверяется есть ли у него нахлест на рядом стоящие размеры или нахлест на существующие приметивы

3. Определяется чистая зона вокруг выноски размера

4. Выносится обозначение размера по кратчайшему расстоянию на чистую зону (т.е. пустой экран)

1 скриншот это до применения
2 скриншот полсе применения(там только один размер 201мм не исправился остальные так как надо)
Миниатюры
Нажмите на изображение для увеличения
Название: Захват3.jpg
Просмотров: 137
Размер:	36.7 Кб
ID:	2129  Нажмите на изображение для увеличения
Название: Захват4.jpg
Просмотров: 128
Размер:	37.7 Кб
ID:	2130  
__________________
инженер проектировшик с опттом программа авто гад образование высшие

Последний раз редактировалось dextron3, 10.01.2008 в 16:51.
dextron3 вне форума  
 
Непрочитано 10.01.2008, 16:40
#37
dextron3

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


Цитата:
Сообщение от Дмитрий063 Посмотреть сообщение
Но это касается к одинаковым размерам.
а что касается разных....?
Если разные то находятся обинаковые и объеденяются

и разносятся по этажно, (прим. автора)

высота разноски h=высота текста размера + высота текста размера


смотреть скриншот было/стало
Миниатюры
Нажмите на изображение для увеличения
Название: Захват5.jpg
Просмотров: 120
Размер:	47.8 Кб
ID:	2131  
__________________
инженер проектировшик с опттом программа авто гад образование высшие

Последний раз редактировалось dextron3, 10.01.2008 в 16:48.
dextron3 вне форума  
 
Непрочитано 10.01.2008, 16:50
#38
Дмитрий063

рисую...
 
Регистрация: 10.01.2008
Самара
Сообщений: 1,259
<phrase 1=


Ну наверное такое не реально...
хотя бы такой вариант.... если 2 размера налазиют друг на друга то один бы зеркалился....
А в твоем случае частично поможет - у размеров есть в настройках "фон" - если выбрать фон экрана - то он "перекроет" линии. (впрочем и текст, и другие размеры...)
Дмитрий063 вне форума  
 
Непрочитано 10.01.2008, 17:01
#39
dextron3

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


Цитата:
Сообщение от Дмитрий063 Посмотреть сообщение
Ну наверное такое не реально...
хотя бы такой вариант.... если 2 размера налазиют друг на друга то один бы зеркалился....
А в твоем случае частично поможет - у размеров есть в настройках "фон" - если выбрать фон экрана - то он "перекроет" линии. (впрочем и текст, и другие размеры...)
В том то весь и сок чтобы он не накрывал важные части чертежа, а относил на пустое место, не заю как на лиспе это выразить

Но алгоритм для бейсика таков:
1. Задаем область-поле от координаты вставки текста+ширина + высота по периметру, как бы по расходящейся спирали.
2. При попадании в каждую точку экрана если она пустая выдает 0 если нет, то 1
3. Когда суммарное поле 0-нулеков станет по площади равно размерного
текста (высота на длинну), то координаты вставки
размерного обозначения переносятся в левый нижний угол данного пустого
поля.

Можно лисп сделать с одинарным выделением размеров поочереди,
так как при множестве размеров комп может просто зависнуть

Если это комуто интересно
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 10.01.2008, 17:12
#40
Дмитрий063

рисую...
 
Регистрация: 10.01.2008
Самара
Сообщений: 1,259
<phrase 1=


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

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

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