明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 南林浣风

[已解答] 如何用lisp新建一个图层

[复制链接]
发表于 2015-4-6 21:18 | 显示全部楼层
本帖最后由 sachindkini 于 2015-4-6 21:20 编辑

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

  3.   ;;----------------------------------------------------------------------------------------------;;
  4.   ;; Specifications:                                                                              ;;
  5.   ;;----------------------------------------------------------------------------------------------;;
  6.   ;; Description         Data Type       Remarks                                                  ;;
  7.   ;;----------------------------------------------------------------------------------------------;;
  8.   ;; Layer Name          STRING          Only standard chars allowed.                             ;;
  9.   ;; Layer Colour        INTEGER         may be nil, -ve for Layer Off, Colour < 256              ;;
  10.   ;; Layer Linetype      STRING          may be nil, If not loaded, CONTINUOUS.                   ;;
  11.   ;; Layer Lineweight    REAL            may be nil, negative=Default, otherwise 0 <= x <= 2.11   ;;
  12.   ;; Plot?               BOOLEAN         T = Plot Layer, nil otherwise                            ;;
  13.   ;; Bit Flag            INTEGER         0=None, 1=Frozen, 2=Frozen in VP, 4=Locked               ;;
  14.   ;; Description         STRING          may be nil for no description                            ;;
  15.   ;;----------------------------------------------------------------------------------------------;;
  16.   ;; Function will print list detailing any unsuccesful layers                                    ;;
  17.   ;;----------------------------------------------------------------------------------------------;;
  18.    
  19.   (regapp "AcAecLayerStandard")

  20.   (
  21.     (lambda ( lst )
  22.       (mapcar 'print
  23.         (vl-remove-if 'cdr
  24.           (mapcar
  25.             (function
  26.               (lambda ( x )
  27.                 (if (caddr x) (LM:LoadLinetype (caddr x))) (cons (car x) (apply 'MakeLayer x))
  28.               )
  29.             )
  30.             lst
  31.           )
  32.         )
  33.       )
  34.     )
  35.    '(
  36.     ;  Name                 Colour   Linetype    Lineweight Plot? Bitflag  Description
  37.     ( "EL_COMPONENTS"            7  "CONTINUOUS"     -3       T      0     "componets")
  38.     ( "EL_CONSTR_COMP"           1  "CONTINUOUS"     -3       T      0     "const"    )
  39.     ( "EL_FITTINGS"              4  "CONTINUOUS"     -3       T      0     "fitting"  )
  40.     ( "EL_LABEL"                 1  "CONTINUOUS"     -3       T      0      nil  )
  41.     ( "EL_LABEL_TXT"           252  "CONTINUOUS"     -3       T      0      nil  )
  42.     ( "EL_TERMINALS"             1  "CONTINUOUS"     -3       T      0      nil  )
  43.     ( "EL_TERMINALS_PE"         24  "CONTINUOUS"     -3       T      0      nil  )
  44.     ( "EL_TERMINALS_TXT"       252  "CONTINUOUS"     -3       T      0      nil  )
  45.     ( "EL_TXT"                 252  "CONTINUOUS"     -3       T      0      nil  )
  46.     ( "EL_WIRES"               252  "CONTINUOUS"     -3       T      0      nil  )
  47.     ( "GE_ANNOTATION"            7  "CONTINUOUS"     -3       T      0      nil  )
  48.     ( "GE_LABEL"                10  "CONTINUOUS"     -3       T      0      nil  )
  49.     ( "GE_LABEL_TEXT"          253  "CONTINUOUS"     -3       T      0      nil  )
  50.     ( "GE_TXT_LANGUAGE_DU"     252  "CONTINUOUS"     -3       T      0      nil  )
  51.     ( "GE_TXT_LANGUAGE_EN"     252  "CONTINUOUS"     -3       T      0      nil  )
  52.     ( "GE_TXT_LANGUAGE_FR"     252  "CONTINUOUS"     -3       T      0      nil  )
  53.     ( "GE_TXT_LANGUAGE_GE"     252  "CONTINUOUS"     -3       T      0      nil  )
  54.     ( "LA_HEADER_FRAME"          7  "CONTINUOUS"     -3       T      0      nil  )
  55.     ( "LA_HEADER_TXT"            7  "CONTINUOUS"     -3       T      0      nil  )
  56.     ( "LA_MATLIST"             254  "CONTINUOUS"     -3       T      0      nil  )
  57.     ( "LA_MATLIST_FRAME"       254  "CONTINUOUS"     -3       T      0      nil  )
  58.     ( "LA_MATLIST_POS"         254  "CONTINUOUS"     -3       T      0      nil  )
  59.     ( "LA_MATLIST_TXT"         252  "CONTINUOUS"     -3       T      0      nil  )
  60.     ( "LA_TITLE_FRAME"           7  "CONTINUOUS"     -3       T      0      nil  )
  61.     ( "LA_TITLE_LOGO"           10  "CONTINUOUS"     -3       T      0      nil  )
  62.     ( "LA_TITLE_LOGO_TXT"        7  "CONTINUOUS"     -3       T      0      nil  )
  63.     ( "LA_TITLE_TXT"             7  "CONTINUOUS"     -3       T      0      nil  )
  64.     ( "LA_VIEWPORTS"           230  "CONTINUOUS"     -3      nil     0      nil  )
  65.     ( "PN_ACCESSORIES"          30  "CONTINUOUS"     -3       T      0      nil  )
  66.     ( "PN_ACTUATORS"           160  "CONTINUOUS"     -3       T      0      nil  )
  67.     ( "PN_AIR_LINE_EQUIPMENT"   40  "CONTINUOUS"     -3       T      0      nil  )
  68.     ( "PN_BRACKET_MOUNTING"      1  "ACAD_ISO12W100" -3       T      0      nil  )
  69.     ( "PN_CABINET"               8  "CONTINUOUS"     -3       T      0      nil  )
  70.     ( "PN_CABINET_DIM"           8  "CONTINUOUS"     -3       T      0      nil  )
  71.     ( "PN_COMPONENTS"            7  "CONTINUOUS"     -3       T      0      nil  )
  72.     ( "PN_CONDUCTS"              3  "CONTINUOUS"     -3       T      0      nil  )
  73.     ( "PN_CONSTR_COMP"           2  "CONTINUOUS"     -3       T      0      nil  )
  74.     ( "PN_DRAIN"                 3  "HIDDEN"         -3       T      0      nil  )
  75.     ( "PN_EXHAUST"             104  "CONTINUOUS"     -3       T      0      nil  )
  76.     ( "PN_FITTINGS"             30  "CONTINUOUS"     -3       T      0      nil  )
  77.     ( "PN_IDENTIFICATION"        4  "CONTINUOUS"     -3       T      0      nil  )
  78.     ( "PN_PILOT_SUPPLY"          3  "HIDDEN"         -3       T      0      nil  )
  79.     ( "PN_PORT_NUMBERS"          8  "CONTINUOUS"     -3       T      0      nil  )
  80.     ( "PN_PRESSURE_SWITCHES"   200  "CONTINUOUS"     -3       T      0      nil  )
  81.     ( "PN_PROPORTIONAL_VALVES" 226  "CONTINUOUS"     -3       T      0      nil  )
  82.     ( "PN_SECTIONS"              3  "CONTINUOUS"     -3       T      0      nil  )
  83.     ( "PN_SUB-BASES"             8  "ACAD_ISO12W100" -3       T      0      nil  )
  84.     ( "PN_SUB-BASE_CONDUCTS"     2  "CONTINUOUS"     -3       T      0      nil  )
  85.     ( "PN_SUPPLY"                3  "CONTINUOUS"     -3       T      0      nil  )
  86.     ( "PN_TXT"                   3  "CONTINUOUS"     -3       T      0      nil  )
  87.     ( "PN_VACUUM"               60  "CONTINUOUS"     -3       T      0      nil  )
  88.     ( "PN_VALVES"              240  "CONTINUOUS"     -3       T      0      nil  )
  89.     ( "PN_VALVES_OVERRIDE"       1  "CONTINUOUS"     -3       T      0      nil  )
  90.     )
  91.   )
  92.   (princ)
  93. )

  94. (defun MakeLayer ( name colour linetype lineweight willplot bitflag description )
  95.   ;; &#169; Lee Mac 2010
  96.   (or (tblsearch "LAYER" name)
  97.     (entmake
  98.       (append
  99.         (list
  100.           (cons 0 "LAYER")
  101.           (cons 100 "AcDbSymbolTableRecord")
  102.           (cons 100 "AcDbLayerTableRecord")
  103.           (cons 2  name)
  104.           (cons 70 bitflag)
  105.           (cons 290 (if willplot 1 0))
  106.           (cons 6
  107.             (if (and linetype (tblsearch "LTYPE" linetype))
  108.               linetype "CONTINUOUS"
  109.             )
  110.           )
  111.           (cons 62 (if (and colour (< 0 (abs colour) 256)) colour 7))
  112.           (cons 370
  113.             (if (minusp lineweight) -3
  114.               (fix
  115.                 (* 100
  116.                   (if (and lineweight (<= 0.0 lineweight 2.11)) lineweight 0.0)
  117.                 )
  118.               )
  119.             )
  120.           )
  121.         )
  122.         (if description
  123.           (list
  124.             (list -3
  125.               (list "AcAecLayerStandard" (cons 1000 "") (cons 1000 description))
  126.             )
  127.           )
  128.         )
  129.       )
  130.     )
  131.   )
  132. )

  133. ;;--------------------=={ Load Linetype }==-------------------;;
  134. ;;                                                            ;;
  135. ;;  Attempts to load a specified linetype from any linetype   ;;
  136. ;;  definition files (.lin) found in the ACAD Support Path    ;;
  137. ;;------------------------------------------------------------;;
  138. ;;  Author: Lee Mac, Copyright &#169; 2011    ;;
  139. ;;------------------------------------------------------------;;
  140. ;;  Arguments:                                                ;;
  141. ;;  lt - name of linetype to load                             ;;
  142. ;;------------------------------------------------------------;;
  143. ;;  Returns:  T if linetype loaded successfully, else nil     ;;
  144. ;;------------------------------------------------------------;;

  145. (defun LM:LoadLinetype ( lt )
  146.   (cond
  147.     ( (tblsearch "LTYPE" lt) )
  148.     ( (progn
  149.         (or acapp (setq acapp (vlax-get-acad-object)))
  150.         (or acdoc (setq acdoc (vla-get-ActiveDocument acapp)))
  151.         (or aclts (setq aclts (vla-get-Linetypes acdoc)))

  152.         (vl-some
  153.           (function
  154.             (lambda ( file )
  155.               (vl-catch-all-apply 'vla-load (list aclts lt file))
  156.               (and (tblsearch "LTYPE" lt))
  157.             )
  158.           )
  159.           (setq *LineTypeDefs*
  160.             (cond
  161.               ( *LineTypeDefs* )
  162.               ( (apply 'append
  163.                   (mapcar '(lambda ( directory ) (vl-directory-files directory "*.lin" 1))
  164.                     (LM:str->lst
  165.                       (vla-get-SupportPath (vla-get-Files (vla-get-Preferences acapp))) ";"
  166.                     )
  167.                   )
  168.                 )
  169.               )
  170.             )
  171.           )
  172.         )
  173.       )
  174.     )
  175.   )  
  176. )

  177. ;;-------------------=={ String to List }==-------------------;;
  178. ;;                                                            ;;
  179. ;;  Separates a string into a list of strings using a         ;;
  180. ;;  specified delimiter string                                ;;
  181. ;;------------------------------------------------------------;;
  182. ;;  Author: Lee Mac, Copyright &#169; 2011     ;;
  183. ;;------------------------------------------------------------;;
  184. ;;  Arguments:                                                ;;
  185. ;;  str - string to process                                   ;;
  186. ;;  del - delimiter by which to separate the string           ;;
  187. ;;------------------------------------------------------------;;
  188. ;;  Returns:  A list of strings                               ;;
  189. ;;------------------------------------------------------------;;

  190. (defun LM:str->lst ( str del / pos )
  191.   (if (setq pos (vl-string-search del str))
  192.     (vl-remove "" (cons (substr str 1 pos) (LM:str->lst (substr str (+ pos 1 (strlen del))) del)))
  193.     (list str)
  194.   )
  195. )
发表于 2015-4-7 09:49 | 显示全部楼层
记得有通过文本和通过EXCEL文件方式创建的,有源码
发表于 2015-4-11 09:59 | 显示全部楼层
sachindkini 发表于 2015-4-6 21:18

写的够谨慎
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 02:13 , Processed in 0.227784 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表