Lisp. Создание слоя(слоёв) из мастер-списка. Изменения в программу CLAY от JefferyPSanders
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Создание слоя(слоёв) из мастер-списка. Изменения в программу CLAY от JefferyPSanders

Lisp. Создание слоя(слоёв) из мастер-списка. Изменения в программу CLAY от JefferyPSanders

Ответ
Поиск в этой теме
Непрочитано 12.03.2012, 14:41 #1
Lisp. Создание слоя(слоёв) из мастер-списка. Изменения в программу CLAY от JefferyPSanders
99xt1
 
нефтепереработка
 
Мозырь, Республика Беларусь
Регистрация: 17.11.2009
Сообщений: 77

Здесь нашёл LISP для быстрого создания определённых слоёв в чертеже.
Код:
[Выделить все]
 
;;;--- CLAY.lsp - Create layer(s) from a Master List [ Master.txt ]
;;;
;;;
;;;--- Created on 2/27/04 by Jeffery P Sanders
;;;
;;;
;;;--- Modified on 5/3/05
;;;
;;;
;;;
;;;--- Please read the txt file CLAY_README.txt


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   Sort Function   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;--- Usage (srt list)
;;;
(defun srt(alist / n)(setq lcup nil rcup nil)
 (defun cts(a b)
  (cond
   ((> a b)t)
   ((= a b )t)
   (t nil)
 ))
 (foreach n alist
  (while (and rcup(cts n(car rcup)))(setq lcup(cons(car rcup)lcup)rcup(cdr rcup)))
   (while (and lcup(cts(car lcup)n))(setq rcup(cons(car lcup)rcup)lcup(cdr lcup)))
   (setq rcup(cons n rcup))
 )
 (append(reverse lcup)rcup)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;  End of Sort Function  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;; Function to save the dialog box settings  ;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun saveVars()

  ;;;--- Setup a list to hold the selected items
  (setq layList(list))

  ;;;--- Save the list setting
  (setq readlist(get_tile "layerlist")) 

  ;;;--- Setup a variable to run through the list
  (setq count 1)

  ;;;--- Cycle through the list getting all of the selected items
  (while (setq item (read readlist))
    (setq layList(append layList (list (nth item layerList))))
    (while 
      (and
        (/= " " (substr readlist count 1))
        (/= ""  (substr readlist count 1))
      )
      (setq count (1+ count))
    )
    (setq readlist (substr readlist count))
  )
)

;;;;;;;;;;;;;;;;;;;;;;; End of saving settings from dialog box ;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;    Function to get a list of all layer names   ;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun getLayerInfo()

  ;;;--- Set up an empty list
  (setq layerList(list))

  ;;;--- Open the text file
  (if (findfile "MASTER.txt")
    (progn

      (if (setq fil(open (findfile "MASTER.txt") "r"))
        (progn

          ;;;--- Skip the first three lines        
          (read-line fil)
          (read-line fil)
          (read-line fil)

          ;;;--- Read the lines of data in the text file
          (while (setq a (read-line fil))
        
            ;;;--- Get the color
            (setq b(read-line fil))
     
            ;;;--- Get the linetype
            (setq c(read-line fil))

            ;;;--- Add the data to the list
            (setq layerList
              (append 
                layerList
                (list (list a b c))
              )
            )
          )
          ;;;--- Close the file.
          (close fil)
        )
      )
    )
  )

  ;;;--- Sort the list
  ;(setq layerList(srt layerList))
 
  layerList
)
;;;;;;;;;;;;;;;;;;;;;; End of layer listing ;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;888;;;;;;;888;;;;;;;;;;888;;;;;;;;;;;8888888;;;;;;8888;;;888;;;;;;;;;;;;
;;;;;;;;8888;;;;;8888;;;;;;;;;88888;;;;;;;;;;;;888;;;;;;;;88888;;888;;;;;;;;;;;;
;;;;;;;;88888;;;88888;;;;;;;;888;888;;;;;;;;;;;888;;;;;;;;888888;888;;;;;;;;;;;;
;;;;;;;;888888;888888;;;;;;;888;;;888;;;;;;;;;;888;;;;;;;;888;888888;;;;;;;;;;;;
;;;;;;;;888;88888;888;;;;;;88888888888;;;;;;;;;888;;;;;;;;888;;88888;;;;;;;;;;;;
;;;;;;;;888;;888;;888;;;;;888;;;;;;;888;;;;;;8888888;;;;;;888;;;8888;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;888;;;;;;;;;;;;888888888;;;;;;;;888888888;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;88888;;;;;;;;;;;888;;;888;;;;;;;;888;;;888;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;888;888;;;;;;;;;;888;;;888;;;;;;;;888;;;888;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;888;;;888;;;;;;;;;888888888;;;;;;;;888888888;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;88888888888;;;;;;;;888;;;;;;;;;;;;;;888;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;888;;;;;;;888;;;;;;;888;;;;;;;;;;;;;;888;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun C:CLAY(/ layerList)

  ;;;--- Turn off the command echo
  (setvar "cmdecho" 0)

  ;;;--- Preset an exit string
  (setq alertStr "\n CLAY.lsp Complete!")

  ;;;--- Get the layer names
  (setq layerList(getLayerInfo))

  ;;;--- If a master list was found
  (if layerList
    (progn

      ;;;--- Load the DCL file
      (setq dcl_id (load_dialog "CLAY.dcl"))
 
      ;;;--- See if the dialog box is already loaded
      (if (not (new_dialog "CLAY" dcl_id))
        (progn
          (alert "The CLAY.DCL file was not found!")
          (exit)
        )
      )

      ;;;--- Get the layer names
      (setq layNames(list))
      (foreach a layerList
        (setq layNames(append layNames(list (car a))))
      )

      ;;;--- Add the layer names to the dialog box
      (start_list "layerlist" 3)
      (mapcar 'add_list layNames)
      (end_list)

      ;;;--- If an action event occurs, do this function
      (action_tile "cancel" "(setq ddiag 1)(done_dialog)")
      (action_tile "accept" "(setq ddiag 2)(saveVars)(done_dialog)") 

      ;;;--- Display the dialog box
      (start_dialog)

      ;;;--- If the cancel button was pressed
      (if (= ddiag 1)

        ;;;--- Set an exit message
        (setq alertStr "\n \n ...CLAY Cancelled. \n ")
      )
  
      ;;;--- If the "Okay" button was pressed
      (if (= ddiag 2)
        (progn
            
          ;;;--- If layers were selected from the dialog box
          (if(> (length layList) 0)
            (progn

              ;;;--- Cycle through each layer selected
              (foreach a layList

                ;;;--- If the layer does not exist
                (if(not(tblsearch "LAYER" (car a)))
                  (progn
       
                    ;;;--- Creat the layer
                    (command "-layer" "new" (car a) "C" (cadr a) (car a) "Lt" (caddr a) (car a) "")

                    (princ "\nCreated Layer  - ")
                    (princ (car a))
                  )

                  ;;;--- Else the layer already exist so modify it's properties
                  (progn

                    ;;;--- Modify the layer
                    (command "-layer" "C" (cadr a) (car a) "Lt" (caddr a) (car a) "")

                    (princ "\nModified Layer - ")
                    (princ (car a))

                  )
                )
              )
            )
          )
        )
      )

      ;;;--- Print the exit message
      (princ alertStr)
    )

    ;;;--- If a master list was not generated, inform the user
    (progn

       (setq alertStr "The MASTER list was not found.\nMake sure the file [ MASTER.txt ] is in your search\npath and try again!")
       (setq alertStr (strcat alertStr "\n\nThe master list must be in this format:\n\nLayerName\nColor\nLineType"))
       (setq alertStr (strcat alertStr "\nLayerName\nColor\nLineType\nect.\n\nNote: The program will skip the first three lines."))
       (alert alertStr)
    )
  )

  ;;;--- reset the command echo
  (setvar "cmdecho" 1)

  ;;;--- suppress the last echo for a clean exit
  (princ)

)  
Содержимое файла master.txt
Код:
[Выделить все]
Layer Name - Do not delete
Color      - Do not delete
Line Type  - Do not delete
STR
1
Continuous
DIM
3
Continuous
STEEL
5
Continuous
REBAR
6
Continuous
CONCRETE
4
Continuous
ANCHOR_BOLT
2
Hidden
BUILDING
8
Continuous
TXT
7
Continuous
WELD
9
Continuous
HOLE
10
Continuous
Как изменить LISP, чтобы была возможность в файле master.txt 4-ой строкой задавать также вес линий слоя, а 5-ой - печатать или не печатать слой?
Просмотров: 13565
 
Непрочитано 12.03.2012, 14:57
#2
VVA

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


Посмотри на другой вариант
Код:
[Выделить все]
(defun MakeLayer ( name colour linetype lineweight willplot bitflag description )
  ;; © Lee Mac 2010
  (or (tblsearch "LAYER" name)
    (entmake
      (append
        (list
          (cons 0 "LAYER")
          (cons 100 "AcDbSymbolTableRecord")
          (cons 100 "AcDbLayerTableRecord")
          (cons 2  name)
          (cons 70 bitflag)
          (cons 290 (if willplot 1 0))
          (cons 6
            (if (and linetype (tblsearch "LTYPE" linetype))
              linetype "CONTINUOUS"
            )
          )
          (cons 62 (if (and colour (< 0 (abs colour) 256)) colour 7))
          (cons 370
            (fix
              (* 100
                (if (and lineweight (<= 0.0 lineweight 2.11)) lineweight 0.0)
              )
            )
          )
        )
        (if description
          (list
            (list -3
              (list "AcAecLayerStandard" (cons 1000 "") (cons 1000 description))
            )
          )
        )
      )
    )
  )
)

(defun c:MakeLayers nil (vl-load-com)
  ;; © Lee Mac 2010

  ;; Specifications:

  ;; Description        Data Type        Remarks
  ;; -----------------------------------------------------------------
  ;; Layer Name          STRING          Only standard chars allowed
  ;; Layer Colour        INTEGER         may be nil, -ve for Layer Off, Colour < 256
  ;; Layer Linetype      STRING          may be nil, If not loaded, CONTINUOUS.
  ;; Layer Lineweight    REAL            may be nil, 0 <= x <= 2.11
  ;; Plot?               BOOLEAN         T = Plot Layer, nil otherwise
  ;; Bit Flag            INTEGER         0=None, 1=Frozen, 2=Frozen in VP, 4=Locked
  ;; Description         STRING          may be nil for no description

  ;; Function will return list detailing whether layer creation is successful.    

  (
    (lambda ( lst / lts ) (setq lts (vla-get-Linetypes (vla-get-ActiveDocument (vlax-get-acad-object))))
      (mapcar 'cons (mapcar 'car lst)
        (mapcar
          (function
            (lambda ( x )
              (and (caddr x)
                (or (tblsearch "LTYPE" (caddr x))
                  (vl-catch-all-apply 'vla-load (list lts (caddr x) "acad.lin"))
                )
              )
              (apply 'MakeLayer x)
            )
          )
          lst
        )
      )
    )
   '(
     ;    Name        Colour        Linetype        Lineweight        Plot?        BitFlag        Description
     (    "Cen"         6           "CENTER"           0.18            T             0             "Center"   )
     (    "Dim"         8             nil              0.20            T             1           "Dimensions" )
     (    "Ht"         3             nil              0.18            T             5               nil      )
     (    "Hid"         4           "HIDDEN"           0.15            T             0             "Hidden"   )
     (    "Sheet"       176            nil              0.09            T             0            "Sheet"  )
     (    "OBJ"        -2             nil              0.40            T             3               nil      )
     (    "PAPER"       5           "PHANTOM"           nil           nil            6               nil      )
     (    "PHAN"        6           "PHANTOM"          0.18            T             0               nil      )
     (    "TITLE"      176            nil               nil            T             1            "For Title" )
     (    "TX"         7             nil               nil            T             0               "text"     )
    )
  )
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 12.03.2012, 15:55
#3
99xt1

нефтепереработка
 
Регистрация: 17.11.2009
Мозырь, Республика Беларусь
Сообщений: 77


Цитата:
Сообщение от VVA Посмотреть сообщение
Посмотри на другой вариант
Попробовал. Вариант Lee Mac создаёт сразу набор слоёв определённый в коде. Первый же вариант подходит больше, потому что позволяет через диалоговое окно выбирать определённый слой, из набора который надо создать. Поэтому, хотелось бы расширить возможности первого варианта.
99xt1 вне форума  
 
Непрочитано 12.03.2012, 20:00
1 | #4
VVA

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


Предыдущий вариант с выбором
Код:
[Выделить все]
(defun c:MakeLayers nil (vl-load-com)
  ;; Specifications:

  ;; Description        Data Type        Remarks
  ;; -----------------------------------------------------------------
  ;; Layer Name          STRING          Only standard chars allowed
  ;; Layer Colour        INTEGER         may be nil, -ve for Layer Off, Colour < 256
  ;; Layer Linetype      STRING          may be nil, If not loaded, CONTINUOUS.
  ;; Layer Lineweight    REAL            may be nil, 0 <= x <= 2.11
  ;; Plot?               BOOLEAN         T = Plot Layer, nil otherwise
  ;; Bit Flag            INTEGER         0=None, 1=Frozen, 2=Frozen in VP, 4=Locked
  ;; Description         STRING          may be nil for no description

  ;; Function will return list detailing whether layer creation is successful.    

  (
    (lambda ( lst / lts ) (setq lts (vla-get-Linetypes (vla-get-ActiveDocument (vlax-get-acad-object))))
      (mapcar 'cons (mapcar 'car lst)
        (mapcar
          (function
            (lambda ( x )
              (and (caddr x)
                (or (tblsearch "LTYPE" (caddr x))
                  (vl-catch-all-apply 'vla-load (list lts (caddr x) "acad.lin"))
                )
              )
              (apply 'MakeLayer x)
            )
          )
          lst
        )
      )
    )
    (
     (lambda ( / fil str lst ret )
       (if (setq fil (findfile "layers.txt"))
         (progn
           (setq fil (open fil "r"))
           (while (setq str (read-line fil))
             (setq str (vl-string-trim " \n\t" str))
             (cond
               ((eq str "") nil)
               ((eq (substr str 1 1) ";") nil)
               ((and (setq str (read str))
                     (listp str)
                     (eq (length str) 5)
                     )
                 (setq lst (cons str lst))
                )
               (t nil)
               )
             )
           (close fil)
           (and
             lst
             (setq str (mydcl "Select Layer" (ACAD_STRLSORT (mapcar 'car lst))))
             (setq lst (vl-remove-if-not '(lambda(x)(member (car x) str)) lst))
             (setq ret lst)
             )
           )
         (alert "File \"layers.txt\"\not found")
         )
       ret
      )
      )
;;;	   '(
;;;	     ;    Name        Colour        Linetype        Lineweight        Plot?
;;;	     (    "Cen"         6           "CENTER"           0.18            T   )
;;;	     (    "Dim"         8             nil              0.20            T    )
;;;	     (    "Ht"         3             nil              0.18            T     )
;;;	     (    "Hid"         4           "HIDDEN"           0.15            T    )
;;;	     (    "Sheet"       176            nil              0.09            T   )
;;;	     (    "OBJ"        -2             nil              0.40            T    )
;;;	     (    "PAPER"       5           "PHANTOM"           nil           nil   )
;;;	     (    "PHAN"        6           "PHANTOM"          0.18            T    )
;;;	     (    "TITLE"      176            nil               nil            T    )
;;;	     (    "TX"         7             nil               nil            T     )
;;;	    )
  )
)
(defun MakeLayer ( name colour linetype lineweight willplot )
  ;; © Lee Mac 2010
  (or (tblsearch "LAYER" name)
    (entmakex
      (append
        (list
          (cons 0 "LAYER")
          (cons 100 "AcDbSymbolTableRecord")
          (cons 100 "AcDbLayerTableRecord")
          (cons 2  name)
          (cons 70 0)
          (cons 290 (if willplot 1 0))
          (cons 6
            (if (and linetype (tblsearch "LTYPE" linetype))
              linetype "CONTINUOUS"
            )
          )
          (cons 62 (if (and colour (< 0 (abs colour) 256)) colour 7))
          (cons 370
            (fix
              (* 100
                (if (and lineweight (<= 0.0 lineweight 2.11)) lineweight 0.0)
              )
            )
          )
        )
      )
    )
  )
)

(defun mydcl (zagl info-list / fl ret dcl_id msg)
  (vl-load-com)
  (if (null zagl)
    (setq zagl "Select")
    ) ;_ end if
  (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
  (setq ret (open fl "w"))
  (mapcar '(lambda (x) (write-line x ret))
          (list "mip_msg : dialog { "
                (strcat "label=\"" zagl "\";")
                " :list_box {"
                "alignment=top ;"
                "multiple_select = true ;"
                "width=31 ;"
                (if (> (length info-list) 26)
                  "height= 26 ;"
                  (strcat "height= " (itoa (+ 3 (length info-list))) ";")
                  ) ;_ end of if
                "is_tab_stop = false ;"
                "key = \"info\";}"
                "ok_cancel;}"
                ) ;_ end of list
          ) ;_ end of mapcar
  (setq ret (close ret))
  (if (and (null (minusp (setq dcl_id (load_dialog fl))))
           (new_dialog "mip_msg" dcl_id)
           ) ;_ end and
    (progn (start_list "info")
           (mapcar 'add_list info-list)
           (end_list)
           (set_tile "info" "0")
           (setq ret "0")
           (action_tile "info" "(setq ret $value)")
           (action_tile "cancel" "(done_dialog 0)")
           (action_tile "accept" " (done_dialog 1)")
           (if (zerop (start_dialog))
             (setq ret nil)
             (setq ret (mapcar (FUNCTION (lambda (num) (nth num info-list)))
                               (read (strcat "(" ret ")"))
                               ) ;_ end mapcar
                   ) ;_ end setq
             ) ;_ end if
           (unload_dialog dcl_id)
           ) ;_ end of progn
    ) ;_ end of if
  (vl-file-delete fl)
  ret
  )
файл Layers.txt
Код:
[Выделить все]
;;; Строки, начинающиеся с ;;; - комментарии
;;; Структура
;;(Layer_Name  Layer_Colour Layer_Linetype Layer_Lineweight Plot)
;; -----------------------------------------------------------------
  ;; Layer Name          STRING          Only standard chars allowed
  ;; Layer Colour        INTEGER         may be nil, -ve for Layer Off, Colour < 256
  ;; Layer Linetype      STRING          may be nil, If not loaded, CONTINUOUS.
  ;; Layer Lineweight    REAL            may be nil, 0 <= x <= 2.11
  ;; Plot?               BOOLEAN         T = Plot Layer, nil otherwise
;; -----------------------------------------------------------------
("Lay1" 1 "CONTINUOUS"  0.5 t)
("Lay2" 2 "CONTINUOUS"  0.8 nil)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 12.03.2012, 21:40
1 | #5
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


LayerCreator
gomer вне форума  
 
Автор темы   Непрочитано 13.03.2012, 08:48
#6
99xt1

нефтепереработка
 
Регистрация: 17.11.2009
Мозырь, Республика Беларусь
Сообщений: 77


VVA, gomer, спасибо обоим. LISP от VVA рабочий. Для моих задач пока вполне подходит. Здесь нашёл программу Layer Creator. Которая имеет более широкий функуционал.
99xt1 вне форума  
 
Непрочитано 26.12.2012, 21:59
#7
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Подскажите:
1) Как цвет слоя задать значением 255 255 255, хочу сделать своего рода заливку белого цвета (любой объект под ним будет непечатаемым)?
2) Как выбрать все слои и включить их, а потом вернуть в обратное состояние?
sdv79 вне форума  
 
Непрочитано 26.12.2012, 22:07
#8
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Код:
[Выделить все]
 (defun rgb->ole-samocad (R G B) (+ (* B (expt 16 4)) (* G (expt 16 2)) R)
попробуй так -первое, что нашел в поиске
gomer вне форума  
 
Непрочитано 26.12.2012, 22:13
#9
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Извиняюсь, это в какое место ставить? По первому вопросу (cons 62 (if (and colour (< 0 (abs colour) 256)) colour 7)) из 4 поста?
sdv79 вне форума  
 
Непрочитано 26.12.2012, 22:21
#10
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от sdv79 Посмотреть сообщение
Извиняюсь, это в какое место ставить?
Это, извиняюсь, надо еще определиться с форматом текстового файла
gomer вне форума  
 
Непрочитано 26.12.2012, 22:31
#11
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


есть фрагмент из 4 поста, хочу цвет ему выставить (255 255 255) абсолютно белый, как мне в данном случае применить то что вы предложили, я не понимаю. 62 код отвечает за цвет, но туда можно вставить значение до 255
Код:
[Выделить все]
 (entmakex
      (append
        (list
          (cons 0 "LAYER")
          (cons 100 "AcDbSymbolTableRecord")
          (cons 100 "AcDbLayerTableRecord")
          (cons 2  name)
          (cons 70 0)
          (cons 290 (if willplot 1 0))
          (cons 6
            (if (and linetype (tblsearch "LTYPE" linetype))
              linetype "CONTINUOUS"
            )
          )
          (cons 62 (if (and colour (< 0 (abs colour) 256)) colour 7))
          (cons 370
            (fix
              (* 100
                (if (and lineweight (<= 0.0 lineweight 2.11)) lineweight 0.0)
              )
            )
          )
        )
      )
    )
sdv79 вне форума  
 
Непрочитано 26.12.2012, 23:52
#12
Кулик Алексей aka kpblc
Moderator

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


Группа 62 отвечает за ICA цвета. За TrueColor, насколько я помню, отвечает группа 420
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.12.2012, 23:56
#13
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


как мне справиться, уважаемые?
sdv79 вне форума  
 
Непрочитано 27.12.2012, 00:02
#14
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от sdv79 Посмотреть сообщение
как мне справиться, уважаемые?
(255 255 255) соответствует индексу 255, вообще-то... так что в принципе, с программой пока ничего не надо делать...
gomer вне форума  
 
Непрочитано 27.12.2012, 04:14
#15
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


стандарт слоев (и другой фигни) лучше/легче держать в отдельном файле dwg и импортировать нужное через DesignCenter (если мышкой) или с помощью dbx (программно)
Vov.Ka вне форума  
 
Непрочитано 27.12.2012, 09:08
#16
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


как формируется составляющая 420 группы?
sdv79 вне форума  
 
Непрочитано 28.12.2012, 00:52
#17
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Код:
[Выделить все]
 ; (R G B) по TrueColor
(defun GetRGB ( truecolor )
(list
   (logand (lsh truecolor -16) 255) ;; R
   (logand (lsh truecolor -8) 255)  ;; G
   (logand truecolor 255)           ;; B
)
)
; TrueColor по R G B
(defun GetTrueColor ( r g b )
  (+ (lsh r 16) (lsh g 8) b)
)
И соответственно для цвета (255 255 255):
Код:
[Выделить все]
 (cons 420 (GetTrueColor 255 255 255))
Александр Ривилис вне форума  
 
Непрочитано 28.12.2012, 09:17
#18
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


СПАСИБО!
sdv79 вне форума  
 
Непрочитано 28.12.2012, 11:19
#19
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Эээ... а зачем для этого нужен Лисп?
1. Инструментальная палитра созданная из файла содержащего блоки (наименование блока - имя слоя), внутри блока элемент на заданном слое.
2. Перетаскивать слои из файла стандарта в рабочий через DesignCenter (Ctrl +2)
Boxa вне форума  
 
Непрочитано 28.12.2012, 12:44
#20
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от sdv79 Посмотреть сообщение
Подскажите:
1) Как цвет слоя задать значением 255 255 255, хочу сделать своего рода заливку белого цвета (любой объект под ним будет непечатаемым)?
Помнится, когда передо мной встала такая задача, я обнаружил, что все, даже самые белые цвета - выводятся на печать черными. Поправьте, если ошибаюсь. Форумчанами в качестве решения мне была предложена МАСКИРОВКА (_wipeout), коей я успешно пользуюсь и по сей день.
Цитата:
Сообщение от sdv79 Посмотреть сообщение
2) Как выбрать все слои и включить их...?
Команда _layon. По умолчанию такой кнопки на панели Слои нет, я добавлял в Адаптации.
Цитата:
Сообщение от sdv79 Посмотреть сообщение
2) ...а потом вернуть в обратное состояние?
Команда _LayerP и кнопка на панели Слои, она называется Предыдущее состояние слоев
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Создание слоя(слоёв) из мастер-списка. Изменения в программу CLAY от JefferyPSanders



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP создание списка из text 4ertegn1k LISP 10 09.03.2011 15:32
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33