[求助]如何在图纸空间不激活视口的情况下得到模型空间WCS的点坐标?
本帖最后由 作者 于 2009-7-28 11:46:46 编辑 <br /><br /> <p>其实就是在图纸空间的一个视口上(非激活进入)点选一点,如何得到这点在模型空间WCS真实坐标?CAD的标注可以识别真实坐标,但是其内部怎么实现的就不知道了。如果是trans函数,可惜看的不明白,不知道后面的参数应该是几?</p> <p>我想 应该是(trans pt 3 2) </p><p></p><p>其中你可能要用到vla-get-ActivePViewport来判断处于哪个一个pviewport中.</p> 判断那个视口没问题,楼上的(transpt 3 2) 是不对的,X坐标是对的,Y和Z坐标不对。 <p>昨天忘记考虑target 不在0,0,0的情况了。应该添加target的偏移量</p><p>(defun c:pm (/ )<br/> (setq ent (car (entsel))) ; 选择pviewport<br/> (setq obj (vlax-ename->vla-object ent)) <br/> (setq tag (vlax-safearray->list (vlax-variant-value (vla-get-Target obj))))<br/> (mapcar '+ (trans (getpoint "\n请选择点: ") 3 2) tag)<br/>) </p> <p>这个帖子你可以参考:</p><p><a href="http://www.cadtutor.net/forum/showthread.php?t=21820">http://www.cadtutor.net/forum/showthread.php?t=21820</a></p> 仍然不对,好像UCS也对此有影响。我到5楼提供的论坛去看看。 对啊,如果你模型空间是ucs的要再转一次(trans (mapcar '+ (trans (getpoint "\n请选择点: ") 3 2) tag) 0 1) <p>我测试highflybir版的代码还是错的,这个问题龙龙仔版主N年前就研究过,我没找到原帖网址,我把大概的帖出来:</p><p></p><p>(defun c:tt (/ a w wdxf ea en xp w10 w40 w41 w69 vctrx vctry lpt rpt)<br/> (while (not a)<br/> (setq a (ssget ":s" '((0 . "viewport"))))<br/> )<br/> (setq w (ssname a 0))<br/> (setq wdxf (entget w))<br/> (setq ea (assoc -3 (entget w '("acad")))<br/> en (reverse (cdr (reverse (cdr (cddadr ea)))))<br/> )<br/> (setq xp (/ (cdr (assoc 41 wdxf)) (cdr (nth 4 en))))<br/> (setq w10 (cdr (assoc 10 wdxf)))<br/> (setq w40 (/ (cdr (assoc 40 wdxf)) xp))<br/> (setq w41 (/ (cdr (assoc 41 wdxf)) xp))<br/> (setq w69 (cdr (assoc 69 wdxf)))<br/> (command "_.mspace")<br/> (command "_.cvport" w69)<br/> (command "_.ucs" "v")<br/> (setq vctrx (car (getvar "viewctr")))<br/> (setq vctry (cadr (getvar "viewctr")))<br/> (setq lpt (list (- vctrx (/ w40 2.0)) (- vctry (/ w41 2.0))))<br/> (setq rpt (list (+ vctrx (/ w40 2.0)) (+ vctry (/ w41 2.0))))<br/> (command "_.rectang" lpt rpt)<br/> (princ)<br/>)</p> 4楼的代码,还要加一个 vla-get-TwistAngle 判断 龙龙仔的代码很好用,缺点是要 (command "_.mspace")
页:
[1]
2