乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 34|回复: 14

[编程交流] 新建文件LISP

[复制链接]

4

主题

16

帖子

12

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 18:19:25 | 显示全部楼层 |阅读模式
你好
 
我正在创建一个lisp,其中一个部分是关于打开一个新文件。
 
当我使用命令行(“new”)时,它正在工作(与filedia“0一起),但是当我试图用一个简单的代码编写相同的代码时:
 
  1. (defun c:nowy()
  2. (command "new" "")
  3. )

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

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 18:25:09 | 显示全部楼层
请参见此处:http://hyperpics.blogs.com/beyond_the_ui/2005/12/creating_a_new_.html
 
 
gr.Rlx
回复

使用道具 举报

4

主题

16

帖子

12

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 18:29:11 | 显示全部楼层
谢谢,它解决了一个问题,但是出现了一个新问题。。。它继续处理新文件的旧文件实例。基本上,lisp应该这样工作:
 
使用基点复制->选择文本(将其用作保存新文件的名称)->打开新文件->使用0,0和中心粘贴->另存为dxf(使用原始文件中的名称)->关闭。
 
  1. ;;please make it works!
  2. (defun c:test1 ()
  3.                        
  4.                        
  5. (vl-load-com)
  6. ;;Copy with a base point
  7. (progn
  8.         (command "copybase" (setq pnt1 (getpoint "\nZaznacz lewy dolny rog ramki ISO: ")) (ssget) "")
  9. )
  10. ;;Point the new dxf name
  11.         (SETQ Match (NENTSEL "\nSelect Attribute or Text: "))
  12. (command "chprop" Match "" "color" "t" "100,100,100" "")
  13. (IF (= Match NIL)(ALERT "Please Select Attribute or Text..."))
  14. (IF (/= NIL Match)
  15. (PROGN
  16. (SETQ Match (ENTGET (CAR Match)))
  17. )
  18. )
  19. ;;open new file
  20.   (vla-activate (vla-add (vla-get-documents (vlax-get-acad-object)) templateName))

直到那一刻,一切都在进行中。另一部分也适用,但在旧文件中
 
  1. ;;paste at 0,0 and center
  2. (command "pasteclip" "0,0")
  3. (command "zoom" "a")
  4. ;;save as dxf
  5. (command "filedia" "0")
  6. (IF(SETQ Text(CDR(ASSOC 1 Match)))
  7. (command "saveas" "dxf" "v" "r12" "" Text)
  8. )
  9. (command "filedia" "1")
  10. (command "purge" "a" "*" "n")
  11. (command "close" "n")       
  12. )

 
另外,如果你能告诉我-我可以在哪里学习如何连接2个或更多的Lisp在一起,因为我很确定,连接我创建的4个独立的Lisp(复制、新建、粘贴、保存)比尝试编写一个长代码更容易。。。
 
谢谢你的帮助,
cad\u lisps\u noobish\u编写器
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 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

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 18:37:25 | 显示全部楼层
 
 
 
 
我只是快速浏览了一下(很快就要去开会了),但首先你必须获得你选择的属性的文本值(并测试你是否首先选择了一个属性),假设你选择了一个名为E的实体,然后使用(setq txt(cdr(acoc1(entget E)))来获得文本值,然后使用(bb set'name txt),然后在下一个图形中,您可以使用(bb ref'name)调用文本值
 
 
稍后将检查您,但现在必须运行。。。
 
 
gr.Rlx
回复

使用道具 举报

4

主题

16

帖子

12

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 18:41:02 | 显示全部楼层
好的,谢谢。现在我陷入困境,不知道下一步该怎么办。还有一些我无法解决的错误。
 
此外,我将粘贴我写(和/或发现)的所有4个代码,它们分别工作。也许连接它们比重写它们更容易:
 
使用基点复制
  1. (defun c:kopiowanie ()
  2. (progn
  3.         (command "copybase" (setq pnt1 (getpoint "\nZaznacz lewy dolny rog ramki ISO: ")) (ssget) "")
  4. )
  5. ;;Point name
  6. (SETQ Match (NENTSEL "\nSelect Attribute or Text: "))
  7. (command "chprop" Match "" "color" "t" "100,100,100" "")
  8. (IF (= Match NIL)(ALERT "Please Select Attribute or Text..."))
  9. (IF (/= NIL Match)
  10.         (PROGN
  11.                 (SETQ Match (ENTGET (CAR Match)))
  12.         )
  13. )
  14. )

 
打开新文件(已找到)
  1. (defun c:OpenMyDwg ( / _OpenDwg )
  2. (defun _OpenDwg  (dwg readOnly / f oDwg)
  3. ;; RenderMan, CADTutor.net
  4. ;; Example: (_OpenDwg "FilePath\\FileName.dwg" T)
  5. (vl-load-com)  
  6. (if (and (setq f (findfile dwg)) (/= 1 (getvar 'sdi)))
  7.    (vla-activate
  8.      (vla-open (vla-get-documents (vlax-get-acad-object))
  9.                f
  10.                (cond ((= T readOnly) :vlax-true)
  11.                      ((:vlax-false)))))
  12.    (cond (f (prompt "\n** Command not available in SDI mode ** "))
  13.          ((prompt (strcat "\n** ""
  14.                           (strcase (vl-filename-base dwg))
  15.                           "" cannot be found ** "))))))
  16. (_OpenDwg
  17.    "D:\\TEST.dwg"
  18.    T)
  19. (princ))

 
在0,0处粘贴
  1. (defun c:wklej ()
  2. (command "pasteclip" "0,0")
  3. (command "zoom" "a")
  4. )

 
另存为dxf(名称来自复制零件)
  1. (defun c:zapisz ()
  2. (command "filedia" "0")
  3. (command "purge" "a" "*" "n")
  4. (command "saveas" "dxf" "v" "r12" "" Text)
  5. (command "filedia" "1")
  6. (command "close" "n")       
  7. )       

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

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 18:46:43 | 显示全部楼层
好的,下次会议前休息一会,但我想保持忙碌;-)
 
 
如果我理解正确,你想做的就是把一些实体写入dxf文件?那么为什么不使用对象参数呢?
 
 
看看这个
 
 
  1. (defun c:write-dxf ( / tstdir ss e edat )
  2. (setvar "filedia" 0)
  3. (setq tstdir "c:/temp/")
  4. (princ "\nSelect objects to write to dxf file")
  5. (if (and
  6. (setq ss (ssget))
  7. (setq e (car (nentsel "\nselect attribute with for dxf filename")))
  8. (setq edat (entget e))
  9. (eq (cdr (assoc 0 edat)) "ATTRIB"))
  10.    (command "dxfout" (strcat tstdir (cdr (assoc 1 edat))) "obj" ss "" 16))
  11. (setvar "filedia" 1)
  12. (princ)
  13. )

 
 
我测试属性和选择集,但我不测试属性中的任何字符串,所以我假设你知道你在做什么
 
 
很好,我回来了,希望很快回来,但我不害怕:-(
 
 
gr.Rlx
回复

使用道具 举报

4

主题

16

帖子

12

银币

初来乍到

Rank: 1

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

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 18:53:58 | 显示全部楼层
如果这是您需要的,请尝试:
 
流血。LSP
 
它使用dwgprefix将图形和您选择的对象放在(与主图形相同的文件夹)中。
 
首先为对象选择基点,然后选择要写入文件的对象(然后将这些对象锁定到图形中,该图形的名称与所选属性中的名称相同)。之后,它打开该图形(通过脚本),将所有对象移动到0,0,并将该图形的插入基数放置到0,0,缩放范围并保存图形。
 
sdi必须为0
 
gr.Rlx
回复

使用道具 举报

4

主题

16

帖子

12

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 18:58:40 | 显示全部楼层
上午@rlx
 
谢谢你的lsp,你太棒了!然而在为文件名选择atribute时出现未知错误,我有一个错误:
. 我不知道问题出在哪里,在过去的两个小时里,我尝试了不同的事情来找到解决方案,但我失败了;( 
顺便说一句,wblock是我对这个lsp的第二个想法
 
//好的,我百分之九十肯定这只是我用它做的一些愚蠢的错误。。。我检查了3次,检查了每个命令,它太简单了,不可能出现严重的错误。。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 20:02 , Processed in 0.755620 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表