新错误&创建文件夹
我已经使用这个程序很长时间了。我在年初写的,(感谢amsi提供的一些代码)但突然间,它给了我一个错误。不像在错误中那样。但并不是像我希望的那样做,基本上距离是随机的。但随机接近它应该是什么,但不完全。
;;;;;;;;;;; ;Welcome to the item bubble lisp ;;;;;;;;;;;
;;;;;;;;;;; ;Verson 0.01 ;;;;;;;;;;;
;;;;;;;;;;; ;Created on 17 Feb 2009;;;;;;;;;;;
;;;;;;;;;;; ;Last edited by Flower on ;;;;;;;;;;;
;;;;;;;;;;; ;7 april 2009 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:IT (/ *error* Mypoint1 Mypoint2 itemang tOldLayer oldosmode bl itemdist)
(vl-load-com)
(defun my_error (errormsg)
(if (not (member ERRORMSG '("console break" "Function Cancelled")))
(princ(strcat "\nError:" errormsg))
)
(setvar "osmode" oldosmode)
(setq *error* temperr)
(setvar "cmdecho" 1)
(princ)
)
(defun PutDynamicProperty(Block Property Value / oVal cVal)
(if(= 'ENAME(type Block))
(setq Block(vlax-ename->vla-object Block))
); end if
(if(= :vlax-true(vla-get-IsDynamicBlock Block))
(foreach p
(vlax-safearray->list
(vlax-variant-value
(vla-GetDynamicBlockProperties Block)
)
)
(if(=(strcase Property)(strcase(vla-get-PropertyName p)))
(progn
(setq cVal(vlax-make-variant Value vlax-vbDouble))
(if
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-put-Value(list p cVal)
)
)
(setq oVal nil)
(setq oVal Value)
); end if
); end progn
); end if
); end foreach
); end if
; oVal
)
;
(setvar "cmdecho" 0)
(setq tOldLayer (getvar "CLAYER")
oldosmode (getvar "osmode")
temperr *error*
*error* my_error
)
(command "osmode" "512")
(setq Mypoint1 (getpoint "\nSelect tip of Arrow : ")
Mypoint2 (getpoint "\nSelect Centrepoint of Bubble: " Mypoint1)
)
(command "osmode" oldosmode)
(if (not(tblsearch "block" "ITEMBALLOON"))
(progn
(command "-insert" "ITA" Mypoint2"1" "1" "0")
(COMMAND "ERASE" (ENTLAST) "")
)
)
(setq itemdist (rtos (distance Mypoint1 Mypoint2)2 0)
itemang (angle Mypoint2 Mypoint1)
ds (getvar "dimscale")
)
(if (= itnumba nil)
(setq itnumba nxtitno)
)
(if (= nxtitno nil)
(setq nxtitno 1)
(setq nxtitno (+ itnumba +1))
)
(setq itemnumba (rtos nxtitno 2 0)
itnumba (getINT (STRCAT "\nWhat number? <" itemnumba "> :"))
)
(if (or (= itnumba nil)(= itnumba ""))
(setq insertnumba nxtitno)
(setq insertnumba (rtos itnumba 2 0))
)
(command "ATTDIA" 0)
(setvar "CLAYER" "dim")
(command "-insert" "ITEMBALLOON" Mypoint2 DS DS "0" insertnumba)
(if (= tOldLayer "dim")
(setvar "CLAYER" "YELLOW")
(setvar "CLAYER" tOldLayer)
)
(command "ATTDIA" 1)
(setq bl (entlast))
(PutDynamicProperty bl "itemdistance" itemdist)
(PutDynamicProperty bl "ANGLE" itemang)
;(PutDynamicProperty bl "Visibility" "Pointer")
(setvar "cmdecho" 1)
(princ)
)
另外,如何创建“c:\Program Files\Flowers文件夹”之类的文件夹
很容易将文件写入文件夹等,但不能创建propper文件夹
ITA。图纸 确保snap和grid处于关闭状态,如果您使用osmode设置,这些设置在某些缩放比例下可能会发生奇怪的事情拉我的头发试图找出为什么1个程序在缩放比例出现问题的所有时间都不工作多年来发现了各种lisp错误,这些错误只是Autocad的一部分,必须围绕它们编写。 事实上,我不时地看到缩放错误。
Osmode,网格关闭,它发生在几张图纸上,因此我担心,随着时间的推移,它已经搞砸了几次。
你有没有建议一个更好的方法,即使用osmode,以获得最近的结果? 希望这能帮你解决这个问题,但是如果我有更多的时间,我想重写它
;;;;;;;;;;; ;Welcome to the item bubble lisp ;;;;;;;;;;;
;;;;;;;;;;; ;Verson 0.01 ;;;;;;;;;;;
;;;;;;;;;;; ;Created on 17 Feb 2009 ;;;;;;;;;;;
;;;;;;;;;;; ;Last edited by Flower on ;;;;;;;;;;;
;;;;;;;;;;; ;7 April 2009 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:IT (/ *error* Mypoint1 Mypoint2 itemang tOldLayer oldosmode bl itemdist)
(vl-load-com)
(defun my_error (errormsg)
(if (not (member errormsg '("console break" "Function Cancelled")))
(princ(strcat "\nError:" errormsg)))
(setvar "osmode" oldosmode)
(setq *error* temperr)
(setvar "cmdecho" 1)
(princ))
(defun PutDynamicProperty (Block Property Value / oVal cVal)
(if (= 'ENAME (type Block))
(setq Block (vlax-ename->vla-object Block)))
(if (= :vlax-true (vla-get-IsDynamicBlock Block))
(foreach p
(vlax-safearray->list
(vlax-variant-value
(vla-GetDynamicBlockProperties Block)
)
)
(if(=(strcase Property)(strcase(vla-get-PropertyName p)))
(progn
(setq cVal(vlax-make-variant Value vlax-vbDouble))
(if
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-put-Value(list p cVal)
)
)
(setq oVal nil)
(setq oVal Value)
); end if
); end progn
); end if
); end foreach
); end if
; oVal
)
;
(setvar "cmdecho" 0)
(setq tOldLayer (getvar "CLAYER")
oldosmode (getvar "osmode")
temperr *error*
*error* my_error
)
(command "osmode" "512")
(setq Mypoint1 (getpoint "\nSelect tip of Arrow : ")
Mypoint2 (getpoint "\nSelect Centrepoint of Bubble: " Mypoint1)
)
(command "osmode" oldosmode)
(if (not(tblsearch "block" "ITEMBALLOON"))
(progn
(command "-insert" "ITA" Mypoint2"1" "1" "0")
(COMMAND "ERASE" (ENTLAST) "")
)
)
(setqitemdist (rtos (distance Mypoint1 Mypoint2) 2 0)
itemang(angle Mypoint2 Mypoint1)
ds (getvar "dimscale")
)
(or itemnumba (setq itemnumba 1))
(setq tmp (getINT (STRCAT "\nWhat number? <" itemnumba "> :"))
)
(or (not tmp) (Setq itemnumba tmp))
(command "ATTDIA" 0)
(setvar "CLAYER" "dim")
(setvar "OSMODE" 0)
(command "-insert" "ITEMBALLOON" Mypoint2 DS DS "0" itemnumba)
(if (= tOldLayer "dim")
(setvar "CLAYER" "YELLOW")
(setvar "CLAYER" tOldLayer)
)
(command "ATTDIA" 1)
(setq bl (entlast))
(PutDynamicProperty bl "itemdistance" itemdist)
(PutDynamicProperty bl "ANGLE" itemang)
;(PutDynamicProperty bl "Visibility" "Pointer")
(setvar "cmdecho" 1)
(Setvar "OSMODE" oldosmode)
(princ)
)
我也一样,但正如你所说,时间。。。。
基本上你所做的一切,除了更改了项目编号,
将osmode设置为“0”
粗暴地说,这应该是因为它被插入一个点,而不应该折断?
谢谢你的帮助。
有人知道如何创建文件夹的tho吗? 查看vl mkdir以创建文件夹。 干杯
“10字符长” 对于最近的问题,可以使用“entsel”,它可以为您提供选择点,您必须在代码中查找该点。
已找到(SETQ TP1(entsel“\n选择墙:”)
(setq tpp1(entget(汽车tp1))) 您可以将ENTSEL的返回点捕捉到“最近”:
或者,(并且更可靠):
3 它们可能更可靠,但是,
这太麻烦了。
基本上所有的输入应该是,引导点,圆心和什么数字。
它快速简单
谢谢你的帮助。。
可悲的是,情况越来越糟,我把它从工作中为我的同事们准备的Lisp程序程序中拉了出来。
谢谢
页:
[1]
2