Lisp文件组织
我有一个包含多个函数的lisp例程,我需要不时地进行更改,或添加其他函数等。有没有人有任何技术来组织文件,以便我可以轻松地从一个例程切换到另一个例程?现在,我只是在开头放一个列表,告诉我跳转到哪一行,但每次我添加另一个函数时,我都必须更改每一行(因为它添加了一行)谢谢 我使用单独的文件-我发现使用windows的搜索工具更容易找到你需要的东西 这是我的layerstate命令,基本上我有一系列调用主函数的函数,提供一个层列表和属性作为参数。我不知道这是否是这个项目的最佳实践。 我会这样做:
例如:
1.文件kr:CON…-包含所有转换函数
文件kr:BLK-包含块函数
3.kr文件:DLG-对话框功能。
文件kr:SSX-选择集func。
.....
然后将所有文件“连接”到一个库文件,并将其放入支持autocad CAD。
克鲁格 像Kruuger一样,我有一个主lisp程序,它有很多defuns,这些都是从其他lisp调用的,因此你不必再次编写代码。主程序作为自动加载的一部分加载,其他程序根据需要加载。主lisp具有在绘制的图层设置、捕捉、单位等方面保持一致的功能,因此新的lisp提供了功能性,但背景始终相同。
令人惊讶的是,在一个lisp中,你有多少次都在执行同样的半打步骤,这样编程速度也会更快。可能是对程序开始时使用的defuns的描述。 好吧,就是这样,我有一个非常广泛的设置为我们的Lisp例程,我尽量避免编码任何两次。如果需要在多个程序中调用函数,我通常会将其移出。然而,这略有不同。基本上,这个Lisp文件包含一组图层列表。我要说的是,现在大约有十几个列表,其中一些列表有多达180多个层,整个文件超过2000行。我只是想找到一种更好的方法,在需要调整层或需要添加新层状态时在程序内部移动。也许我应该把它们都分割成各自独立的lisp文件,并以相似的开头开始它们的名字,这样它们就可以分组在一起了。它不是很漂亮,但我想这可能是唯一的选择。
克里斯,
我赞成李的建议。
我使用单独的文件,并使用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文件进入项目目录,并在绘图打开时自动导入图层状态(如果是我们标准化列表的一部分,并且在项目中找到)。
因此,如果公用设施调整图层状态发生更改(例如),用户只需进行必要的更改,然后使用键盘快捷键将其重新保存在当前图形中,并将其导出到预定义的项目文件夹。下次使用此图层状态打开图形时,将根据保存到项目中的内容在该图形中自动覆盖。
[/编辑]
希望这有帮助! 如何在多个项目中使用外部参照?
不管怎样,我从来没有真正尝试过,但每件事都是第一次,我会试一试。最糟糕的情况是需要一点时间来适应一种新的做事方式。不过,这有助于将来的编辑工作。
实现这一点的方法有很多种。
例如:
考虑vl file copy、read line、vl string search、vl string subst和write line函数的环境,以替换旧的引用名称或临时名称(来自模板*.LAS文件),并根据文件命名约定将其替换为适当的引用名称。
另一种选择是手动将图层状态(*.LAS)从类似的复制到项目中,并在记事本中手动执行最初的查找替换。然后是一个人工级别的QC,然后依靠自动工具进行更新。 好的,我认为我所拥有的将起作用,我可以使用通配符来消除与*相关的外部参照问题。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