如何从差异中获取值
嗨,伙计们。。这不是一项重要的任务,但它每天都会帮我一点忙。。。
我想找到一个例程,允许我在模型或图纸空间中拾取一个对象,文字、多行文字、块、引线或尺寸,并自动更新dimscale因子,取拾取的对象的值。
-从文字或多行文字高度,Dimscale=(文字高度)*8
-从块x值因子,Dimscale=(块x值因子)正值(如果为负值)
-从标注或引线,Dimscale=Dimscale因子
这将用于使用lispt更新其他对象,从另一个对象获取Dimscale。 这意味着维度或引线的“Dimscale因子”,我假设它是一个LinearScaleFactor,但它仅在维度上?
(defun get_dimscal ( obj / type_obj)
(vl-load-com)
(if (setq type_obj (cdr(assoc 0 (entget obj ))))
(cond
((wcmatch type_obj "*TEXT")(* (cdr(assoc 40 (entget obj))) )
((eq type_obj "INSERT")(abs (cdr (assoc 41 (entget obj)))))
((eq type_obj "DIMENSION")(vla-get-LinearScaleFactor(vlax-ename->vla-Object obj)))
(T T)
)))
功能测试已选择高度为5的М文本
嗯。。。我不知道。。。我会测试它添加领导类型。。。然后检查发生了什么。。
但这似乎是正确的代码。。。但我不能测试它。。。因为我不是程序员,我只是不知道问题出在哪里。。
我没有将其作为子功能进行检查,只是添加了c:
但我有这个
命令:get\u dimscal
; 错误:参数太少
有什么想法吗? 该函数是一个子函数,需要一个实体(ename)参数。
嗯,我明白。。。但无论我试着用Lisp程序的Lisp程序来完成它多少次。。。我的编码知识相当基础。。。。我想我的下一步将是阅读和理解手册,或只是试图找到一个类似的lisp来理解它。。。但是。。。
到目前为止,这是一个良好的开端。
我想差不多了
;;
(defun get_dimscal ( obj / type_obj)
(vl-load-com)
(if (setq type_obj (cdr(assoc 0 (entget obj ))))
(cond
((wcmatch type_obj "*TEXT")(* (cdr(assoc 40 (entget obj))) )
((eq type_obj "INSERT")(abs (cdr (assoc 41 (entget obj)))))
((eq type_obj "DIMENSION")(vla-get-LinearScaleFactor(vlax-ename->vla-Object obj)))
(T T)
)))
(defun c:ddddd ()
(princ (get_dimscal (car (entsel))))
)
我得到了这个值,但是如何用它来改变dimscale变量呢?
哦哦。。。
我得到了它。。
;; It automatically changes the dimscale factor taking it from a
;; selected object
;; Geobuilder -- 2010
;; http://www.cadtutor.net/forum/showthread.php?p=304557#post304557
;; SUB-FUNCTION
(defun get_dimscal ( obj / type_obj)
(vl-load-com)
(if (setq type_obj (cdr(assoc 0 (entget obj ))))
(cond
((wcmatch type_obj "*TEXT")(* (cdr(assoc 40 (entget obj))) )
((eq type_obj "INSERT")(abs (cdr (assoc 41 (entget obj)))))
((eq type_obj "DIMENSION")(vla-get-LinearScaleFactor(vlax-ename->vla-Object obj)))
(T T)
)))
(defun c:dre ()
(setvar "dimscale" (get_dimscal (car (entsel))))
)
你们这些家伙。。。。效果很好 GeoBuilder发布了一个如何使用它的示例 吉尔索托,
不确定您真正想要做什么,或者在维度/领导者方面需要什么,但如果我理解正确:
(defun c:MrGilsoto (/ dxf ent)
(defun dxf (code ent) (cdr (assoc code (entget ent))))
(cond ((setq ent (car (entsel)))
(setvar 'DIMSCALE
(cond ((wcmatch (dxf 0 ent) "TEXT,MTEXT") (* 8. (dxf 40 ent)))
((eq "INSERT" (dxf 0 ent)) (dxf 41 ent))
((getvar "DIMSCALE"))))))
(princ))
哦。。。
是的,我在维度和领导者方面有问题。。。
哎哟。。。我只是去张贴这个帖子没有太多的调查。。。
关于尺寸和引线,我需要运行命令,而不是获取LinearScaleFactor,对于这些对象,我需要运行
命令“dimstyle”“restore”。因此dimscale值得到更新。
如果我能自己做,我会检查一下。
努普。。。我在Geobuilder的lisp中尝试了该命令和vl cmdf,但在输入错误时得到了格式不正确的列表。
我在你的Lisp中添加了一行尺寸,Lee,但我不知道尺寸样式中dimscale因子的dxf代码。。。我又有点困了,但块、文本和多行文字在两种lisp例程中都很好地工作。 这将根据选定对象的dimstyle设置DIMSCALE,但不使用恢复:
(defun c:MrGilsoto (/ dxf ent)
(defun dxf (code ent) (cdr (assoc code (entget ent))))
(cond ((setq ent (car (entsel)))
(setvar 'DIMSCALE
(cond ((wcmatch (dxf 0 ent) "TEXT,MTEXT") (* 8. (dxf 40 ent)))
((eq "INSERT" (dxf 0 ent)) (dxf 41 ent))
((wcmatch (dxf 0 ent) "DIMENSION,*LEADER")
(cdr (assoc 40 (tblsearch "DIMSTYLE" (dxf 3 ent)))))
((getvar "DIMSCALE"))))))
(princ))
PS>到底是做什么的:“ouk”和“nooup”,。。意思是 jjajaja,也加上这个:
是的。。
他们的意思是
哦。。。哎哟。。。平均ok
无。。。没错。。表示否
是的。。。是的,是的
是的。。。这就是我的意思。。。现在我有了一个全新的工具来更新我的东西。。。
谢谢李。。。。现在我可以休息一下,然后检查另一个。。。
页:
[1]
2