jsetti01 发表于 2022-7-5 18:18:14

修订Cloud Lisp-line widt

我有一个“Revision Cloud”Lisp,它生成一个“rev Cloud”,然后插入修订标签。所有的作品都很漂亮,但这是我最后一份工作。我的新工作场所对rev clouds使用lisp命令,但它是基于多段线的,我的意思是,你要创建一条多段线来创建一个矩形。这是一个缓慢的过程。我想使用lisp命令来拾取对象。我的问题是,我需要使rev云的线宽变薄。我需要在lisp中插入一个“plinewid”函数,但不知道如何在保持云风格的同时做到这一点。我添加了lisp例程和它引用的标记。任何帮助都将不胜感激。还请告诉我我哪里做错了,我需要添加什么,为什么我真的想学习,而不仅仅是把它作为免费的lisp写作服务。非常感谢。
Revcloud new(2)。LSP
修订标签新。图纸

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

 
 
在插入rev块之前,添加:(命令“pedit”(entlast)“W”50”)
 
就在(setvar’attdia 0)之前
 
我用了50,但当然可以是0或1,随你怎么想。
 
如果我写了自己的revcloud,请参见http://www.cadtutor.net/forum/showthread.php?93423-RLX云
 
但可能有点“过头了”;-)这些部分与我工作中的其他一些常规程序结合在一起,因此它可能不是百分之百通用的,但尽管如此,我希望它可能是灵感/学习的来源。
 
祝你好运,雷克斯先生

jsetti01 发表于 2022-7-5 18:36:44

谢谢你的回复和建议,我考虑添加一个命令来执行PEDIT。它在Lisp程序的工作,但我需要的风格保持书法。当我更改PEDIT/width大小时,它会去掉revcloud的书法风格。有办法吗?
 
谢谢你一如既往的指导,
吉姆

rlx 发表于 2022-7-5 18:44:17

必须承认从未听说过书法风格(我想是语言障碍),但感谢上帝为谷歌:-)
 
 
确定多段线的起点和终点宽度。Dxf组40和41。编程例程以请求(新的)开始和结束宽度,或者用比例因子来缩放两者,应该不会太难。关于多段线的信息在这个网站或这里有很多http://www.afralisp.net/autolisp/tutorials/polylines-and-blocks.php
 
 
只需在顶点之间循环,并替换每个顶点的开始和结束宽度,或应用比例因子。不应该太复杂。
 
 
不幸的是,我(在这里工作)的时间到了。稍后会看一看,但也许其他人可以回答这个问题。。。
 
 
Gr.Rlx

rlx 发表于 2022-7-5 18:54:20

只是快速。。。
 
 

;change cloud width
;based on info from http://www.afralisp.net/visual-lisp/tutorials/polylines-part-1.php
(defun c:ccw ( / cloud sw ew i)
(vl-load-com)
;;; for testing
(setq sw 0 ew 1)
(if (and (setq i 0 cloud (car (entsel "\nSelect cloud : ")))
   (= (vlax-get-property
(setq cloud (vlax-ename->vla-object cloud)) 'ObjectName) "AcDbPolyline"))
   (repeat (/ (length (vlax-safearray->list(variant-value (vlax-get-property cloud 'coordinates)))) 2)
   (vla-setwidth cloud i sw ew)
   (setq i (1+ i))
   )
)
)

 
 
Gr.Rlx

jsetti01 发表于 2022-7-5 19:01:51

谢谢,这正是我需要它做的。
 
出于学习目的,我有两个问题-
 
1.我可以将ccw lisp添加到现有lisp中,以创建一个lisp,该lisp将生成一个修订云,然后指定宽度吗?
 
2.如何让ccw lisp请求SW和EW,而不在lisp中指定它们?
 
再次非常感谢你。
吉姆

rlx 发表于 2022-7-5 19:08:46

 
 
试试这个:
 
 



(defun c:ccw ( / cloud sw ew i)
(vl-load-com)
(command "_revcloud")(while (= 1 (logand (getvar "cmdactive") 1))(command pause))
(setq i 0 cloud (entlast) sw (getreal "\nStart width : ") ew (getreal "\nEnd width : "))
(if (and cloud sw ew
   (= (vlax-get-property
(setq cloud (vlax-ename->vla-object cloud)) 'ObjectName) "AcDbPolyline"))
   (repeat (/ (length (vlax-safearray->list(variant-value (vlax-get-property cloud 'coordinates)))) 2)
   (vla-setwidth cloud i sw ew)
   (setq i (1+ i))
   )
)
)


Rlx级
 
 
哦,是的,问题1:是的:-)
 
 
顺便说一句,现在每次你必须指定开始/结束宽度,也许默认值会更好。
 
 
检查以下链接:http://www.lee-mac.com/promptwithdefault.html

jsetti01 发表于 2022-7-5 19:13:51

当我学习编写lisp命令时,我想确保我理解。如果在命令后加上“a”,它会提示输入?

rlx 发表于 2022-7-5 19:22:48

 
 
不。。。如果您提到使用命令功能,请将命令放在“”(命令行)或(命令“revcloud”)之间。但就像在菜单文件中一样,功能在完成时停止。如果您知道要在两点之间画一条线,可以使用(命令“line”pause pause)。
 
 
然后,命令功能将等待2次。但有时你不知道你要画多少条线,所以你不知道你需要多少停顿。或者在打印文件的脚本中,图形在尝试打开时可以是只读的。那么,能够有一个“额外的”停顿就好了。这就是while-cmdactive部分的用武之地。但是现在不要太担心。最好的学习方法是从一个工作程序开始,把它搞砸,然后试着修复它:-)
 
 
gr.Rlx
页: [1]
查看完整版本: 修订Cloud Lisp-line widt