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

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

Преобразование текста и линий в мультивыноски (чохом)

Ответ
Поиск в этой теме
Непрочитано 02.03.2015, 15:41 #1
Преобразование текста и линий в мультивыноски (чохом)
casaatik
 
Проектирование
 
Киев
Регистрация: 14.09.2007
Сообщений: 147

Добрый день.
Лисп приведенный ниже преобразует текст в мультивыноску, но делает он это по одному за раз. Как можно его изменить чтобы он сам находил линии с текстом и делал из них мультивыноски. Есть файлы где изначально были мультивыноски, потом их взорвали и получили мтексты с отрезками. Хотелось бы обратно все в мультивыноски в несколько кликов. Пример исходного файла во вложении.

Код:
[Выделить все]
(defun c:mt2ml ( / oobj nobj nstrg)
  (vl-load-com)
  (setq oobj (vlax-ename->vla-object (car (nentsel "\nSelect source text: "))))
  (if (= (vlax-get-property oobj 'ObjectName) "AcDbMText")
    (setq nstrg (vlax-get-property oobj 'TextString))
    (exit)	   
    )
  (command "_MLEADER")
  (while (= 1 (logand (getvar "CMDACTIVE") 1)) (command PAUSE))
  (setq nobj (vlax-ename->vla-object (entlast)))
  (if (= (vlax-get-property nobj 'ObjectName) "AcDbMLeader")
    (vlax-put-property nobj 'TextString nstrg)
    (exit)	   
    )
  (entdel (vlax-vla-object->ename oobj))
  (princ)
)

Вложения
Тип файла: dwg
DWG 2010
Чертеж1.dwg (162.4 Кб, 736 просмотров)


Последний раз редактировалось Кулик Алексей aka kpblc, 02.03.2015 в 16:15.
Просмотров: 4345
 
Непрочитано 02.03.2015, 16:02
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от casaatik Посмотреть сообщение
Как можно его изменить чтобы он сам находил линии с текстом и делал из них мультивыноски.
Добавить в код логику поиска текста и линий и изменить код для корректного преобразования линий и текста в мультивыноски. Изменений будет по объему гораздо больше, чем исходный код.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 04.12.2015, 11:55
#3
DmitriyBastr


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


Если тема ещё актуальна.....
Сам с эти столкнулся.
Могу только такое решение предложить:

1. Соединяем два отрезка в выноску и кликаем в пространстве чертежа, что бы не заполнять поле текста. Вот код для этого:

Код:
[Выделить все]
 (defun c:tt ()
 (setvar "CMDECHO" 0)
 (if (setq ss (ssget '((0 . "LINE")))) (progn
 (setq i -1)
 (repeat (sslength ss)
 (setq ent (entget (ssname ss (setq i (1+ i))))
 p1 (cdr(assoc 10 ent))
 p2 (cdr(assoc 11 ent)))
 (command "_.LEADER" p1 p2 "" "" "N")
 )
 (command "_.ERASE" ss "")
 ))
 (setvar "CMDECHO" 1)
 (princ)
 )
2. Соединяем полученную пустую выноску с нужным текстом. И получается готовая мультивыноска. Вот код для этого:

Код:
[Выделить все]
[lisp][/;LEADER2MULTILEADER
;Converts autocad leaders with text or mtext to autocad 2008+ multileaders
;created by Jeffery Allen - 11/1/2007
 (defun C:LD2MLD (/ ent1 ent1-gcode ent1-type leader-pt-list leader-1st-pt leader-2nd-pt
ent2 ent2-gcode ent2-type text-strg)
 (setq ent1(car(entsel "\nSelect a Leader: "))
ent1-gcode(entget ent1)
ent1-type(cdr(assoc 0 ent1-gcode))
)
(if(= ent1-type "LEADER")
(progn
(setq leader-pt-list(member(assoc 10 ent1-gcode) ent1-gcode)
leader-1st-pt(cdr(car leader-pt-list))
leader-2nd-pt(cdr(cadr leader-pt-list))
ent2(car(entsel "\nSelect Text or Mtext: "))
ent2-gcode(entget ent2)
ent2-type(cdr(assoc 0 ent2-gcode))
)
(if(or(= ent2-type "TEXT")(= ent2-type "MTEXT"))
(progn
(setq text-strg(cdr(assoc 1 ent2-gcode)))
(setvar "OSMODE" (boole 7 (getvar "OSMODE") 16384));osnap off
(setvar "CMDECHO" 0);command echo off
(command "_.ERASE" ent1 ent2 ""
"_.MLEADER" leader-1st-pt leader-2nd-pt text-strg
)
(setvar "CMDECHO" 1);command echo on
(setvar "OSMODE" (boole 2 (getvar "OSMODE") 16384));osnap on
)
)
(if(and(/= ent2-type "TEXT")(/= ent2-type "MTEXT"))(alert "Object selected is not a text or mtext"))
)
)
(if(/= ent1-type "LEADER")(alert "Object selected is not a leader"))
(princ)
);defun
 (setq message "Leader 2 Multileader loaded...
 Converts autocad leaders with text or
mtext to autocad 2008+ multileaders
 Created by Jeffery Allen - 11/1/2007
 Start command with \"LD2MLD\"")
(alert message)
(setq message nil)
(princ)
(c:LD2MLD) LISP]
3.Есть ещё предположение, что эти два кода можно как-то объединить...
DmitriyBastr вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Преобразование текста и линий в мультивыноски (чохом)

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание нового типа линий Apelsinov AutoCAD 915 08.07.2022 12:36
Как удалить тип линии Tolyanovich AutoCAD 48 20.11.2014 09:24
Преобразование многострочного текста в блок с атрибутами superkot007 Программирование 16 21.03.2014 15:26
Программное создание размерных стилей Кулик Алексей aka kpblc Программирование 89 08.04.2013 12:59
LISP. Выравнивание текста по двум точкам. Krieger Готовые программы 10 24.12.2011 16:02