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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Ответ
Поиск в этой теме
Непрочитано 20.07.2008, 20:12
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,980

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (Visual foxpro) программку типа суммирования столбцов списал у соседа (это уже в университете).
Не смотря на эте намерен научится писать программы для Автокада на лиспе, скачал книгу Хювенена, несколько примеров создания программ, но после получасового “смотрения” таких книг мое мышление явно притормаживает.
Решил пойти другим путем.
Нашел самый короткий лисп из моей коллекции, и прошу программистов с этого форума пошагово объяснить какой символ что означает. Надеюсь на вашу помощь.


Код:
[Выделить все]
(defun c:make-blocks-explodeable (/ adoc)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (vlax-for blk_def (vla-get-blocks adoc)
    (if (and (equal (vla-get-isxref blk_def) :vlax-false)
             (equal (vla-get-islayout blk_def) :vlax-false)
             ) ;_ end of and
      (vl-catch-all-apply '(lambda () (vla-put-explodable blk_def :vlax-true)))
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
_____________________________________________________________________________________________________________

Прошло много лет и топик теперь представляет из себя площадку для обучения азов программирования для многих начинающих.
Так что начинающие лиспогрызы приветствуются .
__________________
Блог

Последний раз редактировалось Red Nova, 12.07.2017 в 05:43.
Просмотров: 1973630
 
Непрочитано 17.08.2022, 16:10
#4261
fomichev.147

инженер-гидротехник
 
Регистрация: 08.02.2015
Москва
Сообщений: 41


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
применить к построенным отрезкам vl-cmdf "_FILLET", затем запихать в блок
А как мне добавить созданию дугу в блок, если с линиями я пользуюсь методом "vla-adline" то вот для созданной дуги не могу найти метода
fomichev.147 вне форума  
 
Непрочитано 17.08.2022, 16:41
#4262
Кулик Алексей aka kpblc
Moderator

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


vla-addarc
Правда, придется вычислять вообще все
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.08.2022, 16:43
#4263
Сергей812


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


ну в данном случае хэндлы у отрезков не меняются после _Fillet, а дугу можно через entlast получить
Сергей812 вне форума  
 
Непрочитано 17.08.2022, 17:20
#4264
fomichev.147

инженер-гидротехник
 
Регистрация: 08.02.2015
Москва
Сообщений: 41


Вот кусок кода который хочу сделать. Упражнение просто для обучения. Блок из двух отрезков с сопряжением. ранее сделал такой же без ActiveX.

Насколько я понял дугу в блок можно запихать (по аналогии с линиями) только при помощи vla-addarc. другого пути нет?

Может есть метод что бы запихнуть в блок вместе с линиями произвольный (в моем случае уже созданную дугу) vla Объект ?

Код:
[Выделить все]
(vl-load-com)
  (setq acad_object (vlax-get-acad-object));указатель на программу autocad
  (setq active_document (vla-get-activedocument acad_object));указатель на актинвый документ
  (setq model_space (vla-get-modelspace active_document));указатель на пространства модели

  
  (setq p1 (getpoint "\nУкажите базову точку: "));запрос базовой точки
  (setq DL1 (getreal "\Кажите длину1 элемента"))
  (setq DL2 (getreal "\Кажите длину2 элемента"))
  (setq p2 (mapcar '+ p1 (list DL1 0)))
  (setq p3 (mapcar '+ p2 (list 0 DL2)))

  
  (setq bl_name (strcat "Г+сопр" (rtos DL1)" " (rtos DL2)));задаем имя блока
  
  (if (not(tblsearch "block" bl_name)); проверяем есть ли такой блок
    (progn

      (setq mp_blok (vla-add (vla-get-blocks active_document)(vlax-3d-point p1) bl_name))

      (vla-addline blk1 (vlax-3d-point p1) (vlax-3d-point p2))
      (setq nl1 (entlast))
      (vla-addline mp_blok (vlax-3d-point p2) (vlax-3d-point p3))
      (setq nl2 (entlast))
      (vl-cmdf "_fillet" nl1 nl2 "")
      (setq s (vlax-ename->vla-object(entlast)));и вот дальше не знаю как 
               
      );end progn
    );end if
fomichev.147 вне форума  
 
Непрочитано 17.08.2022, 17:23
1 | #4265
Кулик Алексей aka kpblc
Moderator

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


Команда не сработает. Я бы добавлял примитивы в пространство модели, делал над ними соответствующие операции, а потом уже указатели на отрезки + entlast (полученный в результате _.fillet) загонял в блок. Это (как мне кажется) будет одним из самых простых способов.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.08.2022, 23:04
#4266
fomichev.147

инженер-гидротехник
 
Регистрация: 08.02.2015
Москва
Сообщений: 41


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Команда не сработает. Я бы добавлял примитивы в пространство модели, делал над ними соответствующие операции, а потом уже указатели на отрезки + entlast (полученный в результате _.fillet) загонял в блок. Это (как мне кажется) будет одним из самых простых способов.
Спасибо, а можете подсказать как добавить в блок созданные примитивы?
fomichev.147 вне форума  
 
Непрочитано 17.08.2022, 23:15
1 | #4267
Кулик Алексей aka kpblc
Moderator

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


vla-copyobjects в помощь А потом уже и vla-insertblock
Командные методы создания блока не могу порекомендовать.

----- добавлено через ~22 мин. -----
Хотя, посмотрев на исходный код, можно использовать нечто типа
Код:
[Выделить все]
 (vl-load-com)
(defun t1 (/ base_point len_hor len_ver radius adoc blk_name blk_def)
  (if (and (not (vl-catch-all-error-p
                  (vl-catch-all-apply
                    (function (lambda () (setq base_point (getpoint "\nБазовая точка <Отмена> : "))))
                  ) ;_ end of vl-catch-all-apply
                ) ;_ end of vl-catch-all-error-p
           ) ;_ end of not
           (not
             (vl-catch-all-error-p
               (vl-catch-all-apply
                 (function
                   (lambda () (setq len_hor (getdist base_point "\nУкажите длину по горизонтали <Отмена> : ")))
                 ) ;_ end of function
               ) ;_ end of vl-catch-all-apply
             ) ;_ end of vl-catch-all-error-p
           ) ;_ end of not
           (not
             (vl-catch-all-error-p
               (vl-catch-all-apply
                 (function (lambda () (setq len_ver (getdist base_point "\nУкажите длину по вертикали <Отмена> : ")))
                 ) ;_ end of function
               ) ;_ end of vl-catch-all-apply
             ) ;_ end of vl-catch-all-error-p
           ) ;_ end of not
           (not (vl-catch-all-error-p
                  (vl-catch-all-apply
                    (function (lambda () (setq radius (getreal "\nВведите радиус скругления <Отмена> : "))))
                  ) ;_ end of vl-catch-all-apply
                ) ;_ end of vl-catch-all-error-p
           ) ;_ end of not
      ) ;_ end of and
    (progn
      (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
      (setq blk_name (strcat "Г+сопр " (itoa (fix len_hor)) "х" (itoa (fix len_ver))))
      (if (not (tblobjname "block" blk_name))
        (progn
          (setq blk_def (vla-add (vla-get-blocks adoc) (vlax-3d-point '(0. 0. 0.)) blk_name))
          (vla-addline blk_def (vlax-3d-point (list radius 0.)) (vlax-3d-point (list len_hor 0.)))
          (vla-addline blk_def (vlax-3d-point (list 0. radius)) (vlax-3d-point (list 0. len_ver)))
          (vla-addarc
            blk_def
            (vlax-3d-point (list radius radius 0.))
            radius
            pi
            (* 1.5 pi)
          ) ;_ end of vla-AddArc
        ) ;_ end of progn
      ) ;_ end of if
      (vla-insertblock
        (vla-get-modelspace adoc)
        (vlax-3d-point base_point)
        blk_name
        1.
        1.
        1.
        0.
      ) ;_ end of vla-InsertBlock

      (vla-endundomark adoc)
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun
Естественно, использовать это в боевом режиме нельзя: не отслеживания состояния слоев, нет нормализации состава блока и теде. Но в качестве старта, может, и покатит.

----- добавлено через ~23 мин. -----
Offtop: Код особо не тестировал и не проверял. Так, в тепличных условиях...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.08.2022, 22:00
#4268
fomichev.147

инженер-гидротехник
 
Регистрация: 08.02.2015
Москва
Сообщений: 41


Кулик Алексей aka kpblc, Спасибо Вам, за помощь. Буду разбираться.
fomichev.147 вне форума  
 
Непрочитано 04.10.2022, 09:35
#4269
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Уважаемые Гуру, накидал код на скорую руку по печати выборочного фрагмента чертежа по заданным параметрам посредством программы приПринтер. Интересует вопрос, почему так долго выполняется программа? Это где то мой косяк или тут сложности "железного" плана - типа связь с сервером, настройка печати? Возможно ли как то найти причину тормоза?

Тут сам код.
Offtop: Он изобилует комментариями, я для себя каждый шаг прописал. Как показала практика, код забывается быстрее чем хотелось бы, а когда нужно сделать или изменить быстро, то долго заново вникать в каждую строку. Потому что программировать приходится "раз в сто лет". А тут еще и обновление на новый автокад сделали (этакий подарок мне на 15-летие усердной службы на фирме - за что барину огромный поклон )

Код:
[Выделить все]
(vl-load-com)
(defun c:PP(/ acadObj doc aclay
	    pointTemp1 pointTemp2
	    pt1 pt2 )
  
    ;; Печать в припринтер при помощи выбора нижней левой и верхней правой точек
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))
    (setq aclay (vla-get-ActiveLayout doc))

    ;Получаем первую точку рамки
    (setq pt1 (vlax-variant-value
	      (vla-GetPoint (vla-get-Utility doc)
	      nil
	      "Click the lower-left of the window to plot.")))
    ;; Приводим массив к 2д виду, удаляем Z-координату
    (setq pointTemp1 (vlax-make-safearray vlax-vbDouble '(0 . 1)))
    (vlax-safearray-put-element pointTemp1 0 (vlax-safearray-get-element pt1 0))
    (vlax-safearray-put-element pointTemp1 1 (vlax-safearray-get-element pt1 1))

    ;Получаем вторую точку рамки
    (setq pt2 (vlax-variant-value
		(vla-GetCorner (vla-get-Utility doc)
		pt1
		"Click the upper-right of the window to plot.")))
    ;;Приводим массив к 2д виду, удаляем Z-координату
    (setq pointTemp2 (vlax-make-safearray vlax-vbDouble '(0 . 1)))
    (vlax-safearray-put-element pointTemp2 0 (vlax-safearray-get-element pt2 0))
    (vlax-safearray-put-element pointTemp2 1 (vlax-safearray-get-element pt2 1))

    ;Устанавливаем рамки окошка области печати
    (vla-SetWindowToPlot aclay pointTemp1 pointTemp2);размеры области печати
    ;; Read back window information
    (vla-GetWindowToPlot (vla-get-ActiveLayout doc) 'pt1 'pt2)

    (setq pt1 (vlax-safearray->list pt1)
	         pt2 (vlax-safearray->list pt2))

    ;;Обновляем текущую плот-информацию
    (vla-RefreshPlotDeviceInfo aclay)
  
    ;Настройка печати
    (vla-put-ConfigName aclay "priPrinter.pc3");Имя принтера
    (vla-put-CanonicalMediaName aclay "A4");Формат
    (vla-put-CenterPlot aclay :vlax-true);смещение от начала (центрировать)
    (vla-put-PlotRotation aclay ac270degrees) ;ориентация чертежа
    (vla-put-StandardScale aclay acVpScaleToFit);масштаб печати - вписать
    (vla-put-StyleSheet aclay "monochrome.ctb") ;настройка стиля печати
    (vla-put-PlotType aclay acWindow) ;область печати - рамка  

    ;Отправляем на печать
    (vla-Regen doc acActiveViewport) ;регенерация текущего пространства 
    (vla-PlotToDevice (vla-get-Plot doc));непосредственно печать
); def PP
----- добавлено через ~7 мин. -----
Оказалось все намного проще - нужно было сбросить системную переменную Backgroundplot в ноль. Увы, не догадался сразу.
alex8888 вне форума  
 
Непрочитано 26.10.2022, 11:45
#4270
nikkomp


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


Здраствуйте в проектной организации у наших компьютерщиков я вытянул вот этот код
Код:
[Выделить все]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (defun C:CR( / l basepoint ss)
  (princ "\n*** COPY & ROTATE ***")
(SETVAR "CMDECHO" 1)
(setq l (entlast))
(command "_SELECT" "_auto" pause)
(setq basepoint (getpoint "\n Укажи базовую точку:"))
(command "_COPY" "_Prev" "" basepoint pause)
(setq ss (ssadd))
(while (/= l nil)
 (setq l (entnext l))
 (if (/= l nil) (ssadd l ss))
)
(command "_rotate" ss "" pause pause)
);def

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:RTT( / l basepoint ss)
  (princ "\n*** ROTATE without DELETE ***")
  (SETVAR "CMDECHO" 1)
  (setq l (entlast))
  (command "_SELECT" "_auto" pause)
  (setq basepoint (getpoint "\n Укажи базовую точку:"))
  (command "_COPY" "_Prev" "" basepoint basepoint)
  (setq ss (ssadd))
  (while (/= l nil)
   (setq l (entnext l))
   (if (/= l nil) (ssadd l ss))
  )
 (command "_rotate" ss "" basepoint pause)
 (command "_redraw")
);def

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:Mvrt( / l basepoint)
(princ "\n*** MOVE & ROTATE ***")
(SETVAR "CMDECHO" 1)
(setq l (entlast))
(command "_SELECT" pause)
(setq basepoint (getpoint "\n Укажи базовую точку:"))
(command "_MOVE" "_Prev" "" basepoint pause)
(command "_rotate" "_Prev" "" pause pause)
);def
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
пересмотрев кучу литературы что была доступна в интернете я поднапрягся и усовершенствовал под себя
Код:
[Выделить все]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (defun C:CR( / l basepoint1 basepoint2 basepoint3 ss)
  (princ "\n*** COPY & ROTATE ***")
(setq old_ORTHOMODE (getvar "ORTHOMODE"))
(SETVAR "ORTHOMODE" 0)
(SETVAR "CMDECHO" 1)
(setq l (entlast))
(command "_SELECT" "_auto" pause)
(setq basepoint1 (getpoint "\n Укажи базовую точку копирования:"))
(setq basepoint2 (getpoint "\n Укажи конечную точку перемещения = базовую точку поворота"))
(command "_COPY" "_Prev" "" basepoint1 basepoint2)
(setq ss (ssadd))
(while (/= l nil)
 (setq l (entnext l))
 (if (/= l nil) (ssadd l ss))
)
 (setq basepoint3  (getpoint "\n Укажи сначала опорный угол:а потом поворот:"))
 (command "_rotate" ss ""  basepoint2 "Опорный"  basepoint2 basepoint3 pause)
(setvar "ORTHOMODE" old_ORTHOMODE)
);def

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:RTT( / l basepoint1 basepoint2 ss)
  (princ "\n*** ROTATE without DELETE ***")
  (setq old_ORTHOMODE (getvar "ORTHOMODE"))
  (SETVAR "ORTHOMODE" 0)
  (SETVAR "CMDECHO" 1)
  (setq l (entlast))
  (command "_SELECT" "_auto" pause)
  (setq basepoint1 (getpoint "\n Укажи базовую точку копирования = базовую точку поворота:"))
  (setq basepoint2 (getpoint "\n Укажи сначала опорный угол:а потом поворот:"))
  (command "_COPY" "_Prev" "" basepoint1  basepoint1)
  (setq ss (ssadd))
  (while (/= l nil)
   (setq l (entnext l))
   (if (/= l nil) (ssadd l ss))
  )
 (command "_rotate" ss ""  basepoint1 "Опорный"  basepoint1 basepoint2 pause)
 (command "_redraw")
 (setvar "ORTHOMODE" old_ORTHOMODE)
);def

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:Mvrt( / l basepoint1 basepoint2 basepoint3 ss)
(princ "\n*** MOVE & ROTATE ***")
(setq old_ORTHOMODE (getvar "ORTHOMODE"))
(SETVAR "ORTHOMODE" 0)
(SETVAR "CMDECHO" 1)
(setq l (entlast))
(command "_SELECT" pause)
(setq basepoint1 (getpoint "\n Укажи базовую точку перемещения:"))
(setq basepoint2 (getpoint "\n Укажи конечную точку перемещения = базовую точку поворота"))
(command "_MOVE" "_Prev" "" basepoint1 basepoint2)
 (setq basepoint3 (getpoint "\n Укажи сначала опорный угол:а потом поворот:"))
(command "_rotate" "_Prev" "" basepoint2 "Опорный"  basepoint2 basepoint3 pause)
(setvar "ORTHOMODE" old_ORTHOMODE)
);def
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
все устраивает но не понятно почему при выполнении первой по очереди команды не отображается предварительный просмотр объектов (DRAGMODE), завершается все отлично.

Последний раз редактировалось nikkomp, 26.10.2022 в 12:08.
nikkomp вне форума  
 
Непрочитано 26.10.2022, 12:07
#4271
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от nikkomp Посмотреть сообщение
не отображается предварительный просмотр объектов (DRAGMODE)
А должен?
Offtop: И чем не устраивает почти штатный _.mocoro ?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.10.2022, 12:33
#4272
nikkomp


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


Ну так можно сделать чтобы срабатывало?
nikkomp вне форума  
 
Непрочитано 26.10.2022, 15:09
#4273
Кулик Алексей aka kpblc
Moderator

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


Никак. Ты при всех операциях уже указываешь все необходимые точки.
P.S. И ты себе такие грабли подготовил - пальчики оближешь! Поменяй ради приколу copymode, посмотри, как оно работать будет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.11.2022, 10:44
#4274
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 108


Подскажите пожалуйста такую ситуацию.

Делаю определенную замену текста в примитиве MLEADER: группа (304 . "заменяемый текст") посредством SUBST
После выполнения entmode меняется цвет значения текста в MLEADER на значение "по слою", несмотря на то, что внутри MLEADER текст имеет свой цвет (знаю что не правильно, но так получилось)

Код:
[Выделить все]
 
(setq new (cons 304 "новый текст"))
(setq old (assoc 304 nabor))
(setq nabor (subst new old nabor))
(entmod nabor)
С примитивом MTEXT такого не происходит, несмотря на внутреннее форматирование: группа (1 . "заменяемый текст") -> просто меняется текст без "обнуления" его внутреннего форматирования цветом

Последний раз редактировалось Sege, 03.11.2022 в 11:17.
Sege вне форума  
 
Непрочитано 03.11.2022, 12:00
#4275
Кулик Алексей aka kpblc
Moderator

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


Значит, меняется не только эта группа. Ну или их несколько.
А кто мешает работать через ActiveX?

----- добавлено через ~9 мин. -----
Кстати, приведи пример такой выноски - что-то мне не удалось сделать цвет только текста отличным от цвета мультивыноски.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.11.2022, 13:00
#4276
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 108


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Значит, меняется не только эта группа. Ну или их несколько.
А кто мешает работать через ActiveX?

----- добавлено через ~9 мин. -----
Кстати, приведи пример такой выноски - что-то мне не удалось сделать цвет только текста отличным от цвета мультивыноски.
Пример во вложении

UDP:
кажется понимаю в чем дело: в тексте мультивыноски в группе 304 уже сидит внутреннее форматирование цветом (304 . "{\\C4;СТАРЫЙ ТЕКСТ}")
а SUBSTом мы тупо меняем на новое значение без учета знаков внутреннего форматирования, т.е. получается уже конструкция (304 . "НОВЫЙ ТЕКСТ")
Вложения
Тип файла: dwg
DWG 2010
MLEADER.dwg (61.9 Кб, 3 просмотров)

Последний раз редактировалось Sege, 03.11.2022 в 13:18.
Sege вне форума  
 
Непрочитано 03.11.2022, 13:12
1 | 1 #4277
Кулик Алексей aka kpblc
Moderator

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


Так у тебя там принудительное форматирование выставлено!

----- добавлено через ~2 мин. -----
Код:
[Выделить все]
 (setq mleader (vlax-ename->vla-object (car (entsel))))
(vla-get-TextString mleader) ;"{\\C1;1}"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.11.2022, 13:24
#4278
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 108


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Так у тебя там принудительное форматирование выставлено!

----- добавлено через ~2 мин. -----
Код:
[Выделить все]
 (setq mleader (vlax-ename->vla-object (car (entsel))))
(vla-get-TextString mleader) ;"{\\C1;1}"
Да, Алексей, это я уже увидел Т.е. тогда достаточно произвести обновление значения текста с сохранением внутреннего форматирования )

Последний раз редактировалось Sege, 03.11.2022 в 15:00.
Sege вне форума  
 
Непрочитано 08.11.2022, 08:25 Помогите разобраться в маленьком лиспе!
#4279
Jek30


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


Я вообще не разбираюсь в лиспах.
Есть лисп для быстрой печати, который я нашел по адресу (https://forum.dwg.ru/showthread.php?...FB%E1%EE%F0%F3).
Вот фрагмент этого лиспа:↓↓↓

Код:
[Выделить все]
 (command "_.plot"
             "_Yes"
             "model" ; Имя листа или [?] <Модель>: 
             "HP CLJ 5550N PCL 6 A4.pc3" ;Имя устройства вывода 
             "A4" ;Формат листа бумаги
             "Millimeters" ;Единицы измерения размеров листа
             "portrait" ;Ориентация чертежа 
             "_No" ;Перевернуть чертеж?
             "_Window" ;Печатаемая область
             xy1 ;Первая точка окна 
             xy2 ;Вторая точка окна 
             "_fit" ;[Вписать]
             "_center" ;Смещение от начала (x,y) или [Центрировать]
             "_yes" ;Учитывать стили печати?
             "monochrome.ctb" ;Имя таблицы стилей печати
             "_yes" ;Учитывать веса линий?
             "As displayed" ;Режим вывода раскрашенных ВЭ
             "_No" ;Запись чертежа в файл
             "_yes" ;Сохранить изменения параметров листа
             "_yes" ;Перейти к печати
    ) ;_ end of command
Растолкуйте пожалуйста каждую строчку, а именно, на что можно изменить данные в строчках чтобы изменились параметры печати и лисп работал?
Например я знаю некоторые строчки:
"A4" ;Формат листа бумаги ***меняем на "А3"-получаем формат А3
или
"portrait" ;Ориентация чертежа ***меняем на "Landscape"- ориентация чертежа меняется на альбомную.
ну и еще парочку строк знаю, а остальные нет.
К примеру если я не хочу чтоб вписывалось, или хочу чтоб печать работала в пространстве листов и так далее, то на что надо заменить эти остальные строки, и какие варианты есть?
Благодарю!☺
Вложения
Тип файла: lsp aaa1.lsp (2.1 Кб, 6 просмотров)
Jek30 вне форума  
 
Непрочитано 14.11.2022, 11:35
#4280
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


странно , а зачем печатать из пространства листа какой то кусок?
вы можете вбить (command "_.plot") и смотреть что вам выводит и какие варианты дает автокад, в некоторыхпараметрах можно ввести "?" чтобы посмотреть все варианты
Соответвествно чтобы не из модели печатать нужно в 3 строке где сейчас "model" , нужно указать имя листа из которого печатать. обычно имя текущего листа можно получить через (getvar "CTAB") но тут он не работает.
тоже самое если не хотите вписывать то в строке "_fit" нужно указать свое значение.
Composter вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46