Bloodhurt 发表于 2022-7-5 18:19:25

新建文件LISP

你好
 
我正在创建一个lisp,其中一个部分是关于打开一个新文件。
 
当我使用命令行(“new”)时,它正在工作(与filedia“0一起),但是当我试图用一个简单的代码编写相同的代码时:
 

(defun c:nowy()
(command "new" "")
)
事实并非如此。
我不知道为什么。。。如果你能帮助我,我将不胜感激(注意:我不想要新的defun,因为我仍然不知道如何将lisps连接在一起,只是代码的一部分^^)

rlx 发表于 2022-7-5 18:25:09

请参见此处:http://hyperpics.blogs.com/beyond_the_ui/2005/12/creating_a_new_.html
 
 
gr.Rlx

Bloodhurt 发表于 2022-7-5 18:29:11

谢谢,它解决了一个问题,但是出现了一个新问题。。。它继续处理新文件的旧文件实例。基本上,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编写器

rlx 发表于 2022-7-5 18:32:24

可以从另一个lisp文件调用(加载)lisp文件。假设您有一个名为a.lsp的lisp文件,然后可以从该lisp文件中使用(加载“b.lsp”),其中可能有一个名为c:lisp-b的函数,然后使用(c:lisp-b)来运行它。之后,a.lsp的原始功能将恢复。但是,当打开或创建另一个图形时,lisp例程将失去焦点。可以使用bb set和bb ref在图形之间传递值,也可以使用脚本文件。我还没有试过你的Lisp程序,但是如果你以后有空的话,我会看一看,或者其他人可以试试。
 
 
gr.Rlx

rlx 发表于 2022-7-5 18:37:25

 
 
 
 
我只是快速浏览了一下(很快就要去开会了),但首先你必须获得你选择的属性的文本值(并测试你是否首先选择了一个属性),假设你选择了一个名为E的实体,然后使用(setq txt(cdr(acoc1(entget E)))来获得文本值,然后使用(bb set'name txt),然后在下一个图形中,您可以使用(bb ref'name)调用文本值
 
 
稍后将检查您,但现在必须运行。。。
 
 
gr.Rlx

Bloodhurt 发表于 2022-7-5 18:41:02

好的,谢谢。现在我陷入困境,不知道下一步该怎么办。还有一些我无法解决的错误。
 
此外,我将粘贴我写(和/或发现)的所有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")       
)       

 
我百分之九十肯定都错了。。。然而我尽了最大努力试图解决这个问题
顺致敬意,

rlx 发表于 2022-7-5 18:46:43

好的,下次会议前休息一会,但我想保持忙碌;-)
 
 
如果我理解正确,你想做的就是把一些实体写入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

Bloodhurt 发表于 2022-7-5 18:52:16

老实说,我不确定我在做什么,我只是一个设计师,想让他的和我的同事的生活更轻松
 
这个lisp的想法是创建一个。dxf文件,对象(和内部文本)很少,以原始文件为中心。dwg文件。现在我们正在手动操作,这需要时间。所以我写了4个独立的LISP(贴在上面),它们工作得很好,但当我试图将它们连接在一起时出现了很多问题。
 
我觉得你发的代码似乎正是我需要的
 
所以,我要明确的是,我需要从这个lisp中得到什么:
1.选择对象并从原点复制基点。图纸
2.打开新文件(或.dxf或任何文件),越过对象和0,0坐标,将视图居中(这很重要(双击鼠标))
3、将文件保存在中。dxf格式,其名称在原点处选定。dwg并将其关闭(也可以将名称从源.dwg复制到新文件,并在选择名称后将其删除,但视图始终必须居中)
 
我会在网上搜索更多的解决方案,但我真的很感谢你的帮助,你是我的英雄!

rlx 发表于 2022-7-5 18:53:58

如果这是您需要的,请尝试:
 
流血。LSP
 
它使用dwgprefix将图形和您选择的对象放在(与主图形相同的文件夹)中。
 
首先为对象选择基点,然后选择要写入文件的对象(然后将这些对象锁定到图形中,该图形的名称与所选属性中的名称相同)。之后,它打开该图形(通过脚本),将所有对象移动到0,0,并将该图形的插入基数放置到0,0,缩放范围并保存图形。
 
sdi必须为0
 
gr.Rlx

Bloodhurt 发表于 2022-7-5 18:58:40

上午@rlx
 
谢谢你的lsp,你太棒了!然而在为文件名选择atribute时出现未知错误,我有一个错误:
. 我不知道问题出在哪里,在过去的两个小时里,我尝试了不同的事情来找到解决方案,但我失败了;( 
顺便说一句,wblock是我对这个lsp的第二个想法
 
//好的,我百分之九十肯定这只是我用它做的一些愚蠢的错误。。。我检查了3次,检查了每个命令,它太简单了,不可能出现严重的错误。。
页: [1] 2
查看完整版本: 新建文件LISP