新建文件LISP
你好我正在创建一个lisp,其中一个部分是关于打开一个新文件。
当我使用命令行(“new”)时,它正在工作(与filedia“0一起),但是当我试图用一个简单的代码编写相同的代码时:
(defun c:nowy()
(command "new" "")
)
事实并非如此。
我不知道为什么。。。如果你能帮助我,我将不胜感激(注意:我不想要新的defun,因为我仍然不知道如何将lisps连接在一起,只是代码的一部分^^) 请参见此处:http://hyperpics.blogs.com/beyond_the_ui/2005/12/creating_a_new_.html
gr.Rlx 谢谢,它解决了一个问题,但是出现了一个新问题。。。它继续处理新文件的旧文件实例。基本上,lisp应该这样工作:
使用基点复制->选择文本(将其用作保存新文件的名称)->打开新文件->使用0,0和中心粘贴->另存为dxf(使用原始文件中的名称)->关闭。
;;please make it works!
(defun c:test1 ()
(vl-load-com)
;;Copy with a base point
(progn
(command "copybase" (setq pnt1 (getpoint "\nZaznacz lewy dolny rog ramki ISO: ")) (ssget) "")
)
;;Point the new dxf name
(SETQ Match (NENTSEL "\nSelect Attribute or Text: "))
(command "chprop" Match "" "color" "t" "100,100,100" "")
(IF (= Match NIL)(ALERT "Please Select Attribute or Text..."))
(IF (/= NIL Match)
(PROGN
(SETQ Match (ENTGET (CAR Match)))
)
)
;;open new file
(vla-activate (vla-add (vla-get-documents (vlax-get-acad-object)) templateName))
直到那一刻,一切都在进行中。另一部分也适用,但在旧文件中
;;paste at 0,0 and center
(command "pasteclip" "0,0")
(command "zoom" "a")
;;save as dxf
(command "filedia" "0")
(IF(SETQ Text(CDR(ASSOC 1 Match)))
(command "saveas" "dxf" "v" "r12" "" Text)
)
(command "filedia" "1")
(command "purge" "a" "*" "n")
(command "close" "n")
)
另外,如果你能告诉我-我可以在哪里学习如何连接2个或更多的Lisp在一起,因为我很确定,连接我创建的4个独立的Lisp(复制、新建、粘贴、保存)比尝试编写一个长代码更容易。。。
谢谢你的帮助,
cad\u lisps\u noobish\u编写器 可以从另一个lisp文件调用(加载)lisp文件。假设您有一个名为a.lsp的lisp文件,然后可以从该lisp文件中使用(加载“b.lsp”),其中可能有一个名为c:lisp-b的函数,然后使用(c:lisp-b)来运行它。之后,a.lsp的原始功能将恢复。但是,当打开或创建另一个图形时,lisp例程将失去焦点。可以使用bb set和bb ref在图形之间传递值,也可以使用脚本文件。我还没有试过你的Lisp程序,但是如果你以后有空的话,我会看一看,或者其他人可以试试。
gr.Rlx
我只是快速浏览了一下(很快就要去开会了),但首先你必须获得你选择的属性的文本值(并测试你是否首先选择了一个属性),假设你选择了一个名为E的实体,然后使用(setq txt(cdr(acoc1(entget E)))来获得文本值,然后使用(bb set'name txt),然后在下一个图形中,您可以使用(bb ref'name)调用文本值
稍后将检查您,但现在必须运行。。。
gr.Rlx 好的,谢谢。现在我陷入困境,不知道下一步该怎么办。还有一些我无法解决的错误。
此外,我将粘贴我写(和/或发现)的所有4个代码,它们分别工作。也许连接它们比重写它们更容易:
使用基点复制
(defun c:kopiowanie ()
(progn
(command "copybase" (setq pnt1 (getpoint "\nZaznacz lewy dolny rog ramki ISO: ")) (ssget) "")
)
;;Point name
(SETQ Match (NENTSEL "\nSelect Attribute or Text: "))
(command "chprop" Match "" "color" "t" "100,100,100" "")
(IF (= Match NIL)(ALERT "Please Select Attribute or Text..."))
(IF (/= NIL Match)
(PROGN
(SETQ Match (ENTGET (CAR Match)))
)
)
)
打开新文件(已找到)
(defun c:OpenMyDwg ( / _OpenDwg )
(defun _OpenDwg(dwg readOnly / f oDwg)
;; RenderMan, CADTutor.net
;; Example: (_OpenDwg "FilePath\\FileName.dwg" T)
(vl-load-com)
(if (and (setq f (findfile dwg)) (/= 1 (getvar 'sdi)))
(vla-activate
(vla-open (vla-get-documents (vlax-get-acad-object))
f
(cond ((= T readOnly) :vlax-true)
((:vlax-false)))))
(cond (f (prompt "\n** Command not available in SDI mode ** "))
((prompt (strcat "\n** \""
(strcase (vl-filename-base dwg))
"\" cannot be found ** "))))))
(_OpenDwg
"D:\\TEST.dwg"
T)
(princ))
在0,0处粘贴
(defun c:wklej ()
(command "pasteclip" "0,0")
(command "zoom" "a")
)
另存为dxf(名称来自复制零件)
(defun c:zapisz ()
(command "filedia" "0")
(command "purge" "a" "*" "n")
(command "saveas" "dxf" "v" "r12" "" Text)
(command "filedia" "1")
(command "close" "n")
)
我百分之九十肯定都错了。。。然而我尽了最大努力试图解决这个问题
顺致敬意, 好的,下次会议前休息一会,但我想保持忙碌;-)
如果我理解正确,你想做的就是把一些实体写入dxf文件?那么为什么不使用对象参数呢?
看看这个
(defun c:write-dxf ( / tstdir ss e edat )
(setvar "filedia" 0)
(setq tstdir "c:/temp/")
(princ "\nSelect objects to write to dxf file")
(if (and
(setq ss (ssget))
(setq e (car (nentsel "\nselect attribute with for dxf filename")))
(setq edat (entget e))
(eq (cdr (assoc 0 edat)) "ATTRIB"))
(command "dxfout" (strcat tstdir (cdr (assoc 1 edat))) "obj" ss "" 16))
(setvar "filedia" 1)
(princ)
)
我测试属性和选择集,但我不测试属性中的任何字符串,所以我假设你知道你在做什么
很好,我回来了,希望很快回来,但我不害怕:-(
gr.Rlx 老实说,我不确定我在做什么,我只是一个设计师,想让他的和我的同事的生活更轻松
这个lisp的想法是创建一个。dxf文件,对象(和内部文本)很少,以原始文件为中心。dwg文件。现在我们正在手动操作,这需要时间。所以我写了4个独立的LISP(贴在上面),它们工作得很好,但当我试图将它们连接在一起时出现了很多问题。
我觉得你发的代码似乎正是我需要的
所以,我要明确的是,我需要从这个lisp中得到什么:
1.选择对象并从原点复制基点。图纸
2.打开新文件(或.dxf或任何文件),越过对象和0,0坐标,将视图居中(这很重要(双击鼠标))
3、将文件保存在中。dxf格式,其名称在原点处选定。dwg并将其关闭(也可以将名称从源.dwg复制到新文件,并在选择名称后将其删除,但视图始终必须居中)
我会在网上搜索更多的解决方案,但我真的很感谢你的帮助,你是我的英雄! 如果这是您需要的,请尝试:
流血。LSP
它使用dwgprefix将图形和您选择的对象放在(与主图形相同的文件夹)中。
首先为对象选择基点,然后选择要写入文件的对象(然后将这些对象锁定到图形中,该图形的名称与所选属性中的名称相同)。之后,它打开该图形(通过脚本),将所有对象移动到0,0,并将该图形的插入基数放置到0,0,缩放范围并保存图形。
sdi必须为0
gr.Rlx 上午@rlx
谢谢你的lsp,你太棒了!然而在为文件名选择atribute时出现未知错误,我有一个错误:
. 我不知道问题出在哪里,在过去的两个小时里,我尝试了不同的事情来找到解决方案,但我失败了;(
顺便说一句,wblock是我对这个lsp的第二个想法
//好的,我百分之九十肯定这只是我用它做的一些愚蠢的错误。。。我检查了3次,检查了每个命令,它太简单了,不可能出现严重的错误。。
页:
[1]
2