ccowgill 发表于 2022-7-6 10:02:08

Lisp文件组织

我有一个包含多个函数的lisp例程,我需要不时地进行更改,或添加其他函数等。有没有人有任何技术来组织文件,以便我可以轻松地从一个例程切换到另一个例程?现在,我只是在开头放一个列表,告诉我跳转到哪一行,但每次我添加另一个函数时,我都必须更改每一行(因为它添加了一行)
 
谢谢

Lee Mac 发表于 2022-7-6 10:11:21

我使用单独的文件-我发现使用windows的搜索工具更容易找到你需要的东西

ccowgill 发表于 2022-7-6 10:14:58

这是我的layerstate命令,基本上我有一系列调用主函数的函数,提供一个层列表和属性作为参数。我不知道这是否是这个项目的最佳实践。

Guest kruuger 发表于 2022-7-6 10:17:47

我会这样做:
例如:
1.文件kr:CON…-包含所有转换函数
文件kr:BLK-包含块函数
3.kr文件:DLG-对话框功能。
文件kr:SSX-选择集func。
.....
然后将所有文件“连接”到一个库文件,并将其放入支持autocad CAD。
克鲁格

BIGAL 发表于 2022-7-6 10:23:58

像Kruuger一样,我有一个主lisp程序,它有很多defuns,这些都是从其他lisp调用的,因此你不必再次编写代码。主程序作为自动加载的一部分加载,其他程序根据需要加载。主lisp具有在绘制的图层设置、捕捉、单位等方面保持一致的功能,因此新的lisp提供了功能性,但背景始终相同。
 
令人惊讶的是,在一个lisp中,你有多少次都在执行同样的半打步骤,这样编程速度也会更快。可能是对程序开始时使用的defuns的描述。

ccowgill 发表于 2022-7-6 10:26:46

好吧,就是这样,我有一个非常广泛的设置为我们的Lisp例程,我尽量避免编码任何两次。如果需要在多个程序中调用函数,我通常会将其移出。然而,这略有不同。基本上,这个Lisp文件包含一组图层列表。我要说的是,现在大约有十几个列表,其中一些列表有多达180多个层,整个文件超过2000行。我只是想找到一种更好的方法,在需要调整层或需要添加新层状态时在程序内部移动。也许我应该把它们都分割成各自独立的lisp文件,并以相似的开头开始它们的名字,这样它们就可以分组在一起了。它不是很漂亮,但我想这可能是唯一的选择。

BlackBox 发表于 2022-7-6 10:34:29

 
克里斯,
 
我赞成李的建议。
 
我使用单独的文件,并使用VLIDE项目来轻松管理它们,然后将项目编译为。FAS/。VLX(视需要而定)。
 
注意-我之前已经详细发布了这篇文章,但我担心这篇文章已经丢失了(在蓝色和橙色的网站上,不应命名)。
 
例如,对于我团队的工具,我创建/维护三类代码(每类代码在VLIDE中都有自己的“项目”):
 
个人设置-
自我咒骂;每个用户一个。
 
编程工具-
这些大多是给我的。这些都是我的“工具箱”函数(子函数),它们可以防止代码在我的工具套件中重复。
 
生产工具-
这些适用于所有用户,并且在复杂程度上也存在差异。从简单的键盘快捷键、通过Outlook(从AutoCAD)通过电子邮件发送报告,到用于快速创建泛洪平原表面的AECC工具(Land Desktop),等等。
 
我使用ACADDOC中的一个load语句。lsp加载我们的个人设置,其中包括对后续工具的条件调用。
 
例如-
 
“加载个人设置”功能(使用任意名称):

(defun c:LPS ()
;; (load "programming_tools.fas")

;; ... Code for personal settings

;; (load "production_tools.fas")
(princ))

 
 
条件加载,以避免“是否要保存绘图1”。图纸?”提示:

(if (= 1 (getvar 'dwgtitled))      ; If drawing is named,
(c:LPS))                         ; Then load personal settings.
(princ)

 
 
[编辑]
我还对图层状态做了很多工作,并没有使用列表,而是自动导出*。LAS文件进入项目目录,并在绘图打开时自动导入图层状态(如果是我们标准化列表的一部分,并且在项目中找到)。
 
因此,如果公用设施调整图层状态发生更改(例如),用户只需进行必要的更改,然后使用键盘快捷键将其重新保存在当前图形中,并将其导出到预定义的项目文件夹。下次使用此图层状态打开图形时,将根据保存到项目中的内容在该图形中自动覆盖。
[/编辑]
 
希望这有帮助!

ccowgill 发表于 2022-7-6 10:34:44

如何在多个项目中使用外部参照?
不管怎样,我从来没有真正尝试过,但每件事都是第一次,我会试一试。最糟糕的情况是需要一点时间来适应一种新的做事方式。不过,这有助于将来的编辑工作。

BlackBox 发表于 2022-7-6 10:41:26

 
实现这一点的方法有很多种。
 
例如:
 
考虑vl file copy、read line、vl string search、vl string subst和write line函数的环境,以替换旧的引用名称或临时名称(来自模板*.LAS文件),并根据文件命名约定将其替换为适当的引用名称。
 
另一种选择是手动将图层状态(*.LAS)从类似的复制到项目中,并在记事本中手动执行最初的查找替换。然后是一个人工级别的QC,然后依靠自动工具进行更新。

ccowgill 发表于 2022-7-6 10:45:06

好的,我认为我所拥有的将起作用,我可以使用通配符来消除与*相关的外部参照问题。LAS文件。
 

;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;
   ;;2010.11.04Layer Setup by Christopher T. Cowgill                                    ;;
   ;;Truecolor function by Fred Tomke (www.theswamp.org)                              ;;
   ;;Coding assistance provided by Opie, RobertB, and irneb (www.augi.com), ronjonp    ;;
   ;;Original code simplification by alanjt (www.augi.com, www.theswamp.org)            ;;
   ;;CTRL+G to goto Line)                                                                ;;
   ;;c:Pavtmrkglayerstate LAY-PavtMrkg                                                    ;;
   ;;c:createsanitaryprofilelayers LAY-Profiles                                        ;;
   ;;c:createstormprofilelayers LAY-Profiles                                          ;;
   ;;c:profilebaselayers LAY-Profiles                                                    ;;
   ;;c:PNPBaseLayerstate LAY-PNPBase                                                    ;;
   ;;c:SCDLayerstate LAY-SurveyControlData                                                ;;
   ;;c:PNPMSLayerstate LAY-PNPInP                                                      ;;
   ;;c:roadbaselayers LAY-RoadBase                                                      ;;
   ;;c:surveybaselayers LAY-SurveyBase                                                    ;;
   ;;c:tinlayerstate LAY-Tin                                                            ;;
   ;;c:PnPFinalLayerState LAY-PNPFinal-Create                                          ;;
   ;;c:CreatePnPLayers LAY-PNPFinal-Create                                                ;;
   ;;c:logLayerState LAY-Log-Overall                                                    ;;
   ;;c:overallsiteplan LAY-Log-Overall                                                    ;;
   ;;c:createpresentationlayers LAY-Presentation                                        ;;
   ;;c:CreateXsectionLayers LAY-XSection                                                ;;
   ;;c:intersectionlayerstate LAY-InterSection                                          ;;
   ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;

   ;;****************************************************************************************************************************************

   (defun truecolor (uColor / oColor)
   (setq oColor (vla-getinterfaceobject acadObject "AutoCAD.AcCmColor.18"))
   (cond
   ((= (type uColor) 'INT)
    (vla-put-ColorMethod oColor acColorMethodByACI)
    (vla-put-ColorIndex oColor uColor)
   )
   ((not (listp uColor)) nil)
   ((= (length uColor) 3)
    (vla-put-ColorMethod oColor acColorMethodByRGB)
    (vla-SetRGB oColor (car uColor) (cadr uColor) (last uColor))
   )
   ((= (length uColor) 2)
    (vla-SetColorBookColor oColor (car uColor) (cadr uColor))
   )
   ) ; cond
   ocolor
   ) ; truecolor

   ;;****************************************************************************************************************************************

   (defun alllayerset (lst / listlayer name match)
   (command "linetype" "_load" "*" "acad" "")
   (command "-layer" "SET" "0" "")
   (setq listlayer (vla-get-layers acaddocument))
   (foreach y lst
   (if (wcmatch (car y) "*`**")
   ()
   (if (tblsearch "LAYER" (car y))
       ()
       (vla-add listlayer (car y))
   ) ;_ end of if
   ) ;_ end of if
   ) ;_ end of foreach
   (vlax-for    x listlayer
   (or (vl-position (setq name (strcase (vla-get-name x))) '("0" "DEFPOINTS"))
       (if    (setq match (vl-remove-if-not
               (function (lambda (x) (wcmatch name (strcase (car x)))))
               lst
               ) ;_ end of vl-remove-if-not
       ) ;_ end of setq
         (mapcar (function
         (lambda    (p v)
             (if v
               (vl-catch-all-apply
               (function vlax-put-property)
               (list x p v)
               ) ;_ end of vl-catch-all-apply
             ) ;_ end of if
         ) ;_ end of lambda
             ) ;_ end of function
             '(Freeze Color LineType Plottable Description Truecolor)
             (cdar match)
         ) ;_ end of mapcar
       ) ;_ end of if
   ) ;_ end of or
   ) ;_ end of vlax-for
   (setq name nil)
   (vla-regen acadDocument acAllViewports)
   ) ;_ end of defun


(defun c:overallsiteplan (/ layerlist layerlist1 layerlist2)
   (setq layerlist
      '(
          ("*|*" :vlax-true)
         )
   ) ;_ end of setq
   (setq layerlist1
      '(
          ("*Prop Sanitary*" :vlax-false)
          ("*Prop Forcemain*" :vlax-false)
          ("*Prop Water*" :vlax-false)
          ("*|Property" :vlax-false
          ("*|ROW" :vlax-false
          ("Dim" :vlax-false 3)
          ("Text" :vlax-false 3)
          ("*Exist EP*" :vlax-true)
          ("*Prop EP*" :vlax-true)
         )
   ) ;_ end of setq
   (alllayerset layerlist)
   (alllayerset layerlist1)
   ) ;_ end of defun

(defun c:createpresentationlayers (/ layerlist acm)
   (setq layerlist
      (list
          (list "Hatch Water" :vlax-false nil nil nil nil (truecolor (list 0 174 255)))
          (list "Hatch Trees" :vlax-false nil nil nil nil (truecolor (list 127 255 0)))
          (list "Hatch Concrete" :vlax-false nil nil nil nil (truecolor (list 200 200 200)))
          (list "Hatch Grass" :vlax-false nil nil nil nil (truecolor (list 80 193 36)))
          (list "Hatch HMA" :vlax-false nil nil nil nil (truecolor (list 100 100 100)))
          (list "Hatch Gravel" :vlax-false nil nil nil nil (truecolor (list 174 100 0)))
          (list "Sign Yellow"
            :vlax-false
            nil
            nil
            nil
            nil
            (truecolor (list "PANTONE(R) color bridge CMYK EC" "PANTONE 116 EC"))
          ) ;_ end of list
          (list "Sign Blue"
            :vlax-false
            nil
            nil
            nil
            nil
            (truecolor (list "PANTONE(R) color bridge CMYK EC" "PANTONE 294 EC"))
          ) ;_ end of list
          (list "Sign Orange"
            :vlax-false
            nil
            nil
            nil
            nil
            (truecolor (list "PANTONE(R) color bridge CMYK EC" "PANTONE 152 EC"))
          ) ;_ end of list
          (list "Sign Red"
            :vlax-false
            nil
            nil
            nil
            nil
            (truecolor (list "PANTONE(R) color bridge CMYK EC" "PANTONE 187 EC"))
          ) ;_ end of list
          (list "Sign Green"
            :vlax-false
            nil
            nil
            nil
            nil
            (truecolor (list "PANTONE(R) color bridge CMYK EC" "PANTONE 342 EC"))
          ) ;_ end of list
          (list "Sign Brown"
            :vlax-false
            nil
            nil
            nil
            nil
            (truecolor (list "PANTONE(R) color bridge CMYK EC" "PANTONE 469 EC"))
          ) ;_ end of list
          (list "Sign Flourecent" :vlax-false nil nil nil nil (truecolor (list 175 255 0)))
          (list "Sign Purple"
            :vlax-false
            nil
            nil
            nil
            nil
            (truecolor (list "PANTONE(R) color bridge CMYK EC" "PANTONE 259 EC"))
          ) ;_ end of list
      ) ;_ end of list
   ) ;_ end of setq
   (alllayerset layerlist)
   ) ;_ end of defun
页: [1] 2
查看完整版本: Lisp文件组织